From ffd6618e58bfc46624a4e8188cb56bcb4defc2f0 Mon Sep 17 00:00:00 2001 From: MeanSquaredError <35379301+MeanSquaredError@users.noreply.github.com> Date: Wed, 12 Jun 2024 03:20:32 +0300 Subject: [PATCH] Treat "PRIMARY KEY" columns as not nullable. --- scripts/ddl2cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/scripts/ddl2cpp b/scripts/ddl2cpp index d1a3ea6f..bcd5ab1c 100755 --- a/scripts/ddl2cpp +++ b/scripts/ddl2cpp @@ -245,9 +245,12 @@ def initDllParser(): ] ddlAutoValue = pp.Or(map(pp.CaselessKeyword, sorted(ddlAutoKeywords, reverse=True))) - ddlConstraintKeywords = [ + ddlPrimaryKey = pp.Group( + pp.CaselessKeyword("PRIMARY") + pp.CaselessKeyword("KEY") + ).setResultsName("isPrimaryKey") + + ddlIgnoredKeywords = [ "CONSTRAINT", - "PRIMARY", "FOREIGN", "KEY", "FULLTEXT", @@ -257,7 +260,10 @@ def initDllParser(): "PERIOD", ] ddlConstraint = pp.Group( - pp.Or(map(pp.CaselessKeyword, sorted(ddlConstraintKeywords, reverse=True))) + pp.Or(map( + pp.CaselessKeyword, + sorted(ddlIgnoredKeywords + ["PRIMARY"], reverse=True) + )) + ddlExpression ).setResultsName("isConstraint") @@ -272,7 +278,8 @@ def initDllParser(): | pp.CaselessKeyword("null") | ddlAutoValue("hasAutoValue") | ddlDefaultValue("hasDefaultValue") - | pp.Suppress(pp.OneOrMore(pp.Or(map(pp.CaselessKeyword, sorted(ddlConstraintKeywords, reverse=True))))) + | ddlPrimaryKey("isPrimaryKey") + | pp.Suppress(pp.OneOrMore(pp.Or(map(pp.CaselessKeyword, sorted(ddlIgnoredKeywords, reverse=True))))) | pp.Suppress(ddlExpression) ) ) @@ -714,7 +721,7 @@ def createHeader(): traitslist.append("sqlpp::tag::must_not_insert") traitslist.append("sqlpp::tag::must_not_update") requireInsert = False - if not column.notNull: + if not column.notNull and not column.isPrimaryKey: traitslist.append("sqlpp::tag::can_be_null") requireInsert = False if column.hasDefaultValue: