@@ -505,12 +505,30 @@ def createOGRFieldDefnFromSQL(self, sql_fielddef):
505
505
quoted_name = f_split [0 ]
506
506
name = self .unquoteId (quoted_name )
507
507
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 :]]
508
513
ogr_type , ogr_subtype , width = self .getOGRFieldTypeFromSQL (sql_type )
509
514
fld_defn = ogr .FieldDefn (name , ogr_type )
510
515
fld_defn .SetSubType (ogr_subtype )
511
516
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' :
513
518
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 ))
514
532
return fld_defn
515
533
516
534
def createTable (self , table , field_defs , pkey ):
@@ -641,6 +659,8 @@ def updateTableColumn(self, table, column, new_name, new_data_type=None, new_not
641
659
new_fielddefn .SetDefault (None )
642
660
elif new_default == 'NULL' or ogr_type in (ogr .OFTInteger , ogr .OFTReal ):
643
661
new_fielddefn .SetDefault (str (new_default ))
662
+ elif new_default .startswith ("'" ) and new_default .endswith ("'" ):
663
+ new_fielddefn .SetDefault (str (new_default ))
644
664
else :
645
665
new_fielddefn .SetDefault (self .quoteString (new_default ))
646
666
else :
0 commit comments