Edit on GitHub

sqlglot expressions constraints.

  1"""sqlglot expressions constraints."""
  2
  3from __future__ import annotations
  4
  5from sqlglot.expressions.core import Expression, ColumnConstraintKind
  6
  7
  8class IndexConstraintOption(Expression):
  9    arg_types = {
 10        "key_block_size": False,
 11        "using": False,
 12        "parser": False,
 13        "comment": False,
 14        "visible": False,
 15        "engine_attr": False,
 16        "secondary_engine_attr": False,
 17    }
 18
 19
 20class Reference(Expression):
 21    arg_types = {"this": True, "expressions": False, "options": False}
 22
 23
 24class ColumnConstraint(Expression):
 25    arg_types = {"this": False, "kind": True}
 26
 27    @property
 28    def kind(self) -> ColumnConstraintKind | Reference:
 29        return self.args["kind"]
 30
 31
 32class AutoIncrementColumnConstraint(Expression, ColumnConstraintKind):
 33    pass
 34
 35
 36class InvisibleColumnConstraint(Expression, ColumnConstraintKind):
 37    arg_types = {}
 38
 39
 40class ZeroFillColumnConstraint(ColumnConstraint):
 41    arg_types = {}
 42
 43
 44class BinaryColumnConstraint(ColumnConstraint):
 45    arg_types = {}
 46
 47
 48class PeriodForSystemTimeConstraint(Expression, ColumnConstraintKind):
 49    arg_types = {"this": True, "expression": True}
 50
 51
 52class CaseSpecificColumnConstraint(Expression, ColumnConstraintKind):
 53    arg_types = {"not_": True}
 54
 55
 56class CharacterSetColumnConstraint(Expression, ColumnConstraintKind):
 57    pass
 58
 59
 60class CheckColumnConstraint(Expression, ColumnConstraintKind):
 61    arg_types = {"this": True, "enforced": False}
 62
 63
 64class AssumeColumnConstraint(Expression, ColumnConstraintKind):
 65    pass
 66
 67
 68class ClusteredColumnConstraint(Expression, ColumnConstraintKind):
 69    pass
 70
 71
 72class CollateColumnConstraint(Expression, ColumnConstraintKind):
 73    pass
 74
 75
 76class CommentColumnConstraint(Expression, ColumnConstraintKind):
 77    pass
 78
 79
 80class CompressColumnConstraint(Expression, ColumnConstraintKind):
 81    arg_types = {"this": False}
 82
 83
 84class DateFormatColumnConstraint(Expression, ColumnConstraintKind):
 85    pass
 86
 87
 88class DefaultColumnConstraint(Expression, ColumnConstraintKind):
 89    pass
 90
 91
 92class EncodeColumnConstraint(Expression, ColumnConstraintKind):
 93    pass
 94
 95
 96class ExcludeColumnConstraint(Expression, ColumnConstraintKind):
 97    pass
 98
 99
