int main() { GTree *tokens; gboolean is_first = TRUE; gint i; tokens = g_tree_new((GCompareFunc)g_ascii_strcasecmp); for (i = 0; i < sql_token_get_last_id(); i++) { /** only tokens with TK_SQL_* are keyworks */ if (0 != strncmp(sql_token_get_name(i, NULL), "TK_SQL_", sizeof("TK_SQL_") - 1)) continue; g_tree_insert(tokens, ( gpointer ) (sql_token_get_name(i, NULL) + sizeof("TK_SQL_") - 1), GINT_TO_POINTER(i)); } /* traverse the tree and output all keywords in a sorted way */ printf("static int sql_keywords[] = {"); g_tree_foreach(tokens, trav, &is_first); printf("\n};\n"); printf("int *sql_keywords_get() { return sql_keywords; }\n"); printf("int sql_keywords_get_count() { return sizeof(sql_keywords) / sizeof(sql_keywords[0]); }\n"); g_tree_destroy(tokens); return 0; }
void SqlParser::printTokens(const char *str) const { std::string msg(str ? str : ""); if (inputSql) { msg.append("\""); msg.append(inputSql->str + NET_HEADER_SIZE + 1, inputSql->len - NET_HEADER_SIZE - 1); msg.append("\"."); } log_warning(msg.c_str()); for (size_t i = 0; i < tokens->len; i++) { log_debug("SQL Tokens: %2d %20s: \"%s\"\n", i, sql_token_get_name(getTokenId(i)), getTokenStr(i).c_str()); } }
static int proxy_tokenize_token_get(lua_State *L) { sql_token *token = *(sql_token **)luaL_checkself(L); size_t keysize; const char *key = luaL_checklstring(L, 2, &keysize); if (strleq(key, keysize, C("text"))) { lua_pushlstring(L, S(token->text)); return 1; } else if (strleq(key, keysize, C("token_id"))) { lua_pushinteger(L, token->token_id); return 1; } else if (strleq(key, keysize, C("token_name"))) { size_t token_name_len; const char *token_name = sql_token_get_name(token->token_id, &token_name_len); lua_pushlstring(L, token_name, token_name_len); return 1; } else { luaL_error(L, "tokens[...] has no %s field", key); } return 0; }