Экспорт QUIK: очистка таблиц-срезов (ClearTables) для включённых пакетов
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -540,9 +540,23 @@ func quikExportRenderExportINI(s QuikExportSettings) (string, error) {
|
|||||||
t = iniSet(t, "General", "LimitKinds", s.LimitKinds)
|
t = iniSet(t, "General", "LimitKinds", s.LimitKinds)
|
||||||
t = iniSet(t, "Files", "LogDepth", "3")
|
t = iniSet(t, "Files", "LogDepth", "3")
|
||||||
t = iniOutputTables(t, s.Tables)
|
t = iniOutputTables(t, s.Tables)
|
||||||
|
t = iniClearTables(t, s.Tables)
|
||||||
return t, nil
|
return t, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// iniClearTables — [ClearTables]: таблицы-срезы экспортёр очищает в начале сессии. Без этого повторная
|
||||||
|
// загрузка бьётся о первичный ключ (ошибки вставки текут памятью, как было с Portfolio) либо копит
|
||||||
|
// дубликаты. Portfolio не очищаем — на нём история НПР; журналы изменений очищать нельзя по смыслу.
|
||||||
|
func iniClearTables(text string, enabled []string) string {
|
||||||
|
for _, name := range enabled {
|
||||||
|
if name == "Portfolio" || strings.HasSuffix(name, "Journal") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
text = iniSet(text, "ClearTables", name, "1")
|
||||||
|
}
|
||||||
|
return text
|
||||||
|
}
|
||||||
|
|
||||||
func quikExportRenderInfoINI(s QuikExportSettings) (string, error) {
|
func quikExportRenderInfoINI(s QuikExportSettings) (string, error) {
|
||||||
b, err := quikExportFS.ReadFile("web/quikexport/info.ini.tmpl")
|
b, err := quikExportFS.ReadFile("web/quikexport/info.ini.tmpl")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package quikexport
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// [ClearTables]: включённые таблицы-срезы очищаются, Portfolio и журналы — нет.
|
||||||
|
func TestIniClearTables(t *testing.T) {
|
||||||
|
ini := "[Output tables]\n;SettleCodes=SettleCodes\nPortfolio=Portfolio\n\n[ClearTables]\nClasses=1\n;Securities=1\n"
|
||||||
|
out := iniClearTables(ini, []string{"Portfolio", "SettleCodes", "Securities", "DepoLimitsJournal"})
|
||||||
|
for _, want := range []string{"SettleCodes=1", "Securities=1", "Classes=1"} {
|
||||||
|
if !strings.Contains(out, want) {
|
||||||
|
t.Errorf("нет %q в:\n%s", want, out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if strings.Contains(out, "Portfolio=1") {
|
||||||
|
t.Errorf("Portfolio очищать нельзя:\n%s", out)
|
||||||
|
}
|
||||||
|
if strings.Contains(out, "DepoLimitsJournal=1") {
|
||||||
|
t.Errorf("журнал очищать нельзя:\n%s", out)
|
||||||
|
}
|
||||||
|
if strings.Contains(out, ";Securities=1") {
|
||||||
|
t.Errorf("строка осталась закомментированной:\n%s", out)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user