From: <mie...@us...> - 2012-09-19 23:56:16
|
Revision: 8427 http://sourceforge.net/p/oorexx/code-0/8427 Author: miesfeld Date: 2012-09-19 23:56:13 +0000 (Wed, 19 Sep 2012) Log Message: ----------- ooSQLite - trivial comment change Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-09-18 23:43:18 UTC (rev 8426) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-09-19 23:56:13 UTC (rev 8427) @@ -3460,9 +3460,9 @@ * * Installs a user defined busy handler. * - * @param callbackObj [required] An instantiated class object with a method - * that may be invoked whenever an attempt is made to open - * a database table that another thread or process has + * @param callbackObj [required] An instantiated object with a method that + * may be invoked whenever an attempt is made to open a + * database table that another thread or process has * locked. * * However, this argument can also be .nil to indicate @@ -3489,8 +3489,8 @@ * * There can only be one busy handler installed. Setting a new busy * handler automatically clears any previously installed handler. Note - * that invoking ooSQLiteConnection::busyTimeOut() can also set or clear the - * busy handler. + * that invoking ooSQLiteConnection::busyTimeOut() can also set or + * clear the busy handler. * * The busy handler should not take any actions which modify the * database connection that invoked the busy handler. Any such actions |
From: <mie...@us...> - 2012-09-22 02:19:18
|
Revision: 8432 http://sourceforge.net/p/oorexx/code-0/8432 Author: miesfeld Date: 2012-09-22 02:19:15 +0000 (Sat, 22 Sep 2012) Log Message: ----------- ooSQLite - #1115 ooSQLite: pragma method cannot handle non-existing table See ticket [bugs:#1115] Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-09-22 02:05:29 UTC (rev 8431) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-09-22 02:19:15 UTC (rev 8432) @@ -613,7 +613,8 @@ * @param _count [IN/OUT] The column count is returned here. * * @return An array of the column names, all upper-cased on success. Null on - * error. On error an exception has been raised. + * error. On error an exception has been raised, with one exception see + * the remarks. * * @remarks Assumes the statement is valid. The caller is repsonisible for * freeing memory in the returned array, which inlcudes freeing the @@ -622,12 +623,26 @@ * Memory is allocated using sqlite3_malloc() so the returned array * must be freed with sqlite3_free(). Note that it is safe to pass a * null pointer to sqlite3_free(). + * + * NOTE: It is always possible that the statment has SQL errors or is + * one that returns no data, in which case there are no columns. We + * do not want to raise an exception for this, but we still return + * null. However, for this case we set _count to -1. In the current + * code, this function is only called when preparing a result set and + * all cases simply return an empty result set. So, simply not + * raising an exception for a column count of 0 is sufficient. */ static char **getHeadersUpper(RexxThreadContext *c, sqlite3_stmt *stmt, int *_count) { int count = sqlite3_column_count(stmt); int i = 0; + if ( count < 1 ) + { + *_count = -1; + return NULL; + } + char **headers = (char **)sqlite3_malloc(count * sizeof(char *)); if ( headers == NULL ) { |
From: <mie...@us...> - 2012-09-22 04:10:36
|
Revision: 8434 http://sourceforge.net/p/oorexx/code-0/8434 Author: miesfeld Date: 2012-09-22 04:10:34 +0000 (Sat, 22 Sep 2012) Log Message: ----------- ooSQLite - #1114 ooSQLite causes rexxpaws abnormal terminatio See ticket [bugs:#1114] Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-09-22 04:07:55 UTC (rev 8433) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-09-22 04:10:34 UTC (rev 8434) @@ -1664,12 +1664,14 @@ for ( int i = 0; i < ncols; i++ ) { - strupper(headers[i], strlen(headers[i])); + CSTRING index = strdupupr(headers[i]); + if ( index != NULL ) + { + RexxObjectPtr value = (values[i] == NULL) ? TheNilObj : c->String(values[i]); - CSTRING index = headers[i]; - RexxObjectPtr value = (values[i] == NULL) ? TheNilObj : c->String(values[i]); - - c->DirectoryPut(record, value, index); + c->DirectoryPut(record, value, index); + sqlite3_free((void *)index); + } } wholenumber_t rc = SQLITE_OK; @@ -1709,12 +1711,14 @@ for ( int i = 0; i < ncols; i++ ) { - strupper(headers[i], strlen(headers[i])); + CSTRING index = strdupupr(headers[i]); + if ( index != NULL ) + { + RexxObjectPtr value = (values[i] == NULL) ? TheNilObj : c->String(values[i]); - CSTRING index = headers[i]; - RexxObjectPtr value = (values[i] == NULL) ? TheNilObj : c->String(values[i]); - - c->SetStemElement(record, index, value); + c->SetStemElement(record, index, value); + sqlite3_free((void *)index); + } } wholenumber_t rc = SQLITE_OK; |
From: <mie...@us...> - 2012-09-25 22:59:08
|
Revision: 8438 http://sourceforge.net/p/oorexx/code-0/8438 Author: miesfeld Date: 2012-09-25 22:59:06 +0000 (Tue, 25 Sep 2012) Log Message: ----------- ooSqlite - remove debug statement Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-09-23 04:00:49 UTC (rev 8437) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-09-25 22:59:06 UTC (rev 8438) @@ -2942,7 +2942,6 @@ result = getRecordsArray(c->threadContext, stmt); break; case anArrayOfDirectories : - printf("Executing pragmaTrigger() using array of directories\n"); result = getRecordsDirectory(c->threadContext, stmt); break; default : |
From: <mie...@us...> - 2012-10-05 03:04:21
|
Revision: 8481 http://sourceforge.net/p/oorexx/code-0/8481 Author: miesfeld Date: 2012-10-05 03:04:18 +0000 (Fri, 05 Oct 2012) Log Message: ----------- ooSQLite - minor tweak to the extended err codes API Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-10-04 23:09:57 UTC (rev 8480) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-10-05 03:04:18 UTC (rev 8481) @@ -4121,7 +4121,7 @@ * result codes are always turned on in the init() method for each database * connection. */ -RexxMethod0(int, oosqlconn_extendedResultCodes) +RexxMethod1(int, oosqlconn_extendedResultCodes, logical_t, onOff) { return SQLITE_OK; } @@ -8381,7 +8381,7 @@ * The _db and onOff parameters are only present to make the routine look the * same as sqlite3_extended_result_codes() */ -RexxRoutine2(int, oosqlExtendedResultCodes_rtn, POINTER, _db, int, onOff) +RexxRoutine2(int, oosqlExtendedResultCodes_rtn, POINTER, _db, logical_t, onOff) { return SQLITE_OK; } |
From: <mie...@us...> - 2012-10-06 05:13:40
|
Revision: 8488 http://sourceforge.net/p/oorexx/code-0/8488 Author: miesfeld Date: 2012-10-06 05:13:31 +0000 (Sat, 06 Oct 2012) Log Message: ----------- ooSQLite - Use stems to return data for oosqlTableColumnMetadata(), oosqlDbStatus(), and oosqlStatus(). ooSQLiteConnection::tableColumnMetadata() the db name argument should have been optional. Fix that, and move it to the end of the argument list since it's optional. Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-10-06 05:07:54 UTC (rev 8487) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-10-06 05:13:31 UTC (rev 8488) @@ -973,16 +973,75 @@ } +int genStatus(RexxThreadContext *c, int param, RexxObjectPtr _result, logical_t reset, size_t pos, bool isMethod) +{ + if ( isMethod && ! c->IsDirectory(_result) ) + { + wrongClassException(c, pos, "Directory", _result); + return SQLITE_MISUSE; + } + else if ( ! c->IsStem(_result) ) + { + wrongClassException(c, pos, "Stem", _result); + return SQLITE_MISUSE; + } + + int cur; + int hiwtr; + + int rc = sqlite3_status(param, &cur, &hiwtr, (int)reset); + + if ( rc == SQLITE_OK ) + { + if ( isMethod ) + { + RexxDirectoryObject result = (RexxDirectoryObject)_result; + + c->DirectoryPut(result, c->StringSize(cur), "CURRENT"); + c->DirectoryPut(result, c->StringSize(hiwtr), "HIGHWATER"); + } + else + { + RexxStemObject result = (RexxStemObject)_result; + + c->SetStemElement(result, "CURRENT", c->StringSize(cur)); + c->SetStemElement(result, "HIGHWATER", c->StringSize(hiwtr)); + } + } + + return rc; +} + +/** + * Generic implementation of sqlite3_db_status for the OO and classic + * interfaces. + * + * @param c + * @param db + * @param param + * @param _result + * @param reset + * @param pos + * + * @return int + * + * @remarks We cheat here in determining if we are called by a routine or a + * method. We know that the arg pos is 2 for a method and 3 for a + * routine. + */ int genDbStatus(RexxThreadContext *c, sqlite3 *db, int param, RexxObjectPtr _result, logical_t reset, size_t pos) { - if ( ! c->IsDirectory(_result) ) + if ( pos == 2 && ! c->IsDirectory(_result) ) { wrongClassException(c, pos, "Directory", _result); return SQLITE_MISUSE; } + else if ( ! c->IsStem(_result) ) + { + wrongClassException(c, pos, "Stem", _result); + return SQLITE_MISUSE; + } - RexxDirectoryObject result = (RexxDirectoryObject)_result; - int cur; int hiwtr; @@ -990,24 +1049,59 @@ if ( rc == SQLITE_OK ) { - c->DirectoryPut(result, c->StringSize(cur), "CURRENT"); - c->DirectoryPut(result, c->StringSize(hiwtr), "HIGHWATER"); + if ( pos == 2 ) + { + RexxDirectoryObject result = (RexxDirectoryObject)_result; + + c->DirectoryPut(result, c->StringSize(cur), "CURRENT"); + c->DirectoryPut(result, c->StringSize(hiwtr), "HIGHWATER"); + } + else + { + RexxStemObject result = (RexxStemObject)_result; + + c->SetStemElement(result, "CURRENT", c->StringSize(cur)); + c->SetStemElement(result, "HIGHWATER", c->StringSize(hiwtr)); + } } return rc; } +/** + * Generic implemenation of tableColumnMetaData used for either the object + * orientated interface, or the classic Rexx interface. + * + * @param c + * @param db + * @param dbName + * @param tableName + * @param colName + * @param _results + * @param pos + * + * @return int + * + * @note dbName can be NULL, this is acceptable to SQLite. + * + * @remarks We cheat here in the test for classic Rexx or not. We know that + * the 'results' object is at arg position 3 if called from a method + * and at arg position 4 if called from a routine. + */ int genTableColumnMetadata(RexxThreadContext *c, sqlite3 *db, CSTRING dbName, CSTRING tableName, CSTRING colName, RexxObjectPtr _results, size_t pos) { - if ( ! c->IsDirectory(_results) ) + if ( pos == 3 && ! c->IsDirectory(_results) ) { wrongClassException(c, pos, "Directory", _results); return SQLITE_MISUSE; } + else if ( ! c->IsStem(_results) ) + { + wrongClassException(c, pos, "Stem", _results); + return SQLITE_MISUSE; + } - RexxDirectoryObject results = (RexxDirectoryObject)_results; - char const *dataType; char const *collSeq; int notNull; @@ -1028,11 +1122,26 @@ if ( rc == SQLITE_OK ) { - c->DirectoryPut(results, c->String(dataType), "DATATYPE"); - c->DirectoryPut(results, c->String(collSeq), "COLLATIONSEQUENCE"); - c->DirectoryPut(results, c->Logical(notNull), "NOTNULL"); - c->DirectoryPut(results, c->Logical(primaryKey), "PRIMARYKEY"); - c->DirectoryPut(results, c->Logical(autoInc), "AUTOINCREMENT"); + if ( pos == 3 ) + { + RexxDirectoryObject results = (RexxDirectoryObject)_results; + + c->DirectoryPut(results, c->String(dataType), "DATATYPE"); + c->DirectoryPut(results, c->String(collSeq), "COLLATIONSEQUENCE"); + c->DirectoryPut(results, c->Logical(notNull), "NOTNULL"); + c->DirectoryPut(results, c->Logical(primaryKey), "PRIMARYKEY"); + c->DirectoryPut(results, c->Logical(autoInc), "AUTOINCREMENT"); + } + else + { + RexxStemObject results = (RexxStemObject)_results; + + c->SetStemElement(results, "DATATYPE", c->String(dataType)); + c->SetStemElement(results, "COLLATIONSEQUENCE", c->String(collSeq)); + c->SetStemElement(results, "NOTNULL", c->Logical(notNull)); + c->SetStemElement(results, "PRIMARYKEY", c->Logical(primaryKey)); + c->SetStemElement(results, "AUTOINCREMENT", c->Logical(autoInc)); + } } return rc; @@ -2535,26 +2644,7 @@ */ RexxMethod3(int, oosql_status_cls, int, param, RexxObjectPtr, _result, OPTIONAL_logical_t, reset) { - if ( ! context->IsDirectory(_result) ) - { - wrongClassException(context->threadContext, 2, "Directory", _result); - return SQLITE_MISUSE; - } - - RexxDirectoryObject result = (RexxDirectoryObject)_result; - - int cur = -1; - int hiwtr = -1; - - int rc = sqlite3_status(param, &cur, &hiwtr, (int)reset); - - if ( rc == SQLITE_OK ) - { - context->DirectoryPut(result, context->WholeNumber(cur), "CURRENT"); - context->DirectoryPut(result, context->WholeNumber(hiwtr), "HIGHWATER"); - } - - return rc; + return genStatus(context->threadContext, param, _result, reset, 2, true); } /** ooSQLite::threadSafe() @@ -4570,9 +4660,12 @@ /** ooSQLiteConnection::tableColumnMetadata() * * + * @note The parameter order here is slightly switched from + * sqlite3_table_column_metadata() to put the opitonal dbName after + * results, so that optional arguments are placed at the end. */ -RexxMethod5(int, oosqlconn_tableColumnMetadata, CSTRING, dbName, CSTRING, tableName, CSTRING, colName, - RexxObjectPtr, results, CSELF, pCSelf) +RexxMethod5(int, oosqlconn_tableColumnMetadata, CSTRING, tableName, CSTRING, colName, + RexxObjectPtr, results, OPTIONAL_CSTRING, dbName, CSELF, pCSelf) { pCooSQLiteConn pConn = requiredDB(context, pCSelf); if ( pConn == NULL ) @@ -4580,7 +4673,12 @@ return SQLITE_MISUSE; } - return genTableColumnMetadata(context->threadContext, pConn->db, dbName, tableName, colName, results, 4); + if ( argumentOmitted(4) || strlen(dbName) < 1 ) + { + dbName = NULL; + } + + return genTableColumnMetadata(context->threadContext, pConn->db, dbName, tableName, colName, results, 3); } @@ -8156,8 +8254,7 @@ /** oosqlDbStatus() * */ -RexxRoutine5(int, oosqlDbStatus_rtn, POINTER, _db, int, param, OPTIONAL_CSTRING, _cur, OPTIONAL_CSTRING, _hiwtr, - OPTIONAL_logical_t, reset) +RexxRoutine4(int, oosqlDbStatus_rtn, POINTER, _db, int, param, RexxObjectPtr, _result, OPTIONAL_logical_t, reset) { sqlite3 *db = routineDB(context, _db, 1); if ( db == NULL ) @@ -8165,21 +8262,7 @@ return SQLITE_MISUSE; } - int cur; - int hiwtr; - - if ( argumentOmitted(3) ) _cur = "__current"; - if ( argumentOmitted(4) ) _hiwtr = "__highWater"; - - int rc = sqlite3_db_status(db, param, &cur, &hiwtr, (int)reset); - - if ( rc == SQLITE_OK ) - { - context->SetContextVariable(_cur, context->WholeNumber(cur)); - context->SetContextVariable(_hiwtr, context->WholeNumber(hiwtr)); - } - - return rc; + return genDbStatus(context->threadContext, db, param, _result, reset, 3); } /** oosqlErrCode() @@ -8245,7 +8328,7 @@ * arrays or an array of directories. This argument is * ignored if doCallback is false. * - * @param mthName The routine name in the Rexx progarm that will be + * @param rtnName The routine name in the Rexx progarm that will be * called each time the SQL produces a row. This argument * is ignored unless doCallBack is not omitted and is * true. @@ -9115,23 +9198,9 @@ * Retrieves runtime status information about the performance of SQLite, and * optionally resets various highwater marks. */ -RexxRoutine4(int, oosqlStatus_rtn, int, param, OPTIONAL_CSTRING, _cur, OPTIONAL_CSTRING, _hiwtr, OPTIONAL_logical_t, reset) +RexxRoutine3(int, oosqlStatus_rtn, int, param, RexxObjectPtr, result, OPTIONAL_logical_t, reset) { - int cur = -1; - int hiwtr = -1; - - if ( argumentOmitted(2) ) _cur = "__current"; - if ( argumentOmitted(3) ) _hiwtr = "__highWater"; - - int rc = sqlite3_status(param, &cur, &hiwtr, (int)reset); - - if ( rc == SQLITE_OK ) - { - context->SetContextVariable(_cur, context->WholeNumber(cur)); - context->SetContextVariable(_hiwtr, context->WholeNumber(hiwtr)); - } - - return rc; + return genStatus(context->threadContext, param, result, reset, 2, false); } /** oosqlStep() @@ -9201,14 +9270,16 @@ /** oosqlTableColumnMetadata() * + * @param results A Stem object in which the metadata is returned. * + * @return OK on success, othewise an error code. + * * @note The parameter order here is slightly switched from * sqlite3_table_column_metadata() to put the opitonal dbName after - * colName so that all the optional parameters are placed at the end. + * results, so that optional arguments are placed at the end. */ -RexxRoutine9(int, oosqlTableColumnMetadata_rtn, POINTER, _db, CSTRING, tableName, CSTRING, colName, - OPTIONAL_CSTRING, dbName, OPTIONAL_CSTRING, _dataType, OPTIONAL_CSTRING, _collationSequence, - OPTIONAL_CSTRING, _notNull, OPTIONAL_CSTRING, _primaryKey, OPTIONAL_CSTRING, _autoIncrement) +RexxRoutine5(int, oosqlTableColumnMetadata_rtn, POINTER, _db, CSTRING, tableName, CSTRING, colName, RexxObjectPtr, results, + OPTIONAL_CSTRING, dbName) { sqlite3 *db = routineDB(context, _db, 1); if ( db == NULL ) @@ -9216,46 +9287,12 @@ return SQLITE_MISUSE; } - if ( argumentOmitted(4) || strlen(dbName) < 1 ) + if ( argumentOmitted(5) || strlen(dbName) < 1 ) { dbName = NULL; } - char const *dataType; - char const *collSeq; - int notNull; - int primaryKey; - int autoInc; - - int rc = sqlite3_table_column_metadata( - db, /* Connection handle */ - dbName, /* Database name or NULL */ - tableName, /* Table name */ - colName, /* Column name */ - &dataType, /* OUTPUT: Declared data type */ - &collSeq, /* OUTPUT: Collation sequence name */ - ¬Null, /* OUTPUT: True if NOT NULL constraint exists */ - &primaryKey, /* OUTPUT: True if column part of PK */ - &autoInc /* OUTPUT: True if column is auto-increment */ - ); - - - if ( rc == SQLITE_OK ) - { - if ( argumentOmitted(5) ) _dataType = "__dataType"; - if ( argumentOmitted(6) ) _collationSequence = "__collationSequence"; - if ( argumentOmitted(7) ) _notNull = "__notNull"; - if ( argumentOmitted(8) ) _primaryKey = "__primaryKey"; - if ( argumentOmitted(9) ) _autoIncrement = "__autoIncrement"; - - context->SetContextVariable(_dataType , context->String(dataType) ); - context->SetContextVariable(_collationSequence, context->String(collSeq) ); - context->SetContextVariable(_notNull , context->Logical(notNull) ); - context->SetContextVariable(_primaryKey , context->Logical(primaryKey)); - context->SetContextVariable(_autoIncrement , context->Logical(autoInc) ); - } - - return rc; + return genTableColumnMetadata(context->threadContext, db, dbName, tableName, colName, results, 4); } /** oosqlThreadSafe() |
From: <mie...@us...> - 2012-10-20 16:13:50
|
Revision: 8519 http://sourceforge.net/p/oorexx/code-0/8519 Author: miesfeld Date: 2012-10-20 16:13:26 +0000 (Sat, 20 Oct 2012) Log Message: ----------- #1133 Abnormal termination in oosqlexec() See ticket [Bugs:#1133] Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-10-20 16:10:54 UTC (rev 8518) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-10-20 16:13:26 UTC (rev 8519) @@ -8466,7 +8466,7 @@ if ( doCallback ) { - if ( argumentExists(3) ) + if ( argumentExists(4) ) { if ( format < anArrayOfArrays || format > aStemOfStems ) { @@ -8486,7 +8486,7 @@ cbc.callbackContext = context->threadContext; - if ( argumentExists(4) ) + if ( argumentExists(5) ) { cbc.callbackRtn = getCallerRoutine(context, rtnName); if ( cbc.callbackRtn == NULLOBJECT ) |
From: <mie...@us...> - 2012-11-08 00:18:58
|
Revision: 8571 http://sourceforge.net/p/oorexx/code-0/8571 Author: miesfeld Date: 2012-11-08 00:18:56 +0000 (Thu, 08 Nov 2012) Log Message: ----------- #1142 ooSQLite callback functions can use larger than needed memory resources See ticket [Bugs:#1142] Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2012-11-07 23:55:10 UTC (rev 8570) +++ incubator/ooSQLite/src/ooSQLite.cpp 2012-11-08 00:18:56 UTC (rev 8571) @@ -1326,10 +1326,16 @@ } } - args = c->ArrayOfFour(c->WholeNumber(op), c->String(str1), c->String(str2), c->String(str3)); + RexxObjectPtr rxOp = c->WholeNumber(op); + RexxObjectPtr rxStr1 = c->String(str1); + RexxObjectPtr rxStr2 = c->String(str2); + RexxObjectPtr rxStr3 = c->String(str3); + RexxObjectPtr rxStr4 = c->String(str4); - c->ArrayPut(args, c->String(str4), 5); + args = c->ArrayOfFour(rxOp, rxStr1, rxStr2, rxStr3); + c->ArrayPut(args, rxStr4, 5); + if ( d->userData == NULL ) { c->ArrayPut(args, TheNilObj, 6); @@ -1356,6 +1362,14 @@ rc = SQLITE_DENY; } + c->ReleaseLocalReference(rxOp); + c->ReleaseLocalReference(rxStr1); + c->ReleaseLocalReference(rxStr2); + c->ReleaseLocalReference(rxStr3); + c->ReleaseLocalReference(rxStr4); + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1418,6 +1432,10 @@ rc = 0; } + c->ReleaseLocalReference(count); + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1481,6 +1499,9 @@ rc = 1; } + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1523,13 +1544,16 @@ } } + RexxObjectPtr rxStmt = c->String(statement); + RexxObjectPtr rxNano = c->UnsignedInt64(nanosecs); + if ( d->userData == NULL ) { - args = c->ArrayOfThree(c->String(statement), c->UnsignedInt64(nanosecs), TheNilObj); + args = c->ArrayOfThree(rxStmt, rxNano, TheNilObj); } else { - args = c->ArrayOfThree(c->String(statement), c->UnsignedInt64(nanosecs), d->userData); + args = c->ArrayOfThree(rxStmt, rxNano, d->userData); } if ( isMethod ) @@ -1545,6 +1569,11 @@ // else. replyIsGood(c, reply, &rc, d->callbackMethod, d->routineName, isMethod); + c->ReleaseLocalReference(rxStmt); + c->ReleaseLocalReference(rxNano); + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1604,6 +1633,9 @@ rc = 1; } + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1665,6 +1697,9 @@ // else. replyIsGood(c, reply, &rc, d->callbackMethod, d->routineName, isMethod); + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1707,13 +1742,15 @@ } } + RexxObjectPtr rxStmt = c->String(statement); + if ( d->userData == NULL ) { - args = c->ArrayOfTwo(c->String(statement), TheNilObj); + args = c->ArrayOfTwo(rxStmt, TheNilObj); } else { - args = c->ArrayOfTwo(c->String(statement), d->userData); + args = c->ArrayOfTwo(rxStmt, d->userData); } if ( isMethod ) @@ -1729,6 +1766,10 @@ // else. replyIsGood(c, reply, &rc, d->callbackMethod, d->routineName, isMethod); + c->ReleaseLocalReference(rxStmt); + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); @@ -1771,8 +1812,13 @@ } } - args = c->ArrayOfFour(c->WholeNumber(op), c->String(dbName), c->String(tableName), c->Int64(rowID)); + RexxObjectPtr rxOp = c->WholeNumber(op); + RexxObjectPtr rxDbName = c->String(dbName); + RexxObjectPtr rxTableName = c->String(tableName); + RexxObjectPtr rxRowID = c->Int64(rowID); + args = c->ArrayOfFour(rxOp, rxDbName, rxTableName, rxRowID); + if ( d->userData == NULL ) { c->ArrayPut(args, TheNilObj, 5); @@ -1795,6 +1841,13 @@ // routine has problems, but don't do anything else. replyIsGood(c, reply, &rc, d->callbackMethod, d->routineName, isMethod); + c->ReleaseLocalReference(rxOp); + c->ReleaseLocalReference(rxDbName); + c->ReleaseLocalReference(rxTableName); + c->ReleaseLocalReference(rxRowID); + c->ReleaseLocalReference(reply); + c->ReleaseLocalReference(args); + if ( c != d->callbackContext ) { c->DetachThread(); |
From: <mie...@us...> - 2013-01-31 16:22:56
|
Revision: 8912 http://sourceforge.net/p/oorexx/code-0/8912 Author: miesfeld Date: 2013-01-31 16:22:53 +0000 (Thu, 31 Jan 2013) Log Message: ----------- ooSQLite - #1158 ooSQLite ooSQLiteConnection tableColumnMetaData Catch22 error Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2013-01-31 04:37:42 UTC (rev 8911) +++ incubator/ooSQLite/src/ooSQLite.cpp 2013-01-31 16:22:53 UTC (rev 8912) @@ -1201,7 +1201,7 @@ wrongClassException(c, pos, "Directory", _results); return SQLITE_MISUSE; } - else if ( ! c->IsStem(_results) ) + else if ( pos == 4 && ! c->IsStem(_results) ) { wrongClassException(c, pos, "Stem", _results); return SQLITE_MISUSE; |
From: <mie...@us...> - 2013-03-28 23:19:34
|
Revision: 9145 http://sourceforge.net/p/oorexx/code-0/9145 Author: miesfeld Date: 2013-03-28 23:19:32 +0000 (Thu, 28 Mar 2013) Log Message: ----------- ooSQLite - fix problem with populating arrays when some values are SQL NULL Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2013-03-27 23:47:47 UTC (rev 9144) +++ incubator/ooSQLite/src/ooSQLite.cpp 2013-03-28 23:19:32 UTC (rev 9145) @@ -2039,7 +2039,14 @@ for ( int i = 0; i < ncols; i++ ) { - c->ArrayAppendString(header, headers[i], strlen(headers[i])); + if ( values[i] == NULL ) + { + c->ArrayPut(record, d->nullObj, i + 1); + } + else + { + c->ArrayAppendString(record, values[i], strlen(values[i])); + } } c->ArrayPut(rows, header, 1); @@ -4647,6 +4654,7 @@ } cbc.callbackContext = context->threadContext; + cbc.nullObj = pConn->nullObj; if ( argumentExists(4) ) { |
From: <mie...@us...> - 2013-07-05 02:03:18
|
Revision: 9342 http://sourceforge.net/p/oorexx/code-0/9342 Author: miesfeld Date: 2013-07-05 02:03:15 +0000 (Fri, 05 Jul 2013) Log Message: ----------- ooSQLite - fix missing printf specifier Modified Paths: -------------- incubator/ooSQLite/src/ooSQLite.cpp Modified: incubator/ooSQLite/src/ooSQLite.cpp =================================================================== --- incubator/ooSQLite/src/ooSQLite.cpp 2013-07-04 18:30:45 UTC (rev 9341) +++ incubator/ooSQLite/src/ooSQLite.cpp 2013-07-05 02:03:15 UTC (rev 9342) @@ -9830,7 +9830,7 @@ { char buf[256]; - snprintf(buf, 256, "the number of automatically registered % can not exceed %d", type, n); + snprintf(buf, 256, "the number of automatically registered %s can not exceed %d", type, n); pcext->lastErrCode = c->Int32(SQLITE_MISUSE); pcext->lastErrMsg = c->String(buf); |