Skip to content

Enumeration

SQLConflictAction

An action to take when an INSERT query encounters a unique constraint violation.
enum SQLConflictAction

Overview

Note

This is one of the only types at this layer which is not an SQLExpression. This is down to the unfortunate fact that while PostgreSQL and SQLite both support the standard’s straightforward ON CONFLICT DO NOTHING syntax which goes in the same place in the query as an update action would, MySQL can only express the SQLConflictAction.noAction case with INSERT IGNORE. This requires considering the conflict action twice in the same query when serializing, and to decide what to emit in either location based on both the specific action and the dialect’s supported sybtax. As a result, the logic for this has to live in SQLInsert, and it is not possible to serialize a conflict action to SQL in isolation (but again, only because MySQL couldn’t be bothered), and this enum can not conform to SQLExpression.

Topics

Enumeration Cases

  • SQLConflictAction.noAction
    Specifies that conflicts this action is applied to should be ignored, allowing the query to complete successfully without inserting any new rows or changing any existing rows.
  • SQLConflictAction.update(assignments:predicate:)
    Specifies that conflicts this action is applied to shall cause the INSERT to be converted to an UPDATE on the same schema which performs the column updates specified by the associated column assignments and, where supported by the database, constrained by the associated predicate. The column assignments may include SQLExcludedColumn expressions to refer to values which would have been inserted into the row if the conflict had not taken place.

Relationships

Conforms To

  • Swift.Sendable
  • Swift.SendableMetatype

See Also

Clause Expressions

  • SQLAlterColumnDefinitionType
    A clause specifying a new data type to be applied to an existing column.
  • SQLColumnAssignment
    Encapsulates a column_name=value expression in the context of an UPDATE query’s value assignment list. This is distinct from an SQLBinaryExpression using the .equal operator in that the left side must be an unqualified column name, the operator must be =, and the right side may use SQLExcludedColumn when the assignment appears in the assignments list of a SQLConflictAction.update(assignments:predicate:) specification.
  • SQLColumnConstraintAlgorithm
    Column-level data constraints.
  • SQLColumnDefinition
    A clause expressing a column definition, for use when creating and altering tables.
  • SQLConflictResolutionStrategy
    Specifies a conflict resolution strategy and associated conditions for an INSERT query. An INSERT with a conflict strategy is often refered to as an UPSERT (“insert or update”). Databases are not required to support any given subset of upsert functionality, or any at all.
  • SQLDropBehavior
    Specifies a behavior when performing a DROP operation on a database object which is referenced by other objects.
  • SQLEnumDataType
    Represents a data type which specifies an enumeration in the database.
  • SQLExcludedColumn
    An expression appearing on the right side of a column assignment which, when the assignment list is part of an upsert’s update acion, refers to the value which was originally to be inserted for the given column.
  • SQLForeignKey
    A complete FOREIGN KEY constraint specification.
  • SQLInsertModifier
    Simple helper for working around MySQL’s refusal to implement standard SQL. Only emits SQL when needed.
  • SQLJoin
    Encapsulates a single SQL JOIN, specifying the join type, the right-side table, and condition.
  • SQLJoinMethod
    The method used by a table join clause.
  • SQLLockingClause
    An SQL locking clause.
  • SQLOrderBy
    A pair of expressions, one describing a query sort key and the other a directionality for that key.
  • SQLReturning
    A clause describing a list of values to be returned from a data-modifying query.