static int lua_proto_get_stmt_prepare_packet (lua_State *L) { size_t packet_len; const char *packet_str = luaL_checklstring(L, 1, &packet_len); network_mysqld_stmt_prepare_packet_t *cmd; network_packet packet; GString s; int err = 0; s.str = (char *)packet_str; s.len = packet_len; packet.data = &s; packet.offset = 0; cmd = network_mysqld_stmt_prepare_packet_new(); err = err || network_mysqld_proto_get_stmt_prepare_packet(&packet, cmd); if (err) { network_mysqld_stmt_prepare_packet_free(cmd); luaL_error(L, "%s: network_mysqld_proto_get_stmt_prepare_packet() failed", G_STRLOC); return 0; } lua_newtable(L); LUA_EXPORT_STR(cmd, stmt_text); network_mysqld_stmt_prepare_packet_free(cmd); return 1; }
/* COM_STMT_PREPARE */ static void t_com_stmt_prepare_new(void) { network_mysqld_stmt_prepare_packet_t *cmd; cmd = network_mysqld_stmt_prepare_packet_new(); g_assert(cmd); network_mysqld_stmt_prepare_packet_free(cmd); }
static void t_com_stmt_prepare_from_packet(void) { network_mysqld_stmt_prepare_packet_t *cmd; const char raw_packet[] = "\x1c\x00\x00\x00\x16SELECT CONCAT(?, ?) AS col1"; network_packet packet; packet.data = g_string_new_len(C(raw_packet)); packet.offset = 0; cmd = network_mysqld_stmt_prepare_packet_new(); g_assert_cmpint(0, ==, network_mysqld_proto_skip_network_header(&packet)); g_assert_cmpint(0, ==, network_mysqld_proto_get_stmt_prepare_packet(&packet, cmd)); g_assert_cmpint(sizeof("SELECT CONCAT(?, ?) AS col1") - 1, ==, cmd->stmt_text->len); g_assert_cmpstr("SELECT CONCAT(?, ?) AS col1", ==, cmd->stmt_text->str); network_mysqld_stmt_prepare_packet_free(cmd); }