VirtualBox

Changeset 61268 in vbox


Ignore:
Timestamp:
May 28, 2016 9:09:17 PM (9 years ago)
Author:
vboxsync
Message:

testresult.py: Some quick SQL optimizations for the grouped results.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/testmanager/core/testresults.py

    r61267 r61268  
    825825            sTsNow = '\'%s\'::TIMESTAMP' % (tsNow,); # It's actually a string already. duh.
    826826            sRet =        'TestSets.tsCreated <= %s\n' \
    827                    '%   AND TestSets.tsCreated >= (%s  - \'%s\'::interval - \'%u months\'::interval)\n' \
    828                    '%   AND (TestSets.tsDone IS NULL OR TestSets.tsDone >= (%s - \'%s\'::interval))\n' \
     827                   '%s   AND TestSets.tsCreated >= (%s  - \'%s\'::interval - \'%u months\'::interval)\n' \
     828                   '%s   AND (TestSets.tsDone IS NULL OR TestSets.tsDone >= (%s - \'%s\'::interval))\n' \
    829829                 % ( sTsNow,
    830830                     sExtraIndent, sTsNow, sInterval, cMonthsMourningPeriod,
     
    10471047                          '   AND TestGroups.tsEffective <= TestSets.tsCreated'
    10481048                          '   AND ' + self._getTimePeriodQueryPart(tsNow, sPeriod))
    1049 
    10501049        aaoRows = self._oDb.fetchAll()
    10511050        aoRet = []
    10521051        for aoRow in aaoRows:
    1053             ## @todo Need to take time into consideration. Will go belly up if we delete a testgroup.
    10541052            aoRet.append(TestGroupData().initFromDbRow(aoRow))
    1055 
    10561053        return aoRet
    10571054
     
    10691066                          '     AND Builds.tsEffective     <= TestSets.tsCreated'
    10701067                          '     AND ' + self._getTimePeriodQueryPart(tsNow, sPeriod))
    1071 
    10721068        aaoRows = self._oDb.fetchAll()
    10731069        aoRet = []
    10741070        for aoRow in aaoRows:
    10751071            aoRet.append(BuildDataEx().initFromDbRow(aoRow))
    1076 
    10771072        return aoRet
    10781073
     
    10851080        self._oDb.execute('SELECT TestBoxes.*\n'
    10861081                          'FROM   TestBoxes,\n'
    1087                           '       ( SELECT TestBoxes.idTestBox  AS idTestBox,\n'
    1088                           '         MAX(TestBoxes.idGenTestBox) AS idGenTestBox\n'
    1089                           '         FROM   TestBoxes, TestSets\n'
    1090                           '         WHERE  TestSets.idGenTestBox = TestBoxes.idGenTestBox\n'
    1091                           '           AND ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
    1092                           '         GROUP BY TestBoxes.idTestBox\n'
    1093                           '         ORDER BY TestBoxes.idTestBox\n'
     1082                          '       ( SELECT idTestBox         AS idTestBox,\n'
     1083                          '                MAX(idGenTestBox) AS idGenTestBox\n'
     1084                          '         FROM   TestSets\n'
     1085                          '         WHERE  ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
     1086                          '         GROUP BY idTestBox\n'
    10941087                          '       ) AS TestBoxIDs\n'
    10951088                          'WHERE  TestBoxes.idGenTestBox = TestBoxIDs.idGenTestBox\n'
     
    11061099        """
    11071100
    1108         self._oDb.execute('SELECT DISTINCT TestCases.idTestCase, TestCases.idGenTestCase, TestSets.tsConfig\n'
    1109                           'FROM TestCases, TestSets\n'
    1110                           'WHERE TestSets.idTestCase   =  TestCases.idTestCase\n'
    1111                           '  AND TestCases.tsExpire    >  TestSets.tsCreated\n'
    1112                           '  AND TestCases.tsEffective <= TestSets.tsCreated\n'
    1113                           '  AND ' + self._getTimePeriodQueryPart(tsNow, sPeriod) +
    1114                           'ORDER BY TestCases.idTestCase, TestCases.idGenTestCase DESC\n');
    1115 
    1116         aaoRows        = self._oDb.fetchAll()
    1117         aoRet          = []
    1118         idPrevTestCase = -1;
    1119         for aoRow in aaoRows:
    1120             ## @todo reduce subqueries
    1121             if aoRow[0] != idPrevTestCase:
    1122                 idPrevTestCase = aoRow[0];
    1123                 aoRet.append(TestCaseData().initFromDbWithGenId(self._oDb, aoRow[1], aoRow[2]))
    1124 
     1101        self._oDb.execute('SELECT TestCases.*\n'
     1102                          'FROM   TestCases,\n'
     1103                          '       ( SELECT idTestCase         AS idTestCase,\n'
     1104                          '                MAX(idGenTestCase) AS idGenTestCase\n'
     1105                          '         FROM   TestSets\n'
     1106                          '         WHERE  ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '        ') +
     1107                          '         GROUP BY idTestCase\n'
     1108                          '       ) AS TestCasesIDs\n'
     1109                          'WHERE  TestCases.idGenTestCase = TestCasesIDs.idGenTestCase\n'
     1110                          'ORDER BY TestCases.sName\n' );
     1111        aoRet = [];
     1112        for aoRow in self._oDb.fetchAll():
     1113            aoRet.append(TestCaseData().initFromDbRow(aoRow));
    11251114        return aoRet
    11261115
     
    11311120        """
    11321121
    1133         self._oDb.execute('SELECT DISTINCT TestBoxes.idSchedGroup\n'
    1134                           'FROM TestBoxes, TestSets\n'
    1135                           'WHERE TestSets.idGenTestBox =  TestBoxes.idGenTestBox\n'
    1136                           '  AND TestBoxes.tsExpire    >  TestSets.tsCreated\n'
    1137                           '  AND TestBoxes.tsEffective <= TestSets.tsCreated'
    1138                           '  AND ' + self._getTimePeriodQueryPart(tsNow, sPeriod))
    1139 
    1140         aiRows = self._oDb.fetchAll()
     1122        self._oDb.execute('SELECT SchedGroups.*\n'
     1123                          'FROM   SchedGroups,\n'
     1124                          '       ( SELECT TestBoxes.idSchedGroup  AS idSchedGroup,\n'
     1125                          '                MAX(TestSets.tsCreated) AS tsNow\n'
     1126                          '         FROM   TestSets,\n'
     1127                          '                TestBoxes\n'
     1128                          '         WHERE  TestSets.idGenTestBox = TestBoxes.idGenTestBox\n'
     1129                          '            AND ' + self._getTimePeriodQueryPart(tsNow, sPeriod, '         ') +
     1130                          '         GROUP BY idSchedGroup\n'
     1131                          '       ) AS SchedGroupIDs\n'
     1132                          'WHERE  SchedGroups.idSchedGroup = SchedGroupIDs.idSchedGroup\n'
     1133                          '   AND SchedGroups.tsExpire     > SchedGroupIDs.tsNow\n'
     1134                          '   AND SchedGroups.tsEffective <= SchedGroupIDs.tsNow\n'
     1135                          'ORDER BY SchedGroups.sName\n' );
    11411136        aoRet = []
    1142         for iRow in aiRows:
    1143             ## @todo reduce subqueries
    1144             aoRet.append(SchedGroupData().initFromDbWithId(self._oDb, iRow))
    1145 
     1137        for aoRow in self._oDb.fetchAll():
     1138            aoRet.append(SchedGroupData().initFromDbRow(aoRow));
    11461139        return aoRet
    11471140
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette