Qore::SQL::AbstractSQLStatement Class Referenceabstract

This class defines an abstract interface for the SQLStatement class. More...

Inheritance diagram for Qore::SQL::AbstractSQLStatement:
[legend]

## Public Member Functions

abstract bool | active ()
| Returns True if the object is currently active and has a connection or transaction lock allocated to it, or False if not. More...
abstract int | affectedRows ()
| Returns the number of rows affected by the last call to AbstractSQLStatement::exec() More...
abstract nothing | beginTransaction ()
| Manually starts a transaction and allocates a connection or grabs the transaction lock according to the object used in the AbstractSQLStatement::constructor() More...
abstract nothing | bind (...)
| Binds placeholder buffer specifications and values to buffers defined in AbstractSQLStatement::prepare() More...
abstract nothing | bindArgs (softlist< auto > vargs)
| Binds placeholder buffer specifications and values given as a list in the single argument to the method to buffers defined in AbstractSQLStatement::prepare() More...
abstract nothing | bindPlaceholders (...)
| Binds placeholder buffer specifications to buffers defined in AbstractSQLStatement::prepare() More...
abstract nothing | bindPlaceholdersArgs (softlist< auto > vargs)
| Binds placeholder buffer specifications given as a list in the single argument to the method to buffers defined in AbstractSQLStatement::prepare() More...
abstract nothing | bindValues (...)
| Binds values to value buffer specifications to buffers defined in AbstractSQLStatement::prepare() More...
abstract nothing | bindValuesArgs (softlist< auto > vargs)
| Binds values to value buffer specifications given as a list in the single argument to the method to value buffers defined in AbstractSQLStatement::prepare() More...
abstract nothing | close ()
| Closes the statement if it is open, however this method does not release the connection or transaction lock. More...
abstract nothing | commit ()
| Commits the transaction, releases the connection or the transaction lock according to the object used in the AbstractSQLStatement::constructor(), and closes the SQLStatement. More...
abstract bool | currentThreadInTransaction ()
| Returns True if the current thread is in a transaction (i.e. holds the transaction lock), False if not. More...
abstract nothing | define ()
| Performs an explicit define operation on the SQLStatement. More...
abstract hash< auto > | describe ()
| Describes columns in the statement result. More...
abstract nothing | exec (...)
| Executes the bound statement with any bound buffers, also optionally allows binding placeholder buffer specifications and values to buffers defined in AbstractSQLStatement::prepare() before executing the statement. More...
abstract nothing | execArgs (softlist< auto > vargs)
| Executes the bound statement with any bound buffers, also optionally allows binding placeholder buffer specifications and values given as a list in the single argument to the method to buffers defined in AbstractSQLStatement::prepare() More...
abstract hash< auto > | fetchColumns (softint rows=-1)
| Retrieves a block of rows as a hash of lists with the maximum number of rows determined by the argument passed; automatically advances the row pointer; with this call it is not necessary to call AbstractSQLStatement::next(). More...
abstract *hash< auto > | fetchRow ()
| Retrieves the current row as a hash where the keys are the column names and the values are the column values. More...
abstract list< auto > | fetchRows (softint rows=-1)
| Retrieves a block of rows as a list of hashes with the maximum number of rows determined by the argument passed; automatically advances the row pointer; with this call it is not necessary to call AbstractSQLStatement::next() More...
abstract hash< auto > | getOutput ()
| Retrieves output buffers as a hash; result sets will be returned as hashes of lists. More...
abstract hash< auto > | getOutputRows ()
| Retrieves output buffers as a hash; result sets will be returned as lists of hashes. More...
abstract *string | getSQL ()
| Returns the current SQL string set with the call to AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw() or NOTHING if no SQL has been set. More...
abstract *hash< auto > | getValue ()
| Retrieves the current row as a hash where the keys are the column names and the values are the column values. More...
abstract bool | next ()
| Increments the row pointer when retrieving rows from a select statement; returns True if there is a row to retrieve, False if not. More...
abstract nothing | prepare (string sql,...)
| Saves an SQL statement that will be prepared and executed later, along with optional arguments. More...
abstract nothing | prepareRaw (string sql)
| Saves an SQL statement that will be prepared and executed later. More...
abstract nothing | rollback ()
| Closes the SQLStatement, performs a transaction rollback, and releases the connection or the transaction lock according to the object used in the AbstractSQLStatement::constructor(), and closes the SQLStatement. More...
abstract bool | valid ()
| returns True if the object is currently pointing at a valid element, False if not (use when iterating with AbstractSQLStatement::next()) More...

