@@ -825,67 +825,66 @@ create_definition
825825 / create_fulltext_spatial_index_definition
826826 / create_constraint_definition
827827
828+ column_definition_opt
829+ = n :(literal_not_null / literal_null ) {
830+ if (n && ! n .value ) n .value = ' null'
831+ return { nullable: n }
832+ }
833+ / d :default_expr {
834+ return { default_val: d }
835+ }
836+ / a :('AUTO_INCREMENT' i ) {
837+ return { auto_increment: a .toLowerCase () }
838+ }
839+ / 'UNIQUE' i __ k :('KEY' i )? {
840+ const sql = [' unique' ]
841+ if (k) sql .push (k)
842+ return { unique: sql .join (' ' ).toLowerCase (' ' ) }
843+ }
844+ / p :('PRIMARY' i )? __ 'KEY' i {
845+ const sql = []
846+ if (p) sql .push (' primary' )
847+ sql .push (' key' )
848+ return { primary_key: sql .join (' ' ).toLowerCase (' ' ) }
849+ }
850+ / co :keyword_comment {
851+ return { comment: co }
852+ }
853+ / ca :collate_expr {
854+ return { collate: ca }
855+ }
856+ / cf :column_format {
857+ return { column_format: cf }
858+ }
859+ / s :storage {
860+ return { storage: s }
861+ }
862+ / re :reference_definition {
863+ return { reference_definition: re }
864+ }
865+
866+ column_definition_opt_list
867+ = head :column_definition_opt __ tail :(__ column_definition_opt )* {
868+ let opt = head
869+ for (let i = 0 ; i < tail .length ; i++ ) {
870+ opt = { ... opt, ... tail[i][1 ] }
871+ }
872+ return opt
873+ }
874+
828875create_column_definition
829876 = c :column_ref __
830877 d :data_type __
831- clc :column_constraint ? __
832- a :('AUTO_INCREMENT' i )? __
833- u :('UNIQUE' i / ('PRIMARY' i __ 'KEY' i ))? __
834- co :keyword_comment ? __
835- ca :collate_expr ? __
836- cf :column_format ? __
837- s :storage ? __
838- re :reference_definition ? {
839- /*
840- => {
841- column: column_ref;
842- definition: data_type;
843- nullable: column_constraint['nullable'];
844- default_val: column_constraint['default_val'];
845- auto_increment?: 'auto_increment';
846- unique_or_primary?: 'unique' | 'primary key';
847- comment?: keyword_comment;
848- collate?: collate_expr;
849- column_format?: column_format;
850- storage?: storage;
851- reference_definition?: reference_definition;
852- resource: 'column';
853- }
854- */
878+ cdo :column_definition_opt_list ? {
855879 columnList .add (` create::${ c .table } ::${ c .column } ` )
856880 return {
857881 column: c,
858882 definition: d,
859- nullable: clc && clc .nullable ,
860- default_val: clc && clc .default_val ,
861- auto_increment: a && a .toLowerCase (),
862- unique_or_primary: Array .isArray (u) ? ` ${ u[0 ].toLowerCase ()} ${ u[2 ].toLowerCase ()} ` : u,
863- comment: co,
864- collate: ca,
865- column_format: cf,
866- storage: s,
867- reference_definition: re,
868- resource: ' column'
883+ resource: ' column' ,
884+ ... (cdo || {})
869885 }
870886 }
871887
872- column_constraint
873- = n :(literal_not_null / literal_null ) __ df :default_expr ? {
874- // => { nullable: literal_null | literal_not_null; default_val: default_expr; }
875- if (n && ! n .value ) n .value = ' null'
876- return {
877- default_val: df,
878- nullable: n
879- }
880- }
881- / df :default_expr __ n :(literal_not_null / literal_null )? {
882- // => { nullable: literal_null | literal_not_null; default_val: default_expr; }
883- if (n && ! n .value ) n .value = ' null'
884- return {
885- default_val: df,
886- nullable: n
887- }
888- }
889888
890889collate_expr
891890 = KW_COLLATE __ ca :ident {
0 commit comments