|
![]() |
#1 |
Administrator
|
Да, судя по всему, вы правы. Пример можно посмотреть в классе LedgerBalanceSheetDimPrint, метод generateKnownCombinations().
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
![]() |
#2 |
Участник
|
Цитата:
![]() Теперь о самом параметре в контексте самого класса RecordInsertList. Вот данный кусок, где, видимо, данные будут вставлены во временный буфер. X++: recordInsertList = new RecordInsertList(tableNum(LedgerBalanceSheetUsedDimensionsTmp), false, false, false, false, false, _usedTmp); queryRun = new QueryRun(query); while (queryRun.next()) { _usedTmp.clear(); for (i = 1; i <= usedDimensions.lastIndex(); i++) { dimensionAttributeLevelValueAllView = queryRun.get(tableNum(DimensionAttributeLevelValueAllView), i); _usedTmp.EntityValue[i] = dimensionAttributeLevelValueAllView.DisplayValue; _usedTmp.EntityInstance[i] = dimensionAttributeLevelValueAllView.EntityInstance; } recordInsertList.add(_usedTmp); } recordInsertList.insertDatabase(); Код: The array insert operation automatically falls back to classic record-by-record inserts when non-SQL based tables are used (for example, temporary tables)... RecordInsertList X++: private void runRIL() //RIL, temporary buffer contains two records { uapTestTable t; uapTestTable t2; RecordInsertList ril; t.setTmp(); ril = new RecordInsertList(t.TableId, true, true, true, false, false, t); ttsBegin; t.code = "001"; t.value = 1; ril.add(t); t.code = "002"; t.value = 10; ril.add(t); ril.insertDatabase(); ttsCommit; info('temporary uapTestTable'); while select t { info(strFmt("%1 %2", t.code, t.value)); } info('normal uapTestTable'); while select t2 { info(strFmt("%1 %2", t2.code, t2.value)); } /* Info Message (01:40:51 pm) temporary uapTestTable Info Message (01:40:51 pm) 001 1 Info Message (01:40:51 pm) 002 10 Info Message (01:40:51 pm) normal uapTestTable */ } X++: private void runRSL() { uapTestTable t; uapTestTable t2; RecordSortedList rsl; t.setTmp(); rsl = new RecordSortedList(t.TableId, t); rsl.sortOrder(fieldNum(uapTestTable, Code)); ttsBegin; t.code = "001"; t.value = 1; rsl.ins(t); t.code = "002"; t.value = 10; rsl.ins(t); rsl.insertDatabase(); ttsCommit; info('RecordSortedList temporary buffer contains no records, but two inserted in uapTestTable table'); info('temporary uapTestTable'); while select t { info(strFmt("%1 %2", t.code, t.value)); } info('normal uapTestTable'); while select t2 { info(strFmt("%1 %2", t2.code, t2.value)); } /* Info Message (01:42:07 pm) RecordSortedList temporary buffer contains no records, but two inserted in uapTestTable table Info Message (01:42:07 pm) temporary uapTestTable Info Message (01:42:07 pm) normal uapTestTable Info Message (01:42:07 pm) 001 1 Info Message (01:42:07 pm) 002 10 */ } Какие будут соображения?
__________________
Felix nihil admirari |
|
![]() |
#3 |
Administrator
|
Цитата:
Как мне кажется, нет смысла использовать RecordSortedList/RecordInsertList для временных таблиц InMemory, потому что в некотором смысле это альтернативные механизмы, а не взаимодополняющие. Цитата:
Сообщение от wojzeh
![]() Теперь вопрос следующий: в чём смысл (профит) использования этого класса с временной таблицей, если в документации сказано:
Код: The array insert operation automatically falls back to classic record-by-record inserts when non-SQL based tables are used (for example, temporary tables)... ![]()
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
![]() |
#4 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
![]() wojzeh, честно говоря, совсем не понял, почему ты делаешь такой вывод. Пояснишь?
Как мне кажется, нет смысла использовать RecordSortedList/RecordInsertList для временных таблиц InMemory, потому что в некотором смысле это альтернативные механизмы, а не взаимодополняющие. Ну да, в документации сказано про non-SQL based tables, а временная таблица TempDB - она очень даже SQL based ![]() при этом можно так же лихо подсунуть ей и настоящую "времянку", но только не в случае с RecordSortedList. в любом случае это пробел в документации, и неплохо было бы его восполнить. у меня как раз тут задача о быстрой вставке сотен тысяч записей, но именно во временную таблицу для последующих расчётов.
__________________
Felix nihil admirari |
|
Теги |
ax2012, recordinsertlist, tempdb |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|