## Detailed Description

This class defines an abstract interface for the SQLStatement class.

Restrictions:
  Qore::PO_NO_DATABASE

Since
  Qore 0.9.0

## Member Function Documentation

## active()

abstract bool Qore::SQL::AbstractSQLStatement::active | ( |  | ) |

pure virtual

Returns True if the object is currently active and has a connection or transaction lock allocated to it, or False if not.

Returns
  True if the object is currently active and has a connection or transaction lock allocated to it, or False if not

Example:
  if (stmt.active())
  stmt.commit();

Implemented in Qore::SQL::SQLStatement.

## affectedRows()

abstract int Qore::SQL::AbstractSQLStatement::affectedRows | ( |  | ) |

pure virtual

Returns the number of rows affected by the last call to AbstractSQLStatement::exec()

Returns
  the number of rows affected by the last call to AbstractSQLStatement::exec()

Example:
  int rc = stmt.affectedRows();

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## beginTransaction()

abstract nothing Qore::SQL::AbstractSQLStatement::beginTransaction | ( |  | ) |

pure virtual

Manually starts a transaction and allocates a connection or grabs the transaction lock according to the object used in the AbstractSQLStatement::constructor()

Example:
  stmt.beginTransaction();

Implemented in Qore::SQL::SQLStatement.

## bind()

abstract nothing Qore::SQL::AbstractSQLStatement::bind | ( |  | ... | ) |

pure virtual

Binds placeholder buffer specifications and values to buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method.

Any arguments previously bound will be released when this call is made.

Note
  You can also bind directly when calling AbstractSQLStatement::exec() or AbstractSQLStatement::execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.

Parameters

  ... | Arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments

