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 PeriodForSystemTimeConstraint(Expression, ColumnConstraintKind):
 45    arg_types = {"this": True, "expression": True}
 46
 47
 48class CaseSpecificColumnConstraint(Expression, ColumnConstraintKind):
 49    arg_types = {"not_": True}
 50
 51
 52class CharacterSetColumnConstraint(Expression, ColumnConstraintKind):
 53    pass
 54
 55
 56class CheckColumnConstraint(Expression, ColumnConstraintKind):
 57    arg_types = {"this": True, "enforced": False}
 58
 59
 60class AssumeColumnConstraint(Expression, ColumnConstraintKind):
 61    pass
 62
 63
 64class ClusteredColumnConstraint(Expression, ColumnConstraintKind):
 65    pass
 66
 67
 68class CollateColumnConstraint(Expression, ColumnConstraintKind):
 69    pass
 70
 71
 72class CommentColumnConstraint(Expression, ColumnConstraintKind):
 73    pass
 74
 75
 76class CompressColumnConstraint(Expression, ColumnConstraintKind):
 77    arg_types = {"this": False}
 78
 79
 80class DateFormatColumnConstraint(Expression, ColumnConstraintKind):
 81    pass
 82
 83
 84class DefaultColumnConstraint(Expression, ColumnConstraintKind):
 85    pass
 86
 87
 88class EncodeColumnConstraint(Expression, ColumnConstraintKind):
 89    pass
 90
 91
 92class ExcludeColumnConstraint(Expression, ColumnConstraintKind):
 93    pass
 94
 95
 96class EphemeralColumnConstraint(Expression, ColumnConstraintKind):
 97    arg_types = {"this": False}
 98
 99
