Improvements upon columns definition
This commit is contained in:
parent
df21774463
commit
0522918fdd
1 changed files with 41 additions and 3 deletions
44
columns.py
44
columns.py
|
|
@ -9,13 +9,21 @@ class ColumnDefinition:
|
||||||
def sql(self):
|
def sql(self):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: Not so good implementation (maybe)
|
||||||
class UniqueColumnDefinition(ColumnDefinition):
|
class UniqueColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str):
|
def __init__(self, wrapped: ColumnDefinition):
|
||||||
super().__init__(name)
|
super().__init__(wrapped.name)
|
||||||
|
self.wrapped = wrapped
|
||||||
|
|
||||||
def sql(self):
|
def sql(self):
|
||||||
return SQL("{} UNIQUE").format(Identifier(self.name))
|
return SQL("{} UNIQUE").format(self.wrapped.sql())
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return self.wrapped.serialize()
|
||||||
|
|
||||||
|
|
||||||
def make_column_unique(column) -> UniqueColumnDefinition:
|
def make_column_unique(column) -> UniqueColumnDefinition:
|
||||||
|
|
@ -29,6 +37,9 @@ class PrimarySerialColumnDefinition(ColumnDefinition):
|
||||||
def sql(self):
|
def sql(self):
|
||||||
return SQL("{} SERIAL PRIMARY KEY").format(Identifier(self.name))
|
return SQL("{} SERIAL PRIMARY KEY").format(Identifier(self.name))
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:int"
|
||||||
|
|
||||||
|
|
||||||
class PrimaryUUIDColumnDefinition(ColumnDefinition):
|
class PrimaryUUIDColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str):
|
def __init__(self, name: str):
|
||||||
|
|
@ -39,6 +50,9 @@ class PrimaryUUIDColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name)
|
Identifier(self.name)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:uuid"
|
||||||
|
|
||||||
|
|
||||||
class TextColumnDefinition(ColumnDefinition):
|
class TextColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: str | None = None):
|
def __init__(self, name: str, default: str | None = None):
|
||||||
|
|
@ -53,6 +67,9 @@ class TextColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:str"
|
||||||
|
|
||||||
|
|
||||||
class BigintColumnDefinition(ColumnDefinition):
|
class BigintColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: int | None = None):
|
def __init__(self, name: str, default: int | None = None):
|
||||||
|
|
@ -67,6 +84,9 @@ class BigintColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:bigint"
|
||||||
|
|
||||||
|
|
||||||
class BooleanColumnDefinition(ColumnDefinition):
|
class BooleanColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: bool | None = None):
|
def __init__(self, name: str, default: bool | None = None):
|
||||||
|
|
@ -81,6 +101,9 @@ class BooleanColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:bool"
|
||||||
|
|
||||||
|
|
||||||
class DateColumnDefinition(ColumnDefinition):
|
class DateColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: date | None = None):
|
def __init__(self, name: str, default: date | None = None):
|
||||||
|
|
@ -95,6 +118,9 @@ class DateColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:date"
|
||||||
|
|
||||||
|
|
||||||
class TimestampColumnDefinition(ColumnDefinition):
|
class TimestampColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: date | None = None):
|
def __init__(self, name: str, default: date | None = None):
|
||||||
|
|
@ -109,6 +135,9 @@ class TimestampColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:datetime"
|
||||||
|
|
||||||
|
|
||||||
class DoubleColumnDefinition(ColumnDefinition):
|
class DoubleColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: float | None = None):
|
def __init__(self, name: str, default: float | None = None):
|
||||||
|
|
@ -123,6 +152,9 @@ class DoubleColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:float"
|
||||||
|
|
||||||
|
|
||||||
class IntegerColumnDefinition(ColumnDefinition):
|
class IntegerColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: int | None = None):
|
def __init__(self, name: str, default: int | None = None):
|
||||||
|
|
@ -137,6 +169,9 @@ class IntegerColumnDefinition(ColumnDefinition):
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:int"
|
||||||
|
|
||||||
|
|
||||||
class UUIDColumnDefinition(ColumnDefinition):
|
class UUIDColumnDefinition(ColumnDefinition):
|
||||||
def __init__(self, name: str, default: str | None = None):
|
def __init__(self, name: str, default: str | None = None):
|
||||||
|
|
@ -150,3 +185,6 @@ class UUIDColumnDefinition(ColumnDefinition):
|
||||||
return SQL("{} UUID DEFAULT {}").format(
|
return SQL("{} UUID DEFAULT {}").format(
|
||||||
Identifier(self.name), Literal(self.default)
|
Identifier(self.name), Literal(self.default)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def serialize(self):
|
||||||
|
return f"{self.name}:uuid"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue