Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions e2e/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ before(() => {
if (err.message.includes("ResizeObserver loop")) {
return false
}
// Monaco editor's word highlighter throws "Canceled" errors during rapid tab switching
// when restoreViewState cancels pending async operations - this is harmless
if (err.message.includes("Canceled")) {
return false
}
})

indexedDB.deleteDatabase("web-console")
Expand Down
8 changes: 8 additions & 0 deletions e2e/fixtures/invalid-tabs-export.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[
{
"label": 123,
"value": "SELECT 1;",
"position": 0,
"editorViewState": {}
}
]
22 changes: 22 additions & 0 deletions e2e/fixtures/valid-tabs-export.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[
{
"label": "Imported Tab 1",
"value": "SELECT 1;",
"position": 0,
"editorViewState": {}
},
{
"label": "Imported Tab 2",
"value": "SELECT 2;",
"position": 1,
"editorViewState": {}
},
{
"label": "Archived Import",
"value": "SELECT 'archived';",
"position": -1,
"editorViewState": {},
"archived": true,
"archivedAt": 1706400000000
}
]
2 changes: 1 addition & 1 deletion e2e/questdb
Submodule questdb updated 46 files
+1 −1 ci/templates/aux-job.yml
+40 −0 ci/templates/java-lint.yml
+62 −0 compat/src/test/csharp/ExtraTests.cs
+29 −0 core/src/main/java/io/questdb/PropServerConfiguration.java
+3 −0 core/src/main/java/io/questdb/PropertyKey.java
+17 −0 core/src/main/java/io/questdb/cairo/CairoConfiguration.java
+15 −0 core/src/main/java/io/questdb/cairo/CairoConfigurationWrapper.java
+15 −0 core/src/main/java/io/questdb/cairo/DefaultCairoConfiguration.java
+0 −129 core/src/main/java/io/questdb/cairo/MergeStruct.java
+309 −0 core/src/main/java/io/questdb/cairo/MicrosTimestampDriver.java
+294 −0 core/src/main/java/io/questdb/cairo/NanosTimestampDriver.java
+11 −2 core/src/main/java/io/questdb/cutlass/pgwire/PGPipelineEntry.java
+0 −65 core/src/main/java/io/questdb/cutlass/text/CopyExportResult.java
+10 −2 core/src/main/java/io/questdb/griffin/SqlCodeGenerator.java
+63 −0 core/src/main/java/io/questdb/griffin/SqlKeywords.java
+788 −2 core/src/main/java/io/questdb/griffin/SqlOptimiser.java
+302 −125 core/src/main/java/io/questdb/griffin/WhereClauseParser.java
+15 −8 core/src/main/java/io/questdb/griffin/engine/functions/bool/InTimestampTimestampFunctionFactory.java
+14 −10 core/src/main/java/io/questdb/griffin/engine/functions/catalogue/TablesFunctionFactory.java
+14 −16 core/src/main/java/io/questdb/griffin/engine/functions/catalogue/WalTransactionsFunctionFactory.java
+24 −0 core/src/main/java/io/questdb/griffin/engine/functions/date/TimestampAddFunctionFactory.java
+10 −19 core/src/main/java/io/questdb/griffin/engine/functions/date/TimestampFloorFromOffsetFunctionFactory.java
+1 −1 core/src/main/java/io/questdb/griffin/engine/groupby/GroupByUtf8Sink.java
+223 −0 core/src/main/java/io/questdb/griffin/model/DateExpressionEvaluator.java
+3 −0 core/src/main/java/io/questdb/griffin/model/IntervalOperation.java
+2,494 −102 core/src/main/java/io/questdb/griffin/model/IntervalUtils.java
+16 −2 core/src/main/java/io/questdb/griffin/model/IntrinsicModel.java
+70 −0 core/src/main/java/io/questdb/griffin/model/QueryModel.java
+41 −18 core/src/main/java/io/questdb/griffin/model/RuntimeIntervalModel.java
+112 −21 core/src/main/java/io/questdb/griffin/model/RuntimeIntervalModelBuilder.java
+5 −2 core/src/main/java/io/questdb/jit/CompiledFilterIRSerializer.java
+0 −4 core/src/main/java/io/questdb/std/NumericException.java
+0 −70 core/src/main/java/io/questdb/tasks/O3PartitionUpdateTask.java
+3 −0 core/src/test/java/io/questdb/test/ServerMainTest.java
+1 −0 core/src/test/java/io/questdb/test/griffin/SqlKeywordsTest.java
+353 −1 core/src/test/java/io/questdb/test/griffin/SqlOptimiserTest.java
+303 −0 core/src/test/java/io/questdb/test/griffin/SqlParserTest.java
+1,538 −0 core/src/test/java/io/questdb/test/griffin/TimestampOffsetPushdownTest.java
+425 −65 core/src/test/java/io/questdb/test/griffin/WhereClauseParserTest.java
+27 −0 core/src/test/java/io/questdb/test/griffin/engine/SqlCodeGeneratorTest.java
+44 −0 core/src/test/java/io/questdb/test/griffin/engine/functions/catalogue/TablesFunctionFactoryTest.java
+27 −0 core/src/test/java/io/questdb/test/griffin/engine/functions/catalogue/WalTransactionsFunctionTest.java
+1 −1 core/src/test/java/io/questdb/test/griffin/engine/functions/date/TimestampAddFunctionFactoryTest.java
+43 −0 core/src/test/java/io/questdb/test/griffin/model/IntervalUtilsTest.java
+3,607 −162 core/src/test/java/io/questdb/test/griffin/model/IntrinsicModelTest.java
+76 −0 qodana.yaml
59 changes: 59 additions & 0 deletions e2e/tests/console/editor.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -888,6 +888,16 @@ describe("editor tabs", () => {
})
cy.getEditorHitbox().click()
cy.getEditorTabByTitle("New updated name").should("be.visible")

