@@ -42,8 +42,8 @@ ddlNumber = pp.Word(pp.nums + "+-.", pp.nums + "+-.Ee")
42
42
ddlString = (
43
43
pp .QuotedString ("'" ) | pp .QuotedString ('"' , escQuote = '""' ) | pp .QuotedString ("`" )
44
44
)
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
47
47
ddlOperator = pp .Or (
48
48
map (pp .CaselessLiteral , ["+" , "-" , "*" , "/" , "<" , "<=" , ">" , ">=" , "=" , "%" ])
49
49
)
@@ -69,7 +69,7 @@ ddlBracedArguments << ddlLeft + pp.delimitedList(ddlExpression) + ddlRight
69
69
ddlBracedExpression << ddlLeft + ddlExpression + ddlRight
70
70
71
71
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
73
73
74
74
# Column and constraint parsers
75
75
ddlBooleanTypes = [
@@ -270,6 +270,7 @@ ddlCreateTable = pp.Group(
270
270
+ pp .Suppress (pp .Optional (ddlOrReplace ))
271
271
+ pp .CaselessLiteral ("TABLE" )
272
272
+ pp .Suppress (pp .Optional (ddlIfNotExists ))
273
+ + pp .Optional (ddlName .setResultsName ("schema" ) + pp .Suppress ('.' ))
273
274
+ ddlName .setResultsName ("tableName" )
274
275
+ ddlLeft
275
276
+ pp .Group (pp .delimitedList (pp .Suppress (ddlConstraint ) | ddlColumn )).setResultsName (
@@ -386,14 +387,17 @@ def testRational():
386
387
387
388
def testTable ():
388
389
text = """
389
- CREATE TABLE " public"."dk" (
390
+ CREATE TABLE ' public'.'dk' (
390
391
"id" int8 NOT NULL DEFAULT nextval('dk_id_seq'::regclass),
391
392
"strange" NUMERIC(314, 15),
392
393
"last_update" timestamp(6) DEFAULT now(),
393
394
PRIMARY KEY (id)
394
- )
395
+ )
395
396
"""
396
397
result = ddlCreateTable .parseString (text , parseAll = True )
398
+ table = result [0 ]
399
+ assert table .schema == "public"
400
+ assert table .tableName == "dk"
397
401
398
402
399
403
def testParser ():
@@ -422,8 +426,10 @@ def get_include_guard_name(namespace, inputfile):
422
426
return val .upper ()
423
427
424
428
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
427
433
428
434
429
435
def repl_camel_case_func (m ):
@@ -433,14 +439,18 @@ def repl_camel_case_func(m):
433
439
return m .group (1 ) + m .group (2 ).upper ()
434
440
435
441
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 )
439
447
440
448
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 )
444
454
445
455
446
456
def repl_func_for_args (m ):
@@ -579,11 +589,16 @@ def createHeader():
579
589
header = beginHeader (pathToHeader , namespace , nsList )
580
590
DataTypeError = False
581
591
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
583
598
if splitTables :
584
599
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 )
587
602
tableNamespace = tableClass + "_"
588
603
tableTemplateParameters = tableClass
589
604
print (" namespace " + tableNamespace , file = header )
@@ -682,7 +697,7 @@ def createHeader():
682
697
print (" struct _alias_t" , file = header )
683
698
print (" {" , file = header )
684
699
print (
685
- ' static constexpr const char _literal[] = "' + sqlTableName + '";' ,
700
+ ' static constexpr const char _literal[] = "' + ( sqlSchema + '.' if sqlSchema else '' ) + sqlTableName + '";' ,
686
701
file = header ,
687
702
)
688
703
print (
0 commit comments