100class EphemeralColumnConstraint(Expression, ColumnConstraintKind):
101    arg_types = {"this": False}
102
103
104class WithOperator(Expression):
105    arg_types = {"this": True, "op": True}
106
107
108class GeneratedAsIdentityColumnConstraint(Expression, ColumnConstraintKind):
109    # this: True -> ALWAYS, this: False -> BY DEFAULT
110    arg_types = {
111        "this": False,
112        "expression": False,
113        "on_null": False,
114        "start": False,
115        "increment": False,
116        "minvalue": False,
117        "maxvalue": False,
118        "cycle": False,
119        "order": False,
120    }
121
122
123class GeneratedAsRowColumnConstraint(Expression, ColumnConstraintKind):
124    arg_types = {"start": False, "hidden": False}
125
126
127class IndexColumnConstraint(Expression, ColumnConstraintKind):
128    arg_types = {
129        "this": False,
130        "expressions": False,
131        "kind": False,
132        "index_type": False,
133        "options": False,
134        "expression": False,  # Clickhouse
135        "granularity": False,
136    }
137
138
139class InlineLengthColumnConstraint(Expression, ColumnConstraintKind):
140    pass
141
142
143class NonClusteredColumnConstraint(Expression, ColumnConstraintKind):
144    pass
145
146
147class NotForReplicationColumnConstraint(Expression, ColumnConstraintKind):
148    arg_types = {}
149
150
151class MaskingPolicyColumnConstraint(Expression, ColumnConstraintKind):
152    arg_types = {"this": True, "expressions": False}
153
154
155class NotNullColumnConstraint(Expression, ColumnConstraintKind):
156    arg_types = {"allow_null": False}
157
158
159class OnUpdateColumnConstraint(Expression, ColumnConstraintKind):
160    pass
161
162
163class PrimaryKeyColumnConstraint(Expression, ColumnConstraintKind):
164    arg_types = {"desc": False, "options": False}
165
166
167class TitleColumnConstraint(Expression, ColumnConstraintKind):
168    pass
169
170
171class UniqueColumnConstraint(Expression, ColumnConstraintKind):
172    arg_types = {
173        "this": False,
174        "index_type": False,
175        "on_conflict": False,
176        "nulls": False,
177        "options": False,
178    }
179
180
181class UppercaseColumnConstraint(Expression, ColumnConstraintKind):
182    arg_types = {}
183
184
185class WatermarkColumnConstraint(Expression):
186    arg_types = {"this": True, "expression": True}
187
188
189class PathColumnConstraint(Expression, ColumnConstraintKind):
190    pass
191
192
193class ProjectionPolicyColumnConstraint(Expression, ColumnConstraintKind):
194    pass
195
196
197class ComputedColumnConstraint(Expression, ColumnConstraintKind):
198    arg_types = {"this": True, "persisted": False, "not_null": False, "data_type": False}
199
200
201class InOutColumnConstraint(Expression, ColumnConstraintKind):
202    arg_types = {"input_": False, "output": False, "variadic": False}
203
204
205class Constraint(Expression):
206    arg_types = {"this": True, "expressions": True}
207
208
209class ForeignKey(Expression):
210    arg_types = {
211        "expressions": False,
212        "reference": False,
213        "delete": False,
214        "update": False,
215        "options": False,
216    }
217
218
219class ColumnPrefix(Expression):
220    arg_types = {"this": True, "expression": True}
221
222
223class PrimaryKey(Expression):
224    arg_types = {"this": False, "expressions": True, "options": False, "include": False}
225
226
227# https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-ddl-create-table-constraint
228class TimeseriesKey(Expression):
229    pass
230
231
232class IndexParameters(Expression):
233    arg_types = {
234        "using": False,
235        "include": False,
236        "columns": False,
237        "with_storage": False,
238        "partition_by": False,
239        "tablespace": False,
240        "where": False,
241        "on": False,
242    }
243
244
245class AddConstraint(Expression):
246    arg_types = {"expressions": True}
class IndexConstraintOption(sqlglot.expressions.core.Expression):
 9class IndexConstraintOption(Expression):