cy.getEditorTabByTitle("New updated name").realHover()
cy.getEditorTabByTitle("New updated name").within(() => {
cy.get(".chrome-tab-edit").should("be.visible").click()
cy.get(".chrome-tab-rename")
.should("be.visible")
.clear()
.type("Renamed via button{enter}")
})
cy.getEditorTabByTitle("Renamed via button").should("be.visible")
})

it("should drag tabs", () => {
Expand Down Expand Up @@ -1377,3 +1387,52 @@ describe("abortion on new query execution", () => {
cy.getByDataHook("success-notification").should("contain", "select 2")
})
})

describe("import/export tabs", () => {
beforeEach(() => {
cy.loadConsoleWithAuth()
cy.getEditorTabs().should("be.visible")
})

it("should show error toast when importing invalid file", () => {
cy.getByDataHook("editor-tabs-menu-button").click()
cy.getByDataHook("editor-tabs-menu").should("be.visible")

cy.getByDataHook("editor-tabs-menu-import").click()
cy.getByDataHook("editor-tabs-import-input").selectFile(
"e2e/fixtures/invalid-tabs-export.json",
{ force: true },
)

cy.get(".toast-error-container")
.should("be.visible")
.should("contain", "Invalid file format")
.should("contain", "Item [0]: label must be a string")
})

it("should import tabs successfully with active and archived tabs", () => {
cy.getByDataHook("editor-tabs-menu-button").click()
cy.getByDataHook("editor-tabs-menu").should("be.visible")

cy.getByDataHook("editor-tabs-menu-import").click()
cy.getByDataHook("editor-tabs-import-input").selectFile(
"e2e/fixtures/valid-tabs-export.json",
{ force: true },
)

cy.get(".toast-success-container")
.should("be.visible")
.should("contain", "Imported 3 tabs successfully")
.click()

cy.getEditorTabByTitle("Imported Tab 1").should("be.visible")
cy.getEditorTabByTitle("Imported Tab 2").should("be.visible")

cy.getByDataHook("editor-tabs-history-button").click()
cy.getByDataHook("editor-tabs-history").should("be.visible")
cy.getByDataHook("editor-tabs-history-item").should(
"contain",
"Archived Import",
)
})
})
Loading