![]() |
#4 |
Участник
|
Про order by - это да, не сразу заметил. Но там тоже простая модификация. Хотя вызывает недоумение desc только для последнего поля
Map - эстетичнее и удобнее? Ну, вопрос личных предпочтений. С моей точки зрения наоборот. "Утяжеляет" весь код и существенно усложняет его понимание. Собственно, проще показать, что достаточно сделать ![]() X++: // \Classes\SysDictIndex\showDuplicates void showDuplicates() { tableId tableId = this.tableid(); DictTable dictTable = new DictTable(tableId); boolean dataPrCompany = dictTable.dataPrCompany(); container fields; Counter numberOfFields = this.numberOfFields(); Counter i; str stmtStr; str resultLineStr; str resultField; str resultField1; UserConnection con = new UserConnection(); Statement stmt = con.createStatement(); ResultSet resultSet; boolean anyDuplicates = false; SqlStatementExecutePermission ssep; DictField dField; Counter enabledFieldCounter; int enabledFields[]; str tableNameWithSchema; ; if (dataPrCompany) fields += dictTable.fieldName(fieldnum(Common,DataAreaId),DbBackend::Sql); enabledFieldCounter = 0; for (i = 1; i <= numberOfFields; i++) { dField = new DictField(tableId,this.field(i)); if( dField.isSql() == false ) continue; ++enabledFieldCounter; enabledFields[enabledFieldCounter] = i; } for (i = 1; i <= enabledFieldCounter; i++) { fields += dictTable.fieldName(this.field(enabledFields[i]), DbBackend::Sql); } stmtStr = 'select count(*)'; //+ vmaksimo 15.02.2019 if (dataPrCompany) { stmtStr += ', ' + dictTable.fieldName(fieldnum(Common,DataAreaId), DbBackend::Sql, 0, FieldNameGenerationMode::FieldListGroupBy); } //- vmaksimo 15.02.2019 for (i = 1; i <= enabledFieldCounter; i++) { stmtStr += ', ' + dictTable.fieldName(this.field(enabledFields[i]), DbBackend::Sql, 0, FieldNameGenerationMode::FieldListGroupBy); } tableNameWithSchema = xSession::getDbSchema(); if (tableNameWithSchema != '') tableNameWithSchema += '.'+ dictTable.name(DbBackend::Sql); else tableNameWithSchema = dictTable.name(DbBackend::Sql); stmtStr += ' from ' + tableNameWithSchema; stmtStr += ' group by '; //+ vmaksimo 15.02.2019 if (dataPrCompany) { stmtStr += dictTable.fieldName(fieldnum(Common,DataAreaId), DbBackend::Sql, 0, FieldNameGenerationMode::GroupByFieldList); if (enabledFieldCounter) stmtStr += ', '; } //- vmaksimo 15.02.2019 for (i = 1; i <= enabledFieldCounter; i++) { if (i > 1) stmtStr += ', '; stmtStr += dictTable.fieldName(this.field(enabledFields[i]), DbBackend::Sql, 0, FieldNameGenerationMode::GroupByFieldList); } stmtStr += ' having count(*) > 1'; if (numberOfFields > 0) { stmtStr += ' order by '; //+ vmaksimo 15.02.2019 stmtStr += int2str(1) + ' desc, '; //- vmaksimo 15.02.2019 for (i = 1; i <= enabledFieldCounter; i++) { if (i > 1) stmtStr += ', '; //+ vmaksimo 15.02.2019 /* stmtStr += int2str(enabledFields[i]+1); */ stmtStr += int2str(i+1) + ' desc'; //- vmaksimo 15.02.2019 } //+ vmaksimo 15.02.2019 if (dataPrCompany) { if (i > 1) stmtStr += ', '; stmtStr += int2str(i+1) + ' desc'; } /* stmtStr += ' desc'; */ //- vmaksimo 15.02.2019 } // dangerous API mitigation ssep = new SqlStatementExecutePermission(stmtStr); ssep.assert(); // BP Deviation Documented resultSet = stmt.executeQuery(stmtStr); //+ vmaksimo 15.02.2019 numberOfFields = enabledFieldCounter; if (dataPrCompany) numberOfFields++; //- vmaksimo 15.02.2019 while (resultSet.next()) { resultLineStr = "@SYS283" + strfmt(': %1', resultSet.getString(1)); for (i = 1; i <= numberOfFields; i++) { //+ vmaksimo 15.02.2019 /* resultField = strltrim(resultSet.getString(enabledFields[i]+1)); */ resultField = strltrim(resultSet.getString(i+1)); //- vmaksimo 15.02.2019 if (i == 1 && dataPrCompany) resultField1 = resultField; else //+ vmaksimo 15.02.2019 /* resultLineStr += strfmt(', %1: \'%2\'', conpeek(fields, enabledFields[i]), resultField); */ resultLineStr += strfmt(', %1: \'%2\'', conpeek(fields, i), resultField); //- vmaksimo 15.02.2019 } if (dataPrCompany) setprefix(strfmt('%1: %2', conpeek(fields, 1), resultField1)); info(resultLineStr); anyDuplicates = true; } if (!anyDuplicates) info("@SYS68671"); }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... Последний раз редактировалось Владимир Максимов; 15.02.2019 в 18:57. Причина: Поправил код вывода результата |
|
|
За это сообщение автора поблагодарили: Link (1). |
Теги |
duplicates, index, sysdictindex, баг, индекс, ошибка |
|
|