Changeset 394 for branches


Ignore:
Timestamp:
02/08/14 09:58:35 (6 years ago)
Author:
jls17
Message:
  • changed the logic of parsing the database arschema-results; it's now capable to work in chunks
  • extracted a view methods, to make it more readable
Location:
branches/work_304/lists
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/work_304/lists/ARSchemaList.cpp

    r333 r394  
    429429                return; 
    430430 
    431         ARZeroMemory(&valueList);        
     431        ARZeroMemory(&valueList); 
    432432 
    433433        if (ARGetListSQL(&arIn->arControl, (char*)"select schemaId, name, viewName, shViewName from arschema", 0, &valueList, &numMatches, &status) == AR_RETURN_OK) 
    434434        { 
    435                 if (numMatches > 0) 
    436                 { 
    437                         for (unsigned int idx = 0; idx < names.numItems; ++idx) 
    438                         { 
    439                                 for (unsigned int valPos = 0; valPos < valueList.numItems; ++valPos) 
    440                                 { 
    441                                         ARValueList& row = valueList.valueListList[valPos]; 
    442                                         bool foundRow = false; 
    443                                          
    444                                         if (row.numItems < 2 || row.valueList[1].dataType != AR_DATA_TYPE_CHAR) 
    445                                                 continue; 
    446  
    447                                         if (strncmp(names.nameList[idx], row.valueList[1].u.charVal, AR_MAX_NAME_SIZE) == 0) 
    448                                         { 
    449                                                 ARSchemaDbValues &dbValues = schemaDbValues[idx]; 
    450  
    451                                                 if (row.valueList[0].dataType == AR_DATA_TYPE_INTEGER) 
    452                                                         dbValues.schemaId = row.valueList[0].u.ulongVal; 
    453  
    454                                                 if (row.valueList[2].dataType == AR_DATA_TYPE_CHAR) 
    455                                                 { 
    456                                                         strncpy(dbValues.viewName, row.valueList[2].u.charVal, AR_MAX_NAME_SIZE); 
    457                                                         dbValues.viewName[AR_MAX_NAME_SIZE] = 0; 
    458                                                 } 
    459  
    460                                                 if (row.valueList[3].dataType == AR_DATA_TYPE_CHAR) 
    461                                                 { 
    462                                                         strncpy(dbValues.shViewName, row.valueList[3].u.charVal, AR_MAX_NAME_SIZE); 
    463                                                         dbValues.shViewName[AR_MAX_NAME_SIZE] = 0; 
    464                                                 } 
    465                                                 break; 
    466                                         } 
    467                                 } 
    468                         } 
    469                 } 
     435                StoreDatabaseDetails(valueList); 
    470436                FreeARValueListList(&valueList, false); 
    471437                FreeARStatusList(&status, false); 
     
    474440        { 
    475441                cout << arIn->GetARStatusError(&status); 
     442        } 
     443} 
     444 
     445void CARSchemaList::StoreDatabaseDetails(ARValueListList &valueList) 
     446{ 
     447        if (valueList.numItems == 0) return; 
     448 
     449        for (unsigned int valPos = 0; valPos < valueList.numItems; ++valPos) 
     450        { 
     451                ARValueList& row = valueList.valueListList[valPos]; 
     452                 
     453                if (row.numItems < 4 || row.valueList[1].dataType != AR_DATA_TYPE_CHAR) 
     454                        continue; 
     455                 
     456                int idx = TryFindSchemaInNameList(row.valueList[1].u.charVal); 
     457                if (idx < 0) // not found 
     458                { 
     459                        continue; 
     460                } 
     461                StoreSingleDatabaseRow(row, idx); 
     462        } 
     463} 
     464 
     465int CARSchemaList::TryFindSchemaInNameList(const char* schemaName) 
     466{ 
     467        int idx = 0; 
     468        for (; idx < static_cast<int>(names.numItems); ++idx) 
     469        { 
     470                if (strncmp(names.nameList[idx], schemaName, AR_MAX_NAME_SIZE) == 0) 
     471                        return idx; 
     472        } 
     473        return -1; 
     474} 
     475 
     476void CARSchemaList::StoreSingleDatabaseRow(ARValueList &row, int storeToSchemaIndex) 
     477{ 
     478        if (storeToSchemaIndex < 0 || storeToSchemaIndex >= static_cast<int>(schemaDbValues.size())) return; 
     479 
     480        ARSchemaDbValues &dbValues = schemaDbValues[storeToSchemaIndex]; 
     481 
     482        if (row.valueList[0].dataType == AR_DATA_TYPE_INTEGER) 
     483                dbValues.schemaId = row.valueList[0].u.ulongVal; 
     484 
     485        if (row.valueList[2].dataType == AR_DATA_TYPE_CHAR) 
     486        { 
     487                strncpy(dbValues.viewName, row.valueList[2].u.charVal, AR_MAX_NAME_SIZE); 
     488                dbValues.viewName[AR_MAX_NAME_SIZE] = 0; 
     489        } 
     490 
     491        if (row.valueList[3].dataType == AR_DATA_TYPE_CHAR) 
     492        { 
     493                strncpy(dbValues.shViewName, row.valueList[3].u.charVal, AR_MAX_NAME_SIZE); 
     494                dbValues.shViewName[AR_MAX_NAME_SIZE] = 0; 
    476495        } 
    477496} 
  • branches/work_304/lists/ARSchemaList.h

    r312 r394  
    117117        void LoadDatabaseDetails(); 
    118118 
     119        int TryFindSchemaInNameList(const char* schemaName); 
     120        void StoreDatabaseDetails(ARValueListList &valList); 
     121        void StoreSingleDatabaseRow(ARValueList &row, int storeToSchemaIndex); 
     122 
     123 
    119124private: 
    120125        // allocation state of internal structures 
Note: See TracChangeset for help on using the changeset viewer.