bool SQLScriptRunner::ExecuteScript(shared_ptr<DALConnection> connectionObject, const String &sFile, String &sErrorMessage) { SQLScriptParser oParser(connectionObject->GetSettings(), sFile); if (!oParser.Parse(sErrorMessage)) { sErrorMessage = "Parsing of SQL script failed: " + sFile + "\r\nError:" + sErrorMessage; return false; } if (oParser.GetNoOfCommands() == 0) { sErrorMessage = "Found no SQL commands in file : " + sFile; return false; } // 30 minute timeout per statement. Should hopefully never be needed. connectionObject->SetTimeout(60 * 30); for (int i = 0; i < oParser.GetNoOfCommands(); i++) { String sCommand = oParser.GetCommand(i); if (sCommand.StartsWith(_T("@@@"))) { // Remove leading @@@. sCommand = sCommand.Mid(3); // Remove trailing @@@ sCommand = sCommand.Mid(0, sCommand.Find(_T("@@@"))); MacroParser parser(sCommand); Macro macro = parser.Parse(); if (macro.GetType() == Macro::Unknown) { sErrorMessage = "Parsing of SQL script failed. Unknown macro. " + sFile + "\r\nMacro:" + sCommand; return false; } shared_ptr<IMacroExpander> macroExpander = connectionObject->CreateMacroExpander(); if (!macroExpander->ProcessMacro(connectionObject, macro, sErrorMessage)) return false; } else { if (connectionObject->TryExecute(SQLCommand(sCommand), sErrorMessage, 0, 0) != DALConnection::DALSuccess) { return false; } } } connectionObject->SetTimeout(30); return true; }
bool AbsolutPathMPRule::rule(MPParser* parser, zia::api::DataTree& theTree) { if (parser->loadRule<ReadUntilMPRule, MPPolicyMust>(" ", theTree) ) { MPParser oParser(theTree.v()); theTree["Full"] = theTree.v(); oParser.loadRule<ReadUntilMPRule, MPPolicyMust>("?", theTree); oParser.changeMessage(theTree.v()); oParser.loadRule<ReadLastMPRule, MPPolicyMust>(".", theTree["Extention"]); return true; } return false; }
OGRFeature *OGRMSSQLSpatialLayer::GetNextRawFeature() { if( GetStatement() == NULL ) return NULL; /* -------------------------------------------------------------------- */ /* If we are marked to restart then do so, and fetch a record. */ /* -------------------------------------------------------------------- */ if( !poStmt->Fetch() ) { delete poStmt; poStmt = NULL; return NULL; } /* -------------------------------------------------------------------- */ /* Create a feature from the current result. */ /* -------------------------------------------------------------------- */ int iField; OGRFeature *poFeature = new OGRFeature( poFeatureDefn ); if( pszFIDColumn != NULL && poStmt->GetColId(pszFIDColumn) > -1 ) poFeature->SetFID( CPLAtoGIntBig(poStmt->GetColData(poStmt->GetColId(pszFIDColumn))) ); else poFeature->SetFID( iNextShapeId ); iNextShapeId++; m_nFeaturesRead++; /* -------------------------------------------------------------------- */ /* Set the fields. */ /* -------------------------------------------------------------------- */ for( iField = 0; iField < poFeatureDefn->GetFieldCount(); iField++ ) { if ( poFeatureDefn->GetFieldDefn(iField)->IsIgnored() ) continue; int iSrcField = panFieldOrdinals[iField]; const char *pszValue = poStmt->GetColData( iSrcField ); if( pszValue == NULL ) /* no value */; else if( poFeature->GetFieldDefnRef(iField)->GetType() == OFTBinary ) poFeature->SetField( iField, poStmt->GetColDataLength(iSrcField), (GByte *) pszValue ); else poFeature->SetField( iField, pszValue ); } /* -------------------------------------------------------------------- */ /* Try to extract a geometry. */ /* -------------------------------------------------------------------- */ if( pszGeomColumn != NULL && !poFeatureDefn->IsGeometryIgnored()) { int iField = poStmt->GetColId( pszGeomColumn ); const char *pszGeomText = poStmt->GetColData( iField ); OGRGeometry *poGeom = NULL; OGRErr eErr = OGRERR_NONE; if( pszGeomText != NULL ) { int nLength = poStmt->GetColDataLength( iField ); if ( nGeomColumnType == MSSQLCOLTYPE_GEOMETRY || nGeomColumnType == MSSQLCOLTYPE_GEOGRAPHY || nGeomColumnType == MSSQLCOLTYPE_BINARY) { switch ( poDS->GetGeometryFormat() ) { case MSSQLGEOMETRY_NATIVE: { OGRMSSQLGeometryParser oParser( nGeomColumnType ); eErr = oParser.ParseSqlGeometry( (unsigned char *) pszGeomText, nLength, &poGeom ); nSRSId = oParser.GetSRSId(); } break; case MSSQLGEOMETRY_WKB: case MSSQLGEOMETRY_WKBZM: eErr = OGRGeometryFactory::createFromWkb((unsigned char *) pszGeomText, NULL, &poGeom, nLength); break; case MSSQLGEOMETRY_WKT: eErr = OGRGeometryFactory::createFromWkt((char **) &pszGeomText, NULL, &poGeom); break; } } else if (nGeomColumnType == MSSQLCOLTYPE_TEXT) { eErr = OGRGeometryFactory::createFromWkt((char **) &pszGeomText, NULL, &poGeom); } } if ( eErr != OGRERR_NONE ) { const char *pszMessage; switch ( eErr ) { case OGRERR_NOT_ENOUGH_DATA: pszMessage = "Not enough data to deserialize"; break; case OGRERR_UNSUPPORTED_GEOMETRY_TYPE: pszMessage = "Unsupported geometry type"; break; case OGRERR_CORRUPT_DATA: pszMessage = "Corrupt data"; break; default: pszMessage = "Unrecognized error"; } CPLError(CE_Failure, CPLE_AppDefined, "GetNextRawFeature(): %s", pszMessage); } if( poGeom != NULL ) { if ( GetSpatialRef() ) poGeom->assignSpatialReference( poSRS ); poFeature->SetGeometryDirectly( poGeom ); } } return poFeature; }