/*- * Copyright 2007 Guram Dukashvili * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ //--------------------------------------------------------------------------- #include //--------------------------------------------------------------------------- namespace adicpp { //--------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- ODBCDatabase::~ODBCDatabase() { } //--------------------------------------------------------------------------- ODBCDatabase::ODBCDatabase() { static_cast(this)->attach(*this); } //--------------------------------------------------------------------------- void ODBCDatabase::exceptionHandler(ksys::Exception * e) { static_cast(this)->staticExceptionHandler(e); } //--------------------------------------------------------------------------- Statement * ODBCDatabase::newStatement() { return newObject(); } //--------------------------------------------------------------------------- Statement * ODBCDatabase::newAttachedStatement() { ksys::AutoPtr p(newObject()); p->attach(*this); return p.ptr(NULL); } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::create() { static_cast(this)->create(); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::drop() { static_cast(this)->drop(); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::attach() { static_cast(this)->attach(); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::detach() { static_cast(this)->detach(); return this; } //--------------------------------------------------------------------------- bool ODBCDatabase::attached() { return static_cast(this)->attached(); } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::isolation(const utf8::String & isolation) { static_cast(this)->isolation(isolation); return this; } //--------------------------------------------------------------------------- utf8::String ODBCDatabase::isolation() { return static_cast(this)->isolation(); } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::start() { static_cast(this)->start(); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::rollback() { static_cast(this)->rollback(); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::commit() { static_cast(this)->commit(); return this; } //--------------------------------------------------------------------------- bool ODBCDatabase::active() { return static_cast(this)->active(); } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::clearParams() { newObjectV1C2(ENOSYS,__PRETTY_FUNCTION__); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::addParam(const utf8::String & name, const ksys::Mutant & value) { newObjectV1C2(ENOSYS,__PRETTY_FUNCTION__); return this; } //--------------------------------------------------------------------------- ODBCDatabase * ODBCDatabase::name(const utf8::String & name) { static_cast(this)->connection(name); return this; } //--------------------------------------------------------------------------- utf8::String ODBCDatabase::name() { return static_cast(this)->connection(); } //--------------------------------------------------------------------------- bool ODBCDatabase::separateDBName(const utf8::String & name, utf8::String & hostName, utf8::String & dbName, uintptr_t & port) { newObjectV1C2(ENOSYS,__PRETTY_FUNCTION__); return false; } //--------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////// //--------------------------------------------------------------------------- ODBCStatement::~ODBCStatement() { } //--------------------------------------------------------------------------- ODBCStatement::ODBCStatement() { } //--------------------------------------------------------------------------- Database * ODBCStatement::database() { return dynamic_cast(static_cast(this)->database()); } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::attach(Database & database) { ODBCDatabase * p = dynamic_cast(&database); if( p == NULL ) newObjectV1C2(EINVAL, __PRETTY_FUNCTION__)->throwSP(); static_cast(this)->attach(*p); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::detach() { static_cast(this)->detach(); return this; } //--------------------------------------------------------------------------- bool ODBCStatement::attached() { return static_cast(this)->attached(); } //--------------------------------------------------------------------------- bool ODBCStatement::prepared() { return static_cast(this)->prepared(); } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::prepare() { static_cast(this)->prepare(); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::unprepare() { static_cast(this)->unprepare(); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::execute() { static_cast(this)->execute(); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::execute(const utf8::String & sqlTextImm) { static_cast(this)->execute(sqlTextImm); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::text(const utf8::String & sqlText) { static_cast(this)->sqlText(sqlText); return this; } //--------------------------------------------------------------------------- utf8::String ODBCStatement::text() { return static_cast(this)->sqlText(); } //--------------------------------------------------------------------------- uintptr_t ODBCStatement::paramCount() { return static_cast(this)->params().count(); } //--------------------------------------------------------------------------- intptr_t ODBCStatement::paramIndex(const utf8::String & name,bool noThrow) { /*intptr_t i = static_cast(this)->params().paramIndex(name); if( i < 0 && !noThrow ) newObjectV1C2(EINVAL,"invalid param name: " + name + ", " + __PRETTY_FUNCTION__)->throwSP(); return i;*/ return -1; } //--------------------------------------------------------------------------- utf8::String ODBCStatement::paramName(uintptr_t i) { // return static_cast(this)->params().paramName(i); return utf8::String(); } //--------------------------------------------------------------------------- ksys::Mutant ODBCStatement::paramAsMutant(uintptr_t i) { // return static_cast(this)->paramAsMutant(i); return utf8::String(); } //--------------------------------------------------------------------------- ksys::Mutant ODBCStatement::paramAsMutant(const utf8::String & name) { // return static_cast(this)->paramAsMutant(name); return ksys::Mutant(); } //--------------------------------------------------------------------------- utf8::String ODBCStatement::paramAsString(uintptr_t i) { // return static_cast(this)->paramAsString(i); return utf8::String(); } //--------------------------------------------------------------------------- utf8::String ODBCStatement::paramAsString(const utf8::String & name) { // return static_cast(this)->paramAsString(name); return utf8::String(); } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::paramAsMutant(uintptr_t i, const ksys::Mutant & value) { // static_cast(this)->paramAsMutant(i, value); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::paramAsMutant(const utf8::String & name, const ksys::Mutant & value) { // static_cast(this)->paramAsMutant(name, value); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::paramAsString(uintptr_t i, const utf8::String & value) { // static_cast(this)->paramAsString(i, value); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::paramAsString(const utf8::String & name, const utf8::String & value) { // static_cast(this)->paramAsString(name, value); return this; } //--------------------------------------------------------------------------- bool ODBCStatement::fetch() { // return static_cast(this)->values().fetch(); return false; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::fetchAll() { // static_cast(this)->values().fetchAll(); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::selectRow(uintptr_t i) { // static_cast(this)->values().selectRow(i); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::selectFirstRow() { // static_cast(this)->values().selectFirst(); return this; } //--------------------------------------------------------------------------- ODBCStatement * ODBCStatement::selectLastRow() { // static_cast(this)->values().selectLast(); return this; } //--------------------------------------------------------------------------- uintptr_t ODBCStatement::rowCount() { // return static_cast(this)->values().rowCount(); return 0; } //--------------------------------------------------------------------------- intptr_t ODBCStatement::rowIndex() { // return static_cast(this)->values().rowIndex(); return -1; } //--------------------------------------------------------------------------- ksys::Mutant ODBCStatement::valueAsMutant(uintptr_t i) { // return static_cast(this)->valueAsMutant(i); return ksys::Mutant(); } //--------------------------------------------------------------------------- ksys::Mutant ODBCStatement::valueAsMutant(const utf8::String & name) { // return static_cast(this)->valueAsMutant(name); return ksys::Mutant(); } //--------------------------------------------------------------------------- utf8::String ODBCStatement::valueAsString(uintptr_t i) { // return static_cast(this)->valueAsString(i); return utf8::String(); } //--------------------------------------------------------------------------- utf8::String ODBCStatement::valueAsString(const utf8::String & name) { // return static_cast(this)->valueAsString(name); return utf8::String(); } //--------------------------------------------------------------------------- bool ODBCStatement::valueIsNull(uintptr_t i) { // return static_cast(this)->values().isNull(i); return false; } //--------------------------------------------------------------------------- bool ODBCStatement::valueIsNull(const utf8::String & name) { // return static_cast(this)->values().isNull(name); return false; } //--------------------------------------------------------------------------- FieldType ODBCStatement::fieldType(uintptr_t i) { /* i = static_cast(this)->values().checkValueIndex(i); i = static_cast(this)->values().field(i).type; switch( i ){ case ODBC_TYPE_DECIMAL : return ftDouble; case ODBC_TYPE_TINY : return ftChar; case ODBC_TYPE_SHORT : return ftShort; case ODBC_TYPE_LONG : return ftInt; case ODBC_TYPE_FLOAT : return ftFloat; case ODBC_TYPE_DOUBLE : return ftDouble; case ODBC_TYPE_NULL : break; case ODBC_TYPE_TIMESTAMP : return ftTime; case ODBC_TYPE_LONGLONG : return ftLong; case ODBC_TYPE_INT24 : return ftInt; case ODBC_TYPE_DATE : case ODBC_TYPE_TIME : case ODBC_TYPE_DATETIME : case ODBC_TYPE_YEAR : case ODBC_TYPE_NEWDATE : return ftTime; case ODBC_TYPE_ENUM : case ODBC_TYPE_SET : break; case ODBC_TYPE_TINY_BLOB : case ODBC_TYPE_MEDIUM_BLOB : case ODBC_TYPE_LONG_BLOB : case ODBC_TYPE_BLOB : return ftBlob; case ODBC_TYPE_VAR_STRING : case ODBC_TYPE_STRING : return ftString; case ODBC_TYPE_GEOMETRY : break; default : ; }*/ return ftUnknown; } //--------------------------------------------------------------------------- uintptr_t ODBCStatement::fieldCount() { // return static_cast(this)->values().count(); return 0; } //--------------------------------------------------------------------------- FieldType ODBCStatement::fieldType(const utf8::String & name) { // return fieldType(static_cast(this)->values().indexOfName(name)); return ftUnknown; } //--------------------------------------------------------------------------- utf8::String ODBCStatement::fieldName(uintptr_t i) { // return static_cast(this)->values().nameOfIndex(i); return utf8::String(); } //--------------------------------------------------------------------------- intptr_t ODBCStatement::fieldIndex(const utf8::String & name,bool noThrow) { /*intptr_t i = static_cast(this)->values().indexOfName(name); if( i < 0 && !noThrow ) newObjectV1C2(EINVAL,"invalid field name: " + name + ", " + __PRETTY_FUNCTION__)->throwSP(); return i;*/ return -1; } //--------------------------------------------------------------------------- } // namespace adicpp //---------------------------------------------------------------------------