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);
}