Skip to content

Commit 159f4be

Browse files
committed
Support schema in ddl #444
1 parent 648183f commit 159f4be

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

scripts/ddl2cpp

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ ddlNumber = pp.Word(pp.nums + "+-.", pp.nums + "+-.Ee")
4242
ddlString = (
4343
pp.QuotedString("'") | pp.QuotedString('"', escQuote='""') | pp.QuotedString("`")
4444
)
45-
ddlTerm = pp.Word(pp.alphas + "_", pp.alphanums + "_.$")
46-
ddlName = pp.Or([ddlTerm, ddlString, pp.Combine(ddlString + "." + ddlString)])
45+
ddlTerm = pp.Word(pp.alphas + "_", pp.alphanums + "_$")
46+
ddlName = ddlTerm | ddlString
4747
ddlOperator = pp.Or(
4848
map(pp.CaselessLiteral, ["+", "-", "*", "/", "<", "<=", ">", ">=", "=", "%"])
4949
)
@@ -69,7 +69,7 @@ ddlBracedArguments << ddlLeft + pp.delimitedList(ddlExpression) + ddlRight
6969
ddlBracedExpression << ddlLeft + ddlExpression + ddlRight
7070

7171
ddlArguments = pp.Suppress(pp.Group(pp.delimitedList(ddlExpression)))
72-
ddlFunctionCall << ddlName + ddlLeft + pp.Optional(ddlArguments) + ddlRight
72+
ddlFunctionCall << pp.Optional(ddlName + ".") + ddlName + ddlLeft + pp.Optional(ddlArguments) + ddlRight
7373

7474
# Column and constraint parsers
7575
ddlBooleanTypes = [
@@ -270,6 +270,7 @@ ddlCreateTable = pp.Group(
270270
+ pp.Suppress(pp.Optional(ddlOrReplace))
271271
+ pp.CaselessLiteral("TABLE")
272272
+ pp.Suppress(pp.Optional(ddlIfNotExists))
273+
+ pp.Optional(ddlName.setResultsName("schema") + pp.Suppress('.'))
273274
+ ddlName.setResultsName("tableName")
274275
+ ddlLeft
275276
+ pp.Group(pp.delimitedList(pp.Suppress(ddlConstraint) | ddlColumn)).setResultsName(
@@ -386,14 +387,17 @@ def testRational():
386387

387388
def testTable():
388389
text = """
389-
CREATE TABLE "public"."dk" (
390+
CREATE TABLE 'public'.'dk' (
390391
"id" int8 NOT NULL DEFAULT nextval('dk_id_seq'::regclass),
391392
"strange" NUMERIC(314, 15),
392393
"last_update" timestamp(6) DEFAULT now(),
393394
PRIMARY KEY (id)
394-
)
395+
)
395396
"""
396397
result = ddlCreateTable.parseString(text, parseAll=True)
398+
table = result[0]
399+
assert table.schema == "public"
400+
assert table.tableName == "dk"
397401

398402

399403
def testParser():
@@ -422,8 +426,10 @@ def get_include_guard_name(namespace, inputfile):
422426
return val.upper()
423427

424428

425-
def identity_naming_func(s):
426-
return s
429+
def identity_naming_func(name, schema = None):
430+
if schema:
431+
return schema + '__' + name;
432+
return name
427433

428434

429435
def repl_camel_case_func(m):
@@ -433,14 +439,18 @@ def repl_camel_case_func(m):
433439
return m.group(1) + m.group(2).upper()
434440

435441

436-
def class_name_naming_func(s):
437-
s = s.replace(".", "_")
438-
return re.sub("(^|\s|[_0-9])(\S)", repl_camel_case_func, s)
442+
def class_name_naming_func(name, schema = None):
443+
if schema:
444+
name = schema + "__" + name
445+
name = name.replace(".", "_")
446+
return re.sub("(^|\s|[_0-9])(\S)", repl_camel_case_func, name)
439447

440448

441-
def member_name_naming_func(s):
442-
s = s.replace(".", "_")
443-
return re.sub("(\s|_|[0-9])(\S)", repl_camel_case_func, s)
449+
def member_name_naming_func(name, schema = None):
450+
if schema:
451+
name = schema + "_" + name
452+
name = name.replace(".", "_")
453+
return re.sub("(\s|_|[0-9])(\S)", repl_camel_case_func, name)
444454

445455

446456
def repl_func_for_args(m):
@@ -579,11 +589,16 @@ def createHeader():
579589
header = beginHeader(pathToHeader, namespace, nsList)
580590
DataTypeError = False
581591
for create in tableCreations:
582-
sqlTableName = create.tableName
592+
if identityNaming:
593+
sqlSchema = create.schema
594+
sqlTableName = create.tableName
595+
else:
596+
sqlSchema = None
597+
sqlTableName = create.schema + '.' + create.tableName
583598
if splitTables:
584599
header = beginHeader(pathToHeader + sqlTableName + ".h", namespace, nsList)
585-
tableClass = toClassName(sqlTableName)
586-
tableMember = toMemberName(sqlTableName)
600+
tableClass = toClassName(sqlTableName, sqlSchema)
601+
tableMember = toMemberName(sqlTableName, sqlSchema)
587602
tableNamespace = tableClass + "_"
588603
tableTemplateParameters = tableClass
589604
print(" namespace " + tableNamespace, file=header)
@@ -682,7 +697,7 @@ def createHeader():
682697
print(" struct _alias_t", file=header)
683698
print(" {", file=header)
684699
print(
685-
' static constexpr const char _literal[] = "' + sqlTableName + '";',
700+
' static constexpr const char _literal[] = "' + (sqlSchema + '.' if sqlSchema else '') + sqlTableName + '";',
686701
file=header,
687702
)
688703
print(

tests/mysql/usage/TabSample.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CREATE TABLE tab_sample (
1+
CREATE TABLE public.tab_sample (
22
alpha bigint(20) DEFAULT NULL AUTO_INCREMENT,
33
beta tinyint(1) DEFAULT NULL,
44
gamma varchar(255) DEFAULT NULL

0 commit comments

Comments
 (0)