Skip to content

Commit 1d996ba

Browse files
committed
visit_create_table method added to dialect
1 parent 72ed1c4 commit 1d996ba

File tree

1 file changed

+54
-0
lines changed
  • src/databricks/sqlalchemy/dialect

1 file changed

+54
-0
lines changed

src/databricks/sqlalchemy/dialect/base.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import re
2+
from sqlalchemy import util, exc
23
from sqlalchemy.sql import compiler, sqltypes, ColumnElement
34

45

@@ -64,3 +65,56 @@ def _format_table_from_column(self, column_object, use_schema=False):
6465
name = schema_table_column.split(".")[0] + '.' + name
6566

6667
return name
68+
69+
def visit_create_table(self, create, **kw):
70+
table = create.element
71+
preparer = self.preparer
72+
73+
text = "\nCREATE "
74+
if table._prefixes:
75+
text += " ".join(table._prefixes) + " "
76+
77+
# Default to 'IF NOT EXISTS'
78+
text += "TABLE IF NOT EXISTS "
79+
80+
text += preparer.format_table(table) + " "
81+
82+
create_table_suffix = self.create_table_suffix(table)
83+
if create_table_suffix:
84+
text += create_table_suffix + " "
85+
86+
text += "("
87+
88+
separator = "\n"
89+
90+
# if only one primary key, specify it along with the column
91+
first_pk = False
92+
for create_column in create.columns:
93+
column = create_column.element
94+
try:
95+
processed = self.process(
96+
create_column, first_pk=column.primary_key and not first_pk
97+
)
98+
if processed is not None:
99+
text += separator
100+
separator = ", \n"
101+
text += "\t" + processed
102+
if column.primary_key:
103+
first_pk = True
104+
except exc.CompileError as ce:
105+
util.raise_(
106+
exc.CompileError(
107+
util.u(f"(in table '{table.description}', column '{column.name}'): {ce.args[0]}")
108+
),
109+
from_=ce,
110+
)
111+
112+
const = self.create_table_constraints(
113+
table,
114+
_include_foreign_key_constraints=create.include_foreign_key_constraints, # noqa
115+
)
116+
if const:
117+
text += separator + "\t" + const
118+
119+
text += f"\n){self.post_create_table(table)}\n\n"
120+
return text

0 commit comments

Comments
 (0)