From 0522918fdd2102e9f9a06b80d7e794dc8125c3c2 Mon Sep 17 00:00:00 2001 From: Andrew nuark G Date: Sat, 11 Mar 2023 23:30:56 +0700 Subject: [PATCH] Improvements upon columns definition --- columns.py | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) diff --git a/columns.py b/columns.py index dec9b68..13a5267 100644 --- a/columns.py +++ b/columns.py @@ -9,13 +9,21 @@ class ColumnDefinition: def sql(self): raise NotImplementedError + def serialize(self): + raise NotImplementedError + +# TODO: Not so good implementation (maybe) class UniqueColumnDefinition(ColumnDefinition): - def __init__(self, name: str): - super().__init__(name) + def __init__(self, wrapped: ColumnDefinition): + super().__init__(wrapped.name) + self.wrapped = wrapped 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: @@ -29,6 +37,9 @@ class PrimarySerialColumnDefinition(ColumnDefinition): def sql(self): return SQL("{} SERIAL PRIMARY KEY").format(Identifier(self.name)) + def serialize(self): + return f"{self.name}:int" + class PrimaryUUIDColumnDefinition(ColumnDefinition): def __init__(self, name: str): @@ -39,6 +50,9 @@ class PrimaryUUIDColumnDefinition(ColumnDefinition): Identifier(self.name) ) + def serialize(self): + return f"{self.name}:uuid" + class TextColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: str | None = None): @@ -53,6 +67,9 @@ class TextColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:str" + class BigintColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: int | None = None): @@ -67,6 +84,9 @@ class BigintColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:bigint" + class BooleanColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: bool | None = None): @@ -81,6 +101,9 @@ class BooleanColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:bool" + class DateColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: date | None = None): @@ -95,6 +118,9 @@ class DateColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:date" + class TimestampColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: date | None = None): @@ -109,6 +135,9 @@ class TimestampColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:datetime" + class DoubleColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: float | None = None): @@ -123,6 +152,9 @@ class DoubleColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:float" + class IntegerColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: int | None = None): @@ -137,6 +169,9 @@ class IntegerColumnDefinition(ColumnDefinition): Identifier(self.name), Literal(self.default) ) + def serialize(self): + return f"{self.name}:int" + class UUIDColumnDefinition(ColumnDefinition): def __init__(self, name: str, default: str | None = None): @@ -150,3 +185,6 @@ class UUIDColumnDefinition(ColumnDefinition): return SQL("{} UUID DEFAULT {}").format( Identifier(self.name), Literal(self.default) ) + + def serialize(self): + return f"{self.name}:uuid"