|
@@ -33,10 +33,11 @@ cJSON* jroot;
|
|
%token AND OR NOT IN
|
|
%token AND OR NOT IN
|
|
%token INT FLOAT STRING
|
|
%token INT FLOAT STRING
|
|
%token LPAREN RPAREN COMMA
|
|
%token LPAREN RPAREN COMMA
|
|
|
|
+%token PRIMARY_KEY
|
|
|
|
|
|
%token QUIT NEWLINE
|
|
%token QUIT NEWLINE
|
|
|
|
|
|
-%type <sv> IDENTIFIER data_type
|
|
|
|
|
|
+%type <sv> IDENTIFIER data_type PRIMARY_KEY col_options
|
|
%type <jv> create_definition create_col_list create_table_stmt
|
|
%type <jv> create_definition create_col_list create_table_stmt
|
|
|
|
|
|
%start statement
|
|
%start statement
|
|
@@ -84,15 +85,25 @@ create_col_list: create_definition {
|
|
}
|
|
}
|
|
;
|
|
;
|
|
|
|
|
|
-create_definition: IDENTIFIER data_type {
|
|
|
|
|
|
+create_definition: IDENTIFIER data_type col_options {
|
|
|
|
+ printf("得列 %s %s with options %s: %d\n", $1, $2, $3, strlen($3));
|
|
|
|
+
|
|
cJSON* node = cJSON_CreateObject();
|
|
cJSON* node = cJSON_CreateObject();
|
|
cJSON_AddStringToObject(node, "type", "create_column");
|
|
cJSON_AddStringToObject(node, "type", "create_column");
|
|
cJSON_AddStringToObject(node, "column_name", $1);
|
|
cJSON_AddStringToObject(node, "column_name", $1);
|
|
cJSON_AddStringToObject(node, "data_type", $2);
|
|
cJSON_AddStringToObject(node, "data_type", $2);
|
|
|
|
+ if (strlen($3) > 0){
|
|
|
|
+ cJSON_AddTrueToObject(node, "primary_key");
|
|
|
|
+ } else {
|
|
|
|
+ cJSON_AddFalseToObject(node, "primary_key");
|
|
|
|
+ }
|
|
$$ = node;
|
|
$$ = node;
|
|
- printf("得列 %s %s\n", $1, $2);
|
|
|
|
};
|
|
};
|
|
-
|
|
|
|
|
|
+col_options: {$$ = "";}
|
|
|
|
+ | PRIMARY_KEY {
|
|
|
|
+ // printf("得到主键 %s\n", $1);
|
|
|
|
+ $$ = $1;
|
|
|
|
+ }
|
|
|
|
|
|
data_type: INT
|
|
data_type: INT
|
|
| FLOAT
|
|
| FLOAT
|