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;
}
Example #2
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());
    }

}
Example #3
0
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;
}