100class WithOperator(Expression):
101    arg_types = {"this": True, "op": True}
102
103
104class GeneratedAsIdentityColumnConstraint(Expression, ColumnConstraintKind):
105    # this: True -> ALWAYS, this: False -> BY DEFAULT
106    arg_types = {
107        "this": False,
108        "expression": False,
109        "on_null": False,
110        "start": False,
111        "increment": False,
112        "minvalue": False,
113        "maxvalue": False,
114        "cycle": False,
115        "order": False,
116    }
117
118
119class GeneratedAsRowColumnConstraint(Expression, ColumnConstraintKind):
120    arg_types = {"start": False, "hidden": False}
121
122
123class IndexColumnConstraint(Expression, ColumnConstraintKind):
124    arg_types = {
125        "this": False,
126        "expressions": False,
127        "kind": False,
128        "index_type": False,
129        "options": False,
130        "expression": False,  # Clickhouse
131        "granularity": False,
132    }
133
134
135class InlineLengthColumnConstraint(Expression, ColumnConstraintKind):
136    pass
137
138
139class NonClusteredColumnConstraint(Expression, ColumnConstraintKind):
140    pass
141
142
143class NotForReplicationColumnConstraint(Expression, ColumnConstraintKind):
144    arg_types = {}
145
146
147class MaskingPolicyColumnConstraint(Expression, ColumnConstraintKind):
148    arg_types = {"this": True, "expressions": False}
149
150
151class NotNullColumnConstraint(Expression, ColumnConstraintKind):
152    arg_types = {"allow_null": False}
153
154
155class OnUpdateColumnConstraint(Expression, ColumnConstraintKind):
156    pass
157
158
159class PrimaryKeyColumnConstraint(Expression, ColumnConstraintKind):
160    arg_types = {"desc": False, "options": False}
161
162
163class TitleColumnConstraint(Expression, ColumnConstraintKind):
164    pass
165
166
167class UniqueColumnConstraint(Expression, ColumnConstraintKind):
168    arg_types = {
169        "this": False,
170        "index_type": False,
171        "on_conflict": False,
172        "nulls": False,
173        "options": False,
174    }
175
176
177class UppercaseColumnConstraint(Expression, ColumnConstraintKind):
178    arg_types = {}
179
180
181class WatermarkColumnConstraint(Expression):
182    arg_types = {"this": True, "expression": True}
183
184
185class PathColumnConstraint(Expression, ColumnConstraintKind):
186    pass
187
188
189class ProjectionPolicyColumnConstraint(Expression, ColumnConstraintKind):
190    pass
191
192
193class ComputedColumnConstraint(Expression, ColumnConstraintKind):
194    arg_types = {"this": True, "persisted": False, "not_null": False, "data_type": False}
195
196
197class InOutColumnConstraint(Expression, ColumnConstraintKind):
198    arg_types = {"input_": False, "output": False, "variadic": False}
199
200
201class Constraint(Expression):
202    arg_types = {"this": True, "expressions": True}
203
204
205class ForeignKey(Expression):
206    arg_types = {
207        "expressions": False,
208        "reference": False,
209        "delete": False,
210        "update": False,
211        "options": False,
212    }
213
214
215class ColumnPrefix(Expression):
216    arg_types = {"this": True, "expression": True}
217
218
219class PrimaryKey(Expression):
220    arg_types = {"this": False, "expressions": True, "options": False, "include": False}
221
222
223class IndexParameters(Expression):
224    arg_types = {
225        "using": False,
226        "include": False,
227        "columns": False,
228        "with_storage": False,
229        "partition_by": False,
230        "tablespace": False,
231        "where": False,
232        "on": False,
233    }
234
235
236class AddConstraint(Expression):
237    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 PeriodForSystemTimeConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
45class PeriodForSystemTimeConstraint(Expression, ColumnConstraintKind):
46    arg_types = {"this": True, "expression": True}
arg_types = {'this': True, 'expression': True}
key: ClassVar[str] = 'periodforsystemtimeconstraint'
required_args: 't.ClassVar[set[str]]' = {'expression', 'this'}
49class CaseSpecificColumnConstraint(Expression, ColumnConstraintKind):
50    arg_types = {"not_": True}
arg_types = {'not_': True}
key: ClassVar[str] = 'casespecificcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'not_'}
53class CharacterSetColumnConstraint(Expression, ColumnConstraintKind):
54    pass
key: ClassVar[str] = 'charactersetcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
57class CheckColumnConstraint(Expression, ColumnConstraintKind):
58    arg_types = {"this": True, "enforced": False}
arg_types = {'this': True, 'enforced': False}
key: ClassVar[str] = 'checkcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
61class AssumeColumnConstraint(Expression, ColumnConstraintKind):
62    pass
key: ClassVar[str] = 'assumecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
65class ClusteredColumnConstraint(Expression, ColumnConstraintKind):
66    pass
key: ClassVar[str] = 'clusteredcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
69class CollateColumnConstraint(Expression, ColumnConstraintKind):
70    pass
key: ClassVar[str] = 'collatecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
73class CommentColumnConstraint(Expression, ColumnConstraintKind):
74    pass
key: ClassVar[str] = 'commentcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
77class CompressColumnConstraint(Expression, ColumnConstraintKind):
78    arg_types = {"this": False}
arg_types = {'this': False}
key: ClassVar[str] = 'compresscolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
81class DateFormatColumnConstraint(Expression, ColumnConstraintKind):
82    pass
key: ClassVar[str] = 'dateformatcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
85class DefaultColumnConstraint(Expression, ColumnConstraintKind):
86    pass
key: ClassVar[str] = 'defaultcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
89class EncodeColumnConstraint(Expression, ColumnConstraintKind):
90    pass
key: ClassVar[str] = 'encodecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
93class ExcludeColumnConstraint(Expression, ColumnConstraintKind):
94    pass
key: ClassVar[str] = 'excludecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
97class EphemeralColumnConstraint(Expression, ColumnConstraintKind):
98    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):
101class WithOperator(Expression):
102    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):
105class GeneratedAsIdentityColumnConstraint(Expression, ColumnConstraintKind):
106    # this: True -> ALWAYS, this: False -> BY DEFAULT
107    arg_types = {
108        "this": False,
109        "expression": False,
110        "on_null": False,
111        "start": False,
112        "increment": False,
113        "minvalue": False,
114        "maxvalue": False,
115        "cycle": False,
116        "order": False,
117    }
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):
120class GeneratedAsRowColumnConstraint(Expression, ColumnConstraintKind):
121    arg_types = {"start": False, "hidden": False}
arg_types = {'start': False, 'hidden': False}
key: ClassVar[str] = 'generatedasrowcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
124class IndexColumnConstraint(Expression, ColumnConstraintKind):
125    arg_types = {
126        "this": False,
127        "expressions": False,
128        "kind": False,
129        "index_type": False,
130        "options": False,
131        "expression": False,  # Clickhouse
132        "granularity": False,
133    }
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()
136class InlineLengthColumnConstraint(Expression, ColumnConstraintKind):
137    pass
key: ClassVar[str] = 'inlinelengthcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
140class NonClusteredColumnConstraint(Expression, ColumnConstraintKind):
141    pass
key: ClassVar[str] = 'nonclusteredcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
class NotForReplicationColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
144class NotForReplicationColumnConstraint(Expression, ColumnConstraintKind):
145    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):
148class MaskingPolicyColumnConstraint(Expression, ColumnConstraintKind):
149    arg_types = {"this": True, "expressions": False}
arg_types = {'this': True, 'expressions': False}
key: ClassVar[str] = 'maskingpolicycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
152class NotNullColumnConstraint(Expression, ColumnConstraintKind):
153    arg_types = {"allow_null": False}
arg_types = {'allow_null': False}
key: ClassVar[str] = 'notnullcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
156class OnUpdateColumnConstraint(Expression, ColumnConstraintKind):
157    pass
key: ClassVar[str] = 'onupdatecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
160class PrimaryKeyColumnConstraint(Expression, ColumnConstraintKind):
161    arg_types = {"desc": False, "options": False}
arg_types = {'desc': False, 'options': False}
key: ClassVar[str] = 'primarykeycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
164class TitleColumnConstraint(Expression, ColumnConstraintKind):
165    pass
key: ClassVar[str] = 'titlecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
168class UniqueColumnConstraint(Expression, ColumnConstraintKind):
169    arg_types = {
170        "this": False,
171        "index_type": False,
172        "on_conflict": False,
173        "nulls": False,
174        "options": False,
175    }
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()
178class UppercaseColumnConstraint(Expression, ColumnConstraintKind):
179    arg_types = {}
arg_types = {}
key: ClassVar[str] = 'uppercasecolumnconstraint'
required_args: 't.ClassVar[set[str]]' = set()
class WatermarkColumnConstraint(sqlglot.expressions.core.Expression):
182class WatermarkColumnConstraint(Expression):
183    arg_types = {"this": True, "expression": True}
arg_types = {'this': True, 'expression': True}
key: ClassVar[str] = 'watermarkcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'expression', 'this'}
186class PathColumnConstraint(Expression, ColumnConstraintKind):
187    pass
key: ClassVar[str] = 'pathcolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
class ProjectionPolicyColumnConstraint(sqlglot.expressions.core.Expression, sqlglot.expressions.core.ColumnConstraintKind):
190class ProjectionPolicyColumnConstraint(Expression, ColumnConstraintKind):
191    pass
key: ClassVar[str] = 'projectionpolicycolumnconstraint'
required_args: 't.ClassVar[set[str]]' = {'this'}
194class ComputedColumnConstraint(Expression, ColumnConstraintKind):
195    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'}
198class InOutColumnConstraint(Expression, ColumnConstraintKind):
199    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):
202class Constraint(Expression):
203    arg_types = {"this": True, "expressions": True}
arg_types = {'this': True, 'expressions': True}
key: ClassVar[str] = 'constraint'
required_args: 't.ClassVar[set[str]]' = {'expressions', 'this'}
class ForeignKey(sqlglot.expressions.core.Expression):
206class ForeignKey(Expression):
207    arg_types = {
208        "expressions": False,
209        "reference": False,
210        "delete": False,
211        "update": False,
212        "options": False,
213    }
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):
216class ColumnPrefix(Expression):
217    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):
220class PrimaryKey(Expression):
221    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 IndexParameters(sqlglot.expressions.core.Expression):
224class IndexParameters(Expression):
225    arg_types = {
226        "using": False,
227        "include": False,
228        "columns": False,
229        "with_storage": False,
230        "partition_by": False,
231        "tablespace": False,
232        "where": False,
233        "on": False,
234    }
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):
237class AddConstraint(Expression):
238    arg_types = {"expressions": True}
arg_types = {'expressions': True}
key: ClassVar[str] = 'addconstraint'
required_args: 't.ClassVar[set[str]]' = {'expressions'}