10    arg_types = {
11        "key_block_size": False,
12        "using": False,
13        "parser": False,
14        "comment": False,
15        "visible": False,
16        "engine_attr": False,
17        "secondary_engine_attr": False,
18    }
arg_types = {'key_block_size': False, 'using': False, 'parser': False, 'comment': False, 'visible': False, 'engine_attr': False, 'secondary_engine_attr': False}
key: ClassVar[str] = 'indexconstraintoption'
required_args: 't.ClassVar[set[str]]' = set()
class Reference(sqlglot.expressions.core.Expression):
21class Reference(Expression):
22    arg_types = {"this": True, "expressions": False, "options": False}
arg_types = {'this': True, 'expressions': False, 'options': False}
key: ClassVar[str] = 'reference'
required_args: 't.ClassVar[set[str]]' = {'this'}
class ColumnConstraint(sqlglot.expressions.core.Expression):
25class ColumnConstraint(Expression):
26    arg_types = {"this": False, "kind": True}
27
28    @property
29    def kind(self) -> ColumnConstraintKind | Reference:
30        return self.args["kind"]
arg_types = {'this': False, 'kind': True}
28    @property
29    def kind(self) -> ColumnConstraintKind | Reference:
30        return self.args["kind"]
key: ClassVar[str] = 'columnconstraint'
required_args: 't.ClassVar[set[str]]' = {'kind'}
class AutoIncrementColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
33class AutoIncrementColumnConstraint(Expression, ColumnConstraintKind):
34    pass
key: ClassVar[str] = 'autoincrementcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
37class InvisibleColumnConstraint(Expression, ColumnConstraintKind):
38    arg_types = {}
arg_types = {}
key: ClassVar[str] = 'invisiblecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class ZeroFillColumnConstraint(ColumnConstraint):
41class ZeroFillColumnConstraint(ColumnConstraint):
42    arg_types = {}
arg_types = {}
key: ClassVar[str] = 'zerofillcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class BinaryColumnConstraint(ColumnConstraint):
45class BinaryColumnConstraint(ColumnConstraint):
46    arg_types = {}
arg_types = {}
key: ClassVar[str] = 'binarycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class PeriodForSystemTimeConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
49class PeriodForSystemTimeConstraint(Expression, ColumnConstraintKind):
50    arg_types = {"this": True, "expression": True}
arg_types = {'this': True, 'expression': True}
key: ClassVar[str] = 'periodforsystemtimeconstraint'
required_args: 't.ClassVar[set[str]]' = {'expression', 'this'}
53class CaseSpecificColumnConstraint(Expression, ColumnConstraintKind):
54    arg_types = {"not_": True}
arg_types = {'not_': True}
key: ClassVar[str] = 'casespecificcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'not_'}
57class CharacterSetColumnConstraint(Expression, ColumnConstraintKind):
58    pass
key: ClassVar[str] = 'charactersetcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
61class CheckColumnConstraint(Expression, ColumnConstraintKind):
62    arg_types = {"this": True, "enforced": False}
arg_types = {'this': True, 'enforced': False}
key: ClassVar[str] = 'checkcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
65class AssumeColumnConstraint(Expression, ColumnConstraintKind):
66    pass
key: ClassVar[str] = 'assumecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
69class ClusteredColumnConstraint(Expression, ColumnConstraintKind):
70    pass
key: ClassVar[str] = 'clusteredcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
73class CollateColumnConstraint(Expression, ColumnConstraintKind):
74    pass
key: ClassVar[str] = 'collatecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
77class CommentColumnConstraint(Expression, ColumnConstraintKind):
78    pass
key: ClassVar[str] = 'commentcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
81class CompressColumnConstraint(Expression, ColumnConstraintKind):
82    arg_types = {"this": False}
arg_types = {'this': False}
key: ClassVar[str] = 'compresscolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
85class DateFormatColumnConstraint(Expression, ColumnConstraintKind):
86    pass
key: ClassVar[str] = 'dateformatcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
89class DefaultColumnConstraint(Expression, ColumnConstraintKind):
90    pass
key: ClassVar[str] = 'defaultcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
93class EncodeColumnConstraint(Expression, ColumnConstraintKind):
94    pass
key: ClassVar[str] = 'encodecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
97class ExcludeColumnConstraint(Expression, ColumnConstraintKind):
98    pass
key: ClassVar[str] = 'excludecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
101class EphemeralColumnConstraint(Expression, ColumnConstraintKind):
102    arg_types = {"this": False}
arg_types = {'this': False}
key: ClassVar[str] = 'ephemeralcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class WithOperator(sqlglot.expressions.core.Expression):
105class WithOperator(Expression):
106    arg_types = {"this": True, "op": True}
arg_types = {'this': True, 'op': True}
key: ClassVar[str] = 'withoperator'
required_args: 't.ClassVar[set[str]]' = {'op', 'this'}
class GeneratedAsIdentityColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
109class GeneratedAsIdentityColumnConstraint(Expression, ColumnConstraintKind):
110    # this: True -> ALWAYS, this: False -> BY DEFAULT
111    arg_types = {
112        "this": False,
113        "expression": False,
114        "on_null": False,
115        "start": False,
116        "increment": False,
117        "minvalue": False,
118        "maxvalue": False,
119        "cycle": False,
120        "order": False,
121    }
arg_types = {'this': False, 'expression': False, 'on_null': False, 'start': False, 'increment': False, 'minvalue': False, 'maxvalue': False, 'cycle': False, 'order': False}
key: ClassVar[str] = 'generatedasidentitycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class GeneratedAsRowColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
124class GeneratedAsRowColumnConstraint(Expression, ColumnConstraintKind):
125    arg_types = {"start": False, "hidden": False}
arg_types = {'start': False, 'hidden': False}
key: ClassVar[str] = 'generatedasrowcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
128class IndexColumnConstraint(Expression, ColumnConstraintKind):
129    arg_types = {
130        "this": False,
131        "expressions": False,
132        "kind": False,
133        "index_type": False,
134        "options": False,
135        "expression": False,  # Clickhouse
136        "granularity": False,
137    }
arg_types = {'this': False, 'expressions': False, 'kind': False, 'index_type': False, 'options': False, 'expression': False, 'granularity': False}
key: ClassVar[str] = 'indexcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
140class InlineLengthColumnConstraint(Expression, ColumnConstraintKind):
141    pass
key: ClassVar[str] = 'inlinelengthcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
144class NonClusteredColumnConstraint(Expression, ColumnConstraintKind):
145    pass
key: ClassVar[str] = 'nonclusteredcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
class NotForReplicationColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
148class NotForReplicationColumnConstraint(Expression, ColumnConstraintKind):
149    arg_types = {}
arg_types = {}
key: ClassVar[str] = 'notforreplicationcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class MaskingPolicyColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
152class MaskingPolicyColumnConstraint(Expression, ColumnConstraintKind):
153    arg_types = {"this": True, "expressions": False}
arg_types = {'this': True, 'expressions': False}
key: ClassVar[str] = 'maskingpolicycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
156class NotNullColumnConstraint(Expression, ColumnConstraintKind):
157    arg_types = {"allow_null": False}
arg_types = {'allow_null': False}
key: ClassVar[str] = 'notnullcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
160class OnUpdateColumnConstraint(Expression, ColumnConstraintKind):
161    pass
key: ClassVar[str] = 'onupdatecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
164class PrimaryKeyColumnConstraint(Expression, ColumnConstraintKind):
165    arg_types = {"desc": False, "options": False}
arg_types = {'desc': False, 'options': False}
key: ClassVar[str] = 'primarykeycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
168class TitleColumnConstraint(Expression, ColumnConstraintKind):
169    pass
key: ClassVar[str] = 'titlecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
172class UniqueColumnConstraint(Expression, ColumnConstraintKind):
173    arg_types = {
174        "this": False,
175        "index_type": False,
176        "on_conflict": False,
177        "nulls": False,
178        "options": False,
179    }
arg_types = {'this': False, 'index_type': False, 'on_conflict': False, 'nulls': False, 'options': False}
key: ClassVar[str] = 'uniquecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
182class UppercaseColumnConstraint(Expression, ColumnConstraintKind):
183    arg_types = {}
arg_types = {}
key: ClassVar[str] = 'uppercasecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class WatermarkColumnConstraint(sqlglot.expressions.core.Expression):
186class WatermarkColumnConstraint(Expression):
187    arg_types = {"this": True, "expression": True}
arg_types = {'this': True, 'expression': True}
key: ClassVar[str] = 'watermarkcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'expression', 'this'}
190class PathColumnConstraint(Expression, ColumnConstraintKind):
191    pass
key: ClassVar[str] = 'pathcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
class ProjectionPolicyColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
194class ProjectionPolicyColumnConstraint(Expression, ColumnConstraintKind):
195    pass
key: ClassVar[str] = 'projectionpolicycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
198class ComputedColumnConstraint(Expression, ColumnConstraintKind):
199    arg_types = {"this": True, "persisted": False, "not_null": False, "data_type": False}
arg_types = {'this': True, 'persisted': False, 'not_null': False, 'data_type': False}
key: ClassVar[str] = 'computedcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
202class InOutColumnConstraint(Expression, ColumnConstraintKind):
203    arg_types = {"input_": False, "output": False, "variadic": False}
arg_types = {'input_': False, 'output': False, 'variadic': False}
key: ClassVar[str] = 'inoutcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class Constraint(sqlglot.expressions.core.Expression):
206class Constraint(Expression):
207    arg_types = {"this": True, "expressions": True}
arg_types = {'this': True, 'expressions': True}
key: ClassVar[str] = 'constraint'
required_args: 't.ClassVar[set[str]]' = {'this', 'expressions'}
class ForeignKey(sqlglot.expressions.core.Expression):
210class ForeignKey(Expression):
211    arg_types = {
212        "expressions": False,
213        "reference": False,
214        "delete": False,
215        "update": False,
216        "options": False,
217    }
arg_types = {'expressions': False, 'reference': False, 'delete': False, 'update': False, 'options': False}
key: ClassVar[str] = 'foreignkey'
required_args: 't.ClassVar[set[str]]' = set()
class ColumnPrefix(sqlglot.expressions.core.Expression):
220class ColumnPrefix(Expression):
221    arg_types = {"this": True, "expression": True}
arg_types = {'this': True, 'expression': True}
key: ClassVar[str] = 'columnprefix'
required_args: 't.ClassVar[set[str]]' = {'expression', 'this'}
class PrimaryKey(sqlglot.expressions.core.Expression):
224class PrimaryKey(Expression):
225    arg_types = {"this": False, "expressions": True, "options": False, "include": False}
arg_types = {'this': False, 'expressions': True, 'options': False, 'include': False}
key: ClassVar[str] = 'primarykey'
required_args: 't.ClassVar[set[str]]' = {'expressions'}
class TimeseriesKey(sqlglot.expressions.core.Expression):
229class TimeseriesKey(Expression):
230    pass
key: ClassVar[str] = 'timeserieskey'
required_args: 't.ClassVar[set[str]]' = {'this'}
class IndexParameters(sqlglot.expressions.core.Expression):
233class IndexParameters(Expression):
234    arg_types = {
235        "using": False,
236        "include": False,
237        "columns": False,
238        "with_storage": False,
239        "partition_by": False,
240        "tablespace": False,
241        "where": False,
242        "on": False,
243    }
arg_types = {'using': False, 'include': False, 'columns': False, 'with_storage': False, 'partition_by': False, 'tablespace': False, 'where': False, 'on': False}
key: ClassVar[str] = 'indexparameters'
required_args: 't.ClassVar[set[str]]' = set()
class AddConstraint(sqlglot.expressions.core.Expression):
246class AddConstraint(Expression):
247    arg_types = {"expressions": True}
arg_types = {'expressions': True}
key: ClassVar[str] = 'addconstraint'
required_args: 't.ClassVar[set[str]]' = {'expressions'}