mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
7ceb29ff17
layout as we always had in trees containing only the builtin 2) win\configure.js WITH_INNOBASE_STORAGE_ENGINE still works. storage/innobase/CMakeLists.txt: fix to new directory name (and like 5.1) storage/innobase/Makefile.am: fix to new directory name (and like 5.1) storage/innobase/handler/ha_innodb.cc: fix to new directory name (and like 5.1) storage/innobase/plug.in: fix to new directory name (and like 5.1)
105 lines
2.8 KiB
Text
105 lines
2.8 KiB
Text
/*****************************************************************************
|
|
|
|
Copyright (c) 1997, 2009, Innobase Oy. All Rights Reserved.
|
|
|
|
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; version 2 of the License.
|
|
|
|
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
|
|
|
|
*****************************************************************************/
|
|
|
|
/**************************************************//**
|
|
@file include/row0sel.ic
|
|
Select
|
|
|
|
Created 12/19/1997 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#include "que0que.h"
|
|
|
|
/*********************************************************************//**
|
|
Gets the plan node for the nth table in a join.
|
|
@return plan node */
|
|
UNIV_INLINE
|
|
plan_t*
|
|
sel_node_get_nth_plan(
|
|
/*==================*/
|
|
sel_node_t* node, /*!< in: select node */
|
|
ulint i) /*!< in: get ith plan node */
|
|
{
|
|
ut_ad(i < node->n_tables);
|
|
|
|
return(node->plans + i);
|
|
}
|
|
|
|
/*********************************************************************//**
|
|
Resets the cursor defined by sel_node to the SEL_NODE_OPEN state, which means
|
|
that it will start fetching from the start of the result set again, regardless
|
|
of where it was before, and it will set intention locks on the tables. */
|
|
UNIV_INLINE
|
|
void
|
|
sel_node_reset_cursor(
|
|
/*==================*/
|
|
sel_node_t* node) /*!< in: select node */
|
|
{
|
|
node->state = SEL_NODE_OPEN;
|
|
}
|
|
|
|
/**********************************************************************//**
|
|
Performs an execution step of an open or close cursor statement node.
|
|
@return query thread to run next or NULL */
|
|
UNIV_INLINE
|
|
que_thr_t*
|
|
open_step(
|
|
/*======*/
|
|
que_thr_t* thr) /*!< in: query thread */
|
|
{
|
|
sel_node_t* sel_node;
|
|
open_node_t* node;
|
|
ulint err;
|
|
|
|
ut_ad(thr);
|
|
|
|
node = (open_node_t*) thr->run_node;
|
|
ut_ad(que_node_get_type(node) == QUE_NODE_OPEN);
|
|
|
|
sel_node = node->cursor_def;
|
|
|
|
err = DB_SUCCESS;
|
|
|
|
if (node->op_type == ROW_SEL_OPEN_CURSOR) {
|
|
|
|
/* if (sel_node->state == SEL_NODE_CLOSED) { */
|
|
|
|
sel_node_reset_cursor(sel_node);
|
|
/* } else {
|
|
err = DB_ERROR;
|
|
} */
|
|
} else {
|
|
if (sel_node->state != SEL_NODE_CLOSED) {
|
|
|
|
sel_node->state = SEL_NODE_CLOSED;
|
|
} else {
|
|
err = DB_ERROR;
|
|
}
|
|
}
|
|
|
|
if (UNIV_EXPECT(err, DB_SUCCESS) != DB_SUCCESS) {
|
|
/* SQL error detected */
|
|
fprintf(stderr, "SQL error %lu\n", (ulong) err);
|
|
|
|
ut_error;
|
|
}
|
|
|
|
thr->run_node = que_node_get_parent(node);
|
|
|
|
return(thr);
|
|
}
|