Example:
  stmt.prepare("insert into table (id, name) values (%v, %v)");
  foreach hash<auto> h in (l) {
  stmt.bind(h.id, h.name);
  stmt.exec();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::bindArgs(), AbstractSQLStatement::bindPlaceholders(), AbstractSQLStatement::bindPlaceholdersArgs(), AbstractSQLStatement::bindValues(), and AbstractSQLStatement::bindValuesArgs()

Implemented in Qore::SQL::SQLStatement.

## bindArgs()

abstract nothing Qore::SQL::AbstractSQLStatement::bindArgs | ( | softlist< auto > | vargs | ) |

pure virtual

Binds placeholder buffer specifications and values given as a list in the single argument to the method to buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method.

Any arguments previously bound will be released when this call is made.

Note
  You can also bind directly when calling AbstractSQLStatement::exec() or AbstractSQLStatement::execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.

Parameters

  vargs | Arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments

Example:
  stmt.prepare("insert into table (id, name) values (%v, %v)");
  foreach hash<auto> h in (l) {
  list<auto> args = (h.id, h.name);
  stmt.bindArgs(args);
  stmt.exec();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::bind(), AbstractSQLStatement::bindPlaceholders(), AbstractSQLStatement::bindPlaceholdersArgs(), AbstractSQLStatement::bindValues(), and AbstractSQLStatement::bindValuesArgs()

Implemented in Qore::SQL::SQLStatement.

## bindPlaceholders()

abstract nothing Qore::SQL::AbstractSQLStatement::bindPlaceholders | ( |  | ... | ) |

pure virtual

Binds placeholder buffer specifications to buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method. Only placeholder buffer specifications will be processed; value buffer specifications will be skipped by this method.

Any buffer specifications previously defined will be released when this call is made.

Note
  You can also bind buffer specifications directly when calling AbstractSQLStatement::exec() or AbstractSQLStatement::execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.
  Not all DBI drivers require binding placeholders specification.

Parameters

  ... | Arguments to placeholder specifications (if required by the underlying DBI driver)

Example:
  stmt.prepare("begin select sysdate into :sd from dual", Type::Date); end;
  stmt.bindPlaceholders(Type::Date);
  date d = stmt.getOutput().sd;

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::bind(), AbstractSQLStatement::bindArgs(), AbstractSQLStatement::bindPlaceholdersArgs(), AbstractSQLStatement::bindValues(), and AbstractSQLStatement::bindValuesArgs()

Implemented in Qore::SQL::SQLStatement.

## bindPlaceholdersArgs()

abstract nothing Qore::SQL::AbstractSQLStatement::bindPlaceholdersArgs | ( | softlist< auto > | vargs | ) |

pure virtual

Binds placeholder buffer specifications given as a list in the single argument to the method to buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method. Only placeholder buffer specifications will be processed; value buffer specifications will be skipped by this method.

Any buffer specifications previously defined will be released when this call is made.

Note
  You can also bind buffer specifications directly when calling AbstractSQLStatement::exec() or AbstractSQLStatement::execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.
  Not all DBI drivers require binding placeholders specification.

Parameters

  vargs | Arguments to placeholder specifications (if required by the underlying DBI driver)

Example:
  stmt.prepare("begin select sysdate into :sd from dual", Type::Date); end;
  list<auto> l = list(Type::Date);
  stmt.bindPlaceholdersArgs(l);
  date d = stmt.getOutput().sd;

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::bind(), AbstractSQLStatement::bindArgs(), AbstractSQLStatement::bindPlaceholders(), AbstractSQLStatement::bindValues(), and AbstractSQLStatement::bindValuesArgs()

Implemented in Qore::SQL::SQLStatement.

## bindValues()

abstract nothing Qore::SQL::AbstractSQLStatement::bindValues | ( |  | ... | ) |

pure virtual

Binds values to value buffer specifications to buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method.

Any values previously bound will be released when this call is made.

Note
  You can also bind directly when calling AbstractSQLStatement::exec() or AbstractSQLStatement::execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.

Parameters

  ... | Arguments to bind by value arguments

Example:
  stmt.prepare("insert into table (id, name) values (%v, %v)");
  foreach hash<auto> h in (l) {
  stmt.bindValues(h.id, h.name);
  stmt.exec();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::bind(), AbstractSQLStatement::bindArgs(), AbstractSQLStatement::bindPlaceholders(), AbstractSQLStatement::bindPlaceholdersArgs(), and AbstractSQLStatement::bindValuesArgs().

Implemented in Qore::SQL::SQLStatement.

## bindValuesArgs()

abstract nothing Qore::SQL::AbstractSQLStatement::bindValuesArgs | ( | softlist< auto > | vargs | ) |

pure virtual

Binds values to value buffer specifications given as a list in the single argument to the method to value buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method.

Any values previously bound will be released when this call is made.

Note
  You can also bind directly when calling AbstractSQLStatement::exec() or AbstractSQLStatement::execArgs() as a shortcut as well, in which case it's not necessary to make an extra call to this method.

Parameters

  vargs | Arguments to bind by value arguments

Example:
  stmt.prepare("insert into table (id, name) values (%v, %v)");
  foreach hash<auto> h in (l) {
  list<auto> args = (h.id, h.name);
  stmt.bindValuesArgs(args);
  stmt.exec();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## close()

abstract nothing Qore::SQL::AbstractSQLStatement::close | ( |  | ) |

pure virtual

Closes the statement if it is open, however this method does not release the connection or transaction lock.

Example:
  stmt.close();

Implemented in Qore::SQL::SQLStatement.

## commit()

abstract nothing Qore::SQL::AbstractSQLStatement::commit | ( |  | ) |

pure virtual

Commits the transaction, releases the connection or the transaction lock according to the object used in the AbstractSQLStatement::constructor(), and closes the SQLStatement.

Example:
  stmt.commit();

Note
  For possible exceptions; see DBI driver docs for the commit() method

Implemented in Qore::SQL::SQLStatement.

## currentThreadInTransaction()

abstract bool Qore::SQL::AbstractSQLStatement::currentThreadInTransaction | ( |  | ) |

pure virtual

Returns True if the current thread is in a transaction (i.e. holds the transaction lock), False if not.

Returns
  True if the current thread is in a transaction (i.e. holds the transaction lock), False if not

Example:
  bool b = stmt.currentThreadInTransaction();

Implemented in Qore::SQL::SQLStatement.

## define()

abstract nothing Qore::SQL::AbstractSQLStatement::define | ( |  | ) |

pure virtual

Performs an explicit define operation on the SQLStatement.

It is not encessary to call this method manually; define operations are implicitly executed when needed when retrieving values from a select statement

Example:
  {
  SQLStatement stmt(ds);
  # release transaction lock on exit
  on_exit stmt.commit();
  stmt.prepare("select * from table");
  stmt.exec();
  stmt.define();
  # note that the AbstractSQLStatement::next() would implicitly execute exec() and define()
  while (stmt.next()) {
  hash<auto> row = stmt.fetchRow();
  do_something(row);
  }
  }

Implemented in Qore::SQL::SQLStatement.

## describe()

abstract hash<auto> Qore::SQL::AbstractSQLStatement::describe | ( |  | ) |

pure virtual

Describes columns in the statement result.

Returns
  a hash with (column_name: description_hash) format, where each description_hash has the following keys:
  - `"name"`: (string) the column name
  - `"type"`: (integer) the column type code (as returned by <value>::typeCode())
  - `"maxsize"`: (integer) the maximum size of the column
  - `"native_type"`: (string) the database-specific name of the type
  - `"internal_id"`: (integer) the database-specific type code of the type

Implemented in Qore::SQL::SQLStatement.

## exec()

abstract nothing Qore::SQL::AbstractSQLStatement::exec | ( |  | ... | ) |

pure virtual

Executes the bound statement with any bound buffers, also optionally allows binding placeholder buffer specifications and values to buffers defined in AbstractSQLStatement::prepare() before executing the statement.

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Optional arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method.

If bind arguments are provided, any arguments previously bound will be released when this call is made.

After calling this method to execute the statement, to retrieve information about the call or output values bound in the call, call AbstractSQLStatement::affectedRows(), AbstractSQLStatement::getOutput(), or AbstractSQLStatement::getOutputRows() as needed.

To retrieve rows from a select statement call either AbstractSQLStatement::next() and AbstractSQLStatement::fetchRow(), or AbstractSQLStatement::fetchRows() or AbstractSQLStatement::fetchColumns() as needed.

Parameters

  ... | Optional arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments can be given in the call to the method; if present, arguments are bound before the statement is executed

Example:
  stmt.prepare("insert into table (id, name) values (%v, %v)");
  foreach hash<auto> h in (l) {
  stmt.exec(h.id, h.name);
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare(); the SQLStatement uses a DatasourcePool an the statement was prepared on another connection

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::execArgs()

Implemented in Qore::SQL::SQLStatement.

## execArgs()

abstract nothing Qore::SQL::AbstractSQLStatement::execArgs | ( | softlist< auto > | vargs | ) |

pure virtual

Executes the bound statement with any bound buffers, also optionally allows binding placeholder buffer specifications and values given as a list in the single argument to the method to buffers defined in AbstractSQLStatement::prepare()

If the statement has not previously been prepared with the DB API, it will be implicitly prepared by this method call. This means that this call will cause a connection to be dedicated from a DatasourcePool object or the transaction lock to be grabbed with a Datasource object, depending on the argument to AbstractSQLStatement::constructor().

Optional arguments to buffer specifications must be given in the same order as declared in the string given to the AbstractSQLStatement::prepare() method.

If bind arguments are provided, any arguments previously bound will be released when this call is made.

After calling this method to execute the statement, to retrieve information about the call or output values bound in the call, call AbstractSQLStatement::affectedRows(), AbstractSQLStatement::getOutput(), or AbstractSQLStatement::getOutputRows() as needed.

To retrieve rows from a select statement call either AbstractSQLStatement::next() and AbstractSQLStatement::fetchRow(), or AbstractSQLStatement::fetchRows() or AbstractSQLStatement::fetchColumns() as needed.

Parameters

  vargs | Optional arguments to placeholder specifications (if required by the underlying DBI driver) and bind by value arguments can be given in the call to the method; if present, arguments are bound before the statement is executed

Example:
  stmt.prepare("insert into table (id, name) values (%v, %v)");
  foreach hash<auto> h in (l) {
  list<auto> args = (h.id, h.name);
  stmt.execArgs(args);
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw(); the SQLStatement uses a DatasourcePool an the statement was prepared on another connection

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information

See also
  AbstractSQLStatement::exec()

Implemented in Qore::SQL::SQLStatement.

## fetchColumns()

abstract hash<auto> Qore::SQL::AbstractSQLStatement::fetchColumns | ( | softint | rows = `-1` | ) |

pure virtual

Retrieves a block of rows as a hash of lists with the maximum number of rows determined by the argument passed; automatically advances the row pointer; with this call it is not necessary to call AbstractSQLStatement::next().

If the argument passed is omitted or less than or equal to zero, then all available rows from the current row position are retrieved, also if fewer rows are available than requested then only the rows available are retrieved.

Parameters

  rows | The maximum number of rows to retrieve, if this argument is omitted, negative, or equal to zero, then all available rows from the current row position are retrieved

Returns
  a hash (giving column names) of lists (giving row values for each column) of data returned; each list will have at most rows elements (unless rows is negative, in which case all available rows are returned). If the total number of rows available is less than rows (if rows is positive), then the last data returned by this method may return short lists. If no more rows are available, then an empty hash is returned

Example:
  hash<auto> h = stmt.fetchColumns(-1);

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  - There is no need to call AbstractSQLStatement::next() when calling this method; the method automatically iterates through the given number of rows
  - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## fetchRow()

abstract *hash<auto> Qore::SQL::AbstractSQLStatement::fetchRow | ( |  | ) |

pure virtual

Retrieves the current row as a hash where the keys are the column names and the values are the column values.

Use with AbstractSQLStatement::next() to iterate through the results of a select statement one row at a time

Returns
  the current row as a hash where the keys are the column names and the values are the column values

Example:
  while (stmt.next()) {
  hash<auto> h = stmt.fetchRow();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## fetchRows()

abstract list<auto> Qore::SQL::AbstractSQLStatement::fetchRows | ( | softint | rows = `-1` | ) |

pure virtual

Retrieves a block of rows as a list of hashes with the maximum number of rows determined by the argument passed; automatically advances the row pointer; with this call it is not necessary to call AbstractSQLStatement::next()

If the argument passed is omitted or less than or equal to zero, then all available rows from the current row position are retrieved, also if fewer rows are available than requested then only the rows available are retrieved.

If no more rows are available then an empty list is returned.

Parameters

  rows | The maximum number of rows to retrieve, if this argument is omitted, negative, or equal to zero, then all available rows from the current row position are retrieved

Example:
  list<auto> l = stmt.fetchRows(-1);

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  - There is no need to call AbstractSQLStatement::next() when calling this method; the method automatically iterates through the given number of rows
  - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## getOutput()

abstract hash<auto> Qore::SQL::AbstractSQLStatement::getOutput | ( |  | ) |

pure virtual

Retrieves output buffers as a hash; result sets will be returned as hashes of lists.

Returns
  Returns a hash of output buffers; result sets will be returned as hashes of lists. Each key in the hash is the same as the name given to the placeholder specification in the call to AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Example:
  hash<auto> h = stmt.getOutput();

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when output values are retrieved; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## getOutputRows()

abstract hash<auto> Qore::SQL::AbstractSQLStatement::getOutputRows | ( |  | ) |

pure virtual

Retrieves output buffers as a hash; result sets will be returned as lists of hashes.

Returns
  Retrieves output buffers as a hash; result sets will be returned as lists of hashes. Each key in the hash is the same as the name given to the placeholder specification in the call to AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Example:
  hash<auto> h = stmt.getOutputRows();

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when output values are retrieved; see the relevant DBI driver docs for more information

Implemented in Qore::SQL::SQLStatement.

## getSQL()

abstract *string Qore::SQL::AbstractSQLStatement::getSQL | ( |  | ) |

pure virtual

Returns the current SQL string set with the call to AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw() or NOTHING if no SQL has been set.

Returns
  Returns the current SQL string set with the call to AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw() or NOTHING if no SQL has been set

Example:
  *string sql = stmt.getSQL();

Implemented in Qore::SQL::SQLStatement.

## getValue()

abstract *hash<auto> Qore::SQL::AbstractSQLStatement::getValue | ( |  | ) |

pure virtual

Retrieves the current row as a hash where the keys are the column names and the values are the column values.

Use with AbstractSQLStatement::next() to iterate through the results of a select statement one row at a time

Returns
  the current row as a hash where the keys are the column names and the values are the column values

Example:
  while (stmt.next()) {
  hash<auto> h = stmt.getValue();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  - Equivalent to AbstractSQLStatement::fetchRow()
  - Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed or when row values are retrieved; see the relevant DBI driver docs for more information

Implements Qore::AbstractIterator.

Implemented in Qore::SQL::SQLStatement.

## next()

abstract bool Qore::SQL::AbstractSQLStatement::next | ( |  | ) |

pure virtual

Increments the row pointer when retrieving rows from a select statement; returns True if there is a row to retrieve, False if not.

If this method returns True, then call AbstractSQLStatement::fetchRow() afterwards to retrieve the row

Returns
  True if there is a row to retrieve, False if not (no more rows to be retrieved)

Example:
  while (stmt.next()) {
  hash<auto> h = stmt.fetchRow();
  }

Exceptions

  SQLSTATEMENT-ERROR | No SQL has been set with AbstractSQLStatement::prepare() or AbstractSQLStatement::prepareRaw()

Note
  Exceptions could be thrown by the DBI driver when the statement is prepared or when attempting to bind the given arguments to buffer specifications or when the statement is executed; see the relevant DBI driver docs for more information

Implements Qore::AbstractIterator.

Implemented in Qore::SQL::SQLStatement.

## prepare()

abstract nothing Qore::SQL::AbstractSQLStatement::prepare | ( | string | sql,
|  |  | ...
| ) |  |

pure virtual

Saves an SQL statement that will be prepared and executed later, along with optional arguments.

The statement is actually only prepared when used for the first time, this is so that SQLStatement objects created with DatasourcePool objects use the DatasourcePool more efficiently, as many drivers require the actual DB API prepare call to be made on the same connection as the connection the statement will be executed on as well.

Note
  This method parses the SQL string for placeholders and bind by value tokens (`%v`); for a version of this method that does not parse the SQL string for placeholders and bind by value tokens, see AbstractSQLStatement::prepareRaw().

Parameters

  sql | The SQL string to prepare for execution on the DB server

Example:
  stmt.prepare("select * from table where id = %v");

Implemented in Qore::SQL::SQLStatement.

## prepareRaw()

abstract nothing Qore::SQL::AbstractSQLStatement::prepareRaw | ( | string | sql | ) |

pure virtual

Saves an SQL statement that will be prepared and executed later.

The statement is actually only prepared when used for the first time, this is so that SQLStatement objects created with DatasourcePool objects use the DatasourcePool more efficiently, as many drivers require the actual DB API prepare call to be made on the same connection as the connection the statement will be executed on as well.

Note
  This method does not parse the SQL string for placeholders and bind by value tokens (`%v`); for a version of this method that does parse the SQL string for placeholders and bind by value tokens, see AbstractSQLStatement::prepare().

Parameters

  sql | The SQL string to prepare for execution on the DB server

Example:
  stmt.prepareRaw("select * from table");

Implemented in Qore::SQL::SQLStatement.

## rollback()

abstract nothing Qore::SQL::AbstractSQLStatement::rollback | ( |  | ) |

pure virtual

Closes the SQLStatement, performs a transaction rollback, and releases the connection or the transaction lock according to the object used in the AbstractSQLStatement::constructor(), and closes the SQLStatement.

Example:
  stmt.rollback();

Note
  For possible exceptions; see DBI driver docs for the rollback() method

Implemented in Qore::SQL::SQLStatement.

## valid()

abstract bool Qore::SQL::AbstractSQLStatement::valid | ( |  | ) |

pure virtual

returns True if the object is currently pointing at a valid element, False if not (use when iterating with AbstractSQLStatement::next())

Returns
  True if the object is currently pointing at a valid element, False if not

Example:
  if (i.valid())
  printf("current value: %y\n", i.getValue());

Implements Qore::AbstractIterator.

Implemented in Qore::SQL::SQLStatement.