int main(int argc, char **argv) { SQLRETURN rcode; SQLHSTMT m_hstmt1; SQLSMALLINT cnt = 0; int failed = 0; use_odbc_version3 = 1; Connect(); Command(Statement, "CREATE TABLE #t1 ( k INT, c CHAR(10), vc VARCHAR(10) )"); Command(Statement, "CREATE TABLE #tmp1 (i NUMERIC(10,0) IDENTITY PRIMARY KEY, b VARCHAR(20) NULL, c INT NOT NULL)"); /* test hidden column with FOR BROWSE */ ResetStatement(); m_hstmt1 = Statement; rcode = SQLExecDirect(m_hstmt1, (SQLCHAR *) "SELECT c, b FROM #tmp1", SQL_NTS); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLExecDirect"); rcode = SQLNumResultCols(m_hstmt1, &cnt); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLNumResultCols 1"); if (cnt != 2) { fprintf(stderr, "Wrong number of columns in result set: %d\n", (int) cnt); failed = 1; } ResetStatement(); /* test hidden column with cursors*/ CheckCursor(); m_hstmt1 = Statement; rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_NONSCROLLABLE, SQL_IS_UINTEGER); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLSetStmtAttr SQL_ATTR_CURSOR_SCROLLABLE"); rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER) SQL_SENSITIVE, SQL_IS_UINTEGER); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLSetStmtAttr SQL_ATTR_CURSOR_SENSITIVITY"); rcode = SQLPrepare(m_hstmt1, (SQLCHAR *) "SELECT * FROM #t1", SQL_NTS); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLPrepare 1"); rcode = SQLExecute(m_hstmt1); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLExecute 1"); rcode = SQLNumResultCols(m_hstmt1, &cnt); CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLNumResultCols 1"); if (cnt != 3) { fprintf(stderr, "Wrong number of columns in result set: %d\n", (int) cnt); failed = 1; } Disconnect(); return failed ? 1: 0; }
CPLODBCStatement *OGRGeomediaSelectLayer::GetStatement() { if( poStmt == nullptr ) ResetStatement(); return poStmt; }
OGRDB2Statement *OGRDB2SelectLayer::GetStatement() { if( m_poStmt == NULL ) ResetStatement(); return m_poStmt; }
CPLODBCStatement *OGRMSSQLSpatialSelectLayer::GetStatement() { if( poStmt == nullptr ) ResetStatement(); return poStmt; }
CPLODBCStatement *OGRPGeoTableLayer::GetStatement() { if( poStmt == NULL ) ResetStatement(); return poStmt; }
CPLODBCStatement *OGRODBCSelectLayer::GetStatement() { if( poStmt == NULL ) ResetStatement(); return poStmt; }
OGRFeature *OGRGeoPackageLayer::GetNextFeature() { for( ; TRUE; ) { OGRFeature *poFeature; if( m_poQueryStatement == NULL ) { ResetStatement(); if (m_poQueryStatement == NULL) return NULL; } /* -------------------------------------------------------------------- */ /* Fetch a record (unless otherwise instructed) */ /* -------------------------------------------------------------------- */ if( bDoStep ) { int rc; rc = sqlite3_step( m_poQueryStatement ); if( rc != SQLITE_ROW ) { if ( rc != SQLITE_DONE ) { sqlite3_reset(m_poQueryStatement); CPLError( CE_Failure, CPLE_AppDefined, "In GetNextRawFeature(): sqlite3_step() : %s", sqlite3_errmsg(m_poDS->GetDB()) ); } ClearStatement(); return NULL; } } else bDoStep = TRUE; poFeature = TranslateFeature(m_poQueryStatement); if( poFeature == NULL ) return NULL; if( (m_poFilterGeom == NULL || FilterGeometry( poFeature->GetGeomFieldRef(m_iGeomFieldFilter) ) ) && (m_poAttrQuery == NULL || m_poAttrQuery->Evaluate( poFeature )) ) return poFeature; delete poFeature; } }
static void Test(const char *query) { int res; if (SQLPrepare(Statement, (SQLCHAR *) query, SQL_NTS) != SQL_SUCCESS) { fprintf(stderr, "Unable to prepare statement\n"); exit(1); } if (SQLExecute(Statement) != SQL_SUCCESS) { fprintf(stderr, "Unable to execute statement\n"); exit(1); } res = SQLFetch(Statement); if (res != SQL_SUCCESS && res != SQL_SUCCESS_WITH_INFO) { fprintf(stderr, "Unable to fetch row.\n"); CheckReturn(); exit(1); } if (SQLFetch(Statement) != SQL_NO_DATA) { fprintf(stderr, "Warning was returned as a result row -- bad!\n"); exit(1); } /* * Microsoft SQL Server 2000 provides a diagnostic record * associated with the second SQLFetch (which returns * SQL_NO_DATA) saying "Warning: Null value is eliminated by * an aggregate or other SET operation." * We check for "NO DM" cause unixODBC till 2.2.11 do not read * errors on SQL_NO_DATA */ if (db_is_microsoft() && tds_no_dm) { SQLCHAR output[256]; if (!SQL_SUCCEEDED(SQLGetDiagRec(SQL_HANDLE_STMT, Statement, 1, NULL, NULL, output, sizeof(output), NULL))) { fprintf(stderr, "SQLGetDiagRec should not fail\n"); exit(1); } printf("Message: %s\n", (char *) output); } ResetStatement(); }