BulkSqlUtil.qm.dox.h
// -*- mode: c++; indent-tabs-mode: nil -*-
/* BulkSqlUtil.qm Copyright 2015 - 2017 Qore Technologies, s.r.o.
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
*/
// minimum required Qore version
// require type definitions everywhere
// enable all warnings
// assume local scope for variables, do not use "$" signs
// use SqlUtil
namespace BulkSqlUtil {
class AbstractBulkOperation {
public:
public :
const OptionKeys = (
"block_size": sprintf("the row block size used for bulk DML / batch operations; default: %y", OptionDefaults.block_size),
"info_log": "a call reference / closure for informational logging",
);
const OptionDefaults = (
"block_size": 1000,
);
public:
private :
SqlUtil::AbstractTable table;
softint block_size;
hash hbuf;
hash cval;
list cval_keys;
*code info_log;
int row_count = 0;
string opname;
list ret_args = ();
public:
constructor(string name, SqlUtil::Table target, *hash opts);
constructor(string name, SqlUtil::AbstractTable target, *hash opts);
destructor();
queueData(hash data);
queueData(list l);
int size();
private:
init(*hash opts);
public:
private:
setupInitialRowColumns(hash row);
public:
private:
setupInitialRow(hash row);
public:
flush();
private:
flushIntern();
public:
discard();
nothing commit();
nothing rollback();
string getTableName();
SqlUtil::AbstractTable getTable();
Qore::SQL::AbstractDatasource getDatasource();
int getRowCount();
private:
abstract flushImpl();
public:
};
class BulkInsertOperation : public BulkSqlUtil::AbstractBulkOperation {
public:
private :
SQLStatement stmt;
*code rowcode;
hash static_ret_expr;
public:
constructor(SqlUtil::Table target, *hash opts) ;
constructor(SqlUtil::AbstractTable target, *hash opts) ;
setRowCode(*code rowc);
private:
init(*hash opts);
public:
private:
setupInitialRowColumns(hash row);
public:
private:
setupInitialRow(hash row);
public:
private:
setupStaticRowValues(reference<hash> row);
public:
private:
flushImpl();
public:
};
class BulkUpsertOperation : public BulkSqlUtil::AbstractBulkOperation {
public:
private :
// upsert strategy to use
int upsert_strategy;
// upsert closure
code upsert;
public:
constructor(SqlUtil::Table target, *hash opts) ;
constructor(SqlUtil::AbstractTable target, *hash opts) ;
private:
init(*hash opts);
public:
private:
flushImpl();
public:
};
};
BulkSqlUtil::AbstractBulkOperation::cval
hash cval
"constant" row values; must be equal in all calls to queueData
Definition: BulkSqlUtil.qm.dox.h:149
BulkSqlUtil::AbstractBulkOperation::info_log
*code info_log
an optional info logging callback; must accept a sprintf()-style format specifier and optional argume...
Definition: BulkSqlUtil.qm.dox.h:155
BulkSqlUtil::BulkInsertOperation::constructor
constructor(SqlUtil::Table target, *hash opts)
creates the object from the supplied arguments
BulkSqlUtil::AbstractBulkOperation::getTable
SqlUtil::AbstractTable getTable()
returns the underlying SqlUtil::AbstractTable object
sprintf
string sprintf(string fmt,...)
SqlUtil::AbstractTable
BulkSqlUtil::BulkUpsertOperation::constructor
constructor(SqlUtil::Table target, *hash opts)
creates the object from the supplied arguments
BulkSqlUtil::BulkUpsertOperation::flushImpl
flushImpl()
executes bulk DML upserts in the database with internally queued data
BulkSqlUtil::AbstractBulkOperation::getDatasource
Qore::SQL::AbstractDatasource getDatasource()
returns the AbstractDatasource object associated with this object
BulkSqlUtil::AbstractBulkOperation::flushImpl
abstract flushImpl()
flushes queued data to the database
BulkSqlUtil::AbstractBulkOperation::queueData
queueData(hash data)
queues row data in the block buffer; the block buffer is flushed to the DB if the buffer size reaches...
BulkSqlUtil::AbstractBulkOperation::discard
discard()
discards any buffered batched data; this method should be called before destroying the object if an e...
BulkSqlUtil::AbstractBulkOperation::setupInitialRow
setupInitialRow(hash row)
sets up the block buffer given the initial template row for inserting
BulkSqlUtil::BulkInsertOperation::setupInitialRow
setupInitialRow(hash row)
sets up support for "returning" insert options for any possible rowcode member
BulkSqlUtil::AbstractBulkOperation::row_count
int row_count
row count
Definition: BulkSqlUtil.qm.dox.h:158
BulkSqlUtil::BulkUpsertOperation
base class for bulk DML upsert operations
Definition: BulkSqlUtil.qm.dox.h:619
BulkSqlUtil::BulkInsertOperation::setupInitialRowColumns
setupInitialRowColumns(hash row)
sets up the block buffer given the initial template hash of lists for inserting
BulkSqlUtil::AbstractBulkOperation::OptionKeys
const OptionKeys
option keys for this object
Definition: BulkSqlUtil.qm.dox.h:126
BulkSqlUtil
the BulkSqlUtil namespace contains all the definitions in the BulkSqlUtil module
Definition: BulkSqlUtil.qm.dox.h:70
Qore::SQL::AbstractDatasource
BulkSqlUtil::AbstractBulkOperation::getTableName
string getTableName()
returns the table name
BulkSqlUtil::BulkInsertOperation::static_ret_expr
hash static_ret_expr
hash of "returning" arguments
Definition: BulkSqlUtil.qm.dox.h:472
list
list list(...)
BulkSqlUtil::BulkInsertOperation::setRowCode
setRowCode(*code rowc)
sets a closure or call reference that will be called when data has been sent to the database and all ...
BulkSqlUtil::AbstractBulkOperation::flushIntern
flushIntern()
flushes queued data to the database
BulkSqlUtil::BulkUpsertOperation::init
init(*hash opts)
common constructor initialization
BulkSqlUtil::BulkInsertOperation::stmt
SQLStatement stmt
statement for DML
Definition: BulkSqlUtil.qm.dox.h:466
BulkSqlUtil::BulkInsertOperation
base class for bulk DML insert operations
Definition: BulkSqlUtil.qm.dox.h:461
BulkSqlUtil::AbstractBulkOperation::rollback
nothing rollback()
discards any queued data and rolls back the transaction
BulkSqlUtil::AbstractBulkOperation::constructor
constructor(string name, SqlUtil::Table target, *hash opts)
creates the object from the supplied arguments
BulkSqlUtil::AbstractBulkOperation::getRowCount
int getRowCount()
returns the affected row count
BulkSqlUtil::AbstractBulkOperation::opname
string opname
operation name
Definition: BulkSqlUtil.qm.dox.h:161
BulkSqlUtil::AbstractBulkOperation::setupInitialRowColumns
setupInitialRowColumns(hash row)
sets up the block buffer given the initial template hash of lists for inserting
BulkSqlUtil::AbstractBulkOperation::commit
nothing commit()
flushes any queued data and commits the transaction
BulkSqlUtil::AbstractBulkOperation::table
SqlUtil::AbstractTable table
the target table object
Definition: BulkSqlUtil.qm.dox.h:140
BulkSqlUtil::BulkInsertOperation::rowcode
*code rowcode
per-row Closures or Call References for inserts
Definition: BulkSqlUtil.qm.dox.h:469
BulkSqlUtil::AbstractBulkOperation::destructor
destructor()
throws an exception if there is data pending in the internal row data cache; make sure to call flush(...
BulkSqlUtil::AbstractBulkOperation::OptionDefaults
const OptionDefaults
default option values
Definition: BulkSqlUtil.qm.dox.h:132
BulkSqlUtil::AbstractBulkOperation::cval_keys
list cval_keys
"constant" row value keys
Definition: BulkSqlUtil.qm.dox.h:152
BulkSqlUtil::BulkInsertOperation::flushImpl
flushImpl()
inserts internally-queued queued data in the database with bulk DML operations
BulkSqlUtil::AbstractBulkOperation::flush
flush()
flushes any remaining batched data to the database; this method should always be called before commit...
SqlUtil::Table
BulkSqlUtil::AbstractBulkOperation
base class for bulk DML operations
Definition: BulkSqlUtil.qm.dox.h:121
BulkSqlUtil::AbstractBulkOperation::ret_args
list ret_args
list of "returning" columns
Definition: BulkSqlUtil.qm.dox.h:164
BulkSqlUtil::BulkInsertOperation::init
init(*hash opts)
common constructor initialization
BulkSqlUtil::AbstractBulkOperation::size
int size()
returns the current size of the cache as a number of rows
hash
hash hash(object obj)
BulkSqlUtil::AbstractBulkOperation::hbuf
hash hbuf
buffer for bulk operations
Definition: BulkSqlUtil.qm.dox.h:146
BulkSqlUtil::AbstractBulkOperation::init
init(*hash opts)
common constructor initialization
BulkSqlUtil::AbstractBulkOperation::block_size
softint block_size
bulk operation block size
Definition: BulkSqlUtil.qm.dox.h:143