Skip to content

Commit 794c8f3

Browse files
committed
[DB_Manager GPKG] Fix creating and changing default values of columns
1 parent f84826d commit 794c8f3

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

python/plugins/db_manager/db_plugins/gpkg/connector.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,12 +505,30 @@ def createOGRFieldDefnFromSQL(self, sql_fielddef):
505505
quoted_name = f_split[0]
506506
name = self.unquoteId(quoted_name)
507507
sql_type = f_split[1].upper()
508+
if len(f_split) >= 3 and f_split[2].startswith('(') and f_split[2].endswith(')'):
509+
sql_type += ' ' + f_split[2]
510+
f_split = [f for f in f_split[3:]]
511+
else:
512+
f_split = [f for f in f_split[2:]]
508513
ogr_type, ogr_subtype, width = self.getOGRFieldTypeFromSQL(sql_type)
509514
fld_defn = ogr.FieldDefn(name, ogr_type)
510515
fld_defn.SetSubType(ogr_subtype)
511516
fld_defn.SetWidth(width)
512-
if len(f_split) >= 4 and f_split[2] == 'NOT' and f_split[3] == 'NULL':
517+
if len(f_split) >= 2 and f_split[0] == 'NOT' and f_split[1] == 'NULL':
513518
fld_defn.SetNullable(False)
519+
f_split = [f for f in f_split[2:]]
520+
elif len(f_split) >= 1:
521+
f_split = [f for f in f_split[1:]]
522+
if len(f_split) >= 2 and f_split[0] == 'DEFAULT':
523+
new_default = f_split[1]
524+
if new_default == '':
525+
fld_defn.SetDefault(None)
526+
elif new_default == 'NULL' or ogr_type in (ogr.OFTInteger, ogr.OFTReal):
527+
fld_defn.SetDefault(new_default)
528+
elif new_default.startswith("'") and new_default.endswith("'"):
529+
fld_defn.SetDefault(new_default)
530+
else:
531+
fld_defn.SetDefault(self.quoteString(new_default))
514532
return fld_defn
515533

516534
def createTable(self, table, field_defs, pkey):
@@ -641,6 +659,8 @@ def updateTableColumn(self, table, column, new_name, new_data_type=None, new_not
641659
new_fielddefn.SetDefault(None)
642660
elif new_default == 'NULL' or ogr_type in (ogr.OFTInteger, ogr.OFTReal):
643661
new_fielddefn.SetDefault(str(new_default))
662+
elif new_default.startswith("'") and new_default.endswith("'"):
663+
new_fielddefn.SetDefault(str(new_default))
644664
else:
645665
new_fielddefn.SetDefault(self.quoteString(new_default))
646666
else:

0 commit comments

Comments
 (0)