@@ -904,6 +904,10 @@ def _repr(_t: T.datetime, x):
904
904
# TODO Better to pass the object instead of a string?
905
905
return repr (str (x ))
906
906
907
+ def _repr (_t : T .timestamp , x ):
908
+ # TODO Better to pass the object instead of a string?
909
+ return repr (str (x ))
910
+
907
911
@dp_type
908
912
def _repr (_t : T .union [T .string , T .text ], x ):
909
913
quoted_quote = r"\'" if get_db_target () == bigquery else "''"
@@ -930,37 +934,47 @@ def _compile_type(target, type_: T.t_relation):
930
934
#return 'INTEGER' # Foreign-key is integer
931
935
return _compile_type (target , type_ .elems ['item' ])
932
936
937
+
938
+ class Types_PqlToSql :
939
+ bool = "BOOLEAN"
940
+ time = "TIME"
941
+ date = "DATE"
942
+ datetime = "DATETIME"
943
+ timestamp = "TIMESTAMP"
944
+
945
+ int = "INTEGER"
946
+ string = "VARCHAR(4000)"
947
+ float = "FLOAT"
948
+ text = "TEXT"
949
+
950
+ class P2S_BigQuery (Types_PqlToSql ):
951
+ int = "INT64"
952
+ string = "STRING"
953
+ float = "FLOAT64"
954
+ text = "STRING"
955
+
956
+
957
+ class P2S_MySql (Types_PqlToSql ):
958
+ int = "SIGNED"
959
+
960
+ class P2S_Sqlite (Types_PqlToSql ):
961
+ datetime = "TEXT"
962
+ timestamp = "TEXT"
963
+
964
+ class P2S_Postgres (Types_PqlToSql ):
965
+ datetime = "timestamp with time zone"
966
+
967
+ _pql_to_sql_by_target = {
968
+ bigquery : P2S_BigQuery ,
969
+ mysql : P2S_MySql ,
970
+ sqlite : P2S_Sqlite ,
971
+ postgres : P2S_Postgres ,
972
+ }
973
+
974
+
933
975
@dp_type
934
976
def _compile_type (target , type_ : T .primitive ):
935
- if target == bigquery :
936
- d = {
937
- 'int' : "INT64" ,
938
- 'string' : "STRING" ,
939
- 'float' : "FLOAT64" ,
940
- 'bool' : "BOOLEAN" ,
941
- 'text' : "STRING" ,
942
- 'datetime' : "DATETIME" ,
943
- 'date' : "DATE" ,
944
- }
945
- elif target == mysql :
946
- d = {
947
- 'int' : "SIGNED" ,
948
- 'string' : "VARCHAR(4000)" ,
949
- 'float' : "FLOAT" ,
950
- 'bool' : "BOOLEAN" ,
951
- 'text' : "TEXT" ,
952
- 'datetime' : "TIMESTAMP" ,
953
- }
954
- else :
955
- d = {
956
- 'int' : "INTEGER" ,
957
- 'string' : "VARCHAR(4000)" ,
958
- 'float' : "FLOAT" ,
959
- 'bool' : "BOOLEAN" ,
960
- 'text' : "TEXT" ,
961
- 'datetime' : "TIMESTAMP" ,
962
- }
963
- s = d [type_ .typename ]
977
+ s = getattr (_pql_to_sql_by_target [target ], type_ .typename )
964
978
if not type_ .maybe_null ():
965
979
s += " NOT NULL"
966
980
return s
0 commit comments