#ifndef _sql_cursor_h_ #define _sql_cursor_h_ /* Copyright (C) 2005 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifdef USE_PRAGMA_INTERFACE #pragma interface /* gcc class interface */ #endif /* Declarations for implementation of server side cursors. Only read-only non-scrollable cursors are currently implemented. */ /* Server_side_cursor -- an interface for materialized and sensitive (non-materialized) implementation of cursors. All cursors are self-contained (created in their own memory root). For that reason they must be deleted only using a pointer to Server_side_cursor, not to its base class. */ class Server_side_cursor: protected Query_arena, public Sql_alloc { protected: /* Row destination used for fetch */ select_result *result; public: Server_side_cursor(MEM_ROOT *mem_root_arg, select_result *result_arg) :Query_arena(mem_root_arg, INITIALIZED), result(result_arg) {} virtual bool is_open() const= 0; virtual int open(JOIN *top_level_join)= 0; virtual void fetch(ulong num_rows)= 0; virtual void close()= 0; virtual ~Server_side_cursor(); static void operator delete(void *ptr, size_t size); }; int mysql_open_cursor(THD *thd, uint flags, select_result *result, Server_side_cursor **res); /* Possible values for flags */ enum { ANY_CURSOR= 1, ALWAYS_MATERIALIZED_CURSOR= 2 }; #endif /* _sql_cusor_h_ */