/* * Synchronous method function prototype for * operation 'odbc_SQLSvc_GetSQLCatalogs' */ void odbc_SQLSvc_GetSQLCatalogs_sme_( /* In */ void * objtag_ , /* In */ const CEE_handle_def *call_id_ , /* Out */ ExceptionStruct *exception_ , /* In */ long dialogueId , /* In */ short APIType , /* In */ const char *catalogNm , /* In */ const char *schemaNm , /* In */ const char *tableNm , /* In */ const char *tableTypeList , /* In */ const char *columnNm , /* In */ long columnType , /* In */ long rowIdScope , /* In */ long nullable , /* In */ long uniqueness , /* In */ long accuracy , /* In */ short sqlType , /* In */ unsigned long metadataId , /* Out */ char *catStmtLabel , /* Out */ SQLItemDescList_def *outputDesc , /* Out */ ERROR_DESC_LIST_def *sqlWarning , /* Out */ long *rowsAffected , /* Out */ SQLValueList_def *outputValueList , /* Out */ long *stmtId , /* In */ const char *fkcatalogNm , /* In */ const char *fkschemaNm , /* In */ const char *fktableNm) { FUNCTION_ENTRY("odbc_SQLSvc_GetSQLCatalogs_sme_",("")); DEBUG_OUT(DEBUG_LEVEL_ENTRY,(" %#x, %#x, %#x, %#x, %d, %s, %s, %s, %s, %s, %ld, %ld, %ld, %ld, %ld, %d, %#x, %#x, %#x", objtag_, call_id_, exception_, dialogueId, APIType, catalogNm, schemaNm, tableNm, tableTypeList, columnNm, columnType, rowIdScope, nullable, uniqueness, accuracy, sqlType, catStmtLabel, outputDesc, sqlWarning)); SRVRTRACE_ENTER(FILE_SME+14); enum CATAPI_TABLE_INDEX { COLUMNS = 0, DEFAULTS, INDEXES, KEYS, OBJECTS, OBJECTUID, TABLES, VIEWS, VIEWS_USAGE, VERSIONS }; char *smdCatAPITablesList[] = { "COLUMNS", "DEFAULTS", "INDEXES", "KEYS", "OBJECTS", "OBJECTUID", "TABLES", "VIEWS", "VIEWS_USAGE", "VERSIONS" }; const char *inputParam[16]; const char *tableParam[20]; short retCode; char tmpBuf[20]; char *odbcAppVersion = "3"; char *translationId = "3"; ExceptionStruct prepareException; CLEAR_EXCEPTION(prepareException); ExceptionStruct executeException; CLEAR_EXCEPTION(executeException); ExceptionStruct fetchException; CLEAR_EXCEPTION(fetchException); ExceptionStruct closeException; CLEAR_EXCEPTION(closeException); char expCatalogNm[MAX_ANSI_NAME_LEN+1]; char expSchemaNm[MAX_ANSI_NAME_LEN+1]; char expTableNm[MAX_ANSI_NAME_LEN+1]; char expColumnNm[MAX_ANSI_NAME_LEN+1]; char expProcNm[MAX_ANSI_NAME_LEN+1]; char catalogNmNoEsc[MAX_ANSI_NAME_LEN+1]; char schemaNmNoEsc[MAX_ANSI_NAME_LEN+1]; char tableNmNoEsc[MAX_ANSI_NAME_LEN+1]; char columnNmNoEsc[MAX_ANSI_NAME_LEN+1]; char procNmNoEsc[MAX_ANSI_NAME_LEN+1]; char tableName1[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName2[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName3[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName4[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName5[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName6[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName7[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char tableName8[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char SQLObjType[2]; char inParam1[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char inParam2[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; char inParam3[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; // catalog len + '.' + schema len + '.' + table len +'\0' char inParam4[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; // catalog len + '.' + schema len + '.' + table len +'\0' char schemaVersion[10]; // Holds SQL schema version from SQL_SCHEMAVERSION_ANSI_Q1 module call char fkstmtLabel[MAX_STMT_LABEL_LEN+1]; // Used for FK methods long rowsMPFetched; // # of tables to check for MP metadata long rowsFKFetched; // # of rows fetched from foreign keys method query 1 BOOL queryMP = FALSE; // Flag whether to pull MP metadata SQLValueList_def tempOutputValueList; // Intermediate and temp output value lists // Null out tempOutputValueList CLEAR_LIST(tempOutputValueList); long curRowNo = 0; long numOfCols = 0; long curColNo = 0; char schemaNmAct[MAX_ANSI_NAME_LEN+1]; char tableNmAct[MAX_ANSI_NAME_LEN+1]; char colNmAct[MAX_ANSI_NAME_LEN+1]; char ordinalAct[10]; char obuidAct[MAX_ANSI_NAME_LEN+1]; char riuidAct[MAX_ANSI_NAME_LEN+1]; short sqlStmtType; SQLItemDescList_def lc_outputDesc; BOOL tableViewGiven = FALSE; BOOL systemTableGiven = FALSE; short namelen; SQLValue_def *SQLValue; char userCatalogNm[MAX_ANSI_NAME_LEN+1]; char guardianNm[36]; // 8+1+8+1+8+1+8+1 char inParam[MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+MAX_ANSI_NAME_LEN+3]; // catalog len + '.' + schema len + '.' + table len +'\0' char MapDataType[2] = "0"; tmpBuf[0] = '\0'; fkstmtLabel[0] = '\0'; userCatalogNm[0] = '\0'; char catStmtLabelNew[128] = {'\0'}; // Trying to support max module name length inputParam[0] = srvrGlobal->SystemCatalog; if (catalogNm == NULL) strcpy(catalogNmNoEsc,""); //strcpy(catalogNmNoEsc,srvrGlobal->DefaultCatalog); // There is an OR condition with the catalog so it can be "" else strcpy(catalogNmNoEsc, catalogNm); inputParam[1] = catalogNmNoEsc; if (schemaNm == NULL ) strcpy(schemaNmNoEsc,"%"); else strcpy(schemaNmNoEsc, schemaNm); if (schemaNm != NULL ) { convertWildcardNoEsc(metadataId, FALSE, schemaNm, schemaNmNoEsc); convertWildcard(metadataId, TRUE, schemaNm, expSchemaNm); } inputParam[2] = schemaNmNoEsc; inputParam[3] = expSchemaNm; inputParam[4] = NULL; sqlStmtType = TYPE_SELECT; DEBUG_OUT(DEBUG_LEVEL_METADATA,("SQL_SCHEMAVERSION_NEW_ANSI_Q1 tableParams= |%s|%s| inputParams= |%s|", tableParam[0],tableParam[1], inputParam[0])); if (APIType != SQL_TXN_ISOLATION) { retCode = executeAndFetchSMDQuery(objtag_, call_id_, dialogueId, APIType, "SQL_CATALOG_API", sqlStmtType, &tableParam[0], &inputParam[0], catalogNm, schemaNm, tableNm, columnNm, tableTypeList, metadataId, outputDesc, &executeException, &fetchException, sqlWarning, rowsAffected, outputValueList, stmtId); if (retCode != CEE_SUCCESS && writeServerException(retCode,exception_,&prepareException,&executeException,&fetchException) != TRUE) { odbc_SQLSvc_Close_sme_(objtag_, call_id_, &closeException, dialogueId, *stmtId, SQL_DROP, rowsAffected, sqlWarning); FUNCTION_RETURN_VOID(("executeAndFetchSMDQuery() and writeServerException() Failed")); } if (retCode == FETCH_EXCEPTION && fetchException.exception_nr == odbc_SQLSvc_FetchN_SQLNoDataFound_exn_) { odbc_SQLSvc_Close_sme_(objtag_, call_id_, &closeException, dialogueId, *stmtId, SQL_DROP, rowsAffected, sqlWarning); FUNCTION_RETURN_VOID(("executeAndFetchSMDQuery() FETCH_EXCEPTION - SQLNoDataFound Expected")); } SQLValue = (SQLValue_def *)outputValueList->_buffer; if (SQLValue->dataInd == -1) //does not come here { inputParam[0] = srvrGlobal->SystemCatalog; inputParam[2] = "SYSTEM_SCHEMA"; memset(outputValueList, NULL, sizeof(SQLValueList_def)); retCode = executeAndFetchSMDQuery(objtag_, call_id_, dialogueId, APIType, "SQL_SCHEMAVERSION_NEW_ANSI_Q1", sqlStmtType, &tableParam[0], &inputParam[0], catalogNm, schemaNm, tableNm, columnNm, tableTypeList, metadataId, outputDesc, &executeException, &fetchException, sqlWarning, rowsAffected, outputValueList, stmtId); if (retCode != CEE_SUCCESS && writeServerException(retCode,exception_,&prepareException,&executeException,&fetchException) != TRUE) { odbc_SQLSvc_Close_sme_(objtag_, call_id_, &closeException, dialogueId, *stmtId, SQL_DROP, rowsAffected, sqlWarning); FUNCTION_RETURN_VOID(("executeAndFetchSMDQuery() and writeServerException() Failed")); } if (retCode == FETCH_EXCEPTION && fetchException.exception_nr == odbc_SQLSvc_FetchN_SQLNoDataFound_exn_) { odbc_SQLSvc_Close_sme_(objtag_, call_id_, &closeException, dialogueId, *stmtId, SQL_DROP, rowsAffected, sqlWarning); FUNCTION_RETURN_VOID(("executeAndFetchSMDQuery() and writeServerException() Failed")); } SQLValue = (SQLValue_def *)outputValueList->_buffer; if (SQLValue->dataInd == -1) { exception_->exception_nr = odbc_SQLSvc_GetSQLCatalogs_ParamError_exn_; exception_->u.ParamError.ParamDesc = SQLSVC_EXCEPTION_INVALID_SCHEMA_VERSION; FUNCTION_RETURN_VOID(("SQLValue->dataInd == -1")); } } } FUNCTION_RETURN_VOID((NULL)); }
void SearchContext::searchProc() { int id = searchID_; HANDLE findHandle = INVALID_HANDLE_VALUE; StringList paths; paths = params_.paths; RegexList filespecRegexes; pcre *matchRegex = NULL; directoriesSearched_ = 0; directoriesSkipped_ = 0; filesSearched_ = 0; filesSkipped_ = 0; filesWithHits_ = 0; linesWithHits_ = 0; hits_ = 0; unsigned int startTick = GetTickCount(); bool filespecUsesRegexes = ((params_.flags & SF_FILESPEC_REGEXES) != 0); bool matchUsesRegexes = ((params_.flags & SF_MATCH_REGEXES) != 0); delete pokeData_; pokeData_ = new PokeData; if(matchUsesRegexes) { const char *error; int erroffset; int flags = 0; if(!(params_.flags & SF_MATCH_CASE_SENSITIVE)) flags |= PCRE_CASELESS; matchRegex = pcre_compile(params_.match.c_str(), flags, &error, &erroffset, NULL); if(!matchRegex) { MessageBox(window_, error, "Match Regex Error", MB_OK); goto cleanup; } } for(StringList::iterator it = params_.filespecs.begin(); it != params_.filespecs.end(); ++it) { std::string regexString = it->c_str(); if(!filespecUsesRegexes) convertWildcard(regexString); int flags = 0; if(!(params_.flags & SF_FILESPEC_CASE_SENSITIVE)) flags |= PCRE_CASELESS; const char *error; int erroffset; pcre *regex = pcre_compile(regexString.c_str(), flags, &error, &erroffset, NULL); if(regex) filespecRegexes.push_back(regex); else { MessageBox(window_, error, "Filespec Regex Error", MB_OK); goto cleanup; } } PostMessage(window_, WM_SEARCHCONTEXT_STATE, 1, 0); while(!paths.empty()) { directoriesSearched_++; stopCheck(); std::string currentSearchPath = paths.back(); std::string currentSearchWildcard = currentSearchPath + "\\*"; paths.pop_back(); WIN32_FIND_DATA wfd; findHandle = FindFirstFile(currentSearchWildcard.c_str(), &wfd); if(findHandle == INVALID_HANDLE_VALUE) continue; while(FindNextFile(findHandle, &wfd)) { stopCheck(); bool isDirectory = ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0); if((wfd.cFileName[0] == '.') || (wfd.cFileName[0] == 0)) { if(isDirectory) directoriesSkipped_++; else filesSkipped_++; continue; } std::string filename = currentSearchPath; filename += "\\"; filename += wfd.cFileName; if(isDirectory) { if(params_.flags & SF_RECURSIVE) paths.push_back(filename); } else { if(searchFile(id, filename, filespecRegexes, matchRegex)) { filesSearched_++; } else { filesSkipped_++; } poke(id, "", HighlightList(), 0, false); } } if(findHandle != INVALID_HANDLE_VALUE) { FindClose(findHandle); } } cleanup: for(RegexList::iterator it = filespecRegexes.begin(); it != filespecRegexes.end(); ++it) { pcre_free(*it); } if(matchRegex) pcre_free(matchRegex); filespecRegexes.clear(); if(!stop_) { unsigned int endTick = GetTickCount(); char buffer[512]; float sec = (endTick - startTick) / 1000.0f; const char *verb = "searched"; if(params_.flags & SF_REPLACE) verb = "updated"; sprintf(buffer, "\n%d hits in %d lines across %d files.\n%d directories scanned, %d files %s, %d files skipped (%3.3f sec)", hits_, linesWithHits_, filesWithHits_, directoriesSearched_, filesSearched_, verb, filesSkipped_, sec); poke(id, buffer, HighlightList(), 0, true); } delete pokeData_; pokeData_ = NULL; PostMessage(window_, WM_SEARCHCONTEXT_STATE, 0, 0); }