CUBRID Engine  latest
shard_parser.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * shard_parser.h -
22  */
23 
24 #ifndef _SHARD_PARSER_H_
25 #define _SHARD_PARSER_H_
26 
27 #ident "$Id$"
28 
29 
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include <string.h>
33 #include <ctype.h>
34 #include "system.h"
35 #include "error_code.h"
36 
37 #define SP_VALUE_INIT_SIZE 50
38 
39 
41 {
47 };
48 
50 {
51  HT_INVAL = -1,
58 };
60 
62 {
65 };
67 
69 {
70  VT_INTEGER, /* this type means INT64 to support 64bit integer key value */
72 };
74 
76 {
93 };
94 typedef enum sp_token SP_TOKEN;
95 
96 typedef struct sp_cursor SP_CURSOR;
97 struct sp_cursor
98 {
99  const char *pos;
101 };
102 
103 typedef struct sp_value SP_VALUE;
104 struct sp_value
105 {
107  struct
108  {
109  int length;
110  char *value;
111  char value_arr[SP_VALUE_INIT_SIZE];
112  char *value_ex;
113  } string;
114  INT64 integer;
115 };
116 
119 {
121  SP_PARSER_HINT *next_t[2];
127 };
128 
131 {
134  int size;
135 };
136 
139 {
140  char *sql_stmt;
141  bool is_select;
148 };
149 
150 extern SP_PARSER_CTX *sp_create_parser (const char *sql_stmt);
151 extern int sp_parse_sql (SP_PARSER_CTX * parser_p);
152 extern void sp_destroy_parser (SP_PARSER_CTX * parser_p);
153 extern bool sp_is_hint_static (SP_PARSER_CTX * parser_p);
154 extern int sp_get_total_hint_count (SP_PARSER_CTX * parser_p);
155 extern int sp_get_static_hint_count (SP_PARSER_CTX * parser_p);
156 extern int sp_get_dynamic_hint_count (SP_PARSER_CTX * parser_p);
157 extern SP_PARSER_HINT *sp_get_first_hint (SP_PARSER_CTX * parser_p);
163 extern char *sp_get_hint_key (SP_PARSER_HINT * hint_p);
164 extern const char *sp_get_sql_stmt (SP_PARSER_CTX * parser_p);
165 extern const char *sp_get_token_type (const char *sql, SP_TOKEN * token);
166 extern bool sp_is_pair_token (SP_TOKEN start_token, SP_TOKEN end_token);
169 extern void sp_free_parser_hint (SP_PARSER_HINT * hint_p);
170 extern const char *sp_get_hint_type (const char *sql, SP_HINT_TYPE * hint_type);
171 extern const char *sp_get_hint_arg (const char *sql, SP_PARSER_HINT * hint_p, int *error);
172 extern const char *sp_check_end_of_hint (const char *sql, int *error);
173 
174 #endif
SP_CURSOR prv_cursor
Definition: shard_parser.h:144
bool sp_is_exist_pair_token(SP_TOKEN token)
Definition: shard_parser.c:852
enum sp_hint_type SP_HINT_TYPE
Definition: shard_parser.h:59
const char * sp_get_hint_arg(const char *sql, SP_PARSER_HINT *hint_p, int *error)
Definition: shard_parser.c:610
void sp_free_parser_hint(SP_PARSER_HINT *hint_p)
Definition: shard_parser.c:416
SP_PARSER_HINT * sp_create_parser_hint(void)
Definition: shard_parser.c:333
char * value_ex
Definition: shard_parser.h:112
SP_PARSER_HINT * tail
Definition: shard_parser.h:133
sp_token
Definition: shard_parser.h:75
SP_PARSER_HINT * sp_get_first_static_hint(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:167
INT64 integer
Definition: shard_parser.h:114
SP_PARSER_HINT * sp_get_next_dynamic_hint(SP_PARSER_HINT *hint_p)
Definition: shard_parser.c:185
sp_bind_type
Definition: shard_parser.h:61
SP_VALUE value
Definition: shard_parser.h:126
SP_PARSER_HINT_LIST list_a
Definition: shard_parser.h:146
#define SP_VALUE_INIT_SIZE
Definition: shard_parser.h:37
sp_hint_type
Definition: shard_parser.h:49
int sp_get_static_hint_count(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:143
char * value
Definition: shard_parser.h:110
int sp_get_total_hint_count(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:137
SP_HINT_TYPE hint_type
Definition: shard_parser.h:122
SP_PARSER_HINT * sp_get_first_dynamic_hint(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:179
SP_VALUE_TYPE type
Definition: shard_parser.h:106
SP_CURSOR cursor
Definition: shard_parser.h:143
const char * sp_get_token_type(const char *sql, SP_TOKEN *token)
Definition: shard_parser.c:489
const char * sp_get_sql_stmt(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:197
SP_PARSER_CTX * sp_create_parser(const char *sql_stmt)
Definition: shard_parser.c:63
const char * sp_check_end_of_hint(const char *sql, int *error)
Definition: shard_parser.c:649
SP_TOKEN token
Definition: shard_parser.h:100
bool sp_is_hint_static(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:131
SP_PARSER_HINT * head
Definition: shard_parser.h:132
enum sp_bind_type SP_BIND_TYPE
Definition: shard_parser.h:66
enum sp_token SP_TOKEN
Definition: shard_parser.h:94
SP_TOKEN operator_
Definition: shard_parser.h:145
static void error(const char *msg)
Definition: gencat.c:331
const char * sp_get_hint_type(const char *sql, SP_HINT_TYPE *hint_type)
Definition: shard_parser.c:575
SP_PARSER_HINT * sp_get_first_hint(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:155
SP_PARSER_HINT * sp_get_next_static_hint(SP_PARSER_HINT *hint_p)
Definition: shard_parser.c:173
SP_PARSER_HINT * next_a
Definition: shard_parser.h:120
sp_error_code
Definition: shard_parser.h:40
char * sp_get_hint_key(SP_PARSER_HINT *hint_p)
Definition: shard_parser.c:191
int sp_parse_sql(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:96
sp_value_type
Definition: shard_parser.h:68
enum sp_value_type SP_VALUE_TYPE
Definition: shard_parser.h:73
bool sp_is_pair_token(SP_TOKEN start_token, SP_TOKEN end_token)
Definition: shard_parser.c:203
void sp_destroy_parser(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:116
SP_BIND_TYPE bind_type
Definition: shard_parser.h:123
const char * pos
Definition: shard_parser.h:99
SP_PARSER_HINT * sp_get_next_hint(SP_PARSER_HINT *hint_p)
Definition: shard_parser.c:161
int sp_get_dynamic_hint_count(SP_PARSER_CTX *parser_p)
Definition: shard_parser.c:149