int main(int argc, char **argv) { struct options_t opts; struct store_t *store; memset(&opts, 0, sizeof(opts)); set_portsdir(&opts); parse_opts(argc, argv, &opts); if (opts.update_db) mkdb(&opts); else if (opts.search_crit) { if (!s_exists()) errx(EX_USAGE, "Database does not exist, please create it first using the -u option"); if (!ISSET(SEARCH_BY_PFILE, opts.search_crit) && strstr(opts.outflds, "rawfiles") != NULL) errx(EX_USAGE, "-o rawfiles is specified without -f or -b"); parse_outflds(opts.outflds, opts.outflds_parsed); alloc_store(&store); s_search_start(store); filter_ports(store, &opts); display_ports(get_ports(store), &opts); s_search_end(store); free_store(store); } return 0; }
bool ParserTablePropertiesQuery::parseImpl(Pos & pos, Pos end, ASTPtr & node, Pos & max_parsed_pos, Expected & expected) { Pos begin = pos; ParserWhitespaceOrComments ws; ParserKeyword s_exists("EXISTS"); ParserKeyword s_describe("DESCRIBE"); ParserKeyword s_desc("DESC"); ParserKeyword s_show("SHOW"); ParserKeyword s_create("CREATE"); ParserKeyword s_table("TABLE"); ParserString s_dot("."); ParserIdentifier name_p; ASTPtr database; ASTPtr table; std::shared_ptr<ASTQueryWithTableAndOutput> query; ws.ignore(pos, end); if (s_exists.ignore(pos, end, max_parsed_pos, expected)) { query = std::make_shared<ASTExistsQuery>(); } else if (s_describe.ignore(pos, end, max_parsed_pos, expected) || s_desc.ignore(pos, end, max_parsed_pos, expected)) { query = std::make_shared<ASTDescribeQuery>(); } else if (s_show.ignore(pos, end, max_parsed_pos, expected)) { ws.ignore(pos, end); if (!s_create.ignore(pos, end, max_parsed_pos, expected)) return false; query = std::make_shared<ASTShowCreateQuery>(); } else { return false; } ws.ignore(pos, end); s_table.ignore(pos, end, max_parsed_pos, expected); ws.ignore(pos, end); if (!name_p.parse(pos, end, table, max_parsed_pos, expected)) return false; ws.ignore(pos, end); if (s_dot.ignore(pos, end, max_parsed_pos, expected)) { database = table; if (!name_p.parse(pos, end, table, max_parsed_pos, expected)) return false; ws.ignore(pos, end); } ws.ignore(pos, end); query->range = StringRange(begin, pos); if (database) query->database = typeid_cast<ASTIdentifier &>(*database).name; if (table) query->table = typeid_cast<ASTIdentifier &>(*table).name; node = query; return true; }
bool ParserTablePropertiesQuery::parseImpl(Pos & pos, ASTPtr & node, Expected & expected) { ParserKeyword s_exists("EXISTS"); ParserKeyword s_temporary("TEMPORARY"); ParserKeyword s_describe("DESCRIBE"); ParserKeyword s_desc("DESC"); ParserKeyword s_show("SHOW"); ParserKeyword s_create("CREATE"); ParserKeyword s_database("DATABASE"); ParserKeyword s_table("TABLE"); ParserToken s_dot(TokenType::Dot); ParserIdentifier name_p; ASTPtr database; ASTPtr table; std::shared_ptr<ASTQueryWithTableAndOutput> query; bool parse_only_database_name = false; if (s_exists.ignore(pos, expected)) { query = std::make_shared<ASTExistsQuery>(); } else if (s_show.ignore(pos, expected)) { if (!s_create.ignore(pos, expected)) return false; if (s_database.ignore(pos, expected)) { parse_only_database_name = true; query = std::make_shared<ASTShowCreateDatabaseQuery>(); } else query = std::make_shared<ASTShowCreateTableQuery>(); } else { return false; } if (parse_only_database_name) { if (!name_p.parse(pos, database, expected)) return false; } else { if (s_temporary.ignore(pos, expected)) query->temporary = true; s_table.ignore(pos, expected); if (!name_p.parse(pos, table, expected)) return false; if (s_dot.ignore(pos, expected)) { database = table; if (!name_p.parse(pos, table, expected)) return false; } } if (database) query->database = typeid_cast<ASTIdentifier &>(*database).name; if (table) query->table = typeid_cast<ASTIdentifier &>(*table).name; node = query; return true; }