emit() sweep: convert CREATE TABLE column definition/attribs/constraints
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
parent
8948cfcb31
commit
5f11c7e1e0
64
exec.c
64
exec.c
@ -4,6 +4,63 @@
|
||||
#include <unistd.h>
|
||||
#include "sql-parser.h"
|
||||
|
||||
static const char *attr_names[] = {
|
||||
[SCA_NOTNULL] = "SCA_NOTNULL",
|
||||
[SCA_DEF_STR] = "SCA_DEF_STR",
|
||||
[SCA_DEF_NUM] = "SCA_DEF_NUM",
|
||||
[SCA_DEF_FLOAT] = "SCA_DEF_FLOAT",
|
||||
[SCA_DEF_BOOL] = "SCA_DEF_BOOL",
|
||||
[SCA_AUTOINC] = "SCA_AUTOINC",
|
||||
[SCA_UNIQUE_KEY] = "SCA_UNIQUE_KEY",
|
||||
[SCA_PRIMARY_KEY] = "SCA_PRIMARY_KEY",
|
||||
[SCA_COMMENT] = "SCA_COMMENT",
|
||||
};
|
||||
|
||||
void sqlp_col_attr(enum sqlp_col_attribs attr)
|
||||
{
|
||||
printf("exec ATTR %s\n", attr_names[attr]);
|
||||
}
|
||||
|
||||
void sqlp_col_attr_uniq(int n_cols)
|
||||
{
|
||||
printf("exec ATTR UNIQUE-KEY %d\n", n_cols);
|
||||
}
|
||||
|
||||
void sqlp_col_attr_comm(const char *comm)
|
||||
{
|
||||
printf("exec ATTR COMMENT %s\n", comm);
|
||||
}
|
||||
|
||||
void sqlp_col_charset(const char *charset)
|
||||
{
|
||||
printf("exec ATTR CHARSET %s\n", charset);
|
||||
}
|
||||
|
||||
void sqlp_col_collate(const char *collate)
|
||||
{
|
||||
printf("exec ATTR COLLATE %s\n", collate);
|
||||
}
|
||||
|
||||
void sqlp_col_def_str(const char *str)
|
||||
{
|
||||
printf("exec ATTR DEFAULT-STR %s\n", str);
|
||||
}
|
||||
|
||||
void sqlp_col_def_num(int num)
|
||||
{
|
||||
printf("exec ATTR DEFAULT-NUM %d\n", num);
|
||||
}
|
||||
|
||||
void sqlp_col_def_float(float num)
|
||||
{
|
||||
printf("exec ATTR DEFAULT-FLOAT %g\n", num);
|
||||
}
|
||||
|
||||
void sqlp_col_def_bool(int bool)
|
||||
{
|
||||
printf("exec ATTR DEFAULT-BOOL %d\n", bool);
|
||||
}
|
||||
|
||||
void sqlp_create_db(int if_ne, const char *name)
|
||||
{
|
||||
printf("exec CREATE-DB %d %s\n", if_ne, name);
|
||||
@ -21,7 +78,7 @@ void sqlp_create_tbl(int temp, int if_n_exists, int n_cols,
|
||||
|
||||
void sqlp_def_col(int flags, const char *name)
|
||||
{
|
||||
printf("exec DEF-COL %d %s\n", flags, name);
|
||||
printf("exec DEFINE-COL %d %s\n", flags, name);
|
||||
}
|
||||
|
||||
void sqlp_drop_db(int if_exists, const char *name)
|
||||
@ -34,6 +91,11 @@ void sqlp_drop_table(int temp, int if_exists, int n_tables)
|
||||
printf("exec DROP-TABLE %d %d %d\n", temp, if_exists, n_tables);
|
||||
}
|
||||
|
||||
void sqlp_enum_val(const char *val)
|
||||
{
|
||||
printf("exec ENUM-VAL %s\n", val);
|
||||
}
|
||||
|
||||
void sqlp_start_col(void)
|
||||
{
|
||||
printf("exec START-COL\n");
|
||||
|
22
sql-parser.h
22
sql-parser.h
@ -1,12 +1,34 @@
|
||||
#ifndef __SQL_PARSER_H__
|
||||
#define __SQL_PARSER_H__
|
||||
|
||||
enum sqlp_col_attribs {
|
||||
SCA_NOTNULL = (1 << 0),
|
||||
SCA_DEF_STR = (1 << 1),
|
||||
SCA_DEF_NUM = (1 << 2),
|
||||
SCA_DEF_FLOAT = (1 << 3),
|
||||
SCA_DEF_BOOL = (1 << 4),
|
||||
SCA_AUTOINC = (1 << 5),
|
||||
SCA_UNIQUE_KEY = (1 << 6),
|
||||
SCA_PRIMARY_KEY = (1 << 7),
|
||||
SCA_COMMENT = (1 << 8),
|
||||
};
|
||||
|
||||
extern void sqlp_col_attr(enum sqlp_col_attribs attr);
|
||||
extern void sqlp_col_attr_uniq(int n_cols);
|
||||
extern void sqlp_col_attr_comm(const char *comm);
|
||||
extern void sqlp_col_charset(const char *charset);
|
||||
extern void sqlp_col_collate(const char *collate);
|
||||
extern void sqlp_col_def_str(const char *str);
|
||||
extern void sqlp_col_def_num(int num);
|
||||
extern void sqlp_col_def_float(float num);
|
||||
extern void sqlp_col_def_bool(int bool);
|
||||
extern void sqlp_create_db(int if_n_exists, const char *name);
|
||||
extern void sqlp_create_tbl(int temp, int if_n_exists, int n_cols,
|
||||
const char *db_name, const char *name);
|
||||
extern void sqlp_def_col(int flags, const char *name);
|
||||
extern void sqlp_drop_db(int if_exists, const char *name);
|
||||
extern void sqlp_drop_table(int temp, int if_exists, int n_tables);
|
||||
extern void sqlp_enum_val(const char *val);
|
||||
extern void sqlp_start_col(void);
|
||||
extern void sqlp_stmt(void);
|
||||
extern void sqlp_table(const char *name);
|
||||
|
30
sql.y
30
sql.y
@ -735,18 +735,18 @@ create_definition: { sqlp_start_col(); } NAME data_type column_atts
|
||||
;
|
||||
|
||||
column_atts: /* nil */ { $$ = 0; }
|
||||
| column_atts NOT NULLX { emit("ATTR NOTNULL"); $$ = $1 + 1; }
|
||||
| column_atts NOT NULLX { sqlp_col_attr(SCA_NOTNULL); $$ = $1 + 1; }
|
||||
| column_atts NULLX
|
||||
| column_atts DEFAULT STRING { emit("ATTR DEFAULT STRING %s", $3); free($3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT INTNUM { emit("ATTR DEFAULT NUMBER %d", $3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT APPROXNUM { emit("ATTR DEFAULT FLOAT %g", $3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT BOOL { emit("ATTR DEFAULT BOOL %d", $3); $$ = $1 + 1; }
|
||||
| column_atts AUTO_INCREMENT { emit("ATTR AUTOINC"); $$ = $1 + 1; }
|
||||
| column_atts UNIQUE '(' column_list ')' { emit("ATTR UNIQUEKEY %d", $4); $$ = $1 + 1; }
|
||||
| column_atts UNIQUE KEY { emit("ATTR UNIQUEKEY"); $$ = $1 + 1; }
|
||||
| column_atts PRIMARY KEY { emit("ATTR PRIKEY"); $$ = $1 + 1; }
|
||||
| column_atts KEY { emit("ATTR PRIKEY"); $$ = $1 + 1; }
|
||||
| column_atts COMMENT STRING { emit("ATTR COMMENT %s", $3); free($3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT STRING { sqlp_col_def_str($3); free($3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT INTNUM { sqlp_col_def_num($3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT APPROXNUM { sqlp_col_def_float($3); $$ = $1 + 1; }
|
||||
| column_atts DEFAULT BOOL { sqlp_col_def_bool($3); $$ = $1 + 1; }
|
||||
| column_atts AUTO_INCREMENT { sqlp_col_attr(SCA_AUTOINC); $$ = $1 + 1; }
|
||||
| column_atts UNIQUE '(' column_list ')' { sqlp_col_attr_uniq($4); $$ = $1 + 1; }
|
||||
| column_atts UNIQUE KEY { sqlp_col_attr_uniq(0); $$ = $1 + 1; }
|
||||
| column_atts PRIMARY KEY { sqlp_col_attr(SCA_PRIMARY_KEY); $$ = $1 + 1; }
|
||||
| column_atts KEY { sqlp_col_attr(SCA_PRIMARY_KEY); $$ = $1 + 1; }
|
||||
| column_atts COMMENT STRING { sqlp_col_attr_comm($3); free($3); $$ = $1 + 1; }
|
||||
;
|
||||
|
||||
opt_length: /* nil */ { $$ = 0; }
|
||||
@ -764,8 +764,8 @@ opt_uz: /* nil */ { $$ = 0; }
|
||||
;
|
||||
|
||||
opt_csc: /* nil */
|
||||
| opt_csc CHAR SET STRING { emit("COLCHARSET %s", $4); free($4); }
|
||||
| opt_csc COLLATE STRING { emit("COLCOLLATE %s", $3); free($3); }
|
||||
| opt_csc CHAR SET STRING { sqlp_col_charset($4); free($4); }
|
||||
| opt_csc COLLATE STRING { sqlp_col_collate($3); free($3); }
|
||||
;
|
||||
|
||||
data_type:
|
||||
@ -801,8 +801,8 @@ data_type:
|
||||
| SET '(' enum_list ')' opt_csc { $$ = 210000 + $3; }
|
||||
;
|
||||
|
||||
enum_list: STRING { emit("ENUMVAL %s", $1); free($1); $$ = 1; }
|
||||
| enum_list ',' STRING { emit("ENUMVAL %s", $3); free($3); $$ = $1 + 1; }
|
||||
enum_list: STRING { sqlp_enum_val($1); free($1); $$ = 1; }
|
||||
| enum_list ',' STRING { sqlp_enum_val($3); free($3); $$ = $1 + 1; }
|
||||
;
|
||||
|
||||
create_select_statement: opt_ignore_replace opt_as select_stmt { emit("CREATESELECT %d", $1) }
|
||||
|
Loading…
x
Reference in New Issue
Block a user