in sources/gen_sql.c [540:589]
static void gen_col_attrs(ast_node *_Nullable attrs) {
for (ast_node *attr = attrs; attr; attr = attr->right) {
if (is_ast_create_attr(attr)) {
gen_create_attr(attr);
} else if (is_ast_sensitive_attr(attr)) {
gen_sensitive_attr(attr);
} else if (is_ast_delete_attr(attr)) {
gen_delete_attr(attr);
} else if (is_ast_col_attrs_not_null(attr)) {
gen_printf(" NOT NULL");
EXTRACT_ANY(conflict_clause, attr->left);
if (conflict_clause) {
gen_conflict_clause(conflict_clause);
}
} else if (is_ast_col_attrs_pk(attr)) {
EXTRACT_NOTNULL(autoinc_and_conflict_clause, attr->left);
EXTRACT(col_attrs_autoinc, autoinc_and_conflict_clause->left);
EXTRACT_ANY(conflict_clause, autoinc_and_conflict_clause->right);
gen_printf(" PRIMARY KEY");
if (conflict_clause) {
gen_conflict_clause(conflict_clause);
}
if (col_attrs_autoinc) {
gen_printf(" AUTOINCREMENT");
}
} else if (is_ast_col_attrs_unique(attr)) {
gen_printf(" UNIQUE");
if (attr->left) {
gen_conflict_clause(attr->left);
}
} else if (is_ast_col_attrs_hidden(attr)) {
gen_printf(" HIDDEN");
} else if (is_ast_col_attrs_fk(attr)) {
gen_printf(" ");
gen_fk_target_options(attr->left);
} else if (is_ast_col_attrs_check(attr)) {
gen_printf(" CHECK(");
gen_root_expr(attr->left);
gen_printf(") ");
} else if (is_ast_col_attrs_collate(attr)) {
gen_printf(" COLLATE ");
gen_root_expr(attr->left);
} else {
Contract(is_ast_col_attrs_default(attr));
gen_printf(" DEFAULT ");
gen_root_expr(attr->left);
}
}
}