diff --git a/.agents/skills/testing-ios-simulator/SKILL.md b/.agents/skills/testing-ios-simulator/SKILL.md index a04a7a53..5aac2b52 100644 --- a/.agents/skills/testing-ios-simulator/SKILL.md +++ b/.agents/skills/testing-ios-simulator/SKILL.md @@ -48,6 +48,13 @@ description: Build and launch the Logseq iOS app in an iOS simulator on macOS ar `dune-workspace.mobile`; set `LOGSEQ_OPAM_SWITCH=5.5.0` when running outside `opam exec`. +## Sheet interaction checks + +- Follow the existing journal calendar sheet for compact utility presentations. Result-view filter and sort sheets should open partially, with expansion available for longer lists (`medium,large` in the LUI wire format), and retain native navigation actions and swipe dismissal. +- The custom Logseq palette must reach the complete modal surface, including navigation, list background, and grouped rows. LUI sheets render outside the scoped node tree; propagate the ancestor-resolved semantic colors into their content. Avoid unconditional system grouped backgrounds when a theme supplies a background. +- Use a simulator runtime check to inspect the actual presented frame and screenshot colors in both appearances. For dark Logseq settings, the surrounding sheet background should match the graph background token (`#002D38`), with themed elevated rows. Also exercise Cancel, Done, and scrolling without changing filter/sort semantics. +- Use `apple/Tests/UI/run-simulator-runtime-check.py` for native checks; do not run `swift test` in this repository. + ## Maestro e2e (test-ios-e2e-suite.sh) - Install Maestro: `curl -fsSL https://get.maestro.mobile.dev | bash` → `~/.maestro/bin`. - The e2e flows hit the app's sync server at `http://127.0.0.1:8787`. That server is diff --git a/android/app/src/androidTest/assets/query-result-views.json b/android/app/src/androidTest/assets/query-result-views.json new file mode 100644 index 00000000..5b182c2e --- /dev/null +++ b/android/app/src/androidTest/assets/query-result-views.json @@ -0,0 +1,657 @@ +{ + "ok": true, + "result": { + "graphName": "Query rendering", + "selectedGraphId": "query-check", + "isGraphUnlocked": true, + "outlinerRows": [ + { + "depth": 0, + "hasChildren": false, + "isCollapsed": false, + "block": { + "uuid": "query-owner", + "title": "Project overview", + "pageId": "page", + "query": { + "kind": "simple", + "source": "#Project", + "ownerUuid": "query-owner", + "featureType": "query-result", + "rows": [ + { + "block": { + "uuid": "result-0", + "title": "Project result 1", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [ + { + "uuid": "child", + "title": "Nested child", + "pageId": "page" + } + ] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 1", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 1" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "1", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000001" + } + } + ] + }, + { + "block": { + "uuid": "result-1", + "title": "Project result 2", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 2", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 2" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "2", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000002" + } + } + ] + }, + { + "block": { + "uuid": "result-2", + "title": "Project result 3", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 3", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 3" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "3", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000003" + } + } + ] + } + ], + "views": [ + { + "uuid": "list", + "name": "List", + "type": "list", + "columns": [ + { + "attr": "block/title", + "title": "Name", + "kind": "string", + "editable": true + }, + { + "attr": "user.property/Score", + "title": "Score", + "kind": "number", + "editable": true, + "ref": true, + "filterValues": [ + { + "title": "1", + "match": [ + "30000000-0000-4000-8000-000000000001" + ] + }, + { + "title": "2", + "match": [ + "30000000-0000-4000-8000-000000000002" + ] + }, + { + "title": "3", + "match": [ + "30000000-0000-4000-8000-000000000003" + ] + } + ] + } + ], + "rows": [ + { + "block": { + "uuid": "result-0", + "title": "Project result 1", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [ + { + "uuid": "child", + "title": "Nested child", + "pageId": "page" + } + ] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 1", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 1" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "1", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000001" + } + } + ] + }, + { + "block": { + "uuid": "result-1", + "title": "Project result 2", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 2", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 2" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "2", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000002" + } + } + ] + }, + { + "block": { + "uuid": "result-2", + "title": "Project result 3", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 3", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 3" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "3", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000003" + } + } + ] + } + ], + "error": null + }, + { + "uuid": "table", + "name": "Table", + "type": "table", + "columns": [ + { + "attr": "block/title", + "title": "Name", + "kind": "string", + "editable": true + }, + { + "attr": "user.property/Score", + "title": "Score", + "kind": "number", + "editable": true, + "ref": true, + "filterValues": [ + { + "title": "1", + "match": [ + "30000000-0000-4000-8000-000000000001" + ] + }, + { + "title": "2", + "match": [ + "30000000-0000-4000-8000-000000000002" + ] + }, + { + "title": "3", + "match": [ + "30000000-0000-4000-8000-000000000003" + ] + } + ] + } + ], + "rows": [ + { + "block": { + "uuid": "result-0", + "title": "Project result 1", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [ + { + "uuid": "child", + "title": "Nested child", + "pageId": "page" + } + ] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 1", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 1" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "1", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000001" + } + } + ] + }, + { + "block": { + "uuid": "result-1", + "title": "Project result 2", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 2", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 2" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "2", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000002" + } + } + ] + }, + { + "block": { + "uuid": "result-2", + "title": "Project result 3", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 3", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 3" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "3", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000003" + } + } + ] + } + ], + "error": null + }, + { + "uuid": "gallery", + "name": "Gallery", + "type": "gallery", + "columns": [ + { + "attr": "block/title", + "title": "Name", + "kind": "string", + "editable": true + }, + { + "attr": "user.property/Score", + "title": "Score", + "kind": "number", + "editable": true, + "ref": true, + "filterValues": [ + { + "title": "1", + "match": [ + "30000000-0000-4000-8000-000000000001" + ] + }, + { + "title": "2", + "match": [ + "30000000-0000-4000-8000-000000000002" + ] + }, + { + "title": "3", + "match": [ + "30000000-0000-4000-8000-000000000003" + ] + } + ] + } + ], + "rows": [ + { + "block": { + "uuid": "result-0", + "title": "Project result 1", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [ + { + "uuid": "child", + "title": "Nested child", + "pageId": "page" + } + ] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 1", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 1" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "1", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000001" + } + } + ] + }, + { + "block": { + "uuid": "result-1", + "title": "Project result 2", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 2", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 2" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "2", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000002" + } + } + ] + }, + { + "block": { + "uuid": "result-2", + "title": "Project result 3", + "pageId": "page", + "breadcrumbs": [ + { + "uuid": "page", + "title": "Workspace" + } + ], + "children": [] + }, + "properties": [ + { + "attr": "block/title", + "kind": "string", + "text": "Project result 3", + "editable": true, + "raw": { + "type": "string", + "value": "Project result 3" + } + }, + { + "attr": "user.property/Score", + "kind": "number", + "text": "3", + "editable": true, + "raw": { + "type": "ref-uuid", + "value": "30000000-0000-4000-8000-000000000003" + } + } + ] + } + ], + "error": null + }, + { + "uuid": "broken", + "name": "Broken", + "type": "table", + "columns": [ + { + "attr": "block/title", + "title": "Name", + "kind": "string", + "editable": true + }, + { + "attr": "user.property/Score", + "title": "Score", + "kind": "number", + "editable": true, + "ref": true, + "filterValues": [ + { + "title": "1", + "match": [ + "30000000-0000-4000-8000-000000000001" + ] + }, + { + "title": "2", + "match": [ + "30000000-0000-4000-8000-000000000002" + ] + }, + { + "title": "3", + "match": [ + "30000000-0000-4000-8000-000000000003" + ] + } + ] + } + ], + "rows": [], + "error": "Invalid view configuration" + } + ] + } + } + } + ] + } +} diff --git a/android/app/src/androidTest/kotlin/com/logseq/app/AndroidQueryResultViewsTest.kt b/android/app/src/androidTest/kotlin/com/logseq/app/AndroidQueryResultViewsTest.kt new file mode 100644 index 00000000..2e6bce62 --- /dev/null +++ b/android/app/src/androidTest/kotlin/com/logseq/app/AndroidQueryResultViewsTest.kt @@ -0,0 +1,247 @@ +package com.logseq.app + +import android.graphics.Bitmap +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialExpressiveTheme +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.asAndroidBitmap +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsSelected +import androidx.compose.ui.test.captureToImage +import androidx.compose.ui.test.getUnclippedBoundsInRoot +import androidx.compose.ui.test.junit4.v2.createComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.onRoot +import androidx.compose.ui.test.performClick +import androidx.compose.ui.test.performScrollTo +import androidx.compose.ui.test.performSemanticsAction +import androidx.compose.ui.test.performTextReplacement +import androidx.compose.ui.test.performTouchInput +import androidx.compose.ui.test.swipeLeft +import androidx.compose.ui.test.swipeRight +import androidx.compose.ui.semantics.SemanticsActions +import androidx.compose.ui.text.TextLayoutResult +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import com.logseq.app.runtime.LogseqNativeBridge +import com.logseq.app.runtime.LuiPatchFilter +import com.logseq.app.runtime.dispatchLuiEvent +import com.logseq.app.runtime.logseqIconResolver +import com.logseq.app.ui.LogseqTheme +import com.logseq.app.ui.extensions.logseqExtensionRegistry +import dev.lui.LuiBackend +import org.json.JSONObject +import org.json.JSONArray +import org.junit.After +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Assert.assertTrue +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class AndroidQueryResultViewsTest { + @get:Rule val ui = createComposeRule() + private lateinit var bridge: LogseqNativeBridge + private lateinit var backend: LuiBackend + private lateinit var filter: LuiPatchFilter + + @After fun closeBridge() { + if (::bridge.isInitialized) ui.runOnIdle { bridge.close() } + } + + private fun mount(transform: (JSONObject) -> Unit = {}) { + backend = LuiBackend(onEvent = { dispatchLuiEvent(it, bridge) }, + extensions = logseqExtensionRegistry { it }, icons = logseqIconResolver) + filter = LuiPatchFilter(backend) + bridge = LogseqNativeBridge(onPatch = { if (it.isNotEmpty()) filter.applyJson(it) }) + val root = bridge.initialize(authenticationCode = 3) + val snapshot = InstrumentationRegistry.getInstrumentation().context.assets + .open("query-result-views.json").bufferedReader().use { it.readText() } + val response = JSONObject(snapshot) + transform(response.getJSONObject("result")) + filter.applyJson(bridge.applySnapshot(response.toString())) + bridge.applyHostUpdate("graph-loading", "false").takeIf { it.isNotEmpty() }?.let { filter.applyJson(it) } + ui.setContent { + MaterialExpressiveTheme(colorScheme = LogseqTheme.lightScheme, typography = LogseqTheme.typography) { + Box(Modifier.fillMaxSize()) { backend.Content(root) } + } + } + } + + private fun capture(name: String) { + val directory = requireNotNull(InstrumentationRegistry.getInstrumentation() + .targetContext.getExternalFilesDir("qa")) + directory.mkdirs() + directory.resolve("query-$name.png").outputStream().use { + ui.onRoot().captureToImage().asAndroidBitmap().compress(Bitmap.CompressFormat.PNG, 100, it) + } + } + + private fun assertFullTabLabel(text: String) { + val layouts = mutableListOf() + ui.onNodeWithText(text, useUnmergedTree = true) + .performSemanticsAction(SemanticsActions.GetTextLayoutResult) { it(layouts) } + assertTrue("The selected native tab must show its full label", + layouts.isNotEmpty() && layouts.none { it.isLineEllipsized(0) }) + } + + private var selectedView = "list" + + private fun selectView(name: String) { + ui.onNodeWithTag("view.type.$selectedView").performClick() + ui.onNodeWithText("Saved views").performClick() + ui.onNodeWithTag("view.tab.$name").performClick() + selectedView = name + } + + @Test fun priorityGlyphOpensNativePopupAndSendsSelectedReference() { + mount { result -> + val choice = JSONObject().put("uuid", "critical").put("title", "Critical") + .put("iconType", "tabler-icon").put("iconId", "priorityLvlHigh") + result.put("taskPriorities", JSONArray().put(choice)) + fun visit(value: Any?) { + when (value) { + is JSONObject -> { + if (value.optString("uuid") == "result-0") value.put("priority", choice) + value.keys().asSequence().toList().forEach { visit(value.opt(it)) } + } + is JSONArray -> (0 until value.length()).forEach { visit(value.opt(it)) } + } + } + visit(result.getJSONArray("outlinerRows")) + } + ui.onNodeWithTag("button.block-task-priority").performClick() + ui.onNodeWithText("Critical").assertIsDisplayed() + ui.onNodeWithTag("button.block-task-priority-option.critical").assertIsSelected() + capture("priority-popup") + ui.onNodeWithTag("button.block-task-priority-option.critical").performClick() + ui.runOnIdle { + var found = false + repeat(32) { + val encoded = bridge.takeEffect() + if (encoded.isNotEmpty()) { + val effect = JSONObject(encoded).optJSONObject("effect") + if (effect?.optString("kind") == "set-outliner-task-priority") { + assertEquals("result-0", effect.getString("text")) + assertEquals("critical", JSONObject(effect.getString("metadata")).getString("uuid")) + found = true + } + } + } + check(found) { "Selecting a priority must dispatch its stable reference" } + assertNull(backend.lastError) + } + } + + private fun takeViewActions(): List { + val actions = mutableListOf() + ui.runOnIdle { + repeat(32) { + val encoded = bridge.takeEffect() + if (encoded.isNotEmpty()) { + val effect = JSONObject(encoded).optJSONObject("effect") + if (effect?.optString("kind") == "result-view") actions.add(JSONObject(effect.getString("text"))) + } + } + } + return actions + } + + @Test fun typeIconOpensChoicesForTheSelectedSavedView() { + mount() + ui.onNodeWithTag("view.type.list").performClick() + ui.onNodeWithTag("view.type.option.list.list").assertIsDisplayed() + ui.onNodeWithTag("view.type.option.list.table").assertIsDisplayed() + ui.onNodeWithTag("view.type.option.list.gallery").performClick() + val action = takeViewActions().single() + assertEquals("list", action.getString("viewUuid")) + assertEquals("gallery", action.getJSONObject("config").getString("type")) + } + + @Test fun foldedQueryResultsLoadOnlyWhenTapped() { + mount { result -> + val query = result.getJSONArray("outlinerRows").getJSONObject(0).getJSONObject("block").getJSONObject("query") + query.put("expanded", false).put("views", JSONArray()).put("rows", JSONArray()) + } + ui.onNodeWithText("Project result 1").assertDoesNotExist() + assertTrue("Mounting folded queries must not request results", takeViewActions().isEmpty()) + ui.onNodeWithTag("query.toggle.query-owner").performClick() + val action = takeViewActions().single() + assertEquals("setExpanded", action.getString("action")) + assertTrue(action.getBoolean("expanded")) + } + + @Test fun savedListsGallerySearchAndErrorsRenderInCompose() { + mount() + ui.onNodeWithText("Project result 1").assertIsDisplayed() + ui.onNodeWithText("Nested child").assertDoesNotExist() + capture("list") + selectView("gallery") + ui.onNodeWithTag("view.card.gallery.result-0").assertIsDisplayed() + capture("gallery") + ui.onNodeWithTag("view.search.toggle.query-owner").performClick() + val search = ui.onNodeWithTag("view.search.query-owner").getUnclippedBoundsInRoot() + val toolbar = ui.onNodeWithTag("view.toolbar.query-owner").getUnclippedBoundsInRoot() + assertEquals("Search fills the collection width", toolbar.right.value, search.right.value, 1f) + ui.onNodeWithTag("view.search.query-owner").performTextReplacement("result 1") + ui.onNodeWithTag("view.card.gallery.result-1").assertDoesNotExist() + selectView("broken") + ui.onNodeWithTag("view.error.broken").assertIsDisplayed() + selectView("list") + ui.onNodeWithText("Project result 1").assertIsDisplayed() + ui.runOnIdle { assertNull(backend.lastError) } + } + + @Test fun horizontalTablesDeliverTypedEditsAndPresentFilterSortSettings() { + mount() + val bullet = ui.onNodeWithTag("outliner.bullet-glyph.query-owner", useUnmergedTree = true) + .getUnclippedBoundsInRoot() + val toolbar = ui.onNodeWithTag("view.toolbar.query-owner", useUnmergedTree = true) + .getUnclippedBoundsInRoot() + assertEquals("The collection starts at the owning bullet center", + (bullet.left.value + bullet.right.value) / 2, toolbar.left.value, 0.5f) + selectView("table") + ui.onNodeWithTag("view.type.table").assertIsDisplayed() + ui.onNodeWithTag("view.table.scroll.table").assertIsDisplayed() + capture("table") + ui.onNodeWithTag("view.cell.table.result-0.user.property/Score") + .performScrollTo().performClick() + ui.onNodeWithTag("view.edit.value.table").performTextReplacement("35") + capture("cell-editor") + ui.onNodeWithTag("view.edit.create.table").performClick() + ui.runOnIdle { + var found = false + repeat(32) { + val encoded = bridge.takeEffect() + if (encoded.isNotEmpty()) { + val dispatch = JSONObject(encoded) + val effect = dispatch.optJSONObject("effect") + if (effect?.optString("kind") == "result-view") { + val payload = JSONObject(effect.getString("text")) + assertEquals("editCell", payload.getString("action")) + assertEquals("35", payload.getString("value")) + bridge.resolveEffect(effect.getLong("id"), true, "").takeIf { it.isNotEmpty() }?.let { filter.applyJson(it) } + found = true + } + } + } + check(found) { "The native editor must send a core result-view mutation" } + } + ui.onNodeWithTag("view.edit.value.table").assertDoesNotExist() + ui.onNodeWithTag("view.filter.table").performClick() + ui.onNodeWithTag("view.filter.list.table").assertIsDisplayed() + val settingsTop = ui.onNodeWithText("Filters").fetchSemanticsNode().boundsInWindow.top + val screenHeight = InstrumentationRegistry.getInstrumentation().targetContext.resources.displayMetrics.heightPixels + assertTrue("Utility sheets should open partially and remain expandable", settingsTop > screenHeight * 0.25f) + ui.onNodeWithTag("view.filter.add.table").performClick() + capture("settings") + ui.onNodeWithTag("view.settings.cancel.table").performClick() + selectView("list") + ui.onNodeWithText("Project result 1").assertIsDisplayed() + ui.runOnIdle { assertNull(backend.lastError) } + } +} diff --git a/android/app/src/main/kotlin/com/logseq/app/runtime/LogseqIcons.kt b/android/app/src/main/kotlin/com/logseq/app/runtime/LogseqIcons.kt index 238ea523..b75cecb7 100644 --- a/android/app/src/main/kotlin/com/logseq/app/runtime/LogseqIcons.kt +++ b/android/app/src/main/kotlin/com/logseq/app/runtime/LogseqIcons.kt @@ -191,6 +191,11 @@ internal val logseqAppIcons: Map = mapOf( "toolbar-copy" to Icons.Outlined.FileCopy, "toolbar-copy-reference" to copyReference, "toolbar-copy-url" to Icons.Outlined.Link, + "view-list" to Icons.Filled.List, + "view-table" to Icons.Outlined.TableChart, + "view-gallery" to Icons.Outlined.GridView, + "view-filter" to Icons.Outlined.FilterList, + "view-sort" to Icons.Outlined.SwapVert, "toolbar-delete" to Icons.Outlined.Delete, "toolbar-hide-keyboard" to Icons.Outlined.KeyboardHide, "toolbar-indent" to Icons.AutoMirrored.Filled.ArrowForward, diff --git a/apple/Package.resolved b/apple/Package.resolved index 329c035c..9077c30d 100644 --- a/apple/Package.resolved +++ b/apple/Package.resolved @@ -15,7 +15,7 @@ "kind" : "remoteSourceControl", "location" : "ssh://git@github.com/logseq/lui.git", "state" : { - "revision" : "e91ee491f12f11b0a605d62dfd87697a7d02b581" + "revision" : "c1a098f2f7893b7714c3a60118413b1c6d24cd50" } }, { diff --git a/apple/Package.swift b/apple/Package.swift index f8261850..7e24cc0b 100644 --- a/apple/Package.swift +++ b/apple/Package.swift @@ -44,7 +44,7 @@ let package = Package( .library(name: "LogseqModel", type: .dynamic, targets: ["LogseqModel"]), ], dependencies: [ - .package(url: "ssh://git@github.com/logseq/lui.git", revision: "e91ee491f12f11b0a605d62dfd87697a7d02b581"), + .package(url: "ssh://git@github.com/logseq/lui.git", revision: "c1a098f2f7893b7714c3a60118413b1c6d24cd50"), .package(url: "https://github.com/gonzalezreal/swiftui-math", from: "0.1.0"), .package(url: "https://github.com/appstefan/highlightswift.git", from: "1.1.0") ], diff --git a/apple/Sources/Logseq/LGRenderer.swift b/apple/Sources/Logseq/LGRenderer.swift index 78307d5e..11fe0ff8 100644 --- a/apple/Sources/Logseq/LGRenderer.swift +++ b/apple/Sources/Logseq/LGRenderer.swift @@ -110,6 +110,11 @@ enum LGIconPolicy { "toolbar-copy": .systemName("doc.on.doc"), "toolbar-copy-reference": .systemName("r.square"), "toolbar-copy-url": .systemName("link"), + "view-list": .systemName("list.bullet"), + "view-table": .systemName("tablecells"), + "view-gallery": .systemName("square.grid.2x2"), + "view-filter": .systemName("line.3.horizontal.decrease"), + "view-sort": .systemName("arrow.up.arrow.down"), "toolbar-delete": .systemName("trash"), "toolbar-hide-keyboard": .assetName("toolbar_hide_keyboard"), "toolbar-indent": .assetName("toolbar_indent"), diff --git a/apple/Sources/Logseq/LGRuntime.swift b/apple/Sources/Logseq/LGRuntime.swift index 601f9f6c..468c3f6e 100644 --- a/apple/Sources/Logseq/LGRuntime.swift +++ b/apple/Sources/Logseq/LGRuntime.swift @@ -320,6 +320,7 @@ public final class LGRuntime { } let text = Self.extensionString(values, name: "title") ?? Self.extensionString(values, name: "query") + ?? Self.extensionString(values, name: "priority") ?? Self.extensionString(values, name: "uuid") ?? "" let value = Self.extensionInt(values, name: "caret-utf16-offset") diff --git a/apple/Sources/Logseq/OutlinerRowExtension.swift b/apple/Sources/Logseq/OutlinerRowExtension.swift index f14a9f6e..212df61d 100644 --- a/apple/Sources/Logseq/OutlinerRowExtension.swift +++ b/apple/Sources/Logseq/OutlinerRowExtension.swift @@ -60,6 +60,7 @@ struct OutlinerRowPayload: Decodable, Equatable { let priority: Status? let status: Status? let statuses: [Status] + let priorities: [Status]? let tags: [Summary] } @@ -86,7 +87,7 @@ struct OutlinerRowPayload: Decodable, Equatable { } static let identifier = "outliner-block-row" - static let fingerprint = "lui-extension-v1|18:outliner-block-row|profiles:ios/swiftui|standard-children:1|children:|properties:7:payload:string:required:none|events:10:drag-start[4:uuid:string:required],10:long-press[4:uuid:string:required],10:set-status[4:uuid:string:required,5:count:int:required],4:drop[4:uuid:string:required,9:placement:string:required],4:edit[4:uuid:string:required],8:collapse[4:uuid:string:required],9:open-node[4:uuid:string:required]" + static let fingerprint = "lui-extension-v1|18:outliner-block-row|profiles:ios/swiftui|standard-children:1|children:|properties:7:payload:string:required:none|events:10:drag-start[4:uuid:string:required],10:long-press[4:uuid:string:required],10:set-status[4:uuid:string:required,5:count:int:required],12:set-priority[8:priority:string:required],4:drop[4:uuid:string:required,9:placement:string:required],4:edit[4:uuid:string:required],8:collapse[4:uuid:string:required],9:open-node[4:uuid:string:required]" static func register(in registry: LUIAppleExtensionRegistry, playback: LGYouTubePlaybackState) throws { let uuid = LUIExtensionEventField(name: "uuid", kind: .string, isRequired: true) @@ -96,7 +97,8 @@ struct OutlinerRowPayload: Decodable, Equatable { events: ["edit", "open-node", "collapse", "long-press", "drag-start"].map { LUIExtensionEvent(name: $0, fields: [uuid]) } + [.init(name: "drop", fields: [uuid, .init(name: "placement", kind: .string, isRequired: true)]), - .init(name: "set-status", fields: [uuid, .init(name: "count", kind: .int, isRequired: true)])] + .init(name: "set-status", fields: [uuid, .init(name: "count", kind: .int, isRequired: true)]), + .init(name: "set-priority", fields: [.init(name: "priority", kind: .string, isRequired: true)])] ) { context in guard case let .string(encoded) = context.property("payload"), let row = payload(encoded) else { @@ -201,9 +203,25 @@ struct OutlinerRowPayload: Decodable, Equatable { .accessibilityIdentifier("button.block-task-status") } if let priority = row.priority { - statusIcon(priority).frame(width: 20, height: 24) - .padding(.trailing, 5) - .accessibilityLabel(priority.title) + Menu { + Picker("Priority", selection: Binding(get: { priority.uuid }, set: { + emit("set-priority", extra: ["priority": .string($0)]) + })) { + ForEach(row.priorities ?? []) { item in + SwiftUI.Label { Text(verbatim: item.title) } icon: { statusIcon(item) } + .tag(item.uuid) + .accessibilityIdentifier("button.block-task-priority-option." + item.uuid) + } + } + Button("Clear priority", role: .destructive) { + emit("set-priority", extra: ["priority": .string("")]) + } + } label: { + statusIcon(priority).frame(width: 20, height: 24) + } + .padding(.trailing, 5) + .accessibilityLabel(priority.title) + .accessibilityIdentifier("button.block-task-priority") } VStack(alignment: .leading, spacing: 2) { if let editor = context.childIDs.first { @@ -275,7 +293,7 @@ struct OutlinerRowPayload: Decodable, Equatable { private func emit(_ name: String, uuid: String? = nil, extra: [String: LUIExtensionValue] = [:]) { guard context.isUserInteractionEnabled else { return } var values = extra - values["uuid"] = .string(uuid ?? row.uuid) + if name != "set-priority" { values["uuid"] = .string(uuid ?? row.uuid) } do { try context.emit(name: name, values: values) } catch { LogseqRuntimeLog.shared.append(level: .error, source: .ui, message: "Outliner interaction failed: \(error)") } } diff --git a/apple/Sources/Logseq/OutlinerTextRow.swift b/apple/Sources/Logseq/OutlinerTextRow.swift index 7642d33a..1e1ac9c0 100644 --- a/apple/Sources/Logseq/OutlinerTextRow.swift +++ b/apple/Sources/Logseq/OutlinerTextRow.swift @@ -45,7 +45,7 @@ struct OutlinerTextRow: UIViewRepresentable { private let guides = OutlinerIndentGuideView() private let title = OutlinerTitleLabel() private let bullet = UIButton(type: .custom) - private let priority = UIImageView() + private let priority = UIButton(type: .custom) private let status = UIButton(type: .custom) private let disclosure = UIButton(type: .custom) private let failure = UILabel() @@ -64,6 +64,9 @@ struct OutlinerTextRow: UIViewRepresentable { bullet.setImage(UIImage(named: "outliner_bullet", in: .module, compatibleWith: nil)?.withRenderingMode(.alwaysTemplate), for: .normal) bullet.tintColor = UIColor.secondaryLabel.withAlphaComponent(0.4) bullet.addTarget(self, action: #selector(open), for: .touchUpInside) + priority.showsMenuAsPrimaryAction = true + priority.preferredMenuElementOrder = .fixed + priority.accessibilityIdentifier = "button.block-task-priority" status.imageView?.contentMode = .scaleAspectFit status.showsMenuAsPrimaryAction = true status.preferredMenuElementOrder = .fixed @@ -137,11 +140,23 @@ struct OutlinerTextRow: UIViewRepresentable { bullet.isUserInteractionEnabled = !row.journalBullet bullet.accessibilityTraits = row.journalBullet ? .image : .button priority.isHidden = row.priority == nil - priority.contentMode = .scaleAspectFit - priority.image = row.priority.flatMap { statusImage($0.icon) } - applyIconShadow(priority) + priority.imageView?.contentMode = .scaleAspectFit + priority.setImage(row.priority.flatMap { statusImage($0.icon) }, for: .normal) + applyIconShadow(priority.imageView) priority.tintColor = .secondaryLabel priority.accessibilityLabel = row.priority?.title + if let selected = row.priority { + var actions = (row.priorities ?? []).map { item in + UIAction(title: item.title, image: item.menuImage(in: semanticColors), + state: item.uuid == selected.uuid ? .on : .off) { [weak self] _ in + self?.emit?("set-priority", nil, ["priority": .string(item.uuid)]) + } + } + actions.append(UIAction(title: String(localized: "Clear priority"), attributes: .destructive) { [weak self] _ in + self?.emit?("set-priority", nil, ["priority": .string("")]) + }) + priority.menu = UIMenu(children: actions) + } else { priority.menu = nil } status.isHidden = row.status == nil if let task = row.status { status.setImage(statusImage(task.icon), for: .normal) diff --git a/apple/Tests/UI/priority-menu.swift b/apple/Tests/UI/priority-menu.swift new file mode 100644 index 00000000..d16a4578 --- /dev/null +++ b/apple/Tests/UI/priority-menu.swift @@ -0,0 +1,130 @@ +import SwiftUI +import UIKit +import Vision +@testable import Logseq +@testable import LUIAppleBackend + +@MainActor private final class PriorityEffects: LGEffectExecuting { + var choices: [String] = [] + func execute(_ effect: LGEffect) async -> LGEffectResolution { + if effect.kind == "set-outliner-task-priority" { choices.append(effect.metadata ?? "") } + return LGEffectResolution(succeeded: true, message: "", output: .discard) + } +} + +@main struct PriorityMenuCheck { + @MainActor static func main() async throws { + let choices: [[String: Any]] = [ + ["uuid": "low", "title": "Low", "icon": "app:priority-low"], + ["uuid": "urgent", "title": "Urgent", "icon": "app:priority-urgent"], + ["uuid": "custom", "title": "Critical", "icon": "app:priority-high"] + ] + var payload: [String: Any] = [ + "uuid": "task", "title": "Task priority", "markup": [], "depth": 0, + "hasChildren": false, "collapsed": false, "isAsset": false, "assetType": "", + "localPath": "", "youtubeURL": "", "completed": false, "selected": false, + "opensAsPage": false, "journalBullet": false, "syncFailed": false, + "status": ["uuid": "todo", "title": "Todo", "icon": "app:task-todo"], + "statuses": [], "priority": choices[0], "priorities": choices, "tags": [] + ] + func row() throws -> OutlinerRowPayload { + try JSONDecoder().decode(OutlinerRowPayload.self, from: JSONSerialization.data(withJSONObject: payload)) + } + var events: [(String, [String: LUIExtensionValue])] = [] + let native = OutlinerTextRowView() + func update() throws { native.update(try row(), emit: { name, _, values in events.append((name, values)) }) } + try update() + let scene = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.first! + let window = UIWindow(windowScene: scene) + let controller = UIViewController() + controller.view.backgroundColor = .systemBackground + controller.view.addSubview(native) + window.rootViewController = controller + window.makeKeyAndVisible() + native.frame = CGRect(x: 16, y: 150, width: window.bounds.width - 32, height: 60) + native.layoutIfNeeded() + defer { window.isHidden = true; window.rootViewController = nil } + guard let button = native.subviews.first(where: { $0.accessibilityIdentifier == "button.block-task-priority" }) as? UIButton else { + throw failure("Priority must be a native menu button, not an inert image") + } + guard button.showsMenuAsPrimaryAction, let menu = button.menu else { + throw failure("Tapping the priority button must open a native popup") + } + let actions = menu.children.compactMap { $0 as? UIAction } + guard actions.map(\.title) == ["Low", "Urgent", "Critical", "Clear priority"], + actions[0].state == .on, actions[1].state == .off else { + throw failure("Priority menu must preserve graph choices and check the current value") + } + if #available(iOS 17.4, *) { button.performPrimaryAction() } + try await Task.sleep(for: .milliseconds(500)) + let image = UIGraphicsImageRenderer(bounds: window.bounds).image { _ in + window.drawHierarchy(in: window.bounds, afterScreenUpdates: true) + } + try image.pngData()!.write(to: URL.documentsDirectory.appendingPathComponent("priority-popup.png")) + let request = VNRecognizeTextRequest() + request.recognitionLevel = .accurate + try VNImageRequestHandler(cgImage: image.cgImage!, options: [:]).perform([request]) + let visible = (request.results ?? []).compactMap { $0.topCandidates(1).first?.string }.joined(separator: " ") + guard visible.contains("Urgent") && visible.contains("Critical") else { + throw failure("The native popup must actually be visible: \(visible)") + } + button.contextMenuInteraction?.dismissMenu() + try await Task.sleep(for: .milliseconds(200)) + guard events.isEmpty else { throw failure("Dismissing a priority menu must not mutate the block") } + // Invoke the real menu action through UIKit's public target/action API. + let actionControl = UIControl() + actionControl.addAction(actions[2], for: .primaryActionTriggered) + actionControl.sendActions(for: .primaryActionTriggered) + guard events.count == 1, events[0].0 == "set-priority", events[0].1["priority"] == .string("custom") else { + throw failure("A custom choice must emit its stable UUID") + } + payload["priority"] = choices[2] + try update() + let updated = button.menu!.children.compactMap { $0 as? UIAction } + guard updated[2].state == .on, updated[0].state == .off else { throw failure("A retained row must refresh its checked priority") } + actionControl.addAction(updated[3], for: .touchUpInside) + actionControl.sendActions(for: .touchUpInside) + guard events.count == 2, events[1].1["priority"] == .string("") else { throw failure("Clear priority must emit an explicit empty selection") } + payload.removeValue(forKey: "priority") + try update() + guard button.isHidden, button.menu == nil else { throw failure("Reused rows must clear stale priority menus") } + let effects = PriorityEffects() + let runtime = LGRuntime(native: LGCoreNativeCaller(), effectExecutor: effects) + let snapshot: [String: Any] = ["ok": true, "result": [ + "selectedGraphId": "priority", "graphName": "Priority regression", + "taskPriorities": [["uuid": "custom", "title": "Critical"]], + "outlinerRows": [["depth": 0, "block": ["uuid": "task", "title": "Task priority", + "pageId": "page", "priority": ["uuid": "custom", "title": "Critical"]]]] + ]] + try runtime.applyCoreResponse(String(decoding: JSONSerialization.data(withJSONObject: snapshot), as: UTF8.self)) + try runtime.start(platformCode: 2, hostCode: 2, authenticationCode: 3) + try runtime.applyHostUpdate(kind: "graph-loading", payload: "false") + window.rootViewController = UIHostingController(rootView: LGRendererRoot(renderer: runtime.renderer)) + defer { runtime.stop() } + try await Task.sleep(for: .milliseconds(400)) + func buttons(_ view: UIView) -> [UIButton] { + ((view as? UIButton).map { [$0] } ?? []) + view.subviews.flatMap(buttons) + } + guard let rendered = buttons(window.rootViewController!.view).first(where: { + $0.accessibilityIdentifier == "button.block-task-priority" + }), let choice = rendered.menu?.children.first as? UIAction else { + throw failure("The shared runtime must mount the native priority menu") + } + actionControl.addAction(choice, for: .touchDown) + actionControl.sendActions(for: .touchDown) + for _ in 0..<100 { + if !effects.choices.isEmpty { break } + try await Task.sleep(for: .milliseconds(20)) + } + guard effects.choices.count == 1, + let data = effects.choices[0].data(using: .utf8), + let selected = try JSONSerialization.jsonObject(with: data) as? [String: Any], + selected["uuid"] as? String == "custom", runtime.lastError == nil else { + throw failure("A native menu selection must survive the complete extension and effect bridge") + } + print("PASS: native priority popup visibly opens, selects custom values, checks current selection, cancels, clears, and resets reused rows") + } + private static func failure(_ message: String) -> NSError { + NSError(domain: "PriorityMenuCheck", code: 1, userInfo: [NSLocalizedDescriptionKey: message]) + } +} diff --git a/apple/Tests/UI/pushed-block-selection.swift b/apple/Tests/UI/pushed-block-selection.swift new file mode 100644 index 00000000..46b90e07 --- /dev/null +++ b/apple/Tests/UI/pushed-block-selection.swift @@ -0,0 +1,106 @@ +import SwiftUI +import UIKit +import Vision +@testable import LUIAppleBackend +@testable import Logseq + +@MainActor private final class SelectionEffects: LGEffectExecuting { + var actions: [String] = [] + func execute(_ effect: LGEffect) async -> LGEffectResolution { + actions.append(effect.kind) + return LGEffectResolution(succeeded: true, message: "", output: .discard) + } +} + +@main struct PushedBlockSelectionCheck { + @MainActor static func main() async throws { + var opened = false + var selected = false + func snapshot() throws -> String { + let row: [String: Any] = ["depth": 0, "block": [ + "uuid": "project", "title": "Research nested tags and boolean query composition", + "pageId": "sample", "breadcrumbs": [["uuid": "sample", "title": "Sample Data"]] + ]] + var result: [String: Any] = [ + "graphName": "Selection regression", "selectedGraphId": "selection", + "outlinerRows": [row], "outlinerState": ["selectedBlockIds": []] + ] + if opened { + result["nodeRoutes"] = [[ + "uuid": "project", "title": "Research nested tags", + "page": ["uuid": "sample", "title": "Sample Data"], + "breadcrumbs": [["uuid": "sample", "title": "Sample Data"]], + "outlinerRows": [row], + "outlinerState": ["selectedBlockIds": selected ? ["project"] : []] + ]] + } + return String(decoding: try JSONSerialization.data(withJSONObject: ["ok": true, "result": result]), as: UTF8.self) + } + let effects = SelectionEffects() + let runtime = LGRuntime(native: LGCoreNativeCaller(), effectExecutor: effects) + try runtime.applyCoreResponse(snapshot()) + try runtime.start(platformCode: 2, hostCode: 2, authenticationCode: 3) + try runtime.applyHostUpdate(kind: "graph-loading", payload: "false") + let backend = runtime.renderer.backend + func descendants(_ id: Int) -> [Int] { + [id] + (backend.model(id: id)?.children ?? backend.extensionModel(id: id)?.children ?? []).flatMap(descendants) + } + func find(_ identifier: String) -> Int? { + backend.rootIDs.flatMap(descendants).last { + backend.model(id: $0)?.property(.accessibilityIdentifier)?.stringValue == identifier + } + } + func row() -> Int? { + guard let block = find("outliner.block.project") else { return nil } + return descendants(block).first { backend.extensionModel(id: $0)?.identifier == "outliner-block-row" } + } + func wait(_ message: String, until condition: () -> Bool) async throws { + for _ in 0..<100 { + if condition() { return } + try await Task.sleep(for: .milliseconds(20)) + } + throw failure(message) + } + let scene = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.first! + let window = UIWindow(windowScene: scene) + window.rootViewController = UIHostingController(rootView: LGRendererRoot(renderer: runtime.renderer)) + window.makeKeyAndVisible() + defer { window.isHidden = true; window.rootViewController = nil; runtime.stop() } + try await wait("The source block must render") { row() != nil } + try backend.performExtensionEvent(node: row()!, name: "open-node", values: ["uuid": .string("project")]) + try await wait("Opening the block must dispatch navigation") { effects.actions.contains("open-node") } + opened = true + try runtime.applyCoreResponse(snapshot()) + try await Task.sleep(for: .milliseconds(500)) + try backend.performExtensionEvent(node: row()!, name: "long-press", values: ["uuid": .string("project")]) + selected = true + try runtime.applyCoreResponse(snapshot()) + try await wait("A selected pushed block must own a select bar") { find("toolbar.outliner.selection") != nil } + try await Task.sleep(for: .milliseconds(500)) + window.layoutIfNeeded() + let image = UIGraphicsImageRenderer(bounds: window.bounds).image { _ in + window.drawHierarchy(in: window.bounds, afterScreenUpdates: true) + } + try image.pngData()!.write(to: URL.documentsDirectory.appendingPathComponent("pushed-block-selection.png")) + let request = VNRecognizeTextRequest() + request.recognitionLevel = .accurate + request.regionOfInterest = CGRect(x: 0, y: 0, width: 1, height: 0.25) + try VNImageRequestHandler(cgImage: image.cgImage!, options: [:]).perform([request]) + let visible = (request.results ?? []).compactMap { $0.topCandidates(1).first?.string }.joined(separator: " ") + guard visible.contains("Copy") && visible.contains("Delete") && visible.contains("Unselect") else { + throw failure("The pushed destination must visibly render native bottom actions: \(visible)") + } + try backend.performPress(node: find("button.outliner.selection.copy")!) + try await wait("Copy must reach the shared outliner pipeline") { effects.actions.contains("outliner-toolbar") } + try backend.performPress(node: find("button.outliner.selection.unselect")!) + selected = false + try runtime.applyCoreResponse(snapshot()) + try await wait("Unselect must remove the destination select bar") { find("toolbar.outliner.selection") == nil } + guard runtime.lastError == nil else { throw failure(runtime.lastError!) } + print("PASS: pushed block selection visibly presents native actions, dispatches Copy, and dismisses on Unselect") + } + + static func failure(_ message: String) -> NSError { + NSError(domain: "PushedBlockSelection", code: 1, userInfo: [NSLocalizedDescriptionKey: message]) + } +} diff --git a/apple/Tests/UI/query-block-results.swift b/apple/Tests/UI/query-block-results.swift new file mode 100644 index 00000000..4ce81db7 --- /dev/null +++ b/apple/Tests/UI/query-block-results.swift @@ -0,0 +1,308 @@ +import SwiftUI +import UIKit +import Vision +@testable import LUIAppleBackend +@testable import Logseq + +@MainActor private final class QueryEffects: LGEffectExecuting { + var opened: [String] = [] + var actions: [String] = [] + var viewEdits: [[String: Any]] = [] + var saveType: ((String, String) throws -> String)? + func execute(_ effect: LGEffect) async -> LGEffectResolution { + if effect.kind == "open-node" { opened.append(effect.text) } + actions.append(effect.kind) + if effect.kind == "result-view", let data = effect.text.data(using: .utf8), + let payload = try? JSONSerialization.jsonObject(with: data) as? [String: Any] { + viewEdits.append(payload) + if payload["action"] as? String == "save", + let view = payload["viewUuid"] as? String, + let type = (payload["config"] as? [String: Any])?["type"] as? String, + let saveType { + do { return LGEffectResolution(succeeded: true, message: try saveType(view, type)) } + catch { return LGEffectResolution(succeeded: false, message: String(describing: error)) } + } + } + return LGEffectResolution(succeeded: true, message: "", output: .discard) + } +} + +@main struct QueryBlockResultsCheck { + @MainActor static func main() async throws { + var resultCount = 3 + var queryError: String? + var selected: [String] = [] + var includeViews = false + var viewTypes: [String: String] = [:] + func snapshot() throws -> String { + let results: [[String: Any]] = (0.. [String: Any] in + var result = result + result["properties"] = [ + ["attr": "block/title", "text": "Project result \(index + 1)", "editable": true, + "raw": ["type": "string", "value": "Project result \(index + 1)"]], + ["attr": "user.property/Score", "kind": "number", "text": index == 1 ? "" : "\(index + 1)", "editable": true, + "raw": ["type": "ref-uuid", "value": String(format: "30000000-0000-4000-8000-%012d", index + 1)]], + ["attr": "user.property/Ready", "kind": "checkbox", "text": "true", "editable": true, + "raw": ["type": "bool", "value": true]] + ] + return result + } + query["ownerUuid"] = "query-owner" + query["featureType"] = "query-result" + query["views"] = ["list", "table", "gallery", "broken"].map { type -> [String: Any] in + ["uuid": type, "name": type.capitalized, "type": viewTypes[type] ?? (type == "broken" ? "table" : type), + "columns": columns, "rows": type == "broken" ? [] : rows, + "error": type == "broken" ? "Invalid view configuration" : NSNull()] + } + } + let result: [String: Any] = [ + "graphName": "Query rendering", "selectedGraphId": "query-check", + "outlinerState": ["selectedBlockIds": selected], + "outlinerRows": [["depth": 0, "hasChildren": false, "isCollapsed": false, + "block": ["uuid": "query-owner", "title": "Project overview", "pageId": "page", + "query": query]]] + ] + return String(decoding: try JSONSerialization.data(withJSONObject: ["ok": true, "result": result]), as: UTF8.self) + } + let effects = QueryEffects() + effects.saveType = { view, type in viewTypes[view] = type; return try snapshot() } + let runtime = LGRuntime(native: LGCoreNativeCaller(), effectExecutor: effects) + try runtime.applyCoreResponse(snapshot()) + try runtime.start(platformCode: 2, hostCode: 2, authenticationCode: 3) + try runtime.applyHostUpdate(kind: "graph-loading", payload: "false") + let backend = runtime.renderer.backend + func descendants(_ id: Int) -> [Int] { + [id] + (backend.model(id: id)?.children ?? backend.extensionModel(id: id)?.children ?? []).flatMap(descendants) + } + func find(_ identifier: String) -> Int? { + backend.rootIDs.flatMap(descendants).first { + backend.model(id: $0)?.property(.accessibilityIdentifier)?.stringValue == identifier + } + } + func nativeRow(_ uuid: String) -> Int? { + guard let block = find("outliner.block.\(uuid)") else { return nil } + return descendants(block).first { backend.extensionModel(id: $0)?.identifier == "outliner-block-row" } + } + func wait(_ message: String, until condition: () -> Bool) async throws { + for _ in 0..<100 { + if condition() { return } + try await Task.sleep(for: .milliseconds(20)) + } + throw failure(message + "; runtime error: " + (runtime.lastError ?? "none")) + } + let scene = UIApplication.shared.connectedScenes.compactMap { $0 as? UIWindowScene }.first! + let window = UIWindow(windowScene: scene) + window.rootViewController = UIHostingController(rootView: LGRendererRoot(renderer: runtime.renderer)) + window.makeKeyAndVisible() + defer { window.isHidden = true; window.rootViewController = nil; runtime.stop() } + try await wait("Query results must mount in the native outline") { + find("query.result.query-owner.2") != nil + } + try await Task.sleep(for: .milliseconds(700)) + window.layoutIfNeeded() + let image = UIGraphicsImageRenderer(bounds: window.bounds).image { _ in + window.drawHierarchy(in: window.bounds, afterScreenUpdates: true) + } + try image.pngData()!.write(to: URL.documentsDirectory.appendingPathComponent("query-block-results.png")) + let request = VNRecognizeTextRequest() + request.recognitionLevel = .accurate + try VNImageRequestHandler(cgImage: image.cgImage!, options: [:]).perform([request]) + let visible = (request.results ?? []).compactMap { $0.topCandidates(1).first?.string }.joined(separator: " ") + guard visible.contains("Project result 1") && visible.contains("Project result 3") else { + throw failure("Query results must have visible rich-text content: \(visible)") + } + guard visible.contains("Workspace"), find("outliner.block.child") == nil else { + throw failure("List results need breadcrumbs and initially folded children") + } + try backend.performExtensionEvent(node: nativeRow("result-0")!, name: "collapse", values: ["uuid": .string("result-0")]) + try await wait("Expanding a result must render its child block") { find("outliner.block.child") != nil } + try backend.performExtensionEvent(node: nativeRow("result-0")!, name: "collapse", values: ["uuid": .string("result-0")]) + try await wait("Result children must fold independently") { find("outliner.block.child") == nil } + try backend.performExtensionEvent(node: nativeRow("result-0")!, name: "long-press", values: ["uuid": .string("result-0")]) + try await Task.sleep(for: .milliseconds(150)) + selected = ["result-0"] + try runtime.applyCoreResponse(snapshot()) + try await wait("Selected results must display the select bar") { find("toolbar.outliner.selection") != nil } + try await Task.sleep(for: .milliseconds(350)) + let selectedImage = UIGraphicsImageRenderer(bounds: window.bounds).image { _ in + window.drawHierarchy(in: window.bounds, afterScreenUpdates: true) + } + try selectedImage.pngData()!.write(to: URL.documentsDirectory.appendingPathComponent("query-selection.png")) + try backend.performPress(node: find("button.outliner.selection.copy")!) + try await wait("Select bar actions must reach the outliner pipeline") { effects.actions.contains("outliner-toolbar") } + selected = [] + try runtime.applyCoreResponse(snapshot()) + try backend.performPress(node: find("query.toggle.query-owner")!) + try await wait("Folding must unmount query rows") { find("query.rows.query-owner") == nil } + try backend.performPress(node: find("query.toggle.query-owner")!) + try await wait("Unfolding must restore query rows") { find("query.result.query-owner.0") != nil } + try backend.performExtensionEvent(node: nativeRow("result-0")!, name: "open-node", values: ["uuid": .string("result-0")]) + try await wait("Pressing a result must request its destination") { effects.opened == ["result-0"] } + resultCount = 25 + try runtime.applyCoreResponse(snapshot()) + try await wait("Long query results must expose Show more") { find("query.more.query-owner") != nil } + guard find("query.result.query-owner.24") == nil else { throw failure("Initial result mounting must stay bounded") } + try backend.performPress(node: find("query.more.query-owner")!) + try await wait("Show more must expose later results") { find("query.result.query-owner.24") != nil } + resultCount = 0 + try runtime.applyCoreResponse(snapshot()) + try await wait("Empty query results must be explicit") { find("query.empty.query-owner") != nil } + queryError = "Invalid query definition" + try runtime.applyCoreResponse(snapshot()) + try await wait("Query errors must stay inside their block") { find("query.error.query-owner") != nil } + includeViews = true + resultCount = 3 + queryError = nil + try runtime.applyCoreResponse(snapshot()) + try await wait("Multiple saved views must mount") { find("view.tab.table") != nil } + func capture(_ name: String) async throws -> String { + try await Task.sleep(for: .milliseconds(350)) + window.layoutIfNeeded() + let image = UIGraphicsImageRenderer(bounds: window.bounds).image { _ in + window.drawHierarchy(in: window.bounds, afterScreenUpdates: true) + } + try image.pngData()!.write(to: URL.documentsDirectory.appendingPathComponent(name)) + let request = VNRecognizeTextRequest() + request.recognitionLevel = .accurate + try VNImageRequestHandler(cgImage: image.cgImage!, options: [:]).perform([request]) + return (request.results ?? []).compactMap { $0.topCandidates(1).first?.string }.joined(separator: " ") + } + _ = try await capture("query-multiple-list.png") + try backend.performPress(node: find("view.tab.table")!) + try await wait("Table must mount a horizontal scroll container") { find("view.table.scroll.table") != nil } + let tableText = try await capture("query-table.png") + guard tableText.contains("Name") && tableText.contains("Project result 1") else { + throw failure("Table cells must have visible native content: \(tableText)") + } + try backend.performPress(node: find("view.cell.table.result-0.user.property/Score")!) + try await wait("Table cell editor must present") { find("view.edit.value.table") != nil } + _ = try await capture("query-cell-editor.png") + try backend.performTextChange(node: find("view.edit.value.table")!, text: "35") + try await wait("An open property must offer explicit creation") { find("view.edit.create.table") != nil } + try backend.performPress(node: find("view.edit.create.table")!) + try await wait("Typed edits must reach the core action adapter") { + effects.viewEdits.contains { ($0["action"] as? String) == "editCell" && ($0["value"] as? String) == "35" } + } + try await wait("Successful edits dismiss the editor") { find("view.edit.value.table") == nil } + try await wait("Native dismissal must finish before presenting settings") { + window.rootViewController?.presentedViewController == nil + } + window.overrideUserInterfaceStyle = .dark + try await Task.sleep(for: .milliseconds(150)) + func verifySettingsSheet(_ name: String) async throws { + _ = try await capture(name) + guard let presented = window.rootViewController?.presentedViewController else { + throw failure("Settings must use a native sheet") + } + let frame = presented.view.convert(presented.view.bounds, to: window) + let image = UIGraphicsImageRenderer(bounds: window.bounds).image { _ in + window.drawHierarchy(in: window.bounds, afterScreenUpdates: true) + } + let pixel = CGPoint(x: 8, y: frame.minY + 100) + var rgba = [UInt8](repeating: 0, count: 4) + let context = CGContext(data: &rgba, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, + space: CGColorSpaceCreateDeviceRGB(), bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)! + context.translateBy(x: -pixel.x, y: pixel.y - window.bounds.height + 1) + context.draw(image.cgImage!, in: window.bounds) + guard abs(Int(rgba[0]) - 0) <= 3, abs(Int(rgba[1]) - 45) <= 3, abs(Int(rgba[2]) - 56) <= 3 else { + throw failure("Dark settings background must match the graph palette; sampled RGBA: \(rgba), frame: \(frame)") + } + guard fields(in: presented.view).allSatisfy({ $0.borderStyle == .none }) else { + throw failure("Grouped settings inputs must use the native row background") + } + guard presented.sheetPresentationController?.detents.count == 2, + frame.height < window.bounds.height * 0.8 else { + throw failure("Settings must open as an expandable calendar-like sheet: \(frame)") + } + } + try backend.performPress(node: find("view.filter.table")!) + try await wait("Native filter settings must present") { find("view.filter.list.table") != nil } + try backend.performPress(node: find("view.filter.add.table")!) + try await verifySettingsSheet("query-filter-dark.png") + let settingsText = try await capture("query-view-settings.png") + guard settingsText.contains("Filters") && settingsText.contains("Filter 1") else { + throw failure("Filter and sort controls must render visibly: \(settingsText)") + } + try backend.performPress(node: find("view.settings.cancel.table")!) + try await wait("Filter dismissal must finish") { window.rootViewController?.presentedViewController == nil } + try backend.performPress(node: find("view.sort.table")!) + try await wait("Native sort settings must present") { find("view.sort.list.table") != nil } + try backend.performPress(node: find("view.sort.add.table")!) + try await verifySettingsSheet("query-sort-dark.png") + let sortText = try await capture("query-sort-settings.png") + guard sortText.contains("Sort") && sortText.contains("Ascending") else { + throw failure("Sort controls must visibly render: \(sortText)") + } + try backend.performPress(node: find("view.settings.cancel.table")!) + try await wait("Sort dismissal must finish") { window.rootViewController?.presentedViewController == nil } + try backend.performPress(node: find("view.tab.gallery")!) + try await wait("Gallery cards must mount") { find("view.card.gallery.result-0") != nil } + let galleryText = try await capture("query-gallery.png") + guard galleryText.contains("Project result 1") else { throw failure("Gallery content must be visible: \(galleryText)") } + try backend.performPress(node: find("view.search.toggle.query-owner")!) + try await wait("Search expands from its toolbar icon") { find("view.search.query-owner") != nil } + func fields(in view: UIView) -> [UITextField] { + ((view as? UITextField).map { [$0] } ?? []) + view.subviews.flatMap { fields(in: $0) } + } + for style in [UIUserInterfaceStyle.light, .dark] { + window.overrideUserInterfaceStyle = style + _ = try await capture(style == .dark ? "query-search-dark.png" : "query-search-light.png") + guard let field = fields(in: window.rootViewController!.view).first(where: { $0.placeholder == "Search results" }) else { + throw failure("Search must display a native input") + } + let frame = field.convert(field.bounds, to: window) + guard frame.minX >= 0, frame.maxX <= window.bounds.maxX - 4 else { + throw failure("Search must fit its indented collection without expanding the screen: \(frame)") + } + guard field.borderStyle == .none else { + throw failure("An inline search uses one native search surface, without a separate rounded black input") + } + } + try backend.performPress(node: find("view.type.option.gallery.table")!) + try await wait("The type icon must save the active view's type") { + effects.viewEdits.contains { ($0["viewUuid"] as? String) == "gallery" + && ($0["config"] as? [String: Any])?["type"] as? String == "table" } + } + try await wait("Changing the current view's type must mount its new renderer") { + find("view.table.scroll.gallery") != nil && find("view.gallery.gallery") == nil + } + let changedText = try await capture("query-type-changed-table.png") + guard changedText.contains("Name") && changedText.contains("Score") else { + throw failure("Changing view type must visibly replace the native gallery: \(changedText)") + } + try backend.performPress(node: find("view.type.option.gallery.gallery")!) + try await wait("Switching back must restore the gallery renderer") { find("view.gallery.gallery") != nil } + try backend.performTextChange(node: find("view.search.query-owner")!, text: "result 1") + try await wait("Search must filter gallery cards") { find("view.card.gallery.result-1") == nil } + try backend.performPress(node: find("view.tab.broken")!) + try await wait("A corrupt view must have a local error") { find("view.error.broken") != nil } + try backend.performPress(node: find("view.tab.list")!) + try await wait("Healthy sibling views remain usable") { find("outliner.block.result-0") != nil } + guard runtime.lastError == nil else { throw failure(runtime.lastError!) } + print("PASS: block lists, selection, saved view tabs, horizontal tables, typed cell editor, filter/sort settings, gallery, search, and local errors") + } + + static func failure(_ message: String) -> NSError { + NSError(domain: "QueryBlockResults", code: 1, userInfo: [NSLocalizedDescriptionKey: message]) + } +} diff --git a/docs/agent-guide/011-query-block-rendering.md b/docs/agent-guide/011-query-block-rendering.md new file mode 100644 index 00000000..4397a891 --- /dev/null +++ b/docs/agent-guide/011-query-block-rendering.md @@ -0,0 +1,132 @@ +# Query Block Rendering Implementation Plan + +Goal: Render DB graph Query blocks and their live simple or advanced query results on iOS and Android. + +Architecture: Execute queries against the same pending-operation DataScript projection as the outline. +Vendor the mobile-safe query algorithms from Logseq commit `a63da5cb7993302f8c58ccf42eaf0083b77cf42b` (dev plus the fixes in [upstream PR #13821](https://github.com/logseq/logseq/pull/13821)), following the existing `Dev_sync` extraction pattern. +Serialize query results with hydrated blocks and render them through shared LUI elements so both native hosts receive the same behavior. + +Tech Stack: OCaml, DataScript OCaml, melange-edn-native, LUI, native SwiftUI and Jetpack Compose hosts. + +Related: Builds on `002-ocaml-platform-boundary.md` and `003-shared-domain-consolidation.md`. + +## Problem statement + +The mobile outline currently renders Query-tagged blocks as ordinary blocks. +It does not follow `:logseq.property/query`, execute the referenced definition, or display results. +The upstream dev branch already supplies the DSL compiler, Datalog rule and input handling, and an EDN result-transform evaluator. +The mobile app should reuse those algorithms without importing the complete desktop worker and its platform dependencies. + +## Testing Plan + +Add `shared/test/logseq/query_block_test.ml` with seeded real graph databases and RPC sessions. +Cover simple tag, reference, property, task and boolean queries, advanced pull and aggregate queries, dynamic context and dates, user and built-in rules, transforms, empty results, invalid definitions, hidden and recursive results, and updates after local and remote changes. +Verify Query blocks execute in snapshots and distant-row hydration, while ordinary blocks remain unchanged. +Exercise the real shared UI on both native host protocols to verify results, navigation, error and empty messages, folding, and progressive result disclosure. +Verify query-result blocks do not recursively mount their own queries. +Run focused tests during development, then `rtk proxy dune build @shared/native/runtest` as the core gate. +Use native platform build checks as appropriate; do not run `swift test`. +NOTE: I will write *all* tests before I add any implementation behavior. + +## Data flow + +```text +Open graph + pending operations + | + projected DataScript DB + | +Query block -> referenced definition -> simple DSL / advanced Datalog + | | + +---------------------- results + errors + | + snapshot / content hydration + | + shared LUI query result view + / \ + SwiftUI Jetpack Compose +``` + +## Tasks and execution checklist + +- [x] Inspect upstream and current outline, snapshot, hydration, and pending-projection boundaries. +- [x] Create the implementation plan and active goal. +- [x] Write all regression and integration tests and observe missing-feature failures. +- [x] Add reproducible upstream extraction in `scripts/vendor-dev-query.py` and mobile adapters in `scripts/vendor-dev-query-platform.ml`. +- [x] Generate `shared/src/logseq/core/dev_query.ml` with a matching interface and pinned source/license provenance. +- [x] Implement `shared/src/logseq/core/query_block.ml` and `.mli` for definition resolution, execution, normalization, and isolated errors. +- [x] Expose the projected database through `shared/src/logseq/core/mobile_graph.ml`, `.mli`, `mobile_session.ml`, and `session_types.ml` / `.mli`. +- [x] Integrate results with `shared/src/logseq/core/rpc_session.ml` snapshots, hydration, and query RPC reads. +- [x] Carry query payloads through `shared/src/logseq/model.ml`, `.mli`, and `response_snapshot.ml`. +- [x] Add shared result rendering in `shared/src/logseq/view_query.ml`, `.mli`, and `view_outliner.ml`, registering modules in `shared/native/dune_modules/*.sexp`. +- [x] Fix upstream query parser defects with endpoint regressions and submit a PR against dev. +- [x] Run focused and full verification, review the diff, and record results here. + +Each implementation task starts by running its corresponding failing behavior test. +After implementing the minimum required behavior, rerun the focused test, then refactor and rerun it. +Checkpoint updates report progress while execution continues under the user's explicit goal authorization. + +## Behavior and edge cases + +| Situation | Required behavior | +| --- | --- | +| Query tag or query property | Resolve the property reference to its definition block. | +| Simple definition | Compile and execute the upstream DSL. | +| Advanced definition map | Execute `:query`, `:inputs`, and `:rules`, then optional `:result-transform`. | +| Scalar, tuple, aggregate, map results | Display readable values without inventing block identities. | +| Block results | Preserve markup and navigation identity; omit deleted, hidden, definition, and self results. | +| Query block in results | Display the block without recursively executing another query. | +| Empty definition | Display a useful empty-definition state. | +| Invalid or unsupported expression | Show a query-local error while sibling outline content remains usable. | +| Collapsed owner | Suppress query-result content. | +| Many results | Initially mount a bounded number and let the user reveal more. | +| Pending or remote edits | Recompute against the current projected DB, including hydrated distant rows. | +| Graph switch | Discard prior query data through the existing graph projection lifecycle. | + +## Testing Details + +Tests execute real queries over seeded DataScript databases through the session RPC and assert actual result identities and values. +UI tests mount the real shared app, apply its query-bearing snapshot, activate result controls, and inspect navigation and mounted content. +The full core test alias checks regressions in synchronization, projection, hydration, navigation, and rendering. + +## Implementation Details + +- Keep upstream algorithms reproducibly generated and mobile glue handwritten. +- Reuse the existing native EDN and Transit codecs. +- Adapt native platform helpers without adding browser or worker dependencies. +- Evaluate read operations against the pending projection without mutating the graph. +- Include source, kind, rows, and error state in each query payload. +- Use block JSON with markup for entity results and explicit textual cells for other values. +- Keep result navigation independent of outline editing and selection. +- Preserve bounded outline hydration and progressive result mounting. +- Surface unsupported custom Hiccup views explicitly; do not execute browser rendering code. +- Preserve pre-existing workspace edits and avoid unrelated changes. + +## Question + +No user input is required to begin. +Editable query builders and full desktop view customization are separate work. +Chrono-node natural-language dates remain outside upstream native support; standard relative dates and dynamic inputs are included. + +--- + +## Execution notes + +The query and host integration tests cover simple and advanced queries, tasks, priority, relative dates, pending edits, remote changes, and both native UI protocols. +Fixed two upstream tagged-reader defects in [logseq/logseq#13821](https://github.com/logseq/logseq/pull/13821): nested tag forms must be resolved recursively, and tagged constants must be flattening leaves rather than self-recursive nodes. +The vendored source now points directly to that upstream commit; no mobile parser patch or nested-reader workaround remains. +Four native endpoint regressions failed before the fix and passed afterward. The upstream worker `dune runtest` gate and focused seven-test Melange query suite pass. +The full core gate initially found two existing journal-layout checks affected by a new row wrapper. +The renderer now introduces the query wrapper only for Query blocks, preserving ordinary row structure. +The simulator visual check exposed that native buttons do not render arbitrary extension children. Query result entities now use clickable list items, which support rich-text children on both native hosts. + +Validation: + +- `python3 scripts/vendor-dev-query.py --check` verifies the generated source and license against commit `a63da5cb7993302f8c58ccf42eaf0083b77cf42b`. +- The focused query suite passes all 17 tests, including both native host protocols. +- `dune build @shared/native/runtest` passes all 921 core tests. +- The iOS simulator OCaml core and SwiftUI shell compile successfully; SwiftPM uses `--disable-sandbox` and `-enable-testing`. No XCTest or `swift test` is used. +- `LOGSEQ_RUNTIME_CHECK_ARTIFACTS=/tmp/logseq-query-artifacts python3 apple/Tests/UI/run-simulator-runtime-check.py apple/Tests/UI/query-block-results.swift QueryBlockResultsCheck` passes on the booted iOS 26 simulator. It checks screenshot text recognition, rich result content, folding, navigation, progressive disclosure, empty results, and local errors. +- Visually inspected `/tmp/logseq-query-artifacts/query-block-results.png`; all three rich-text result rows are visible under their Query block. +- `git diff --check` passes. The pre-existing `apple/Package.resolved` edit is preserved. + +Android execution and view behavior are covered through the Kotlin host protocol in the core suite; an Android emulator was not run. diff --git a/docs/agent-guide/012-result-views.md b/docs/agent-guide/012-result-views.md new file mode 100644 index 00000000..8323e350 --- /dev/null +++ b/docs/agent-guide/012-result-views.md @@ -0,0 +1,209 @@ +# Result Views Implementation Plan + +Goal: Provide native list, table, and gallery views for queries, tag objects, and property objects on iOS and Android. + +Architecture: Read saved view blocks and their settings using the master graph schema, and evaluate results against the pending-operation projection. +Reuse the full outliner block renderer and action pipeline for list results. +Keep view state and failures local while sharing native LUI controls between platforms. + +Tech Stack: OCaml, DataScript, LUI, SwiftUI, Jetpack Compose. + +Related: Builds on `011-query-block-rendering.md`. + +## Problem statement + +The initial query renderer displays rich text but bypasses normal block selection, editing, children, and breadcrumbs. +Tag and property object collections also need configurable saved views. +References retain their existing presentation. + +## Testing Plan + +Add regression tests in `shared/test/logseq/query_block_test.ml` for full block rendering on both native host protocols, breadcrumbs, initially collapsed children, expansion, selection, editing, and select bar actions against real RPC sessions. +Include results from other pages and verify their action contexts do not add duplicate rows to the main outline. +Keep ordinary outline collapse state independent from result presentation and prevent recursive query mounting. + +Add integration coverage for saved view tabs, list/table/gallery switching, case-insensitive search, master filter operators, multi-key sorting, missing values, and typed reference-backed property values. +Verify tag and property object scopes without changing references. +Exercise malformed saved views beside healthy views and verify errors remain local. +Verify table horizontal scrolling and real property edits through pending operations, including offline projection, invalid input, cancellation, and conflicts. +Run focused tests during development and `rtk proxy dune build @shared/native/runtest` for the final core gate. +Use simulator runtime checks and native platform builds without running `swift test`. +NOTE: I will write *all* tests before I add any implementation behavior. + +## Tasks and execution checklist + +- [x] Inspect master view storage, filter/sort behavior, native renderers, and the current selection failure. +- [x] Write the complete list interaction regression set and observe behavior failures. +- [x] Decode full result blocks in `shared/src/logseq/response_snapshot.ml` and reuse `View_outliner.outliner_row_body` through a renderer callback in `view_query.ml`. +- [x] Render breadcrumbs and child trees with result-local default folding. +- [x] Resolve result block actions through the RPC action context without polluting the page outline. +- [x] Verify list selection, select bar actions, editing, folding, and ordinary reference behavior. +- [x] Write saved view, search, filtering, sorting, scope, error, and editing integration tests before implementing those behaviors. +- [x] Add a result-view domain module using master `view-for`, `feature-type`, view type, filters, sorting, and column properties. +- [x] Integrate query, tag, and property result views into snapshots and mutation refreshes in `rpc_session.ml`. +- [x] Extend semantic property value codecs only where needed to persist master-compatible settings. +- [x] Add compact native view tabs and search/filter/sort controls, with list, horizontally scrolling table, and responsive gallery layouts. +- [x] Route editable cells through typed pending operations and present local validation or conflict errors. +- [x] Validate both platform protocols, inspect native rendering, update the demo, and record evidence. + +## Behavior + +| Area | Required behavior | +| --- | --- | +| Scope | Queries, tag objects, property objects; references use their existing renderer. | +| Saved views | Multiple named views stored as master-compatible blocks and selected with tabs. | +| List | Full block renderer, navigable breadcrumbs, children initially collapsed, editing and select bar actions. | +| Search | Per-view case-insensitive search combined with configured filters. | +| Filters | Master operators and typed values, including ref-backed property values and emptiness. | +| Sorting | Ordered sort keys, stable ties, missing values last. | +| Table | Horizontal scroll, readable columns, tappable editable property cells, computed cells read-only. | +| Gallery | Responsive cards with configurable visible properties. | +| Failure | Local error with recovery; siblings and application navigation remain usable. | +| Mobile UI | Accessible controls, comfortable touch targets, native keyboard and dismissal behavior. | + +## Testing Details + +Core regressions execute actual graph queries and session actions. +UI tests mount the real shared view and dispatch native host events, then inspect rendered blocks and selection controls. +Native runtime checks verify visible text, layout, and interaction on supported devices. + +## Implementation Details + +- Keep real block UUIDs throughout rendering and actions. +- Inject the full block renderer into result views to avoid a module dependency cycle. +- Keep result expansion independent of graph collapse properties. +- Load action targets from the projected graph rather than only the currently visible page. +- Preserve bounded rendering and avoid recursive nested query evaluation. +- Resolve property references before filtering, sorting, displaying, or editing cells. +- Assign new typed property values to their owner instead of mutating shared value entities. +- Store view settings using existing semantic operation infrastructure. +- Catch invalid configuration and result decoding at each view boundary. +- Preserve unrelated workspace edits. + +## Question + +No clarification is required to begin. +Multiple saved views follow master's tab interaction. + +--- + +## Execution notes + +The list regressions initially failed in five cases: full row rendering, breadcrumbs, folding, selection events, and cross-page actions. +Query result rows now use the same renderer and action pipeline as ordinary blocks on SwiftUI and Kotlin hosts. +Result-local folding starts collapsed and does not mutate source outline collapse state. +Cross-page actions load their source page from the projected database, while snapshots retain the original page scope. +The focused query suite passes 20 tests, the result-view suite passes 17 tests, and the complete core gate passes 941 tests. +The iOS simulator build and `QueryBlockResultsCheck` runtime check pass, including visible rich text and breadcrumbs, child folding, selection toolbar dispatch, and local errors. +Native screenshot evidence is in `/tmp/logseq-result-list-artifacts/query-block-results.png`. +Saved views, search, typed filters, multi-key sorting, table editing, gallery cards, tag collections, and property collections now run through the real core action and snapshot pipeline. +Graph settings remain EDN/DataScript values, including keywords, UUIDs, sets, maps, and vectors. +JSON is the existing native UI transport and snapshot projection, not the graph storage format. + +Master conformance uses 1113 cases generated by the production ClojureScript implementation at `05c3ae73e08498e9e20f1b11c3eac5525e5e588d`. +The checked fixture includes physical reference metadata, nullable bounds, empty values, all property kinds, and all three collection scopes. +Membership is verified through the real RPC; sorting is compared using identical candidate order because Datalog result order is unspecified. +The native view algorithm is vendored at `a7191d3d9deba5e34a6fb51d6454ed1d7e680965`. +Upstream filtering and sorting fixes are in https://github.com/logseq/logseq/pull/13823. + +The expanded iOS simulator runtime check passes full block rendering, folding, selection, saved tabs, horizontal table layout, cell editing, native settings presentation, gallery, search, and local errors. +Screenshots are in `/tmp/logseq-result-views-artifacts/`. +Native validation exposed an upstream LUI dynamic anchor that emitted an unsupported `stack.display=contents` combination. +Its failing regression and native-compatible box fix are in https://github.com/logseq/lui/pull/255. +The full LUI `dune runtest` gate passes. +The app now pins the corrected OCaml runtime without changing the existing Apple dependency lockfile edit. +Native iOS simulator and signed Release device builds pass. +Android arm64 native core and Debug APK builds pass. + +The demo has five simple and five advanced queries, plus 36 saved List/Table/Gallery views across those queries, the Project tag, and the Score property. +The native result-view mutation pipeline submitted all 36 views to the live server and a fresh snapshot at server t=88 preserves them. +A clean import executes all 10 queries with expected row counts and renders all 36 views without configuration errors. +The signed Release app and app-owned demo files have been installed on the paired iPhone. +The existing demo directory is preserved under the app's `Documents/demo-backups/` directory. + +CLI batch creation initially lost properties after canonical sync replay because insert payloads omitted subsequent property assignments. +A focused upstream regression reproduces this through actual apply-ops and canonical replay. +The fix retains final property values in inserted block payloads; full upstream native and Melange gates pass. + +## Native interaction revision + +User review found the first functional UI insufficiently native. +Use native view tabs on the left and separate filter, sort, and search icon actions on the right. +Remove the new-view action from the mobile UI. +Keep the entire collection aligned with the owning block bullet, including nested blocks. +Open a value selector directly from table cells, with immediate selection and explicit creation for open properties. +Use native grouped lists and toolbars for filter and sort configuration, preserving master semantics. +Fix selection toolbar ownership inside pushed block destinations. + +- [x] Write interaction, value-creation, layout, and destination-selection regressions and observe failures. +- [x] Implement native tabs, toolbar icons, bullet alignment, and search expansion. +- [x] Implement direct value selection, search, clear, and open-value creation. +- [x] Replace the filter/sort settings screen with native grouped interactions. +- [x] Validate real iOS and Android rendering, then install the revised build on iPhone. + + +The native revision now has 22 result-view integration tests, including immediate reference selection, explicit page creation, closed-value validation, multi-value creation, filter UUID sets, toolbar ordering, expandable search, and nested bullet alignment. +The full core gate passes 947 tests. +The pushed-block selection regression reproduces the original invisible toolbar on iOS and now verifies visible Copy/Delete/Unselect actions, effect dispatch, and dismissal. +Only the visible navigation destination owns its toolbar; covered destinations and cleared selections do not retain one. +Native iOS screenshots are in `/tmp/logseq-result-views-final-artifacts/` and `/tmp/logseq-selection-artifacts/`. + +Android narrow-tab truncation is verified against the actual Compose text layout: the regression fails on the fixed row and passes with Material's scrollable tab row. +LUI light and dark narrow-tab snapshots pass; the app pins `3391c4a56051a0b31eb0b2734ab50337deb5a28b`. +The full LUI Android snapshot gate has six existing baseline failures (four old screenshots and two missing identity video fixtures), reproduced on the original source with byte-identical legacy rendered images. +These existing baselines are preserved. +The mobile app's native interaction checks pass independently. + +The filtering/sorting PR https://github.com/logseq/logseq/pull/13823 has been merged into dev. +Reference matching and canonical insert-property retention are submitted separately in https://github.com/logseq/logseq/pull/13825. +The CLI saved-table owner, feature, type, and sorting survive a worker restart; the canonical replay regression also passes in the full upstream gate. +Phone app updates preserve the demo and subsequent user edits, including the extra saved view. +Automatic phone launch is unavailable while the phone is locked; installation succeeds. + +Final Android instrumentation passes both complete flows, including actual bullet/toolbar bounds, non-ellipsized selected tabs, reachable saved views through native swipes, a full-width search field, typed cell creation, settings, and error recovery. +Android bullet alignment uses its 24dp slot center (12dp), while the Apple native row also includes its 8pt outer inset (20pt total); both retain 22-unit nested indentation. +The final Android screenshot artifacts are in `/tmp/logseq-result-views-final-android-artifacts/`. +Four new LUI light/dark snapshots for scrollable tabs and search width verify successfully. + +## Results toolbar and lazy query revision + +The latest interaction replaces the query tab row with one results toolbar: disclosure/count on the left and filter, sort, search, and view-type icons on the right. +Only results and actions share this row; the query owner retains its ordinary block renderer, bullet, content, tags, editing, and selection behavior. +Tag and property collections retain saved view tabs on the left of the same action row. +Saved query views remain accessible through the type menu's Saved views submenu. +List, Table, and Gallery are type menu choices, not synthetic saved tabs. +Collections without saved views show All and default to List; changing the type persists master-compatible view settings. + +Queries start collapsed without executing their simple or advanced definitions. +Opening results evaluates the current graph; closing stops query evaluation during later snapshots. +Expanded results include a 24-unit trailing gap before the next block. +Search fits the collection width, and the Apple native field uses one inline background for the icon, input, and clear control. +The app pins LUI `c1a098f2f7893b7714c3a60118413b1c6d24cd50`. + +Task priority icons now open a native tap menu on both hosts, using the graph's actual closed values and stable UUIDs. +Selection, cancellation, clearing, row reuse, custom values, persistence, and sync preparation have regression coverage. + +The complete core gate passes 951 tests, including the separately submitted graph-link regression. +The query suite passes 21 tests, including normal owner rendering while results are folded; the result-view suite passes 24 tests. +Android instrumentation passes five interaction flows and the URL parser unit tests pass. +Actual iOS runtime checks pass query rendering/search in light and dark themes, the priority popup and effect pipeline, and URL encoding/decoding. +Current screenshots are in `/tmp/logseq-feedback-ios-artifacts/` and `/tmp/logseq-feedback-priority-artifacts/`. + +Filter and sort sheets now open at medium height and expand to large, following the calendar utility-sheet interaction. +The native backend resolves theme ancestry through extension parents, reapplies the palette to modal content, and uses the themed background for navigation lists. +The iOS regression reproduced a full-height dark sheet with system gray pixels, and checks the presented height and actual background color after the fix. +The shared settings tests verify both native hosts expose the same expandable sheet contract. +These presentation and theme checks are recorded in the project iOS simulator skill and the reusable iOS development skill. + +## Live query type switching regression + +The phone's saved type changed correctly, but a table containing missing property values emitted empty buttons without accessible names. +Apple rejected the entire update batch, leaving the previous List renderer visible. +Cells now expose their column and displayed value (or Empty) as their accessible name while preserving an empty visual cell. +The iOS check includes missing values and verifies that switching the current saved view actually replaces the native renderer, then switches back. +Both shared host tests also exercise type changes on a pushed query destination. + +A separate bridge regression reproduced loss of earlier operations when one flush produced multiple batches. +The bridge now retains all operations in order and acknowledges their final generation, with a fast path for one batch. +The transport test covers both host profiles and verifies creation precedes the later update. +The complete core gate now passes 954 tests; the actual mobile core and native UI also switch the phone demo's saved query from List to Table to Gallery successfully. diff --git a/logseq.opam b/logseq.opam index a305f6db..23788cb1 100644 --- a/logseq.opam +++ b/logseq.opam @@ -20,6 +20,8 @@ depends: [ "ocaml-fsrs" "yojson" "sqlite3" + "re" + "uucp" ] pin-depends: [ ["datascript_ocaml.dev" "git+https://github.com/logseq/datascript-ocaml.git#0561660e4894faee250d551ab2a32a6b5c25a5fb"] @@ -31,7 +33,7 @@ pin-depends: [ ["melange-transit-core.0.1.2" "git+https://github.com/logseq/melange-transit.git#main"] ["melange-transit-native.0.1.2" "git+https://github.com/logseq/melange-transit.git#main"] ["melange-transit-melange.0.1.2" "git+https://github.com/logseq/melange-transit.git#main"] - ["lui.0.1.0" "git+ssh://git@github.com/logseq/lui.git#e3ed35af33f6c0c1965cd719327ee4dd67c47d0f"] + ["lui.0.1.0" "git+ssh://git@github.com/logseq/lui.git#c1a098f2f7893b7714c3a60118413b1c6d24cd50"] ["drive.dev" "git+https://github.com/logseq/drive.git#dd735a65ed525d1c36db38ac8e8114aa81d314a1"] ["ocaml-signal.0.1.0" "git+https://github.com/logseq/ocaml-signal.git#02e18cdc5e0ad672aa223f638eaa3ba52fc9421e"] ["mldoc.dev" "git+https://github.com/logseq/mldoc.git#f11230c367964af2b575524d00779cfb1ffc7147"] diff --git a/logseq.opam.locked b/logseq.opam.locked index 2d5bf0d7..4a7e80fb 100644 --- a/logseq.opam.locked +++ b/logseq.opam.locked @@ -160,6 +160,7 @@ depends: [ "typerep" {= "v0.17.1" & ?vendor} "uopt" {= "v0.17.0" & ?vendor} "uri" {= "4.4.0" & ?vendor} + "uucp" {= "17.0.0+dune" & ?vendor} "uutf" {= "1.0.3+dune" & ?vendor} "variantslib" {= "v0.17.0" & ?vendor} "xmlm" {= "dev" & ?vendor} @@ -759,6 +760,10 @@ pin-depends: [ "uri.4.4.0" "https://github.com/mirage/ocaml-uri/releases/download/v4.4.0/uri-4.4.0.tbz" ] + [ + "uucp.17.0.0+dune" + "https://github.com/dune-universe/uucp/releases/download/v17.0.0%2Bdune/uucp-17.0.0.dune.tbz" + ] [ "uutf.1.0.3+dune" "https://github.com/dune-universe/uutf/releases/download/v1.0.3%2Bdune/uutf-1.0.3.dune.tbz" @@ -780,6 +785,14 @@ x-opam-monorepo-cli-args: [ "--ocaml-version=5.5.0" "--opam-provided=ocaml-compiler" "logseq" ] x-opam-monorepo-duniverse-dirs: [ + [ + "https://github.com/dune-universe/uucp/releases/download/v17.0.0%2Bdune/uucp-17.0.0.dune.tbz" + "uucp" + [ + "sha256=7e67f7167b73beb48f2e78c4544b07ed50f0b1cf5697d581f2bbdfe00762ab2a" + "sha512=4e9eabf92bec65b9e04d74f224953086a935bf25be7f94848dcdd5d1c08c4abdd7f68ff7f141ef8c97b291762ad405194d7c6505e6852a84aa069afc502334f9" + ] + ] [ "https://github.com/OCamlPro/ocplib-endian/archive/refs/tags/1.2.tar.gz" "ocplib-endian" diff --git a/scripts/generate-master-view-fixtures.cljs b/scripts/generate-master-view-fixtures.cljs new file mode 100644 index 00000000..eb50dfd4 --- /dev/null +++ b/scripts/generate-master-view-fixtures.cljs @@ -0,0 +1,152 @@ +(ns generate-master-view-fixtures + (:require [clojure.string :as string] + [datascript.core :as d] + [logseq.db.common.view :as view] + ["fs" :as fs])) + +(def master-commit "05c3ae73e08498e9e20f1b11c3eac5525e5e588d") +(defn uuid-for [n] + (uuid (str "30000000-0000-4000-8000-" (string/join (repeat (- 12 (count (str n))) "0")) n))) + +(def schema + {:block/uuid {:db/unique :db.unique/identity} + :db/ident {:db/unique :db.unique/identity} + :block/page {:db/valueType :db.type/ref} + :block/parent {:db/valueType :db.type/ref} + :block/title {:db/index true} + :block/created-at {:db/index true} + :block/updated-at {:db/index true} + :logseq.property/hide? {:db/index true} + :logseq.property/built-in? {:db/index true} + :logseq.property/deleted-at {:db/index true} + :logseq.property.recycle/original-parent {:db/valueType :db.type/ref} + :block/refs {:db/valueType :db.type/ref :db/cardinality :db.cardinality/many} + :block/tags {:db/valueType :db.type/ref :db/cardinality :db.cardinality/many} + :logseq.property.class/extends {:db/valueType :db.type/ref :db/cardinality :db.cardinality/many} + :block/closed-value-property {:db/valueType :db.type/ref :db/cardinality :db.cardinality/many} + :logseq.property/query {:db/valueType :db.type/ref} + :logseq.property/view-for {:db/valueType :db.type/ref} + :logseq.property.view/type {:db/valueType :db.type/ref} + :logseq.property/created-from-property {:db/valueType :db.type/ref} + :user.property/text {:db/valueType :db.type/ref} + :user.property/number {:db/valueType :db.type/ref} + :user.property/many {:db/valueType :db.type/ref :db/cardinality :db.cardinality/many} + :user.property/date {:db/valueType :db.type/ref} + :user.property/choice {:db/valueType :db.type/ref}}) + +(def properties + [{:db/id 950019 :db/ident :block/title :logseq.property/type :string} + {:db/id 950018 :block/uuid (uuid-for 18) :db/ident :user.property/conformance-row? :logseq.property/type :checkbox} + {:db/id 950010 :db/ident :user.property/text :logseq.property/type :default} + {:db/id 950011 :db/ident :user.property/number :logseq.property/type :number} + {:db/id 950012 :db/ident :user.property/many :logseq.property/type :number :db/cardinality :db.cardinality/many} + {:db/id 950013 :db/ident :user.property/date :logseq.property/type :date} + {:db/id 950014 :db/ident :user.property/choice :logseq.property/type :default} + {:db/id 950015 :db/ident :user.property/flag :logseq.property/type :checkbox} + {:db/id 950016 :db/ident :user.property/time :logseq.property/type :datetime} + {:db/id 950017 :db/ident :user.property/raw :logseq.property/type :any}]) + +(def data + (concat + properties + [{:db/id 950000 :block/uuid (uuid-for 1) :block/title "Fixture page" :block/name "fixture page"} + {:db/id 950001 :block/uuid (uuid-for 2) :block/title "Fixture query" :block/page 950000 :block/parent 950000 :block/order "a0" :logseq.property/query 950002} + {:db/id 950002 :block/uuid (uuid-for 3) :block/title "{:query [:find (pull ?b [*]) :where [?b :user.property/conformance-row? true]]}" :block/page 950000 :block/parent 950000 :block/order "a1"} + {:db/id 950003 :block/uuid (uuid-for 4) :block/title "Fixture view" :block/page 950000 :block/parent 950000 :block/order "a2" + :logseq.property/view-for 950001 :logseq.property.view/feature-type :query-result :logseq.property.view/type 950004} + {:db/id 950004 :db/ident :logseq.property.view/type.table} + {:db/id 950005 :db/ident :logseq.property/empty-placeholder} + {:db/id 950006 :block/uuid (uuid-for 6) :block/name "fixture tag" :block/title "Fixture tag" :block/tags [950009]} + {:db/id 950007 :block/uuid (uuid-for 7) :block/title "Tag view" :logseq.property/view-for 950006 :logseq.property.view/feature-type :class-objects :logseq.property.view/type 950004} + {:db/id 950008 :block/uuid (uuid-for 8) :block/title "Property view" :logseq.property/view-for 950018 :logseq.property.view/feature-type :property-objects :logseq.property.view/type 950004} + {:db/id 950009 :block/uuid (uuid-for 9) :db/ident :logseq.class/Tag :block/name "tag" :block/title "Tag"} + {:db/id 950020 :block/uuid (uuid-for 20) :block/title "APPLE"} + {:db/id 950021 :block/uuid (uuid-for 21) :block/title "apple"} + {:db/id 950022 :block/uuid (uuid-for 22) :block/title "Orange"} + {:db/id 950023 :block/uuid (uuid-for 23) :block/title "ΜΗΛΟ"} + {:db/id 950024 :block/uuid (uuid-for 24) :block/title ""} + {:db/id 950030 :block/uuid (uuid-for 30) :logseq.property/value 0} + {:db/id 950031 :block/uuid (uuid-for 31) :logseq.property/value 10} + {:db/id 950032 :block/uuid (uuid-for 32) :logseq.property/value -2.5} + {:db/id 950033 :block/uuid (uuid-for 33) :logseq.property/value 10} + {:db/id 950040 :block/uuid (uuid-for 40) :block/title "October 1" :block/journal-day 20261001} + {:db/id 950041 :block/uuid (uuid-for 41) :block/title "October 3" :block/journal-day 20261003} + {:db/id 950050 :block/uuid (uuid-for 50) :block/title "Zulu" :db/ident :user.choice/zulu :block/order "a0" :block/closed-value-property 950014} + {:db/id 950051 :block/uuid (uuid-for 51) :block/title "Alpha" :db/ident :user.choice/alpha :block/order "a1" :block/closed-value-property 950014}] + (map-indexed + (fn [index props] + (merge {:db/id (+ 950100 index) :block/uuid (uuid-for (+ 100 index)) :block/title (str "Row " index) + :block/page 950000 :block/parent 950000 :block/order (str "b" index) + :block/created-at (+ 1000 index) :block/updated-at (- 2000 index) :user.property/conformance-row? true :block/tags [950006]} + props)) + [{} + {:user.property/text 950020 :user.property/number 950030 :user.property/many [950030 950031] :user.property/flag true :user.property/date 950040 :user.property/choice 950050 :user.property/time 1000 :user.property/raw 0} + {:user.property/text 950021 :user.property/number 950031 :user.property/many [950032 950031] :user.property/flag false :user.property/date 950041 :user.property/choice 950051 :user.property/time 2000 :user.property/raw ""} + {:user.property/text 950022 :user.property/number 950032 :user.property/many [950032] :user.property/raw "10"} + {:user.property/text 950023 :user.property/number 950033 :user.property/raw "2"} + {:user.property/text 950024 :user.property/number 950005 :user.property/many [950005] :user.property/raw :logseq.property/empty-placeholder} + {:user.property/raw " "} + {:user.property/raw false} + {:user.property/raw true}]))) + +(def row-ids (vec (range 950100 950109))) +(def props [:block/title :user.property/text :user.property/number :user.property/many :user.property/date :user.property/choice :user.property/time :user.property/flag :user.property/raw]) +(defn filter-case [attr op match] + {:name (str attr " " op " " (pr-str match)) :filters {:or? false :filters [[attr op match]]}}) +(def cases + (concat + (for [attr props asc? [true false] minor? [true false]] + {:name (str "sort " attr " " asc? " " minor?) + :sorting (cond-> [{:id attr :asc? asc?}] minor? (conj {:id :block/title :asc? false}))}) + (for [attr props op [:is :is-not] match [nil :empty #{} #{(uuid-for 20)} #{(uuid-for 50)} true false]] (filter-case attr op match)) + (for [attr props op [:text-contains :text-not-contains] match ["apple" "APPLE" "μηλο" "" "10"]] (filter-case attr op match)) + (for [attr [:user.property/number :user.property/many :user.property/raw] + op [:number-gt :number-gte :number-lt :number-lte] match [nil 0 -2.5 10 11 "2"]] (filter-case attr op match)) + (for [attr [:user.property/number :user.property/many :user.property/raw] + match [[] [nil nil] [nil 0] [0 nil] [-2.5 10] [10 10] [11 0]]] (filter-case attr :between match)) + (for [op [:date-before :date-after] match [nil {:block/journal-day 20261002} {:block/journal-day 20261001}]] (filter-case :user.property/date op match)) + (for [op [:before :after] match [nil 1000 1500 2000 "invalid"]] (filter-case :user.property/time op match)) + (for [input ["" " " "ROW 1" "row 9" "ΜΗΛΟ"]] {:name (str "search " (pr-str input)) :input input}) + [{:name "unknown operator matches master" :filters {:filters [[:user.property/number :future-operator 1]]}} + {:name "OR empty clauses" :filters {:or? true :filters []}} + {:name "AND empty clauses" :filters {:or? false :filters []}} + {:name "OR with search" :input "ROW 1" :filters {:or? true :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains "Orange"]]}} + {:name "AND combination" :filters {:or? false :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains "apple"]]}}])) + +(def conn (d/create-conn schema)) +(def physical-data + (mapv (fn [entity] + (if (= :db.type/ref (get-in schema [(:db/ident entity) :db/valueType])) + (assoc entity :db/valueType :db.type/ref + :db/cardinality (or (get-in schema [(:db/ident entity) :db/cardinality]) :db.cardinality/one)) + entity)) data)) +(d/transact! conn physical-data) +(def scopes + [{:feature :query-result :owner 2 :view 4 :view-id 950003 :options {:query-entity-ids row-ids}} + {:feature :class-objects :owner 6 :view 7 :view-id 950007 :options {:view-for-id 950006}} + {:feature :property-objects :owner 18 :view 8 :view-id 950008 :options {:view-for-id 950018}}]) + +(def generated + {:masterCommit master-commit :schema (pr-str schema) :tx (pr-str physical-data) :owner (str (uuid-for 2)) :view (str (uuid-for 4)) + :cases (mapv (fn [[scope case]] + (let [options (merge {:view-feature-type (:feature scope) + :sorting [{:id :block/title :asc? true}]} (dissoc case :name)) + options (merge options (:options scope)) + source-entities (if (= :query-result (:feature scope)) + (map #(d/entity @conn %) (set row-ids)) + (view/get-view-entities @conn (:view-id scope) options)) + base {:name (str (:feature scope) " " (:name case)) + :feature (name (:feature scope)) :owner (str (uuid-for (:owner scope))) :view (str (uuid-for (:view scope))) + :sorting (pr-str (:sorting options)) :filters (pr-str (:filters options)) :input (or (:input options) "") + :sourceRows (mapv #(str (:block/uuid %)) source-entities)}] + (try + (assoc base :rows (mapv #(str (:block/uuid (d/entity @conn %))) (:data (view/get-view-data @conn (:view-id scope) options)))) + (catch :default error (assoc base :error true :errorMessage (.-message error)))))) + (for [scope scopes case cases] [scope case]))}) +(defn -main [output] + (when-let [failed (first (filter :error (:cases generated)))] + (throw (ex-info "Master rejected a valid conformance fixture" failed))) + (fs/writeFileSync output (js/JSON.stringify (clj->js generated) nil 2)) + (println "Generated" (count (:cases generated)) "master view cases at" master-commit)) + +(set! *main-cli-fn* -main) diff --git a/scripts/generate-master-view-fixtures.py b/scripts/generate-master-view-fixtures.py new file mode 100644 index 00000000..92ef009b --- /dev/null +++ b/scripts/generate-master-view-fixtures.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +"""Generate view conformance fixtures with master's production CLJS runtime.""" + +import argparse +import json +from pathlib import Path +import shutil +import subprocess +import tempfile + + +ROOT = Path(__file__).resolve().parents[1] +MASTER_COMMIT = "05c3ae73e08498e9e20f1b11c3eac5525e5e588d" +FIXTURE = ROOT / "shared/test/logseq/fixtures/master-views.json" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("upstream", type=Path) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + upstream = args.upstream.resolve() + commit = subprocess.check_output( + ["git", "rev-parse", "HEAD"], cwd=upstream, text=True + ).strip() + if commit != MASTER_COMMIT: + parser.error(f"Expected master {MASTER_COMMIT}; checkout is {commit}") + source = ROOT / "scripts/generate-master-view-fixtures.cljs" + if MASTER_COMMIT not in source.read_text(): + parser.error("Generator and wrapper must pin the same master commit") + with tempfile.TemporaryDirectory(prefix="logseq-master-view-fixtures-") as tmp: + directory = Path(tmp) + shutil.copy2(source, directory / "generate_master_view_fixtures.cljs") + output = directory / "fixtures.json" + compiler = { + "target": "nodejs", + "output-to": str(directory / "main.js"), + "output-dir": str(directory / "out"), + } + options = ( + "{:target :nodejs :optimizations :none :main generate-master-view-fixtures " + f':output-to {json.dumps(compiler["output-to"])} ' + f':output-dir {json.dumps(compiler["output-dir"])}}}' + ) + dependencies = ( + '{:paths ["src" ' + + json.dumps(str(directory)) + + '] :deps {org.clojure/clojurescript {:mvn/version "1.11.132"}}}' + ) + subprocess.run( + ["clojure", "-Sdeps", dependencies, "-M", "-m", "cljs.main", "-co", options, + "-c", "generate-master-view-fixtures"], + cwd=upstream / "deps/db", check=True, + ) + subprocess.run(["node", str(directory / "main.js"), str(output)], cwd="/", check=True) + generated = json.loads(output.read_text()) + if generated["masterCommit"] != MASTER_COMMIT: + parser.error("Fixture provenance differs from the checked source") + if args.check: + if generated != json.loads(FIXTURE.read_text()): + raise SystemExit("Master view fixtures are out of date") + print(f"Verified {len(generated['cases'])} master view conformance cases") + else: + FIXTURE.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(output, FIXTURE) + print(f"Wrote {FIXTURE}") + + +if __name__ == "__main__": + main() diff --git a/scripts/vendor-dev-query-platform.ml b/scripts/vendor-dev-query-platform.ml new file mode 100644 index 00000000..11cf99e7 --- /dev/null +++ b/scripts/vendor-dev-query-platform.ml @@ -0,0 +1,43 @@ +(* Mobile adapters for the native query subset. *) + +(* SECTION: GRAPH *) +module Ldb = struct + open Datascript + let ent_of_id db id = entity db (Entity_id id) + let value (e : entity) attr = Graph_read.value e.db e.id attr + let string_value e attr = Graph_read.string_value (value e attr) + let ident_of e = match value e "db/ident" with Some (Keyword k) -> Some k | _ -> None + let page_name_sanity_lc s = Unicode.trim (Unicode.lowercase s) + let is_uuid_string s = + String.length s = 36 && s.[8] = '-' && s.[13] = '-' && s.[18] = '-' && s.[23] = '-' + let journal_title_of_day day fmt = Date_time_util.int_to_journal_title day fmt + let get_page db = function + | String s when not (is_uuid_string s) -> + Option.bind (Seq.find_map (fun (d : datom) -> Some d) + (datoms db Avet ~a:"block/name" ~v:(String (page_name_sanity_lc s)) ())) + (fun d -> ent_of_id db d.e) + | String s | Uuid s -> entity db (Lookup_ref ("block/uuid", Uuid s)) + | Int64 n -> ent_of_id db (Int64.to_int n) + | _ -> None +end + +module Entity_refs = struct + let ref_ids (e : Datascript.entity) attr = Graph_read.ref_eids e.db e.id attr + let ref_ent e attr = match ref_ids e attr with + | id :: _ -> Ldb.ent_of_id e.Datascript.db id | [] -> None + let has_tag (e : Datascript.entity) ident = Graph_read.entity_is_instance_of e.db e.id ident +end + +module Db_class = struct + let get_structured_children db id = + Graph_read.class_descendants db id |> List.filter (fun child -> child <> id) +end + +(* SECTION: TRANSFORM *) +module Malli = struct + let integer_float f = Float.is_finite f && Float.floor f = f +end + +module Dispatcher = struct + exception Exn_info of string * (Wire.t * Wire.t) list +end diff --git a/scripts/vendor-dev-query.py b/scripts/vendor-dev-query.py new file mode 100644 index 00000000..6eb7c921 --- /dev/null +++ b/scripts/vendor-dev-query.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 +"""Extract native-safe query algorithms from a pinned Logseq dev commit.""" +import argparse +import pathlib +import re +import subprocess + +ROOT = pathlib.Path(__file__).resolve().parents[1] +REVISION = "a63da5cb7993302f8c58ccf42eaf0083b77cf42b" +PREFIX = "deps/db-worker/" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("repository", type=pathlib.Path) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + + def source(path): + return subprocess.check_output( + ["git", "-C", str(args.repository), "show", f"{REVISION}:{PREFIX}{path}"], text=True) + + def definitions(path, names): + text = source(path) + chunks = [] + for name in names: + start = re.search(rf"^let (?:rec )?{re.escape(name)}\b", text, re.M) + if not start: + raise ValueError(f"Missing {path}:{name}") + end = re.search(r"^(?:let |type |module |exception )", text[start.end():], re.M) + stop = start.end() + end.start() if end else len(text) + chunks.append(text[start.start():stop].rstrip()) + return "\n\n".join(chunks) + "\n" + + def module(name, text): + return f"module {name} = struct\n{text}\nend\n\n" + + adapters = (ROOT / "scripts/vendor-dev-query-platform.ml").read_text() + sections = re.split(r"\(\* SECTION: ([A-Z_]+) \*\)", adapters) + parts = dict(zip(sections[1::2], sections[2::2])) + output = f"(* Generated by scripts/vendor-dev-query.py from logseq/logseq {REVISION}.\n Mobile adapters live in scripts/vendor-dev-query-platform.ml.\n License: shared/vendor/logseq-query-LICENSE.md *)\n\n" + output += '[@@@warning "-34"]\n\n' + output += module("Wire", "include Dev_sync.Wire\nlet keyword s = Keyword s\n") + output += module("Time", source("runtime/native/time.ml")) + unicode = source("runtime/native/unicode.ml") + output += module("Unicode", unicode[unicode.index("(* UTF-8 codec"):]) + output += module("Regexp", source("runtime/native/regexp.ml")) + output += module("Ns_util", "let str_contains s sub = String_kit.includes ~sub s\n") + output += module("Common_util", "open Datascript\n" + definitions("lib/common_util.ml", [ + "value_of_ms", "distinct_by", "parse_long", "js_string_of_float", "protect"])) + output += module("Date_time_util", source("lib/date_time_util.ml")) + output += module("Page_ref", source("lib/page_ref.ml")) + output += parts["GRAPH"] + output += module("Ds_wire", "open Datascript\ninclude Dev_sync.Ds_wire\n" + definitions("lib/ds_wire.ml", [ + "escape_string", "iso_of_ms", "edn_of_query_form"])) + output += module("Edn_util", "open Datascript\nmodule Edn_parser = Melange_edn_native\n" + + definitions("lib/edn_util.ml", ["value_of_edn", "read_string", "buffer_add_edn_escaped", "pr_str_to", "pr_str"])) + output += module("Db_query_dsl", source("lib/db_query_dsl.ml")) + output += module("Db_inputs", source("lib/db_inputs.ml")) + output += parts["TRANSFORM"] + output += module("Edn_eval", source("lib/edn_eval.ml").split("(* production wiring")[0]) + output += "open Datascript\n" + definitions("lib/render_resource.ml", [ + "form_of_wire", "value_of_form", "result_arg", "query_input_value", "resolve_page_ref_equality", + "query_current_page_title", "resolve_custom_query_input", "add_query_rules", "execute_custom_query_typed"]) + destination = ROOT / "shared/src/logseq/core/dev_query.ml" + license_text = subprocess.check_output( + ["git", "-C", str(args.repository), "show", f"{REVISION}:LICENSE.md"], text=True) + license_path = ROOT / "shared/vendor/logseq-query-LICENSE.md" + output = output.rstrip() + "\n" + if args.check: + if destination.read_text() != output or license_path.read_text() != license_text: + raise SystemExit("Vendored query differs from the pinned dev source") + print(f"Verified dev query source at {REVISION}") + else: + destination.write_text(output) + license_path.parent.mkdir(parents=True, exist_ok=True) + license_path.write_text(license_text) + + +if __name__ == "__main__": + main() diff --git a/scripts/vendor-dev-view-platform.ml b/scripts/vendor-dev-view-platform.ml new file mode 100644 index 00000000..7d482f63 --- /dev/null +++ b/scripts/vendor-dev-view-platform.ml @@ -0,0 +1,29 @@ +(* Graph adapters for the pinned native view algorithms. *) +module Ldb = struct + open Datascript + let ent_of_id db id = entity db (Entity_id id) + let ent_of_ref db reference = entity db reference + let values (e : entity) attr = match Entity.entity_attr_raw e attr with + | Some (One_value value) -> [value] + | Some (Many_values values) -> values + | _ -> [] + let value e attr = List.nth_opt (values e attr) 0 + let string_value e attr = match value e attr with Some (String s) -> Some s | _ -> None + let ident_of e = match value e "db/ident" with Some (Keyword s) -> Some s | _ -> None + let truthy = function None | Some Nil | Some (Bool false) -> false | _ -> true + let is_class (e : entity) = Graph_read.entity_is_instance_of e.db e.id "logseq.class/Tag" + let many_attr db attr = match List.assoc_opt attr db.schema with + | Some spec -> spec.cardinality = Many + | None -> Option.bind (entity db (Ident attr)) (fun e -> value e "db/cardinality") + = Some (Keyword "db.cardinality/many") +end +module Db_class = struct + let ident_eid db ident = Datascript.entid db "db/ident" (Datascript.Keyword ident) + let get_structured_children db id = + Graph_read.class_descendants db id |> List.filter (fun child -> child <> id) +end +module Db_property = struct + let property_value_content entity = match Ldb.value entity "block/title" with + | Some _ as title -> title + | None -> Ldb.value entity "logseq.property/value" +end diff --git a/scripts/vendor-dev-view.py b/scripts/vendor-dev-view.py new file mode 100644 index 00000000..7e3c4a7b --- /dev/null +++ b/scripts/vendor-dev-view.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python3 +"""Extract native view filtering and sorting from a pinned Logseq worker.""" +import argparse +import pathlib +import re +import subprocess + +ROOT = pathlib.Path(__file__).resolve().parents[1] +REVISION = "a7191d3d9deba5e34a6fb51d6454ed1d7e680965" + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("repository", type=pathlib.Path) + parser.add_argument("--check", action="store_true") + args = parser.parse_args() + + def source(path): + return subprocess.check_output( + ["git", "-C", str(args.repository), "show", f"{REVISION}:deps/db-worker/{path}"], text=True) + + def definition(text, name): + start = re.search(rf"^let (?:rec )?{re.escape(name)}\b", text, re.M) + if not start: + raise ValueError(f"Missing definition: {name}") + end = re.search(r"^(?:let |type |module |exception )", text[start.end():], re.M) + stop = start.end() + end.start() if end else len(text) + return text[start.start():stop].rstrip() + "\n\n" + + text = source("lib/db_view.ml") + output = f"(* Generated by scripts/vendor-dev-view.py from logseq/logseq {REVISION}.\n License: shared/vendor/logseq-query-LICENSE.md *)\n\n" + output += "module Time = Dev_query.Time\nmodule Unicode = Dev_query.Unicode\nmodule Date_time_util = Dev_query.Date_time_util\n" + output += "module Common_util = struct\n" + common = source("lib/common_util.ml") + for name in ["js_string_of_float", "js_number_of_string"]: + output += definition(common, name) + output += "end\n\n" + output += (ROOT / "scripts/vendor-dev-view-platform.ml").read_text() + "\n" + output += "open Datascript\nmodule Int_set = Set.Make(Int)\n\n" + for name in ["contains_substring", "dedupe_ids", "entid", "get_block_alias_ids", + "hidden_eid_pred", "hidden_ref_id_pred_with", "hidden_ref_id_pred", + "get_block_refs_count", "get_property_value_content", "str_of_value"]: + output += definition(text, name) + output += definition(source("lib/db_class.ml"), "property_object_eids") + output += text[text.index("let get_timestamp "):text.index("let avet_first_window_sort_attrs")] + output += definition(text, "sort_eids_by_sorting") + output += text[text.index("let empty_attr_values "):text.index("let get_feature_row_data ")] + destination = ROOT / "shared/src/logseq/core/dev_view.ml" + if args.check: + if destination.read_text() != output: + raise SystemExit("Vendored views differ from the pinned worker source") + print(f"Verified native view source at {REVISION}") + else: + destination.write_text(output) + + +if __name__ == "__main__": + main() diff --git a/shared/native/dune b/shared/native/dune index 7f36358c..8f8d3c62 100644 --- a/shared/native/dune +++ b/shared/native/dune @@ -27,6 +27,8 @@ mldoc sqlite3 str + re + uucp unix threads.posix ctypes.foreign) diff --git a/shared/native/dune_modules/app.sexp b/shared/native/dune_modules/app.sexp index f204038e..e6e376be 100644 --- a/shared/native/dune_modules/app.sexp +++ b/shared/native/dune_modules/app.sexp @@ -1 +1 @@ -("Model" "View_base" "View_rows" "View_sidebar" "View_composer" "View_flashcards" "View_outliner" "View_graphs" "View_settings" "View_screens" "View" "App" "Response_snapshot" "Native_bridge" "Native_crypto") +("Model" "View_base" "View_rows" "View_sidebar" "View_composer" "View_flashcards" "View_query" "View_outliner" "View_graphs" "View_settings" "View_screens" "View" "App" "Response_snapshot" "Native_bridge" "Native_crypto") diff --git a/shared/native/dune_modules/core.sexp b/shared/native/dune_modules/core.sexp index 47560665..5bbe7899 100644 --- a/shared/native/dune_modules/core.sexp +++ b/shared/native/dune_modules/core.sexp @@ -8,6 +8,10 @@ "Cache_model" "Datascript_value" "Dev_sync" +"Dev_query" +"Dev_view" +"Query_block" +"Result_view" "Journal_sync" "E2ee" "E2ee_keyring" diff --git a/shared/src/logseq/core/core_effect.ml b/shared/src/logseq/core/core_effect.ml index 0e5fdbae..c4c54d24 100644 --- a/shared/src/logseq/core/core_effect.ml +++ b/shared/src/logseq/core/core_effect.ml @@ -33,6 +33,7 @@ let request ~now ~fresh_id payload = let* value = text () in let* status = metadata () in json "sendTask" (["text", `String value; "status", status] @ identity ()) | "send-asset" -> raw "addAsset" + | "result-view" -> raw "resultView" | "recording-transcribed" -> let* uuid = string fields "uuid" in let* text = text () in json "completeAssetTranscription" ["parentId", `String uuid; "text", `String text] | "load-page-references" -> raw "loadPageReferences" @@ -63,6 +64,15 @@ let request ~now ~fresh_id payload = let* uuid = text () in let* status = metadata () in let field name = match status with `Assoc fields -> Option.value ~default:`Null (List.assoc_opt name fields) | _ -> `Null in event "setTaskStatus" ["uuid", `String uuid; "statusIdent", field "ident"; "statusUuid", field "uuid"] + | "set-outliner-task-priority" -> + let* uuid = text () in let* encoded = string fields "metadata" in + let priority = J.from_string encoded in + (match priority with + | `Null -> event "setTaskPriority" ["uuid", `String uuid; "priority", `Null] + | `Assoc fields -> event "setTaskPriority" ["uuid", `String uuid; + "priorityIdent", Option.value ~default:`Null (List.assoc_opt "ident" fields); + "priorityUuid", Option.value ~default:`Null (List.assoc_opt "uuid" fields)] + | _ -> Error "Priority must be a reference or null") | "outliner-toolbar" -> text_event "toolbar" "action" | "choose-outliner-autocomplete" -> text_event "chooseAutocomplete" "value" | "save-outliner-editing" -> event "saveEditing" [] diff --git a/shared/src/logseq/core/dev_query.ml b/shared/src/logseq/core/dev_query.ml new file mode 100644 index 00000000..f3bd8308 --- /dev/null +++ b/shared/src/logseq/core/dev_query.ml @@ -0,0 +1,5830 @@ +(* Generated by scripts/vendor-dev-query.py from logseq/logseq a63da5cb7993302f8c58ccf42eaf0083b77cf42b. + Mobile adapters live in scripts/vendor-dev-query-platform.ml. + License: shared/vendor/logseq-query-LICENSE.md *) + +[@@@warning "-34"] + +module Wire = struct +include Dev_sync.Wire +let keyword s = Keyword s + +end + +module Time = struct +(* Time spec implementation for the native target. + + epoch_ms is int64. tz distinguishes the system local zone — resolved + through Unix.localtime/mktime so DST transitions stay correct — from + fixed offsets, which use pure civil<->days arithmetic plus the minute + offset (no tz database needed). *) + +type epoch_ms = int64 +type monotonic_ms = float +type tz = Local_tz | Offset_tz of int (* minutes east of UTC *) +type local_date = { ld_year : int; ld_month : int; ld_day : int; ld_tz : tz } +type civil = + { cv_year : int + ; cv_month : int + ; cv_day : int + ; cv_hour : int + ; cv_minute : int + ; cv_second : int + ; cv_ms : int + } + +(* ---- timezones ---- *) + +let local_tz () = Local_tz +let utc = Offset_tz 0 +let tz_of_offset_minutes n = Offset_tz n +let equal_tz a b = a = b + +(* ---- epoch_ms ---- *) + +let epoch_ms (n : int64) = n +let epoch_ms_of_float f = Int64.of_float f +let epoch_ms_to_int64 t = t +let epoch_ms_to_float t = Int64.to_float t +let compare_epoch_ms = Int64.compare +let now () = Int64.of_float (Unix.gettimeofday () *. 1000.) + +(* ---- monotonic_ms ---- *) + +let monotonic_now () = Unix.gettimeofday () *. 1000. +let diff_monotonic_ms a b = b -. a +let compare_monotonic_ms = Float.compare + +(* ---- int64 floor division + civil<->days (Howard Hinnant) ---- *) + +let floor_div64 a b = + let q = Int64.div a b and r = Int64.rem a b in + if r <> 0L && ((r < 0L) <> (b < 0L)) then Int64.pred q else q + +let floor_mod64 a b = + let r = Int64.rem a b in + if r <> 0L && ((r < 0L) <> (b < 0L)) then Int64.add r b else r + +let floor_div_i a b = + let q = a / b and r = a mod b in + if r <> 0 && ((r < 0) <> (b < 0)) then q - 1 else q + +let floor_mod_i a b = + let r = a mod b in + if r <> 0 && ((r < 0) <> (b < 0)) then r + b else r + +(* days since 1970-01-01 UTC *) +let days_from_civil y mo d = + let y' = if mo <= 2 then y - 1 else y in + let era = floor_div_i (if y' >= 0 then y' else y' - 399) 400 in + let yoe = y' - (era * 400) in + let doy = (((153 * (if mo > 2 then mo - 3 else mo + 9)) + 2) / 5) + d - 1 in + let doe = (yoe * 365) + (yoe / 4) - (yoe / 100) + doy in + (era * 146097) + doe - 719468 + +(* inverse: (year, month, day) of days since epoch *) +let civil_from_days (z : int) = + let z = z + 719468 in + let era = floor_div_i (if z >= 0 then z else z - 146096) 146097 in + let doe = z - (era * 146097) in + let yoe = (doe - (doe / 1460) + (doe / 36524) - (doe / 146096)) / 365 in + let y = yoe + (era * 400) in + let doy = doe - ((365 * yoe) + (yoe / 4) - (yoe / 100)) in + let mp = ((5 * doy) + 2) / 153 in + let d = doy - (((153 * mp) + 2) / 5) + 1 in + let m = if mp < 10 then mp + 3 else mp - 9 in + ((if m <= 2 then y + 1 else y), m, d) + +let days_in_month year month = + match month with + | 1 | 3 | 5 | 7 | 8 | 10 | 12 -> 31 + | 4 | 6 | 9 | 11 -> 30 + | 2 -> + if (year mod 4 = 0 && year mod 100 <> 0) || year mod 400 = 0 then 29 + else 28 + | _ -> invalid_arg "month out of range" + +(* civil fields of an epoch-ms instant read at a fixed minute offset + (pure arithmetic — no tz table) *) +let civil_at_offset off_min (ms : int64) : civil = + let shifted = Int64.add ms (Int64.of_int (off_min * 60000)) in + let secs = floor_div64 shifted 1000L in + let ms_part = Int64.to_int (floor_mod64 shifted 1000L) in + let days = floor_div64 secs 86400L in + let day_secs = Int64.to_int (floor_mod64 secs 86400L) in + let y, mo, d = civil_from_days (Int64.to_int days) in + { cv_year = y + ; cv_month = mo + ; cv_day = d + ; cv_hour = day_secs / 3600 + ; cv_minute = (day_secs mod 3600) / 60 + ; cv_second = day_secs mod 60 + ; cv_ms = ms_part + } + +(* epoch ms of a civil time at a fixed minute offset. Field rollover + follows js/Date semantics: month spills into year, day spills into + adjacent months, smaller fields just add. *) +let epoch_ms_at_offset off_min c : int64 = + let total_months = (c.cv_year * 12) + (c.cv_month - 1) in + let y' = floor_div_i total_months 12 in + let m' = floor_mod_i total_months 12 + 1 in + let days = days_from_civil y' m' 1 + (c.cv_day - 1) in + Int64.sub + (Int64.add + (Int64.mul + (Int64.of_int + ((days * 86400) + (c.cv_hour * 3600) + (c.cv_minute * 60) + + c.cv_second)) + 1000L) + (Int64.of_int c.cv_ms)) + (Int64.of_int (off_min * 60000)) + +let civil_of_unix_tm tm ms_part = + { cv_year = tm.Unix.tm_year + 1900 + ; cv_month = tm.Unix.tm_mon + 1 + ; cv_day = tm.Unix.tm_mday + ; cv_hour = tm.Unix.tm_hour + ; cv_minute = tm.Unix.tm_min + ; cv_second = tm.Unix.tm_sec + ; cv_ms = ms_part + } + +(* ---- civil ---- *) + +let civil ~year ~month ~day ~hour ~minute ~second ~ms = + { cv_year = year; cv_month = month; cv_day = day; cv_hour = hour; + cv_minute = minute; cv_second = second; cv_ms = ms } + +let civil_fields c = + ( c.cv_year, c.cv_month, c.cv_day, c.cv_hour, c.cv_minute, c.cv_second, + c.cv_ms ) + +let compare_civil a b = compare (civil_fields a) (civil_fields b) + +(* win32unix localtime/mktime raise EINVAL on instants that map before + 1970-01-01; for those out-of-range inputs the local offset at the + epoch stands in so both directions still invert. *) +let epoch_tz_offset_minutes : int option ref = ref None + +let epoch_tz_offset_minutes () = + match !epoch_tz_offset_minutes with + | Some off -> off + | None -> + (* mktime reads tm fields as local civil, so its value at an + instant is instant-minus-offset. Probe after the epoch: east + of UTC a probe at 0 maps to a negative local value, which + win32 mktime rejects. *) + let probe = 172800. in + let secs, _ = Unix.mktime (Unix.gmtime probe) in + let off = int_of_float ((probe -. secs) /. 60.) in + epoch_tz_offset_minutes := Some off; + off + +let civil_of_epoch_ms tz ms = + match tz with + | Local_tz -> + (* floor, not truncation: the civil second containing a negative + epoch-ms is its floor (ms part is taken floor-mod below) *) + let secs = Float.floor (Int64.to_float ms /. 1000.) in + (match + (try `Local (Unix.localtime secs) + with Unix.Unix_error (Unix.EINVAL, _, _) -> `Fallback) + with + | `Local tm -> + civil_of_unix_tm + tm + (Int64.(to_int (rem (add (rem ms 1000L) 1000L) 1000L))) + | `Fallback -> civil_at_offset (epoch_tz_offset_minutes ()) ms) + | Offset_tz off -> civil_at_offset off ms + +let epoch_ms_of_civil tz c = + match tz with + | Local_tz -> + (* mktime normalizes out-of-range fields like js/Date setters *) + let tm = + { Unix.tm_sec = c.cv_second + ; tm_min = c.cv_minute + ; tm_hour = c.cv_hour + ; tm_mday = c.cv_day + ; tm_mon = c.cv_month - 1 + ; tm_year = c.cv_year - 1900 + ; tm_wday = 0 + ; tm_yday = 0 + ; tm_isdst = false + } + in + (match + (try `Mk (Unix.mktime tm) + with Unix.Unix_error (Unix.EINVAL, _, _) -> `Fallback) + with + | `Mk (secs, _) -> + Int64.of_float (secs *. 1000. +. float_of_int c.cv_ms) + | `Fallback -> epoch_ms_at_offset (epoch_tz_offset_minutes ()) c) + | Offset_tz off -> epoch_ms_at_offset off c + +(* ---- local_date ---- *) + +let local_date ~year ~month ~day ~tz = + if month < 1 || month > 12 then None + else if day < 1 || day > days_in_month year month then None + else Some { ld_year = year; ld_month = month; ld_day = day; ld_tz = tz } + +let local_date_fields d = (d.ld_year, d.ld_month, d.ld_day) +let local_date_tz d = d.ld_tz + +let compare_local_date a b = + compare (local_date_fields a) (local_date_fields b) + +let equal_local_date a b = + local_date_fields a = local_date_fields b && equal_tz a.ld_tz b.ld_tz + +(* ---- journal-day int (yyyymmdd) ---- *) + +let journal_day_of_local_date d = + (d.ld_year * 10000) + (d.ld_month * 100) + d.ld_day + +let local_date_of_journal_day tz n = + local_date ~year:(n / 10000) ~month:((n / 100) mod 100) ~day:(n mod 100) ~tz + +(* ---- ISO-8601 ---- *) + +let iso_string_of_epoch_ms ms = + let c = civil_at_offset 0 ms in + Printf.sprintf "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ" c.cv_year + c.cv_month c.cv_day c.cv_hour c.cv_minute c.cv_second c.cv_ms + +(* ISO 8601 "YYYY-MM-DD[T ]HH:MM[:SS[.fff]][Z|±HH:MM|±HHMM]" — covers the + ~t/#inst forms; native does not emulate the rest of js/Date.parse. *) +let epoch_ms_of_iso_string s : epoch_ms option = + let n = String.length s in + let digit i = i < n && s.[i] >= '0' && s.[i] <= '9' in + let uint i len = + if i + len <= n && String.for_all (fun c -> c >= '0' && c <= '9') + (String.sub s i len) + then Some (int_of_string (String.sub s i len)) + else None + in + let skip_digits i = + let rec go j = if j < n && digit j then go (j + 1) else j in + go i + in + match (uint 0 4, n > 4 && s.[4] = '-', n > 7 && s.[7] = '-') with + | Some year, true, true -> ( + match (uint 5 2, uint 8 2) with + | Some month, Some day -> + let i = 10 in + (* optional time part after 'T' or space *) + let time, i = + if i < n && (s.[i] = 'T' || s.[i] = ' ') then + let i = i + 1 in + match (uint i 2, i + 2 < n && s.[i + 2] = ':', uint (i + 3) 2) with + | Some hour, true, Some minute -> + let i = i + 5 in + let second, i = + if i < n && s.[i] = ':' then + match uint (i + 1) 2 with + | Some sec -> (sec, i + 3) + | None -> (0, i) + else (0, i) + in + let ms_part, i = + if i < n && s.[i] = '.' then + let stop = min (skip_digits (i + 1)) (i + 4) in + if stop > i + 1 then + ( int_of_string + (String.sub s (i + 1) (stop - i - 1) + ^ String.make (3 - (stop - i - 1)) '0') + , stop ) + else (0, i) + else (0, i) + in + (Some (hour, minute, second, ms_part), i) + | _ -> (None, i) + else (None, i) + in + (* optional tz suffix: 'Z' or ±HH[:MM|MM] *) + let offset_min, ok = + let rec scan i = + if i >= n then (0, true) + else + match s.[i] with + | 'Z' | 'z' -> (0, true) + | '+' | '-' -> + let sign = if s.[i] = '-' then -1 else 1 in + let j = skip_digits (i + 1) in + let raw = + try int_of_string (String.sub s (i + 1) (j - i - 1)) + with _ -> 0 + in + if j < n && s.[j] = ':' then + let j2 = skip_digits (j + 1) in + let mm = + try int_of_string (String.sub s (j + 1) (j2 - j - 1)) + with _ -> 0 + in + (sign * ((raw * 60) + mm), true) + else if j - i - 1 >= 4 then + (sign * (((raw / 100) * 60) + (raw mod 100)), true) + else (sign * raw * 60, true) + | _ -> scan (i + 1) + in + scan i + in + let hour, minute, second, ms_part = + match time with + | Some (h, mi, sec, ms') -> (h, mi, sec, ms') + | None -> (0, 0, 0, 0) + in + if ok && month >= 1 && month <= 12 && day >= 1 + && day <= days_in_month year month && hour <= 23 + && minute <= 59 && second <= 59 + then + Some + (epoch_ms_at_offset offset_min + { cv_year = year; cv_month = month; cv_day = day; + cv_hour = hour; cv_minute = minute; cv_second = second; + cv_ms = ms_part }) + else None + | _ -> None) + | _ -> None + +end + +module Unicode = struct +(* UTF-8 codec (scalar values as ints). *) +let decode_utf8 (s : string) : int list = + let len = String.length s in + let byte i = Char.code (String.get s i) in + let rec loop i acc = + if i >= len then List.rev acc + else + let b0 = byte i in + if b0 < 0x80 then loop (i + 1) (b0 :: acc) + else if b0 < 0xC0 then loop (i + 1) (0xFFFD :: acc) + else if b0 < 0xE0 && i + 1 < len then + loop (i + 2) (((b0 land 0x1F) lsl 6 lor (byte (i + 1) land 0x3F)) :: acc) + else if b0 < 0xF0 && i + 2 < len then + loop (i + 3) + (((b0 land 0x0F) lsl 12 lor ((byte (i + 1) land 0x3F) lsl 6) + lor (byte (i + 2) land 0x3F)) + :: acc) + else if i + 3 < len then + loop (i + 4) + (((b0 land 0x07) lsl 18 lor ((byte (i + 1) land 0x3F) lsl 12) + lor ((byte (i + 2) land 0x3F) lsl 6) + lor (byte (i + 3) land 0x3F)) + :: acc) + else acc |> List.rev + in + loop 0 [] + +let encode_utf8 (cps : int list) : string = + let buf = Buffer.create 64 in + let add c = Buffer.add_char buf (Char.chr c) in + List.iter + (fun cp -> + if cp < 0x80 then add cp + else if cp < 0x800 then begin + add (0xC0 lor (cp lsr 6)); + add (0x80 lor (cp land 0x3F)) + end + else if cp < 0x10000 then begin + add (0xE0 lor (cp lsr 12)); + add (0x80 lor ((cp lsr 6) land 0x3F)); + add (0x80 lor (cp land 0x3F)) + end + else begin + add (0xF0 lor (cp lsr 18)); + add (0x80 lor ((cp lsr 12) land 0x3F)); + add (0x80 lor ((cp lsr 6) land 0x3F)); + add (0x80 lor (cp land 0x3F)) + end) + cps; + Buffer.contents buf + +(* String.prototype.toLowerCase — per-codepoint full simple case mapping. *) +let lowercase (s : string) : string = + decode_utf8 s + |> List.concat_map (fun cp -> + match Uucp.Case.Map.to_lower (Uchar.unsafe_of_int cp) with + | `Self -> [ cp ] + | `Uchars us -> List.map Uchar.to_int us) + |> encode_utf8 + +(* String.prototype.toUpperCase — per-codepoint full simple case mapping. *) +let uppercase (s : string) : string = + decode_utf8 s + |> List.concat_map (fun cp -> + match Uucp.Case.Map.to_upper (Uchar.unsafe_of_int cp) with + | `Self -> [ cp ] + | `Uchars us -> List.map Uchar.to_int us) + |> encode_utf8 + +(* ECMAScript WhiteSpace + LineTerminator code points. *) +let is_js_whitespace cp = + match cp with + | 0x0009 | 0x000A | 0x000B | 0x000C | 0x000D | 0x0020 | 0x00A0 + | 0x1680 | 0x2028 | 0x2029 | 0x202F | 0x205F | 0x3000 | 0xFEFF -> true + | _ -> cp >= 0x2000 && cp <= 0x200A + +(* List.drop_while is OCaml >= 5.3; this tree still builds on 5.1 *) +let rec drop_while_js_ws cps = + match cps with + | cp :: rest when is_js_whitespace cp -> drop_while_js_ws rest + | _ -> cps + +let trim (s : string) : string = + match decode_utf8 s with + | [] -> "" + | cps -> + let cps = List.rev (drop_while_js_ws (List.rev (drop_while_js_ws cps))) in + encode_utf8 cps + +let triml (s : string) : string = + encode_utf8 (drop_while_js_ws (decode_utf8 s)) + +let trimr (s : string) : string = + encode_utf8 (List.rev (drop_while_js_ws (List.rev (decode_utf8 s)))) + +let case_map_cp map cp = + match map (Uchar.unsafe_of_int cp) with + | `Self -> [ cp ] + | `Uchars us -> List.map Uchar.to_int us + +let capitalize (s : string) : string = + match decode_utf8 s with + | [] -> "" + | c :: rest -> + encode_utf8 + (case_map_cp Uucp.Case.Map.to_upper c + @ List.concat_map (case_map_cp Uucp.Case.Map.to_lower) rest) + +(* String.length — UTF-16 code units: BMP 1, astral 2. *) +let js_length (s : string) : int = + List.fold_left + (fun acc cp -> acc + (if cp > 0xFFFF then 2 else 1)) + 0 (decode_utf8 s) + +let utf16_units s = + decode_utf8 s + |> List.concat_map (fun cp -> + if cp <= 0xFFFF then [ cp ] + else + let cp = cp - 0x10000 in + [ 0xD800 lor (cp lsr 10); 0xDC00 lor (cp land 0x3FF) ]) + |> Array.of_list + +let of_utf16_units units = + let n = Array.length units in + let rec decode i acc = + if i >= n then encode_utf8 (List.rev acc) + else + let u = units.(i) in + if u >= 0xD800 && u <= 0xDBFF && i + 1 < n + && units.(i + 1) >= 0xDC00 && units.(i + 1) <= 0xDFFF then + let cp = 0x10000 + ((u - 0xD800) lsl 10) + (units.(i + 1) - 0xDC00) in + decode (i + 2) (cp :: acc) + else + decode (i + 1) ((if u >= 0xD800 && u <= 0xDFFF then 0xFFFD else u) :: acc) + in + decode 0 [] + +(* subs on UTF-16 units — a boundary inside an astral char keeps/drops + the whole char (a lone surrogate is not encodable). *) +let js_sub (s : string) (start : int) (end_ : int) : string = + let rec skip cps pos units = + match cps with + | [] -> cps, units + | c :: rest -> + let w = if c > 0xFFFF then 2 else 1 in + if units + w > pos then cps, units else skip rest pos (units + w) + in + let cps = decode_utf8 s in + let cps, u0 = skip cps start 0 in + let rec take cps rem acc = + match cps with + | [] -> List.rev acc + | c :: rest -> + let w = if c > 0xFFFF then 2 else 1 in + if w > rem then List.rev acc else take rest (rem - w) (c :: acc) + in + encode_utf8 (take cps (end_ - u0) []) + +end + +module Regexp = struct +type t = Re.re + +type re_match = + { groups : string option array + ; offset : int + ; last : int } + +(* JS \uXXXX escape -> literal UTF-8 bytes (Re.Pcre classes do not + support \x escapes). Regex metacharacters stay backslash-escaped so + they keep their literal meaning in both contexts. *) +let translate s = + let n = String.length s in + let b = Buffer.create n in + let is_hex c = + (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') + in + let hex_val i = + let d c = + if c >= '0' && c <= '9' then Char.code c - Char.code '0' + else if c >= 'a' && c <= 'f' then Char.code c - Char.code 'a' + 10 + else Char.code c - Char.code 'A' + 10 + in + (d s.[i] lsl 12) + (d s.[i + 1] lsl 8) + (d s.[i + 2] lsl 4) + d s.[i + 3] + in + let add_codepoint cp = + if cp < 0x80 then begin + let c = Char.chr cp in + if String.contains "[]\\^$.|?*+(){}" c then Buffer.add_char b '\\'; + Buffer.add_char b c + end else begin + (* UTF-8 encode *) + if cp < 0x800 then begin + Buffer.add_char b (Char.chr (0xC0 lor (cp lsr 6))); + Buffer.add_char b (Char.chr (0x80 lor (cp land 0x3F))) + end else if cp < 0x10000 then begin + Buffer.add_char b (Char.chr (0xE0 lor (cp lsr 12))); + Buffer.add_char b (Char.chr (0x80 lor ((cp lsr 6) land 0x3F))); + Buffer.add_char b (Char.chr (0x80 lor (cp land 0x3F))) + end else begin + Buffer.add_char b (Char.chr (0xF0 lor (cp lsr 18))); + Buffer.add_char b (Char.chr (0x80 lor ((cp lsr 12) land 0x3F))); + Buffer.add_char b (Char.chr (0x80 lor ((cp lsr 6) land 0x3F))); + Buffer.add_char b (Char.chr (0x80 lor (cp land 0x3F))) + end + end + in + let rec loop i = + if i < n then begin + if + s.[i] = '\\' && i + 5 < n + && s.[i + 1] = 'u' + && is_hex s.[i + 2] && is_hex s.[i + 3] && is_hex s.[i + 4] + && is_hex s.[i + 5] + then begin + add_codepoint (hex_val (i + 2)); + loop (i + 6) + end else begin + Buffer.add_char b s.[i]; + loop (i + 1) + end + end + in + loop 0; + Buffer.contents b + +(* cljs re-pattern is case-sensitive; (?i) maps to CASELESS. *) +let compile ?(caseless = false) s = + Re.compile + (Re.Pcre.re ~flags:(if caseless then [ `CASELESS ] else []) (translate s)) + +let test t s = Re.execp t s + +let re_match_of_group g = + let offset, last = Re.Group.offset g 0 in + { groups = Array.init (Re.Group.nb_groups g) (Re.Group.get_opt g) + ; offset + ; last } + +let exec ?(pos = 0) t s = + Option.map re_match_of_group (Re.exec_opt ~pos t s) + +let replace t ~f s = + match Re.exec_opt t s with + | None -> s + | Some g -> + let match_ = Re.Group.get g 0 in + let nb = Re.Group.nb_groups g in + let groups = Array.init nb (fun i -> Re.Group.get_opt g i) in + let offset, stop = Re.Group.offset g 0 in + let rep = f ~match_ ~groups ~offset ~input:s in + String.sub s 0 offset + ^ rep + ^ String.sub s stop (String.length s - stop) + +let replace_all t ~f s = + let b = Buffer.create (String.length s) in + let rec loop pos = + match Re.exec_opt ~pos t s with + | None -> Buffer.add_string b (String.sub s pos (String.length s - pos)) + | Some g -> + let m = re_match_of_group g in + let match_ = + match m.groups with [||] -> "" | xs -> Option.value ~default:"" xs.(0) + in + Buffer.add_string b (String.sub s pos (m.offset - pos)); + Buffer.add_string b (f ~match_ ~groups:m.groups ~offset:m.offset ~input:s); + (* empty match: emit one char and advance, as JS /g does *) + if m.last = m.offset && m.last < String.length s then begin + Buffer.add_char b s.[m.last]; + loop (m.last + 1) + end else if m.last > m.offset then loop m.last + in + loop 0; + Buffer.contents b + +end + +module Ns_util = struct +let str_contains s sub = String_kit.includes ~sub s + +end + +module Common_util = struct +open Datascript +let value_of_ms (ms : int64) : value = Int64 ms + +let distinct_by (f : 'a -> 'k) (coll : 'a list) : 'a list = + let seen = Hashtbl.create 17 in + List.filter + (fun x -> + let k = f x in + if Hashtbl.mem seen k then false + else begin Hashtbl.replace seen k (); true end) + coll + +(* common-util/path->file-ext *) + +let parse_long ?(radix = 0) (s0 : string) : int option = + let n0 = String.length s0 in + let i0 = ref 0 in + while + !i0 < n0 + && (match s0.[!i0] with + | ' ' | '\t' | '\n' | '\r' | '\011' | '\012' -> true + | _ -> false) + do incr i0 done; + let s = String.sub s0 !i0 (n0 - !i0) in + let n = String.length s in + let neg, s, n = + if n > 0 && (s.[0] = '+' || s.[0] = '-') then + (s.[0] = '-', String.sub s 1 (n - 1), n - 1) + else (false, s, n) + in + let base, s, n = + if (radix = 0 || radix = 16) && n > 2 && s.[0] = '0' + && (s.[1] = 'x' || s.[1] = 'X') + then (16, String.sub s 2 (n - 2), n - 2) + else ((if radix = 0 then 10 else radix), s, n) + in + let digit c = + let d = + if c >= '0' && c <= '9' then Char.code c - Char.code '0' + else if c >= 'a' && c <= 'z' then Char.code c - Char.code 'a' + 10 + else if c >= 'A' && c <= 'Z' then Char.code c - Char.code 'A' + 10 + else 99 + in + if d < base then Some d else None + in + let i = ref 0 and acc = ref 0 in + while + !i < n && (match digit s.[!i] with Some _ -> true | None -> false) + do + acc := !acc * base + Option.get (digit s.[!i]); + incr i + done; + if !i = 0 then None else Some (if neg then - !acc else !acc) + +(* js (str f) on a double — ECMAScript Number::toString: the shortest + digit sequence that round-trips, in fixed notation for + 1e-6 <= |x| < 1e21 and scientific "d[.ddd]e±n" otherwise. Integers + print without a decimal point, -0 prints "0". *) + +let js_string_of_float (f : float) : string = + if Float.is_nan f then "NaN" + else if f = Float.infinity then "Infinity" + else if f = Float.neg_infinity then "-Infinity" + else if f = 0. then "0" + else + (* shortest %.*e precision that round-trips *) + let rec find_p p = + if p > 17 then 17 + else + let s = Printf.sprintf "%.*e" (p - 1) f in + if float_of_string s = f then p else find_p (p + 1) + in + let sci = Printf.sprintf "%.*e" (find_p 1 - 1) f in + let epos = String.index sci 'e' in + let mant = String.sub sci 0 epos in + let exp = + int_of_string (String.sub sci (epos + 1) (String.length sci - epos - 1)) + in + let neg = mant.[0] = '-' in + let m = if neg then String.sub mant 1 (String.length mant - 1) else mant in + let digits = String.concat "" (String.split_on_char '.' m) in + let k = String.length digits in + let sign = if neg then "-" else "" in + if exp >= -6 && exp < 21 then + if exp >= k - 1 then sign ^ digits ^ String.make (exp - k + 1) '0' + else if exp >= 0 then + sign ^ String.sub digits 0 (exp + 1) ^ "." + ^ String.sub digits (exp + 1) (k - exp - 1) + else sign ^ "0." ^ String.make (-exp - 1) '0' ^ digits + else + let m2 = + if k = 1 then digits + else String.sub digits 0 1 ^ "." ^ String.sub digits 1 (k - 1) + in + Printf.sprintf "%s%s%s%d" sign m2 + (if exp < 0 then "e-" else "e+") (abs exp) + +(* common-util/tag-valid? *) + +let protect ~(finally : unit -> unit) (work : unit -> 'a) : 'a = + let finally_no_exn () = + try finally () with e -> raise (Fun.Finally_raised e) + in + match work () with + | result -> + finally_no_exn (); + result + | exception work_exn -> + finally_no_exn (); + raise work_exn + +end + +module Date_time_util = struct +(* Faithful port of logseq.common.util.date-time plus the cljs-time / + goog.date subset that logseq.db.frontend.inputs and the worker + query-dsl rely on. + + All instants are epoch-milliseconds int64. Civil <-> epoch + conversion goes through the Time platform module, which is + local-timezone aware — matching cljs-time's goog.date DateTime + arithmetic (JS Date getters/setters). *) + +type period = + | Days + | Weeks + | Months + | Years + | Hours + | Minutes + +let days_in_month year month = + match month with + | 1 | 3 | 5 | 7 | 8 | 10 | 12 -> 31 + | 4 | 6 | 9 | 11 -> 30 + | 2 -> + if (year mod 4 = 0 && year mod 100 <> 0) || year mod 400 = 0 then 29 else 28 + | _ -> invalid_arg "month out of range" + +let time_ms () = Time.epoch_ms_to_int64 (Time.now ()) + +let civil_of_ms (ms : int64) : Time.civil = + Time.civil_of_epoch_ms (Time.local_tz ()) (Time.epoch_ms ms) + +let ms_of_civil (c : Time.civil) : int64 = + Time.epoch_ms_to_int64 (Time.epoch_ms_of_civil (Time.local_tz ()) c) + +(* t/today — local midnight of today. *) +let today_ms () = + let year, month, day, _, _, _, _ = Time.civil_fields (civil_of_ms (time_ms ())) in + ms_of_civil (Time.civil ~year ~month ~day ~hour:0 ~minute:0 ~second:0 ~ms:0) + +(* t/plus / t/minus. Day/week/hour/minute offsets shift the matching + civil field and let Date normalization roll over (same as + goog.date.DateTime.add — wall-clock arithmetic, DST-safe). Months + and years go through month arithmetic with joda-style clamping of + the day to the target month's length. *) +let shift (p : period) (n : int) (ms : int64) : int64 = + let year, month, day, hour, minute, second, c_ms = + Time.civil_fields (civil_of_ms ms) + in + match p with + | Days -> + ms_of_civil + (Time.civil ~year ~month ~day:(day + n) ~hour ~minute ~second + ~ms:c_ms) + | Weeks -> + ms_of_civil + (Time.civil ~year ~month ~day:(day + (7 * n)) ~hour ~minute + ~second ~ms:c_ms) + | Hours -> + ms_of_civil + (Time.civil ~year ~month ~day ~hour:(hour + n) ~minute ~second + ~ms:c_ms) + | Minutes -> + ms_of_civil + (Time.civil ~year ~month ~day ~hour ~minute:(minute + n) ~second + ~ms:c_ms) + | Months | Years -> + let delta = match p with Months -> n | Years -> n * 12 | _ -> 0 in + let total = (year * 12) + (month - 1) + delta in + let year' = total / 12 and m0 = total mod 12 in + let year', m0 = if m0 < 0 then (year' - 1, m0 + 12) else (year', m0) in + let month' = m0 + 1 in + let day' = min day (days_in_month year' month') in + ms_of_civil + (Time.civil ~year:year' ~month:month' ~day:day' ~hour ~minute + ~second ~ms:c_ms) + +let plus p n ms = shift p n ms +let minus p n ms = shift p (-n) ms + +(* common-date/date-at-local-ms: + (.setHours (js/Date. date) hours mins secs millisecs) — returns epoch + ms of the same local date with the given time fields. *) +let date_at_local_ms (date : int64) hours mins secs millisecs : int64 = + let year, month, day, _, _, _, _ = Time.civil_fields (civil_of_ms date) in + ms_of_civil + (Time.civil ~year ~month ~day ~hour:hours ~minute:mins ~second:secs + ~ms:millisecs) + +(* date-time-util/date->int — yyyymmdd int of a date. *) +let date_to_int (ms : int64) : int = + let year, month, day, _, _, _, _ = Time.civil_fields (civil_of_ms ms) in + (year * 10000) + (month * 100) + day + +(* int->local-date / journal-day->ms — local midnight of a yyyymmdd int. *) +let int_to_local_ms (day : int) : int64 = + ms_of_civil + (Time.civil ~year:(day / 10000) ~month:((day / 100) mod 100) + ~day:(day mod 100) ~hour:0 ~minute:0 ~second:0 ~ms:0) + +(* local midnight of a local_date in the date's own tz. *) +let local_date_start_ms (d : Time.local_date) : int64 = + let year, month, day = Time.local_date_fields d in + Time.epoch_ms_to_int64 + (Time.epoch_ms_of_civil (Time.local_date_tz d) + (Time.civil ~year ~month ~day ~hour:0 ~minute:0 ~second:0 ~ms:0)) + +(* date-time-util/journal-day->local-ms — epoch ms at local midnight of + a yyyymmdd int; the inverse of ms->journal-day. Same body as + int->local-date (journal-day->local-ms is `(.getTime (int->local-date + day))`). *) +let journal_day_to_local_ms (day : int) : int64 = int_to_local_ms day + +(* date-time-util/journal-day-plus — yyyymmdd int `n` calendar days + after `day`; cljs parses the UTC yyyyMMdd formatter, t/plus days, and + un-parses. *) +let journal_day_plus (day : int) (n : int) : int option = + match Time.local_date_of_journal_day Time.utc day with + | None -> None + | Some d -> + let year, month, mday = Time.local_date_fields d in + let utc_midnight = + Time.epoch_ms_of_civil Time.utc + (Time.civil ~year ~month ~day:mday ~hour:0 ~minute:0 ~second:0 + ~ms:0) + in + let shifted = + Time.epoch_ms + (Int64.add (Time.epoch_ms_to_int64 utc_midnight) + (Int64.of_int (n * 86_400_000))) + in + let year', month', day', _, _, _, _ = + Time.civil_fields (Time.civil_of_epoch_ms Time.utc shifted) + in + Some ((year' * 10000) + (month' * 100) + day') + +(* date-time-util/journal-day-local-range-ms — local-midnight ms range + from `day` through `day` + `future-days`, both ends inclusive. + Date-only Scheduled and Deadline values are stored as local midnight, + so this range matches the journal day in every timezone. *) +let journal_day_local_range_ms (day : int) (future_days : int) + : (int64 * int64) option = + match journal_day_plus day future_days with + | Some end_day -> + Some + ( journal_day_to_local_ms day + , journal_day_to_local_ms end_day ) + | None -> None + +(* ---------- journal title parsing ---------- + + common-util/capitalize-all *) +let capitalize_all (s : string) : string = + String.split_on_char ' ' s + |> List.map (fun w -> + if w = "" then w + else + Unicode.uppercase (String.sub w 0 1) + ^ Unicode.lowercase (String.sub w 1 (String.length w - 1))) + |> String.concat " " + +let month_short = + [| "Jan"; "Feb"; "Mar"; "Apr"; "May"; "Jun"; "Jul"; "Aug"; "Sep"; "Oct"; + "Nov"; "Dec" |] + +let month_long = + [| "January"; "February"; "March"; "April"; "May"; "June"; "July"; + "August"; "September"; "October"; "November"; "December" |] + +let weekday_names = + [| "mon"; "tue"; "wed"; "thu"; "fri"; "sat"; "sun"; "monday"; "tuesday"; + "wednesday"; "thursday"; "friday"; "saturday"; "sunday" |] + +(* common-date/built-in-journal-title-formatters *) +let built_in_journal_title_formatters = + [ "do MMM yyyy"; "do MMMM yyyy"; "MMM do, yyyy"; "MMMM do, yyyy"; + "E, dd-MM-yyyy"; "E, dd.MM.yyyy"; "E, MM/dd/yyyy"; "E, yyyy/MM/dd"; + "EEE, dd-MM-yyyy"; "EEE, dd.MM.yyyy"; "EEE, MM/dd/yyyy"; + "EEE, yyyy/MM/dd"; "EEEE, dd-MM-yyyy"; "EEEE, dd.MM.yyyy"; + "EEEE, MM/dd/yyyy"; "EEEE, yyyy/MM/dd"; "dd-MM-yyyy"; "MM/dd/yyyy"; + "MM-dd-yyyy"; "MM_dd_yyyy"; "yyyy/MM/dd"; "yyyy-MM-dd"; + "yyyy-MM-dd EEE"; "yyyy-MM-dd EEEE"; "yyyy_MM_dd"; "yyyyMMdd"; + "yyyy\xE5\xB9\xB4MM\xE6\x9C\x88dd\xE6\x97\xA5" (* yyyy年MM月dd日 *) ] + +(* common-date/journal-title-formatters — cljs (distinct (cons f + built-in)) keeps the first occurrence, so f always leads even when it + duplicates a built-in. *) +let journal_title_formatters (date_formatter : string option) : string list = + match date_formatter with + | None -> built_in_journal_title_formatters + | Some f -> f :: List.filter (fun x -> x <> f) built_in_journal_title_formatters + +(* ---- formatter lexer ---- *) + +(* Token widths recorded for the inverse (format) direction: + yy vs yyyy, MMM vs MMMM, E/EEE vs EEEE. *) +type tok = + | TokYear of int + | TokMonthNum + | TokMonthName of int + | TokDay + | TokDayOrd + | TokWeekday of int + | TokLit of char + +let tokens_of_formatter (fmt : string) : tok list = + let n = String.length fmt in + let try_at i t tok = + let l = String.length t in + if i + l <= n && String.sub fmt i l = t then Some (tok, i + l) else None + in + let rec lex i acc = + if i >= n then List.rev acc + else + match + List.find_map Fun.id + [ try_at i "yyyy" (TokYear 4); try_at i "yy" (TokYear 2); + try_at i "MMMM" (TokMonthName 4); try_at i "MMM" (TokMonthName 3); + try_at i "MM" TokMonthNum; try_at i "dd" TokDay; + try_at i "do" TokDayOrd; try_at i "EEEE" (TokWeekday 4); + try_at i "EEE" (TokWeekday 3); try_at i "E" (TokWeekday 3) ] + with + | Some (t, i') -> lex i' (t :: acc) + | None -> lex (i + 1) (TokLit fmt.[i] :: acc) + in + lex 0 [] + +let is_digit c = c >= '0' && c <= '9' + +(* Backtracking matcher for a tokenized formatter. tf/parse equivalent: + full-string match, numeric tokens consume greedily with backtracking, + month names match case-insensitively, weekday names are consumed but + ignored for the value. Returns (year, month, day). *) +let date_of_formatter (fmt : string) (s : string) : (int * int * int) option = + let toks = tokens_of_formatter fmt in + let n = String.length s in + let ends_at i l = i + l <= n in + let digit_len ?(max = 2) i = + let rec count j = if j < n && j - i < max && is_digit s.[j] then count (j + 1) else j - i in + count i + in + let num_at i l = int_of_string_opt (String.sub s i l) in + let name_at i (names : string array) = + Array.fold_left + (fun best name -> + let l = String.length name in + if ends_at i l + && Unicode.lowercase (String.sub s i l) = Unicode.lowercase name + then match best with + | Some (bl, _) when bl >= l -> best + | _ -> Some (l, name) + else best) + None names + in + let rec go toks i (y, m, d) : (int * int * int) option = + match toks with + | [] -> if i = n then Some (y, m, d) else None + | tok :: rest -> + (match tok with + | TokLit c -> + if i < n && s.[i] = c then go rest (i + 1) (y, m, d) else None + | TokYear _ -> + try_num rest i (y, m, d) 8 (fun v (_, mm, dd) -> (v, mm, dd)) + | TokMonthNum -> + try_num rest i (y, m, d) 2 (fun v (yy, _, dd) -> (yy, v, dd)) + | TokDay -> + try_num rest i (y, m, d) 2 (fun v (yy, mm, _) -> (yy, mm, v)) + | TokDayOrd -> + (* digits + ordinal suffix (st|nd|rd|th); plain digits also + accepted — joda "do" is lenient on parse *) + let l = digit_len i in + if l = 0 then None + else + let v = num_at i l in + let i' = i + l in + let has_suffix = + ends_at i' 2 + && (let suf = Unicode.lowercase (String.sub s i' 2) in + suf = "st" || suf = "nd" || suf = "rd" || suf = "th") + in + (match v with + | Some v -> + (match go rest (if has_suffix then i' + 2 else i') (y, m, v) with + | Some r -> Some r + | None -> + if has_suffix then go rest i' (y, m, v) else None) + | None -> None) + | TokMonthName _ -> + let index_of names name = + let rec find j = + if j >= Array.length names then -1 + else if Unicode.lowercase names.(j) = Unicode.lowercase name then j + 1 + else find (j + 1) + in + find 0 + in + let try_names names = + match name_at i names with + | Some (l, name) -> + let mi = index_of names name in + if mi < 0 then None else go rest (i + l) (y, mi, d) + | None -> None + in + (match try_names month_long with + | Some _ as r -> r + | None -> try_names month_short) + | TokWeekday _ -> + (match name_at i weekday_names with + | Some (l, _) -> go rest (i + l) (y, m, d) + | None -> None)) + and try_num rest i (y, m, d) max_len f = + let l = min (digit_len ~max:max_len i) max_len in + if l = 0 then None + else + let rec attempt l = + if l = 0 then None + else + match num_at i l with + | Some v -> + (match go rest (i + l) (f v (y, m, d)) with + | Some r -> Some r + | None -> attempt (l - 1)) + | None -> attempt (l - 1) + in + attempt l + in + match go toks 0 (0, 0, 0) with + | Some (y, m, d) when m >= 1 && m <= 12 && d >= 1 && d <= days_in_month y m -> + Some (y, m, d) + | _ -> None + +(* date-time-util/journal-title-> with then-fn = tc/to-long: local + midnight ms of the parsed date, or None. *) +let parse_journal_title ?(formatters = built_in_journal_title_formatters) + (title : string) : int64 option = + if Unicode.trim title = "" then None + else + let title' = capitalize_all title in + List.find_map + (fun fmt -> + match date_of_formatter fmt title' with + | Some (year, month, day) -> + Some + (ms_of_civil + (Time.civil ~year ~month ~day ~hour:0 ~minute:0 ~second:0 + ~ms:0)) + | None -> None) + formatters + +(* date-time-util/journal-title->int *) +let journal_title_to_int ?(formatters = built_in_journal_title_formatters) + (title : string) : int option = + match parse_journal_title ~formatters title with + | Some ms -> Some (date_to_int ms) + | None -> None + +(* common-date/valid-journal-title? *) +let valid_journal_title ?(formatters = built_in_journal_title_formatters) + (title : string) : bool = + Option.is_some (parse_journal_title ~formatters title) + +(* Days-from-civil (Howard Hinnant) — days since 1970-01-01 UTC. *) +let days_from_civil (y : int) (mo : int) (d : int) : int = + let y' = if mo <= 2 then y - 1 else y in + let era = (if y' >= 0 then y' else y' - 399) / 400 in + let yoe = y' - (era * 400) in + let doy = ((153 * (if mo > 2 then mo - 3 else mo + 9)) + 2) / 5 + d - 1 in + let doe = (yoe * 365) + (yoe / 4) - (yoe / 100) + doy in + (era * 146097) + doe - 719468 + +(* Inverse of the #inst writer: parse "YYYY-MM-DDTHH:MM:SS[.sss]Z" + (UTC, timezone suffix ignored) back to epoch ms. Used to convert + transit Date query literals — rare, but keeps wire fidelity. *) +let epoch_ms_of_iso (s : string) : int64 option = + let parse_int a b = + if b > a then + try Some (int_of_string (String.sub s a (b - a))) with _ -> None + else None + in + let digits a b = String.for_all (fun c -> c >= '0' && c <= '9') (String.sub s a (b - a)) in + let n = String.length s in + if n < 20 || s.[4] <> '-' || s.[7] <> '-' || s.[10] <> 'T' then None + else if not (digits 0 4 && digits 5 7 && digits 8 10) then None + else + let rec find i c = if i >= n then None else if s.[i] = c then Some i else find (i + 1) c in + let t = String.sub s 11 (min 8 (n - 11)) in + if String.length t < 8 || t.[2] <> ':' || t.[5] <> ':' then None + else + match + ( parse_int 0 4, parse_int 5 7, parse_int 8 10, + parse_int 11 13, parse_int 14 16, parse_int 17 19 ) + with + | Some y, Some mo, Some d, Some h, Some mi, Some sec -> + let days = days_from_civil y mo d in + let frac = + match find 19 '.' with + | Some dot -> + let rec take i = if i < n && s.[i] >= '0' && s.[i] <= '9' then take (i + 1) else i in + let stop = min (take (dot + 1)) (dot + 4) in + if stop > dot + 1 then + int_of_string + (String.sub s (dot + 1) (stop - dot - 1) + ^ String.make (3 - (stop - dot - 1)) '0') + else 0 + | None -> 0 + in + (* offset suffix after the seconds/fraction: 'Z', or + ±HH[:MM|MM] — cljs js/Date honors it *) + let offset_min = + let rec scan i = + if i >= n then 0 + else + match s.[i] with + | 'Z' -> 0 + | '+' | '-' -> + let sign = if s.[i] = '-' then -1 else 1 in + let rec skip_digits j = + if j < n && s.[j] >= '0' && s.[j] <= '9' then + skip_digits (j + 1) + else j + in + let j1 = skip_digits (i + 1) in + let hh = + try int_of_string (String.sub s (i + 1) (j1 - i - 1)) + with _ -> 0 + in + let mm = + if j1 < n && s.[j1] = ':' then + let j2 = skip_digits (j1 + 1) in + try + int_of_string (String.sub s (j1 + 1) (j2 - j1 - 1)) + with _ -> 0 + else if j1 - i - 1 >= 4 then + (* +HHMM form: last two digits are minutes *) + hh mod 100 + else 0 + in + let hh = if j1 - i - 1 >= 4 then hh / 100 else hh in + sign * ((hh * 60) + mm) + | _ -> scan (i + 1) + in + scan 19 + in + Some + (Int64.sub + (Int64.add + (Int64.mul + (Int64.of_int + (((days * 86400) + (h * 3600) + (mi * 60) + sec))) + 1000L) + (Int64.of_int frac)) + (Int64.of_int (offset_min * 60000))) + | _ -> None + +(* js/Date.parse — covers the formats V8 accepts: ISO + "YYYY-MM-DD[ T]HH:MM[:SS[.fff]][Z|±HH:MM|±HHMM]" (date-only = UTC + midnight; datetime without offset = local), "YYYY/MM/DD" and + "MM/DD/YYYY" (local), and month-name forms "Jan 15 2024" / + "15 Jan 2024" / "Mon, 15 Jan 2024 10:00:00 GMT". Pure numeric strings + ("1704067200000") are NaN in V8 — they do not parse here. *) +let js_date_parse (s0 : string) : int64 option = + let s = Unicode.trim s0 in + let is_digit c = c >= '0' && c <= '9' in + let all_digits s = s <> "" && String.for_all is_digit s in + let month_names = + [| "january"; "february"; "march"; "april"; "may"; "june"; "july" + ; "august"; "september"; "october"; "november"; "december" |] + in + let month_of w = + let w = String.lowercase_ascii w in + let rec go i = + if i >= 12 then None + else if + w = String.sub month_names.(i) 0 3 || w = month_names.(i) + then Some (i + 1) + else go (i + 1) + in + go 0 + in + (* split a "HH:MM[:SS[.fff]]" time token, stripping an embedded tz + suffix (Z/GMT.../±HH:MM) *) + let time_and_tz (t : string) : (int64 * int option) option = + let n = String.length t in + let tz_start = + let rec find i = + if i >= n then n + else + match t.[i] with + | 'Z' | '+' | '-' -> i + | 'G' | 'U' when i > 0 && t.[i - 1] <> ':' -> i + | _ -> find (i + 1) + in + find 0 + in + let tz = + if tz_start >= n then None + else + let tzs = String.sub t tz_start (n - tz_start) in + let tzs = + let l = String.lowercase_ascii tzs in + if l = "gmt" || l = "utc" then "Z" else tzs + in + let tzs = + let l = String.lowercase_ascii tzs in + if + String.length l > 3 + && (String.sub l 0 3 = "gmt" || String.sub l 0 3 = "utc") + then String.sub tzs 3 (String.length tzs - 3) + else tzs + in + (match tzs with + | "Z" -> Some 0 + | _ when String.length tzs > 1 && (tzs.[0] = '+' || tzs.[0] = '-') -> + let sign = if tzs.[0] = '-' then -1 else 1 in + let body = String.sub tzs 1 (String.length tzs - 1) in + let hh, mm = + match String.split_on_char ':' body with + | [ h; m ] -> + ((try int_of_string h with _ -> -1), + (try int_of_string m with _ -> -1)) + | [ h ] -> + let h = try int_of_string h with _ -> -1 in + if String.length body >= 4 then (h / 100, h mod 100) + else (h, 0) + | _ -> (-1, -1) + in + if hh < 0 || mm < 0 || hh > 23 || mm > 59 then None + else Some (sign * ((hh * 60) + mm)) + | _ -> None) + in + let tstr = + let body = String.sub t 0 tz_start in + if String.length body > 0 && not (is_digit body.[0]) then "" + else body + in + match String.split_on_char ':' tstr with + | [ h; m ] | [ h; m; _ ] when all_digits h && all_digits m -> + let sec_str, frac = + match String.split_on_char ':' tstr with + | [ _; _; s' ] -> + let dot = try String.index s' '.' with Not_found -> -1 in + if dot >= 0 then + ( String.sub s' 0 dot + , String.sub s' (dot + 1) (String.length s' - dot - 1) ) + else (s', "") + | _ -> ("", "") + in + let sec = if sec_str = "" then 0 else + if all_digits sec_str then int_of_string sec_str else -1 in + let frac_ms = + if frac = "" then 0 + else if all_digits frac then + let f = String.sub frac 0 (min 3 (String.length frac)) in + int_of_string f + * int_of_float (10. ** float_of_int (3 - String.length f)) + else -1 + in + if sec < 0 || frac_ms < 0 then None + else + let h = int_of_string h and m = int_of_string m in + if h > 24 || m > 59 || sec > 59 then None + else + Some + ( Int64.of_int ((((h * 60) + m) * 60 + sec) * 1000 + frac_ms) + , tz ) + | _ -> None + in + (* numeric date token "a-b-c"/"a/b/c" — year-first when a is 4 digits + or > 31; otherwise US m/d/y. Returns (y, m, d, iso) where iso=true + only for '-' separators (V8 treats slash dates as local). *) + let date_fields (t : string) : (int * int * int * bool) option = + let sep = + if String.contains t '-' then '-' + else if String.contains t '/' then '/' + else ' ' + in + if sep = ' ' then None + else + match String.split_on_char sep t with + | [ a; b; c ] when all_digits a && all_digits b && all_digits c -> + if String.length a >= 4 || int_of_string a > 31 then + Some (int_of_string a, int_of_string b, int_of_string c, + sep = '-') + else + Some (int_of_string c, int_of_string a, int_of_string b, + false) + | _ -> None + in + let tokens = + String.split_on_char ' ' s + |> List.filter (fun t -> t <> "") + |> List.concat_map (fun t -> + (* ISO 'T' separator sits between digits *) + match String.index_opt t 'T' with + | Some i + when i > 0 && i < String.length t - 1 + && is_digit t.[i - 1] && is_digit t.[i + 1] -> + [ String.sub t 0 i + ; String.sub t (i + 1) (String.length t - i - 1) ] + | _ -> [ t ]) + |> List.filter (fun t -> t <> "") + |> List.map (fun t -> + if + String.length t > 0 + && (t.[String.length t - 1] = ',') + then String.sub t 0 (String.length t - 1) + else t) + in + let tokens = + (* drop a leading weekday name ("Mon," / "Monday") *) + match tokens with + | w :: rest + when List.mem + (String.lowercase_ascii + (if String.length w > 3 then String.sub w 0 3 else w)) + [ "mon"; "tue"; "wed"; "thu"; "fri"; "sat"; "sun" ] -> rest + | _ -> tokens + in + let year, month, day, iso_dash, time_ms, tz = + List.fold_left + (fun (y, mo, d, iso, t, tz) tok -> + match date_fields tok with + | Some (yy, mm, dd, iso') -> (Some yy, Some mm, Some dd, iso', t, tz) + | None -> + (match month_of tok with + | Some mm -> (y, Some mm, d, iso, t, tz) + | None -> + if String.contains tok ':' then + (match time_and_tz tok with + | Some (ms, tz') -> (y, mo, d, iso, Some ms, tz') + | None -> (y, mo, d, iso, t, tz)) + else if all_digits tok then + let n = int_of_string tok in + if String.length tok >= 4 || n > 31 then + (Some n, mo, d, iso, t, tz) + else if d = None then (y, mo, Some n, iso, t, tz) + else (Some n, mo, d, iso, t, tz) + else + (* bare tz token *) + (match String.lowercase_ascii tok with + | "z" | "gmt" | "utc" -> (y, mo, d, iso, t, Some 0) + | _ -> (y, mo, d, iso, t, tz)))) + (None, None, None, false, None, None) + tokens + in + match year, month, day with + | Some y, Some mo, Some d -> + (match tz, time_ms, iso_dash with + | Some off, _, _ -> + let utc_ms = + Int64.add (Int64.mul (Int64.of_int (days_from_civil y mo d)) + 86400000L) + (Option.value time_ms ~default:0L) + in + Some (Int64.sub utc_ms (Int64.of_int (off * 60000))) + | None, None, true -> + (* ISO date-only ("YYYY-MM-DD") is UTC midnight *) + Some (Int64.mul (Int64.of_int (days_from_civil y mo d)) + 86400000L) + | _ -> + (* everything else without an offset is local time *) + let ms = Option.value time_ms ~default:0L in + Some + (ms_of_civil + (Time.civil ~year:y ~month:mo ~day:d + ~hour:(Int64.to_int (Int64.div ms 3600000L)) + ~minute: + (Int64.to_int (Int64.div (Int64.rem ms 3600000L) 60000L)) + ~second: + (Int64.to_int (Int64.div (Int64.rem ms 60000L) 1000L)) + ~ms:(Int64.to_int (Int64.rem ms 1000L))))) + | _ -> None + +(* date-time-util/default-journal-title-formatter *) +let default_journal_title_formatter = "MMM do, yyyy" + +(* date-time-util/safe-journal-title-formatters *) +let safe_journal_title_formatters (date_formatter : string option) : string list = + let default = default_journal_title_formatter in + [ (match date_formatter with Some f -> f | None -> "") + ; default + ; "yyyy-MM-dd" + ; "yyyy_MM_dd" ] + |> List.filter (fun s -> Unicode.trim s <> "") + |> List.fold_left (fun acc f -> if List.mem f acc then acc else acc @ [ f ]) [] + +(* common-date/valid-journal-title-with-slash? — parses under a slash + formatter (journal titles that legitimately contain "/") *) +let valid_journal_title_with_slash (title : string) : bool = + List.exists + (fun fmt -> + Ns_util.str_contains fmt "/" + && Option.is_some (date_of_formatter fmt (capitalize_all title))) + built_in_journal_title_formatters + +(* date-time-util/ms->journal-day — local date as yyyymmdd int. *) +let ms_to_journal_day (ms : int64) : int = date_to_int ms + +(* date-time-util/utc-ms->journal-day — ms to the :block/journal-day of its + UTC calendar day; the inverse of journal-day->ms, which gives UTC + midnight. *) +let utc_ms_to_journal_day (ms : int64) : int = + let year, month, day, _, _, _, _ = + Time.civil_fields (Time.civil_of_epoch_ms Time.utc (Time.epoch_ms ms)) + in + (year * 10000) + (month * 100) + day + +(* ---------- journal title formatting ---------- *) + +let ordinal_suffix d = + if d >= 11 && d <= 13 then "th" + else match d mod 10 with + | 1 -> "st" | 2 -> "nd" | 3 -> "rd" | _ -> "th" + +(* Zeller-congruence weekday index aligned with weekday_names: + 0 = Mon .. 6 = Sun. *) +let weekday_index (y, m, d) = + let y', m' = if m < 3 then (y - 1, m + 12) else (y, m) in + let k = y' mod 100 and j = y' / 100 in + (* h: 0 = Saturday *) + let h = + (d + ((13 * (m' + 1)) / 5) + k + (k / 4) + (j / 4) + (5 * j)) mod 7 + in + let h = ((h mod 7) + 7) mod 7 in + (h + 5) mod 7 + +(* tf/format inverse of date_of_formatter for the tokenized + journal-title formatters. *) +let formatter_of_date (fmt : string) (year, month, day : int * int * int) + : string = + let pad2 n = Printf.sprintf "%02d" n in + let b = Buffer.create 32 in + List.iter + (fun tok -> + match tok with + | TokLit c -> Buffer.add_char b c + | TokYear w -> + if w = 2 then Buffer.add_string b (pad2 (year mod 100)) + else Buffer.add_string b (Printf.sprintf "%04d" year) + | TokMonthNum -> Buffer.add_string b (pad2 month) + | TokMonthName w -> + Buffer.add_string + b + (if w = 4 then month_long.(month - 1) + else month_short.(month - 1)) + | TokDay -> Buffer.add_string b (pad2 day) + | TokDayOrd -> + Buffer.add_string + b + (string_of_int day ^ ordinal_suffix day) + | TokWeekday w -> + let i = weekday_index (year, month, day) in + let name = + if w = 4 then weekday_names.(i + 7) else weekday_names.(i) + in + (* tf/format emits capitalized English weekday names *) + Buffer.add_string b (String.capitalize_ascii name)) + (tokens_of_formatter fmt); + Buffer.contents b + +(* common-date/int->journal-title *) +let int_to_journal_title (day : int) (date_formatter : string) : string = + formatter_of_date + date_formatter + (day / 10000, (day / 100) mod 100, day mod 100) + +end + +module Page_ref = struct +(* Faithful port of logseq.common.util.page-ref + (deps/common/src/logseq/common/util/page_ref.cljs). *) + +let left_brackets = "[[" +let right_brackets = "]]" + +(* page-ref? *) +let is_page_ref (s : string) : bool = + let n = String.length s in + n >= 4 + && String.sub s 0 2 = left_brackets + && String.sub s (n - 2) 2 = right_brackets + +(* ->page-ref *) +let to_page_ref (page_name : string) : string = + left_brackets ^ page_name ^ right_brackets + +(* markdown-page-ref-re #"\[(.*)\]\(file:.*\)" — full match; label is + greedy so the LAST "](file:" boundary wins. *) +let markdown_page_ref_name (s : string) : string option = + let n = String.length s in + if n >= 5 && s.[0] = '[' && s.[n - 1] = ')' then + let sub = "](file:" in + let sl = String.length sub in + let rec find_last i = + if i < 0 then None + else if i + sl <= n && String.sub s i sl = sub then Some i + else find_last (i - 1) + in + match find_last (n - sl) with + | Some close -> Some (Unicode.trim (String.sub s 1 (close - 1))) + | None -> None + else None + +(* get-page-name: markdown page-ref label or [[inner]] (greedy — + equivalent to strip the outer brackets on a full match). *) +let get_page_name (s : string) : string option = + match markdown_page_ref_name s with + | Some _ as r -> r + | None -> if is_page_ref s then Some (String.sub s 2 (String.length s - 4)) else None + +(* get-page-name! / page-ref-un-brackets! *) +let get_page_name_exn (s : string) : string = + match get_page_name s with Some n -> n | None -> s + +end + + +module Ldb = struct + open Datascript + let ent_of_id db id = entity db (Entity_id id) + let value (e : entity) attr = Graph_read.value e.db e.id attr + let string_value e attr = Graph_read.string_value (value e attr) + let ident_of e = match value e "db/ident" with Some (Keyword k) -> Some k | _ -> None + let page_name_sanity_lc s = Unicode.trim (Unicode.lowercase s) + let is_uuid_string s = + String.length s = 36 && s.[8] = '-' && s.[13] = '-' && s.[18] = '-' && s.[23] = '-' + let journal_title_of_day day fmt = Date_time_util.int_to_journal_title day fmt + let get_page db = function + | String s when not (is_uuid_string s) -> + Option.bind (Seq.find_map (fun (d : datom) -> Some d) + (datoms db Avet ~a:"block/name" ~v:(String (page_name_sanity_lc s)) ())) + (fun d -> ent_of_id db d.e) + | String s | Uuid s -> entity db (Lookup_ref ("block/uuid", Uuid s)) + | Int64 n -> ent_of_id db (Int64.to_int n) + | _ -> None +end + +module Entity_refs = struct + let ref_ids (e : Datascript.entity) attr = Graph_read.ref_eids e.db e.id attr + let ref_ent e attr = match ref_ids e attr with + | id :: _ -> Ldb.ent_of_id e.Datascript.db id | [] -> None + let has_tag (e : Datascript.entity) ident = Graph_read.entity_is_instance_of e.db e.id ident +end + +module Db_class = struct + let get_structured_children db id = + Graph_read.class_descendants db id |> List.filter (fun child -> child <> id) +end + +module Ds_wire = struct +open Datascript +include Dev_sync.Ds_wire +let escape_string s = + let b = Buffer.create (String.length s + 8) in + String.iter + (fun c -> + match c with + | '"' -> Buffer.add_string b "\\\"" + | '\\' -> Buffer.add_string b "\\\\" + | '\n' -> Buffer.add_string b "\\n" + | '\t' -> Buffer.add_string b "\\t" + | '\r' -> Buffer.add_string b "\\r" + | c -> Buffer.add_char b c) + s; + Buffer.contents b + +let iso_of_ms ms = + (* ISO 8601 from epoch millis, mode-agnostic + (civil-from-days algorithm, no platform time API). *) + let total_seconds = Int64.div ms 1000L in + let total_seconds = + if ms < 0L && Int64.rem ms 1000L <> 0L then Int64.sub total_seconds 1L + else total_seconds + in + let day_rem = Int64.rem total_seconds 86400L in + let day_secs, days = + if day_rem < 0L then + Int64.add day_rem 86400L, Int64.to_int (Int64.sub (Int64.div total_seconds 86400L) 1L) + else + day_rem, Int64.to_int (Int64.div total_seconds 86400L) + in + let hh = Int64.to_int (Int64.div day_secs 3600L) in + let mm = Int64.to_int (Int64.div (Int64.rem day_secs 3600L) 60L) in + let ss = Int64.to_int (Int64.rem day_secs 60L) in + let z = days + 719468 in + let era = (if z >= 0 then z else z - 146096) / 146097 in + let doe = z - (era * 146097) in + let yoe = (doe - (doe / 1460) + (doe / 36524) - (doe / 146096)) / 365 in + let y = yoe + (era * 400) in + let doy = doe - ((365 * yoe) + (yoe / 4) - (yoe / 100)) in + let mp = ((5 * doy) + 2) / 153 in + let d = doy - (((153 * mp) + 2) / 5) + 1 in + let m = if mp < 10 then mp + 3 else mp - 9 in + let y = if m <= 2 then y + 1 else y in + let ms_part = Int64.to_int (Int64.rem ms 1000L) in + let ms_part = if ms_part < 0 then ms_part + 1000 else ms_part in + Printf.sprintf "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ" y m d hh mm ss ms_part + +let rec edn_of_query_form (f : query_form) : string = + match f with + | QueryFormNil -> "nil" + | QueryFormBool b -> if b then "true" else "false" + | QueryFormInt n -> Int64.to_string n + | QueryFormFloat x -> Printf.sprintf "%.17g" x + | QueryFormString s -> Printf.sprintf "\"%s\"" (escape_string s) + | QueryFormKeyword s -> ":" ^ s + | QueryFormSymbol s -> s + | QueryFormVector xs -> "[" ^ String.concat " " (List.map edn_of_query_form xs) ^ "]" + | QueryFormList xs -> "(" ^ String.concat " " (List.map edn_of_query_form xs) ^ ")" + | QueryFormSet xs -> "#{" ^ String.concat " " (List.map edn_of_query_form xs) ^ "}" + | QueryFormTagged (tag, rep) -> "#" ^ tag ^ " " ^ edn_of_query_form rep + | QueryFormMap kvs -> + let pair (k, v) = edn_of_query_form k ^ " " ^ edn_of_query_form v in + "{" ^ String.concat " " (List.map pair kvs) ^ "}" + +(* Canonical string key for a wire scalar (ui-request ids, state keys). *) + +end + +module Edn_util = struct +open Datascript +module Edn_parser = Melange_edn_native +let rec value_of_edn (Edn_parser.Any v) : value = + match v with + | Edn_parser.Nil -> Nil + | Edn_parser.Bool b -> Bool b + | Edn_parser.String s -> String s + | Edn_parser.Char u -> String (let b = Buffer.create 4 in Buffer.add_utf_8_uchar b u; Buffer.contents b) + | Edn_parser.Symbol s -> Symbol s + | Edn_parser.Keyword k -> Keyword (Edn_parser.keyword_to_string k) + | Edn_parser.Int n -> Common_util.value_of_ms n + | Edn_parser.Bigint s -> Int64 (Int64.of_int (int_of_string_opt s |> Option.value ~default:0)) + | Edn_parser.Float f -> Float f + | Edn_parser.Decimal s -> Float (float_of_string_opt s |> Option.value ~default:0.0) + | Edn_parser.Ratio s -> Float (float_of_string_opt s |> Option.value ~default:0.0) + | Edn_parser.Regex s -> Regex s + | Edn_parser.List xs -> List (List.map value_of_edn (Array.to_list xs)) + | Edn_parser.Vector xs -> Vector (List.map value_of_edn (Array.to_list xs)) + | Edn_parser.Map kvs -> + Map (List.map (fun (k, v) -> (value_of_edn k, value_of_edn v)) (Array.to_list kvs)) + | Edn_parser.Set xs -> Set (List.map value_of_edn (Array.to_list xs)) + | Edn_parser.Tagged (t, v) -> + (match t, value_of_edn v with + (* cljs reader literals: #uuid -> uuid, #inst -> date *) + | "uuid", String s -> Uuid (Datascript.Util.uuid_canonicalize s) + | "inst", String s -> ( + match Date_time_util.epoch_ms_of_iso s with + | Some ms -> Instant ms + | None -> invalid_arg "edn_util: unparsable #inst literal") + | _ -> Tuple [ Some (Symbol t); Some (value_of_edn v) ]) + +(* edn/read-string: reads the first form *) + +let read_string (s : string) : value = value_of_edn (Edn_parser.of_edn_string s) + +(* common-util/safe-read-string *) + +let buffer_add_edn_escaped buf s = + Buffer.add_char buf '"'; + String.iter + (fun c -> + match c with + | '"' -> Buffer.add_string buf "\\\"" + | '\\' -> Buffer.add_string buf "\\\\" + | '\n' -> Buffer.add_string buf "\\n" + | '\t' -> Buffer.add_string buf "\\t" + | '\r' -> Buffer.add_string buf "\\r" + | _ -> Buffer.add_char buf c) + s; + Buffer.add_char buf '"' + +let rec pr_str_to buf (v : value) : unit = + match v with + | Nil -> Buffer.add_string buf "nil" + | Bool b -> Buffer.add_string buf (if b then "true" else "false") + | Int64 n -> Buffer.add_string buf (Int64.to_string n) + (* cljs pr-str prints a double via JS Number::toString — integral + floats come out as plain digits ("1790000000000"), not "1.79e+12" *) + | Float f -> Buffer.add_string buf (Common_util.js_string_of_float f) + | String s -> buffer_add_edn_escaped buf s + | Symbol s -> Buffer.add_string buf s + | Keyword s -> Buffer.add_string buf (":" ^ s) + | Uuid s -> Buffer.add_string buf ("#uuid \"" ^ s ^ "\"") + | Instant n -> Buffer.add_string buf (Int64.to_string n) + | Regex s -> Buffer.add_string buf ("#\"" ^ s ^ "\"") + | Ref n -> Buffer.add_string buf (string_of_int n) + | Ref_to _ -> Buffer.add_string buf "" + | TxRef -> Buffer.add_string buf ":db/current-tx" + | List xs -> pr_seq_to buf "(" ")" xs + | Vector xs -> pr_seq_to buf "[" "]" xs + | Set xs -> pr_seq_to buf "#{" "}" xs + | Map kvs -> + Buffer.add_char buf '{'; + List.iteri + (fun i (k, v) -> + if i > 0 then Buffer.add_char buf ' '; + pr_str_to buf k; + Buffer.add_char buf ' '; + pr_str_to buf v) + kvs; + Buffer.add_char buf '}' + | Tuple vs -> + pr_seq_to buf "[" "]" (List.filter_map Fun.id vs) + +and pr_seq_to buf open_ close xs = + Buffer.add_string buf open_; + List.iteri + (fun i v -> + if i > 0 then Buffer.add_char buf ' '; + pr_str_to buf v) + xs; + Buffer.add_string buf close + +let pr_str (v : value) : string = + let buf = Buffer.create 64 in + pr_str_to buf v; + Buffer.contents buf + +end + +module Db_query_dsl = struct +(* Faithful port of the worker query-dsl stack: + + - logseq.db.frontend.query-dsl (deps/db/src/logseq/db/frontend/query_dsl.cljs) + — pre-transform, simplify-query, get-timestamp-property, custom readers + - frontend.worker.query-dsl (src/main/frontend/worker/query_dsl.cljs) + — build-query pipeline, parse, query-wrapper, execute-query, + execute-custom-query + - logseq.db.frontend.datalog (deps/db/src/logseq/db/frontend/datalog.cljc) + — find-rules-in-where, query-vec->map, add-to-end-of-query-section + - logseq.db.frontend.rules (deps/db/src/logseq/db/frontend/rules.cljc) + — rules, db-query-dsl-rules, rules-dependencies, extract-rules + - db-property/property? + public-db-attribute-properties + - db-class/get-structured-children + + Query forms are manipulated as datascript_ocaml query_form trees and + serialized through Ds_wire.edn_of_query_form; rule sets are kept as + EDN text and parsed with Datascript.Parser. *) + +open Datascript + +let kw s = QueryFormKeyword s +let sym s = QueryFormSymbol s +let str s = QueryFormString s +let int n = QueryFormInt (Int64.of_int n) +let list_ xs = QueryFormList xs +let vec_ xs = QueryFormVector xs + +(* cljs name for keyword/symbol/string forms *) +let name_of_form = function + | QueryFormKeyword s | QueryFormSymbol s | QueryFormString s -> + (* cljs name takes everything after the last '/' *) + (match String.rindex_opt s '/' with + | Some i -> String.sub s (i + 1) (String.length s - i - 1) + | None -> s) + | _ -> invalid_arg "name of non-named form" + +let namespace_of_kw (s : string) : string option = + match String.rindex_opt s '/' with + | Some i -> Some (String.sub s 0 i) + | None -> None + +let qualified_kw s = Option.is_some (namespace_of_kw s) + +let is_coll = function + | QueryFormVector _ | QueryFormList _ | QueryFormSet _ | QueryFormMap _ -> true + | _ -> false + +let is_list = function QueryFormList _ -> true | _ -> false +let is_vector = function QueryFormVector _ -> true | _ -> false +let is_seq = is_list + +let coll_elems = function + | QueryFormVector xs | QueryFormList xs | QueryFormSet xs -> xs + | QueryFormMap kvs -> List.map (fun (k, v) -> vec_ [ k; v ]) kvs + | _ -> [] + +let first_elem f = match coll_elems f with x :: _ -> Some x | [] -> None + +let sym_named name = function QueryFormSymbol s -> s = name | _ -> false + +(* cljs = on sequential collections is type-agnostic (list = vector). *) +let rec form_equal a b = + match (a, b) with + | QueryFormNil, QueryFormNil -> true + | QueryFormBool x, QueryFormBool y -> x = y + | QueryFormInt x, QueryFormInt y -> x = y + | QueryFormFloat x, QueryFormFloat y -> x = y + | QueryFormString x, QueryFormString y -> x = y + | QueryFormKeyword x, QueryFormKeyword y -> x = y + | QueryFormSymbol x, QueryFormSymbol y -> x = y + | (QueryFormVector x, QueryFormVector y) | (QueryFormList x, QueryFormList y) + | (QueryFormVector x, QueryFormList y) | (QueryFormList x, QueryFormVector y) + -> List.length x = List.length y && List.for_all2 form_equal x y + | QueryFormSet x, QueryFormSet y -> + List.length x = List.length y + && List.for_all (fun e -> List.exists (form_equal e) y) x + | QueryFormTagged (t1, x), QueryFormTagged (t2, y) -> t1 = t2 && form_equal x y + | QueryFormMap x, QueryFormMap y -> + List.length x = List.length y + && List.for_all2 + (fun (k1, v1) (k2, v2) -> form_equal k1 k2 && form_equal v1 v2) + x y + | _ -> false + +(* Canonical form for dedup: cljs `distinct` compares with sequential + equality (vectors and lists equal, set members unordered), which a + plain structural key would miss. *) +let rec canon_form = function + | QueryFormVector xs | QueryFormList xs -> + QueryFormList (List.map canon_form xs) + | QueryFormSet xs -> + QueryFormSet (List.sort_uniq compare (List.map canon_form xs)) + | QueryFormMap kvs -> + QueryFormMap (List.map (fun (k, v) -> (canon_form k, canon_form v)) kvs) + | QueryFormTagged (t, x) -> QueryFormTagged (t, canon_form x) + | x -> x + +let distinct_preserve_order xs = Common_util.distinct_by canon_form xs + +(* cljs flatten — recursively yield non-coll leaves (maps flatten to their + k/v pairs). *) +let rec flatten f = + match f with + | QueryFormVector xs | QueryFormList xs | QueryFormSet xs -> + List.concat_map flatten xs + | QueryFormMap kvs -> List.concat_map (fun (k, v) -> flatten k @ flatten v) kvs + | leaf -> [ leaf ] + +let lvar_name = function + | QueryFormSymbol s when String.length s > 0 && s.[0] = '?' -> Some s + | _ -> None + +(* cljs postwalk over query_form: children first, then the fn. *) +let rec postwalk fn form = + let form' = + match form with + | QueryFormVector xs -> vec_ (List.map (postwalk fn) xs) + | QueryFormList xs -> list_ (List.map (postwalk fn) xs) + | QueryFormSet xs -> QueryFormSet (List.map (postwalk fn) xs) + | QueryFormMap kvs -> + QueryFormMap (List.map (fun (k, v) -> (postwalk fn k, postwalk fn v)) kvs) + | QueryFormTagged (t, f') -> QueryFormTagged (t, postwalk fn f') + | leaf -> leaf + in + fn form' + +(* ============ logseq.db.frontend.rules tables ============ *) + +(* rules map — keep as EDN text per entry; the cljs vals are either a + single rule form [(head) clause...] or a vector of rule forms. *) +let rules_base = + [ + ( "parent", + {| +[[(parent ?p ?c) + [?c :block/parent ?p]] + [(parent ?p ?c) + [?t :block/parent ?p] + (parent ?t ?c)]]|} ); + ( "class-extends", + {| +[[(class-extends ?p ?c) + [?c :logseq.property.class/extends ?p]] + [(class-extends ?p ?c) + [?t :logseq.property.class/extends ?p] + (class-extends ?t ?c)]]|} ); + ( "alias", + {| +[[(alias ?e2 ?e1) + [?e2 :block/alias ?e1]] + [(alias ?e2 ?e1) + [?e1 :block/alias ?e2]]]|} ); + ( "self-ref", + {| +[(self-ref ?b ?ref) + [?b :block/refs ?ref]]|} ); + ( "has-ref", + {| +[[(has-ref ?b ?r) + [?b :block/refs ?r]] + [(has-ref ?b ?r) + (parent ?p ?b) + [?p :block/refs ?r]]]|} ); + ] + +(* db-query-dsl-rules — merge of rules + the dsl rules *) +let db_query_dsl_rules = + rules_base + @ [ + ( "page-ref", + {| +[(page-ref ?b ?ref) + (has-ref ?b ?ref)]|} ); + ( "block-content", + {| +[(block-content ?b ?query) + [?b :block/title ?content] + [(clojure.string/includes? ?content ?query)]]|} ); + ( "page", + {| +[(page ?b ?page-name) + [?b :block/page ?bp] + [?bp :block/name ?page-name]]|} ); + ( "between", + {| +[(between ?b ?start ?end) + [?b :block/page ?p] + [?p :block/tags :logseq.class/Journal] + [?p :block/journal-day ?d] + [(>= ?d ?start)] + [(<= ?d ?end)]]|} ); + ( "ref->val", + {| +[[(ref->val ?pv ?val) + [?pv :block/title ?val]] + [(ref->val ?pv ?val) + [?pv :logseq.property/value ?val]]]|} ); + ( "property-missing-value", + {| +[(property-missing-value ?b ?prop-e ?default-p ?default-v) + [?t :logseq.property.class/properties ?prop-e] + [?prop-e :db/ident ?prop] + (object-has-class-property? ?b ?prop) + [(get-else $ ?b ?prop "N/A") ?prop-v] + [(= ?prop-v "N/A")] + [?prop-e ?default-p ?default-v]]|} ); + ( "scalar-property-value", + {| +[[(scalar-property-value ?b ?prop-e ?val) + [?prop-e :db/ident ?prop] + [?b ?prop ?val]]]|} ); + ( "scalar-property-value-with-default", + {| +[[(scalar-property-value-with-default ?b ?prop-e ?val) + (scalar-property-value ?b ?prop-e ?val)] + + [(scalar-property-value-with-default ?b ?prop-e ?val) + (property-missing-value ?b ?prop-e :logseq.property/scalar-default-value ?val)]]|} + ); + ( "ref-property-value", + {| +[[(ref-property-value ?b ?prop-e ?val) + [?prop-e :db/ident ?prop] + [?b ?prop ?pv] + (ref->val ?pv ?val)]]|} ); + ( "ref-property-value-with-default", + {| +[[(ref-property-value-with-default ?b ?prop-e ?val) + (ref-property-value ?b ?prop-e ?val)] + [(ref-property-value-with-default ?b ?prop-e ?val) + (property-missing-value ?b ?prop-e :logseq.property/default-value ?pv) + (ref->val ?pv ?val)]]|} ); + ( "object-has-class-property", + {| +[(object-has-class-property? ?b ?prop) + [?prop-e :db/ident ?prop] + [?t :logseq.property.class/properties ?prop-e] + [?b :block/tags ?tc] + (or + [(= ?t ?tc)] + (class-extends ?t ?tc))]|} ); + ( "has-property-or-object-property", + {| +[(has-property-or-object-property? ?b ?prop) + [?prop-e :db/ident ?prop] + (or + [?b ?prop _] + (object-has-class-property? ?b ?prop))]|} ); + ( "has-simple-query-property", + {| +[(has-simple-query-property ?b ?prop) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (has-property-or-object-property? ?b ?prop) + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true])]|} ); + ( "has-private-simple-query-property", + {| +[(has-private-simple-query-property ?b ?prop) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (has-property-or-object-property? ?b ?prop)]|} ); + ( "has-property", + {| +[(has-property ?b ?prop) + [?b ?prop _] + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true])]|} ); + ( "scalar-property", + {| +[(scalar-property ?b ?prop ?val) + [?prop-e :db/ident ?prop] + (scalar-property-value ?b ?prop-e ?val) + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true])]|} ); + ( "scalar-property-with-default", + {| +[(scalar-property-with-default ?b ?prop ?val) + [?prop-e :db/ident ?prop] + (scalar-property-value-with-default ?b ?prop-e ?val) + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true])]|} ); + ( "ref-property", + {| +[(ref-property ?b ?prop ?val) + [?prop-e :db/ident ?prop] + (ref-property-value ?b ?prop-e ?val) + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true])]|} ); + ( "ref-property-with-default", + {| +[(ref-property-with-default ?b ?prop ?val) + [?prop-e :db/ident ?prop] + (ref-property-value-with-default ?b ?prop-e ?val) + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true])]|} ); + ( "private-scalar-property", + {| +[(private-scalar-property ?b ?prop ?val) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (scalar-property-value ?b ?prop-e ?val)]|} ); + ( "private-scalar-property-with-default", + {| +[(private-scalar-property-with-default ?b ?prop ?val) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (scalar-property-value-with-default ?b ?prop-e ?val)]|} ); + ( "private-ref-property", + {| +[(private-ref-property ?b ?prop ?val) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (ref-property-value ?b ?prop-e ?val)]|} ); + ( "private-ref-property-with-default", + {| +[(private-ref-property-with-default ?b ?prop ?val) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (ref-property-value-with-default ?b ?prop-e ?val)]|} ); + ( "property", + {| +[(property ?b ?prop ?val) + [?prop-e :db/ident ?prop] + [?prop-e :block/tags :logseq.class/Property] + (or + [(missing? $ ?prop-e :logseq.property/public?)] + [?prop-e :logseq.property/public? true]) + [?b ?prop ?pv] + (or + (and + [(missing? $ ?prop-e :db/valueType)] + [?b ?prop ?val]) + (and + [?prop-e :db/valueType :db.type/ref] + (or [?pv :block/title ?val] + [?pv :logseq.property/value ?val])))]|} ); + ( "tags", + {| +[[(tag-spec->tag ?tag ?spec) + [(number? ?spec)] + [(identity ?spec) ?tag]] + + [(tag-spec->tag ?tag ?spec) + [?tag :block/title ?spec]] + + [(tag-spec->tag ?tag ?spec) + [?tag :db/ident ?spec]] + + [(tags ?b ?tags) + [(identity ?tags) [?spec ...]] + (tag-spec->tag ?tag ?spec) + [?b :block/tags ?tc] + (or + [(= ?tag ?tc)] + (class-extends ?tag ?tc)) + [(missing? $ ?b :block/link)]]]|} ); + ( "task", + {| +[(task ?b ?statuses) + (ref-property-with-default ?b :logseq.property/status ?val) + [(str ?val) ?val-str] + [(clojure.string/lower-case ?val-str) ?val-lower] + (or + [(contains? ?statuses ?val)] + [(contains? ?statuses ?val-lower)])]|} ); + ( "priority", + {| +[(priority ?b ?priorities) + (ref-property-with-default ?b :logseq.property/priority ?priority) + [(str ?priority) ?priority-str] + [(clojure.string/lower-case ?priority-str) ?priority-lower] + (or + [(contains? ?priorities ?priority)] + [(contains? ?priorities ?priority-lower)])]|} ); + ] + +let rules_dependencies = + [ + ("has-ref", [ "parent" ]); + ("page-ref", [ "has-ref" ]); + ("task", [ "ref-property-with-default" ]); + ("priority", [ "ref-property-with-default" ]); + ("tags", [ "class-extends" ]); + ("has-property-or-object-property", [ "object-has-class-property" ]); + ("object-has-class-property", [ "class-extends" ]); + ("has-simple-query-property", [ "has-property-or-object-property" ]); + ("has-private-simple-query-property", [ "has-property-or-object-property" ]); + ("property-missing-value", [ "object-has-class-property" ]); + ("ref-property-value", [ "ref->val" ]); + ("scalar-property", [ "scalar-property-value" ]); + ( "scalar-property-with-default", + [ "scalar-property-value-with-default" ] ); + ( "scalar-property-value-with-default", + [ "scalar-property-value"; "property-missing-value" ] ); + ("ref-property", [ "ref-property-value" ]); + ( "ref-property-value-with-default", + [ "ref-property-value"; "property-missing-value" ] ); + ("ref-property-with-default", [ "ref-property-value-with-default" ]); + ("private-scalar-property", [ "scalar-property-value" ]); + ( "private-scalar-property-with-default", + [ "scalar-property-value-with-default" ] ); + ("private-ref-property", [ "ref-property-value" ]); + ( "private-ref-property-with-default", + [ "ref-property-value-with-default" ] ); + ] + +(* rules/get-full-deps — transitive closure over rules-dependencies; + returns rule names incl. the input ones, deduped preserving + first-seen order (cljs uses a set — order unspecified there). *) +let get_full_deps names = + (* result must include the input rules themselves *) + let rec go deps' result = + match deps' with + | [] -> result + | _ -> + let result' = result @ List.filter (fun d -> not (List.mem d result)) deps' in + let next = + List.concat_map + (fun d -> Option.value (List.assoc_opt d rules_dependencies) ~default:[]) + deps' + in + go next result' + in + go names [] + +(* rules/extract-rules — the EDN of each rule entry; a vector whose first + element is a vector holds multiple rule clauses. Returns a list of + rule forms (each a vector [(head) clauses...]). *) +let extract_rules names : query_form list = + let names = get_full_deps names in + List.concat_map + (fun name -> + match List.assoc_opt name db_query_dsl_rules with + | None -> [ QueryFormNil ] (* cljs: (rules-m %) -> nil -> [nil] *) + | Some edn -> + (match Parser.read_edn edn with + | QueryFormVector (QueryFormVector _ :: _ as rules) -> rules + | QueryFormList (QueryFormVector _ :: _ as rules) -> rules + | rule -> [ rule ])) + names + +let parse_rules_input (rules : query_form list) : query_arg = + let edn = "[" ^ String.concat " " (List.map Ds_wire.edn_of_query_form rules) ^ "]" in + Arg_rules (Parser.parse_rules (Parser.read_edn edn)) + +(* ============ logseq.db.frontend.datalog ============ *) + +(* find-rules-in-where *) +let find_rules_in_where (where : query_form list) (valid : string list) : string list = + flatten (vec_ where) + |> List.filter_map (function + | QueryFormSymbol s when List.mem s valid -> Some s + | _ -> None) + |> Common_util.distinct_by Fun.id + +(* query-vec->map — ordered assoc map: key = section keyword name (or "" + for the leading group), value = that section's forms. *) +let query_vec_to_map (q : query_form list) : (string * query_form list) list = + let rec go acc cur forms = + match forms with + | [] -> acc + | QueryFormKeyword k :: rest -> go acc (Some k) rest + | f :: rest -> + let key = match cur with Some k -> k | None -> "" in + let acc = + match List.assoc_opt key acc with + | Some _ -> + List.map (fun (k, v) -> if k = key then (k, v @ [ f ]) else (k, v)) acc + | None -> acc @ [ (key, [ f ]) ] + in + go acc cur rest + in + go [] None q + +(* Ordered section keys incl. the leading nil group. *) +let query_map_sections (q : query_form list) : (string option * query_form list) list = + let rec go acc cur forms = + match forms with + | [] -> acc + | QueryFormKeyword k :: rest -> + let cur' = Some k in + if List.exists (fun (k', _) -> k' = cur') acc then go acc cur' rest + else go (acc @ [ (cur', []) ]) cur' rest + | f :: rest -> + let acc = + match List.assoc_opt cur acc with + | Some _ -> + List.map + (fun (k, v) -> if k = cur then (k, v @ [ f ]) else (k, v)) + acc + | None -> acc @ [ (cur, [ f ]) ] + in + go acc cur rest + in + go [] None q + +(* add-to-end-of-query-section — cljs concats [k] (nil for the leading + group) into the rebuilt vector *) +let add_to_end_of_query_section (q : query_form list) (query_kw : string) + (elems : query_form list) : query_form list = + let sections = query_map_sections q in + List.concat_map + (fun (k, v) -> + let key_el = + match k with Some name -> [ kw name ] | None -> [ QueryFormNil ] + in + key_el @ v @ (match k with Some name when name = query_kw -> elems | _ -> [])) + sections + +(* ============ db-property helpers ============ *) + +let logseq_property_namespaces = + [ "logseq.property"; "logseq.property.tldraw"; "logseq.property.pdf"; + "logseq.property.fsrs"; "logseq.property.linked-references"; + "logseq.property.asset"; "logseq.property.table"; "logseq.property.node"; + "logseq.property.code"; "logseq.property.repeat"; + "logseq.property.journal"; "logseq.property.class"; "logseq.property.view"; + "logseq.property.user"; "logseq.property.history"; + "logseq.property.reaction"; "logseq.property.sync"; "logseq.property.publish"; + "logseq.property.recycle"; "logseq.property.comments"; "logseq.property.agent" ] + +let public_db_attribute_properties = [ "block/alias"; "block/tags" ] + +let user_property_namespace (s : string) = + let rec contains i = + i + 10 <= String.length s + && (String.sub s i 10 = ".property" || contains (i + 1)) + in + contains 0 + +(* db-property/property? *) +let property_kw (k : string) : bool = + match namespace_of_kw k with + | None -> false + | Some ns -> + List.mem ns logseq_property_namespaces + || user_property_namespace ns + || List.mem k public_db_attribute_properties + +(* shared-query-dsl/get-timestamp-property *) +let get_timestamp_property (form : query_form) : string option = + match coll_elems form with + | _ :: property_name :: _ -> + (match property_name with + | QueryFormKeyword _ | QueryFormSymbol _ | QueryFormString _ -> + let p = + name_of_form property_name + |> Unicode.lowercase + |> String.map (fun c -> if c = '_' then '-' else c) + in + if property_kw p then Some p + else (match p with + | "created-at" -> Some "block/created-at" + | "updated-at" -> Some "block/updated-at" + | _ -> None) + | _ -> None) + | _ -> None + +(* ============ logseq.db.frontend.query-dsl: pre-transform ============ *) + +let tag_placeholder = "~~~tag-placeholder~~~" + +let wrapped_by_quotes s = + let n = String.length s in + n >= 2 && s.[0] = '"' && s.[n - 1] = '"' + +(* Step 1: #"\"(?:\\.|[^\"\\])*\"|\[\[(.*?)\]\]" — walk s; keep + double-quoted spans verbatim (with escapes); rewrite each [[inner]] + to a quoted "[[" inner-with-placeholder "]]". *) +let quote_page_refs (s : string) : string = + let n = String.length s in + let b = Buffer.create (n + 16) in + let rec loop i = + if i < n then + if s.[i] = '"' then begin + (* copy the string literal including escapes *) + Buffer.add_char b '"'; + let rec str j = + if j >= n then n + else if s.[j] = '\\' && j + 1 < n then begin + Buffer.add_char b s.[j]; + Buffer.add_char b s.[j + 1]; + str (j + 2) + end + else if s.[j] = '"' then begin + Buffer.add_char b '"'; + j + 1 + end + else begin + Buffer.add_char b s.[j]; + str (j + 1) + end + in + loop (str (i + 1)) + end + else if i + 1 < n && s.[i] = '[' && s.[i + 1] = '[' then + (* non-greedy inner: earliest "]]" *) + let rec find j = + if j + 1 >= n then None + else if s.[j] = ']' && s.[j + 1] = ']' then Some j + else find (j + 1) + in + match find (i + 2) with + | Some j -> + let inner = String.sub s (i + 2) (j - i - 2) in + let inner' = + String.concat tag_placeholder (String.split_on_char '#' inner) + in + Buffer.add_string b "\"[["; + Buffer.add_string b inner'; + Buffer.add_string b "]]\""; + loop (j + 2) + | None -> + Buffer.add_char b s.[i]; + loop (i + 1) + else begin + Buffer.add_char b s.[i]; + loop (i + 1) + end + in + loop 0; + Buffer.contents b + +(* Step 2: #"\(between ([^\)]+)\)" — keywordize offset args. *) +let between_rewrite (s : string) : string = + let n = String.length s in + let b = Buffer.create (n + 16) in + let rec loop i = + if i < n then begin + if i + 8 <= n && String.sub s i 8 = "(between " then begin + (* capture [^\)]+ *) + let j = try String.index_from s (i + 8) ')' with Not_found -> n - 1 in + let argstr = String.sub s (i + 8) (j - i - 8) in + let parts = + String.split_on_char ' ' argstr + |> List.filter (fun p -> Unicode.trim p <> "") + |> List.map (fun value -> + let firstc = if String.length value > 0 then String.make 1 value.[0] else "" in + let starts_offset = firstc = "+" || firstc = "-" in + let first_digit = + String.length value > 0 && value.[0] >= '0' && value.[0] <= '9' + in + let suffix_match = + List.exists + (fun suf -> + let l = String.length suf in + String.length value >= l + && String.sub value (String.length value - l) l = suf) + [ "y"; "m"; "d"; "h"; "min" ] + in + if starts_offset || (first_digit && suffix_match) then ":" ^ value + else value) + in + Buffer.add_string b "(between "; + Buffer.add_string b (String.concat " " parts); + Buffer.add_char b ')'; + loop (j + 1) + end + else begin + Buffer.add_char b s.[i]; + loop (i + 1) + end + end + in + loop 0; + Buffer.contents b + +(* Step 3: #"..."#-spans — replace # with placeholder inside + quoted strings (simple, no escapes — matching cljs). *) +let placeholder_hashes_in_strings (s : string) : string = + let n = String.length s in + let b = Buffer.create n in + let rec loop i = + if i < n then + if s.[i] = '"' then begin + let j = try Some (String.index_from s (i + 1) '"') with Not_found -> None in + match j with + | Some j when j > i + 1 -> + Buffer.add_char b '"'; + for k = i + 1 to j - 1 do + if s.[k] = '#' then Buffer.add_string b tag_placeholder + else Buffer.add_char b s.[k] + done; + Buffer.add_char b '"'; + loop (j + 1) + | _ -> + Buffer.add_char b s.[i]; + loop (i + 1) + end + else begin + Buffer.add_char b s.[i]; + loop (i + 1) + end + in + loop 0; + Buffer.contents b + +let replace_all s ~pattern ~replacement = + let n = String.length s and l = String.length pattern in + if l = 0 then s + else + let b = Buffer.create n in + let rec loop i = + if i + l <= n && String.sub s i l = pattern then begin + Buffer.add_string b replacement; + loop (i + l) + end + else if i < n then begin + Buffer.add_char b s.[i]; + loop (i + 1) + end + in + loop 0; + Buffer.contents b + +(* shared-query-dsl/pre-transform *) +let pre_transform (s : string) : string = + if wrapped_by_quotes s then s + else + s + |> quote_page_refs + |> between_rewrite + |> placeholder_hashes_in_strings + |> replace_all ~pattern:" #" ~replacement:" #tag " + |> (fun s -> + if String.length s > 0 && s.[0] = '#' then "#tag " ^ String.sub s 1 (String.length s - 1) + else s) + |> replace_all ~pattern:tag_placeholder ~replacement:"#" + +(* shared-query-dsl/simplify-query — postwalk: (and x)/(or x) -> x *) +let simplify_query form = + postwalk + (fun f -> + match f with + | (QueryFormList [ head; x' ] | QueryFormVector [ head; x' ]) + when sym_named "and" head || sym_named "or" head -> + x' + | f -> f) + form + +(* cljs reader custom-readers: #tag x -> ->page-ref x *) +let apply_custom_readers form = + postwalk + (function + | QueryFormTagged ("tag", f) -> + let name = + match f with + | QueryFormSymbol s -> s + | other -> Ds_wire.edn_of_query_form other + in + str (Page_ref.to_page_ref name) + | f -> f) + form + +(* ============ time helpers (worker query_dsl) ============ *) + +let journal_title_formatters = + Date_time_util.journal_title_formatters None + +let valid_journal_title = Date_time_util.valid_journal_title +let journal_title_to_int t = Date_time_util.journal_title_to_int ~formatters:journal_title_formatters t +let journal_title_to_long t = Date_time_util.parse_journal_title ~formatters:journal_title_formatters t + +(* journal-name — default-journal-title-formatter "MMM do, yyyy" *) +let journal_name (ms : int64) : string = + let day = Date_time_util.date_to_int ms in + Ldb.journal_title_of_day day "MMM do, yyyy" + +(* current-time — "h:mm a" *) +let current_time () : string = + let _, _, _, hour, minute, _, _ = + Time.civil_fields + (Time.civil_of_epoch_ms (Time.local_tz ()) (Time.now ())) + in + let h12 = match hour mod 12 with 0 -> 12 | h -> h in + Printf.sprintf "%d:%02d %s" h12 minute (if hour < 12 then "AM" else "PM") + +let variable_rules ~current_page_title ~today_day = + (* An explicit today_day is a calendar day in its own tz; resolving the + journal title through the host-local tz would shift it a day west of + the date line. Do the day arithmetic on civil fields in the date's + own tz — out-of-range days roll over on epoch_ms_of_civil. *) + let day_fields, tz = + match today_day with + | Some d -> Time.local_date_fields d, Time.local_date_tz d + | None -> + let year, month, day, _, _, _, _ = + Time.civil_fields + (Time.civil_of_epoch_ms (Time.local_tz ()) (Time.now ())) + in + (year, month, day), Time.local_tz () + in + let year, month, day = day_fields in + let journal_title year month day = + let ms = + Time.epoch_ms_of_civil tz + (Time.civil ~year ~month ~day ~hour:0 ~minute:0 ~second:0 ~ms:0) + in + let year, month, day, _, _, _, _ = + Time.civil_fields (Time.civil_of_epoch_ms tz ms) + in + Ldb.journal_title_of_day ((year * 10000) + (month * 100) + day) + "MMM do, yyyy" + in + let today = journal_title year month day in + [ ("today", Page_ref.to_page_ref today); + ("yesterday", + Page_ref.to_page_ref (journal_title year month (day - 1))); + ("tomorrow", + Page_ref.to_page_ref (journal_title year month (day + 1))); + ("time", current_time ()); + ( "current page", + Page_ref.to_page_ref + (match current_page_title with Some t -> t | None -> today) ) ] + +(* chrono-node is a JS-only npm dep — deferred: always None, so the cljs + `if-let` falls through to returning the raw match text. *) +let nld_parse (_ : string) : int64 option = None + +(* resolve-dynamic-template — #<%([^%].*?)%> replace-all *) +let resolve_dynamic_template (content : string) ~current_page_title ~today_day : string = + let rules = lazy (variable_rules ~current_page_title ~today_day) in + let n = String.length content in + let b = Buffer.create n in + let rec loop i = + if i < n then begin + if i + 2 < n && content.[i] = '<' && content.[i + 1] = '%' + && content.[i + 2] <> '%' then begin + (* lazy .*? up to first "%>" *) + let rec find j = + if j + 1 >= n then None + else if content.[j] = '%' && content.[j + 1] = '>' then Some j + else find (j + 1) + in + match find (i + 3) with + | Some j -> + let matched = Unicode.trim (String.sub content (i + 2) (j - i - 2)) in + let key = Unicode.lowercase matched in + let rep = + if matched = "" then "" + else + match List.assoc_opt key (Lazy.force rules) with + | Some r -> r + | None -> + (match nld_parse matched with + | Some d -> Page_ref.to_page_ref (journal_name d) + | None -> matched) + in + Buffer.add_string b rep; + loop (j + 2) + | None -> + Buffer.add_char b content.[i]; + loop (i + 1) + end + else begin + Buffer.add_char b content.[i]; + loop (i + 1) + end + end + in + loop 0; + Buffer.contents b + +(* ->journal-day-int / ->timestamp — inputs are keyword/symbol/string forms *) + +let to_journal_day_int (input : query_form) : int option = + let input = Unicode.lowercase (name_of_form input) in + match input with + | "today" -> Some (Date_time_util.date_to_int (Date_time_util.today_ms ())) + | "yesterday" -> + Some + (Date_time_util.date_to_int + (Date_time_util.minus Days 1 (Date_time_util.today_ms ()))) + | "tomorrow" -> + Some + (Date_time_util.date_to_int + (Date_time_util.plus Days 1 (Date_time_util.today_ms ()))) + | _ when Page_ref.is_page_ref input -> + let name = + match Page_ref.get_page_name input with + | Some n -> n + | None -> input + in + let name = + String.concat "" (String.split_on_char ':' name) + |> Date_time_util.capitalize_all + in + if valid_journal_title ~formatters:journal_title_formatters name then + journal_title_to_int name + else None + | _ -> + let len = String.length input in + if len < 1 then None + else + (match Common_util.parse_long (String.sub input 0 (len - 1)) with + | Some duration -> + let kind = input.[len - 1] in + let p = + match kind with + | 'y' -> Date_time_util.Years + | 'm' -> Date_time_util.Months + | 'w' -> Date_time_util.Weeks + | _ -> Date_time_util.Days + in + Some + (Date_time_util.date_to_int + (Date_time_util.plus p duration (Date_time_util.today_ms ()))) + | None -> None) + +let to_timestamp (input : query_form) : int64 option = + let input = Unicode.lowercase (name_of_form input) in + match input with + | "now" -> Some (Date_time_util.time_ms ()) + | "today" -> Some (Date_time_util.today_ms ()) + | "yesterday" -> Some (Date_time_util.minus Days 1 (Date_time_util.today_ms ())) + | "tomorrow" -> Some (Date_time_util.plus Days 1 (Date_time_util.today_ms ())) + | _ when Page_ref.is_page_ref input -> + let name = + match Page_ref.get_page_name input with + | Some n -> n + | None -> input + in + let name = + String.concat "" (String.split_on_char ':' name) + |> Date_time_util.capitalize_all + in + if valid_journal_title ~formatters:journal_title_formatters name then + journal_title_to_long name + else None + | _ -> + let len = String.length input in + if len < 1 then None + else + (match Common_util.parse_long (String.sub input 0 (len - 1)) with + | Some duration -> + let p = + match input.[len - 1] with + | 'y' -> Date_time_util.Years + | 'm' -> Date_time_util.Months + | 'w' -> Date_time_util.Weeks + | 'h' -> Date_time_util.Hours + | 'n' -> Date_time_util.Minutes + | _ -> Date_time_util.Days + in + Some (Date_time_util.plus p duration (Date_time_util.time_ms ())) + | None -> None) + +(* cljs str of a number: integral doubles print without decimal point *) +let str_of_number = function + | Int64 n -> Int64.to_string n + | Float f -> Common_util.js_string_of_float f + | _ -> assert false + +(* ============ build-query ============ *) + +type env = + { db : db + ; form : query_form + ; mutable blocks : bool + ; mutable sample : int option + ; vars : (string, unit) Hashtbl.t + ; private_property : bool + } + +type built = { bquery : query_form; brules : string list } + +(* collect-vars — all ?-prefixed symbols anywhere in the form *) +let collect_vars form : string list = + let vars = Hashtbl.create 8 in + ignore + (postwalk + (fun f -> + (match lvar_name f with Some v -> Hashtbl.replace vars v () | None -> ()); + f) + form); + Hashtbl.fold (fun k () acc -> k :: acc) vars [] + +let not_clause = function + | QueryFormList (QueryFormSymbol "not" :: _) -> true + | _ -> false + +let build_and_or_not_result (fe : string) (clauses : query_form list) + (current_filter : string option) (nested_and : bool) : query_form = + match fe with + | "not" -> + if List.for_all is_list clauses then list_ (sym "not" :: clauses) + else + let clauses = + match clauses with + | first :: _ when is_coll first -> List.concat_map coll_elems clauses + | _ -> clauses + in + let clauses = + match clauses with + | [ QueryFormList (QueryFormSymbol "and" :: inner) ] -> inner + | _ -> clauses + in + list_ (sym "not" :: clauses) + | _ -> + (match clauses with + | first :: _ when is_coll first -> + if current_filter = Some "not" || current_filter = Some "or" || nested_and + then list_ (sym "and" :: clauses) + else + list_ + (sym fe + :: List.concat_map + (fun result -> + if is_list result then [ result ] + else if is_vector result then coll_elems result + else [ list_ (sym "and" :: coll_elems result) ]) + clauses) + | _ -> list_ (sym fe :: clauses)) + +(* db-based between helpers *) + +let build_journal_between_two_arg (e : query_form) : built option = + match coll_elems e with + | [ _; a; b ] -> + let start = to_journal_day_int a and stop = to_journal_day_int b in + let to_form = function Some n -> QueryFormInt (Int64.of_int n) | None -> QueryFormNil in + let s, e' = (to_form start, to_form stop) in + let s, e' = + match (s, e') with + | QueryFormInt x, QueryFormInt y when x > y -> (e', s) + | _ -> (s, e') + in + Some { bquery = list_ [ sym "between"; sym "?b"; s; e' ]; brules = [ "between" ] } + | _ -> None + +let db_based_build_between_three_arg (e : query_form) : built option = + match get_timestamp_property e with + | Some k -> + (match coll_elems e with + | [ _; _; a; b ] -> + (match (to_timestamp a, to_timestamp b) with + | Some start, Some stop -> + let start, stop = if Int64.compare start stop > 0 then (stop, start) else (start, stop) in + Some + { bquery = + vec_ + [ + vec_ [ sym "?b"; kw k; sym "?v" ]; + vec_ + [ list_ + [ sym ">="; sym "?v" + ; QueryFormTagged ("inst", QueryFormString (Ds_wire.iso_of_ms start)) ] ]; + vec_ + [ list_ + [ sym "<"; sym "?v" + ; QueryFormTagged ("inst", QueryFormString (Ds_wire.iso_of_ms stop)) ] ]; + ]; + brules = [] } + | _ -> None) + | _ -> None) + | None -> None + +let db_based_build_between_two_arg (e : query_form) : built option = + match coll_elems e with + | [ a; b; c ] -> db_based_build_between_three_arg (vec_ [ a; b; c; sym "now" ]) + | _ -> None + +let build_between (e : query_form) : built option = + match List.length (coll_elems e) with + | 3 -> + (match get_timestamp_property e with + | Some _ -> db_based_build_between_two_arg e + | None -> build_journal_between_two_arg e) + | 4 -> db_based_build_between_three_arg e + | _ -> None + +(* db-class/get-structured-children — class-extends closure minus self *) +let get_structured_children (db : db) (eid : entity_id) : entity_id list = + let rules_edn = + "[" + ^ String.concat " " + [ "[(class-extends ?p ?c) [?c :logseq.property.class/extends ?p]]"; + "[(class-extends ?p ?c) [?t :logseq.property.class/extends ?p] (class-extends ?t ?c)]" ] + ^ "]" + in + let rows = + Datascript.q_string db + "[:find [?c ...] :in $ ?p % :where (class-extends ?p ?c)]" + ~inputs: + [ Arg_scalar (Result_entity eid); + Arg_rules (Parser.parse_rules (Parser.read_edn rules_edn)) ] + in + List.filter_map + (fun row -> + match row with + | [ Result_entity c ] when c <> eid -> Some c + | _ -> None) + rows + +(* ldb/page-exists? — the cljs version returns the seq of page ids; + private copy returning ids (Ldb.page_exists returns a bool). *) +let page_exists_ids (db : db) (page_name : string) (tag_idents : string list) : entity_id list = + let check_tags (d : datom) : bool = + match Ldb.ent_of_id db d.e with + | None -> false + | Some e -> + List.exists + (fun tid -> + match Ldb.ent_of_id db tid with + | Some t -> + (match Ldb.ident_of t with + | Some ident -> List.mem ident tag_idents + | None -> false) + | None -> false) + (Entity_refs.ref_ids e "block/tags") + in + if + tag_idents <> [] + && List.for_all + (fun t -> t = "logseq.class/Tag" || t = "logseq.class/Property") + tag_idents + then + datoms db Avet ~a:"block/title" ~v:(String page_name) () + |> List.of_seq |> List.filter check_tags |> List.map (fun d -> d.e) + else + datoms db Avet ~a:"block/name" ~v:(String (Ldb.page_name_sanity_lc page_name)) () + |> List.of_seq |> List.filter check_tags |> List.map (fun d -> d.e) + +(* ->db-property-value *) +let db_property_value (db : db) (k : string) (v : query_form) : query_form = + let v' = + match v with + | QueryFormSymbol s -> str s + | other -> other + in + match v' with + | QueryFormString s -> + if String.length s > 0 && s.[0] = '#' then + str (String.sub s 1 (String.length s - 1)) + else + (match Page_ref.get_page_name s with + | Some name -> str name + | None -> v') + | (QueryFormInt _ | QueryFormFloat _) as v'' -> + (* cljs double? covers all numbers; :node type -> str *) + let is_node = + match entity db (Ident k) with + | Some prop -> + (match Ldb.value prop "logseq.property/type" with + | Some (Keyword "node") -> true + | _ -> false) + | None -> false + in + if is_node then + match v'' with + | QueryFormInt n -> str (Int64.to_string n) + | QueryFormFloat f -> str (str_of_number (Float f)) + | _ -> assert false + else v'' + | _ -> v' + +(* ->db-keyword-property — title lookup for unqualified names *) +let no_property_found = "frontend.worker.query-dsl/no-property-found" + +let db_keyword_property (db : db) (property_name : query_form) : string = + match property_name with + | QueryFormKeyword k when qualified_kw k -> k + | _ -> + let title = name_of_form property_name in + let found = + datoms db Avet ~a:"block/title" ~v:(String title) () + |> List.of_seq + |> List.find_map (fun (d : datom) -> + match Ldb.ent_of_id db d.e with + | Some e when Entity_refs.has_tag e "logseq.class/Property" -> Ldb.ident_of e + | _ -> None) + in + (match found with Some ident -> ident | None -> no_property_found) + +let value_of_form (f : query_form) : value option = + match f with + | QueryFormInt n -> Some (Int64 n) + | QueryFormFloat x -> Some (Float x) + | QueryFormString s -> Some (String s) + | QueryFormBool b -> Some (Bool b) + | QueryFormKeyword k -> Some (Keyword k) + | QueryFormNil -> Some Nil + | _ -> None + +let build_property_two_arg (db : db) (e : query_form) (private_property : bool) : built = + match coll_elems e with + | [ _; prop_name; v ] -> + let k = db_keyword_property db prop_name in + let v' = db_property_value db k v in + let property = + if qualified_kw k then entity db (Ident k) else None + in + let ref_type = + match property with + | Some p -> + (match Ldb.value p "db/valueType" with + | Some (Keyword "db.type/ref") -> true + | _ -> false) + | None -> false + in + let default_value : value option = + if ref_type then + match property with + | Some p -> + (match Entity_refs.ref_ent p "logseq.property/default-value" with + | Some dv -> + (match Ldb.value dv "block/title" with + | Some t -> Some t + | None -> Ldb.value dv "logseq.property/value") + | None -> None) + | None -> None + else + match property with + | Some p -> Ldb.value p "logseq.property/scalar-default-value" + | None -> None + in + let default_value' = + match value_of_form v' with + | Some vv -> + (match default_value with Some dv -> dv = vv | None -> false) + | None -> false + in + let rule = + if private_property then + if ref_type && default_value' then "private-ref-property-with-default" + else if ref_type then "private-ref-property" + else if default_value' then "private-scalar-property-with-default" + else "private-scalar-property" + else if ref_type && default_value' then "ref-property-with-default" + else if ref_type then "ref-property" + else if default_value' then "scalar-property-with-default" + else "scalar-property" + in + { bquery = list_ [ sym rule; sym "?b"; kw k; v' ]; brules = [ rule ] } + | _ -> invalid_arg "build-property-two-arg expects 3 elements" + +let build_property_one_arg (db : db) (e : query_form) (private_property : bool) : built = + match coll_elems e with + | [ _; prop_name ] -> + let k = db_keyword_property db prop_name in + if private_property then + { bquery = list_ [ sym "has-private-simple-query-property"; sym "?b"; kw k ]; + brules = [ "has-private-simple-query-property" ] } + else + { bquery = list_ [ sym "has-simple-query-property"; sym "?b"; kw k ]; + brules = [ "has-simple-query-property" ] } + | _ -> invalid_arg "build-property-one-arg expects 2 elements" + +let build_property (db : db) (e : query_form) (env : env) : built option = + match List.length (coll_elems e) with + | 3 -> Some (build_property_two_arg db e env.private_property) + | 2 -> Some (build_property_one_arg db e env.private_property) + | _ -> None + +let build_task (e : query_form) : built option = + match coll_elems e with + | _ :: rest -> + let markers = + match rest with + | [ first ] when is_coll first -> coll_elems first + | _ -> rest + in + (match markers with + | [] -> None + | _ -> + let marker_set = + markers + |> List.map (fun m -> Unicode.lowercase (name_of_form m)) + |> List.sort_uniq compare + |> List.map str + in + Some + { bquery = list_ [ sym "task"; sym "?b"; QueryFormSet marker_set ]; + brules = [ "task" ] }) + | _ -> None + +let build_priority (e : query_form) : built option = + match coll_elems e with + | _ :: rest -> + let priorities = + match rest with + | [ first ] when is_coll first -> coll_elems first + | _ -> rest + in + (match priorities with + | [] -> None + | _ -> + let prios = + priorities + |> List.map (fun p -> Unicode.lowercase (name_of_form p)) + |> List.sort_uniq compare + |> List.map str + in + Some + { bquery = list_ [ sym "priority"; sym "?b"; QueryFormSet prios ]; + brules = [ "priority" ] }) + | _ -> None + +let build_tags (db : db) (e : query_form) : built option = + match coll_elems e with + | _ :: rest -> + let tags = + match rest with + | [ first ] when is_coll first -> coll_elems first + | _ -> rest + in + (match tags with + | [] -> None + | _ -> + let tag_names = + tags + |> List.map (fun t -> Page_ref.get_page_name_exn (name_of_form t)) + |> List.sort_uniq compare + in + let ids = + List.concat_map + (fun tag_name -> + let tag_id : entity_id option = + if Ldb.is_uuid_string tag_name then + match entity db (Lookup_ref ("block/uuid", Uuid tag_name)) with + | Some t -> Some t.id + | None -> None + else + match page_exists_ids db tag_name [ "logseq.class/Tag" ] with + | id :: _ -> Some id + | [] -> None + in + match tag_id with + | Some id -> id :: get_structured_children db id + | None -> []) + tag_names + |> List.sort_uniq compare + in + Some + { bquery = + list_ [ sym "tags"; sym "?b"; QueryFormSet (List.map int ids) ]; + brules = [ "tags" ] }) + | _ -> None + +let build_sample (e : query_form) (env : env) : built option = + match coll_elems e with + | [ _; QueryFormInt n ] -> + env.sample <- Some (Datascript.Util.int64_to_int_exn "sample" n); + (* blank b/c this post-process filter doesn't affect query *) + Some { bquery = QueryFormNil; brules = [] } (* filtered out later *) + | _ -> None + +let build_page (e : query_form) : built option = + match coll_elems e with + | _ :: first :: _ -> + let name = + Page_ref.get_page_name_exn + (match first with + | QueryFormSymbol s | QueryFormString s | QueryFormKeyword s -> s + | other -> Ds_wire.edn_of_query_form other) + |> Ldb.page_name_sanity_lc + in + Some { bquery = list_ [ sym "page"; sym "?b"; str name ]; brules = [ "page" ] } + | _ -> None + +let build_page_ref_or_self_ref (db : db) (e : query_form) (self : bool) : built option = + let name = + match Page_ref.get_page_name (match e with QueryFormString s -> s | _ -> Ds_wire.edn_of_query_form e) with + | Some n -> n + | None -> (match e with QueryFormString s -> s | _ -> Ds_wire.edn_of_query_form e) + in + let name = Ldb.page_name_sanity_lc name in + match Ldb.get_page db (String name) with + | Some page -> + Some + { bquery = list_ [ sym (if self then "self-ref" else "page-ref"); sym "?b"; int page.id ]; + brules = [ (if self then "self-ref" else "page-ref") ] } + | None -> None + +let build_block_content (e : query_form) : built = + { bquery = list_ [ sym "block-content"; sym "?b"; e ]; brules = [ "block-content" ] } + +(* datalog-clause? *) +let is_datalog_clause (e : query_form) : bool = + is_coll e + && (match first_elem e with + | Some f when is_list f -> true + | Some (QueryFormSymbol s) -> + List.length (coll_elems e) >= 2 + && String.length s > 0 && s.[0] = '?' + | _ -> false) + +let rec build_query (e : query_form) (env : env) (level : int) + (current_filter : string option) : built option = + let fe : query_form option = + match first_elem e with + | Some f -> Some f + | None -> + (* cljs (first "abc") -> "a" char; on non-coll e first is nil *) + (match e with + | QueryFormString s when String.length s > 0 -> Some (str (String.make 1 s.[0])) + | _ -> None) + in + let fe_name = + match fe with + | Some f when is_list f -> None (* list fe stays a form *) + | Some (QueryFormSymbol s) -> Some (Unicode.lowercase (name_of_form (sym s))) + | Some (QueryFormKeyword s) -> Some (Unicode.lowercase (name_of_form (kw s))) + | Some other -> + (match other with + | QueryFormString s -> Some (Unicode.lowercase s) + | f -> Some (Unicode.lowercase (Ds_wire.edn_of_query_form f))) + | None -> None + in + let fe_sym name = fe_name = Some name && (match fe with Some (QueryFormSymbol _ | QueryFormKeyword _) -> true | _ -> false) in + let page_ref = + match e with QueryFormString s -> Page_ref.is_page_ref s | _ -> false + in + if + List.exists + (fun op -> fe_sym op) + [ "between"; "property"; "private-property"; "todo"; "task"; "priority"; "page" ] + || ((not page_ref) && match e with QueryFormString _ -> true | _ -> false) + then env.blocks <- true; + if match e with QueryFormNil -> true | _ -> false then None + else if is_datalog_clause e then Some { bquery = vec_ [ e ]; brules = [] } + else if + fe_sym "and" + && List.for_all + (fun f -> match f with QueryFormString s -> Page_ref.is_page_ref s | _ -> false) + (match coll_elems e with _ :: rest -> rest | _ -> []) + then + (* (and [[a]] [[b]]) -> (and [[a]] [[b]] (or [[a]] [[b]])) *) + let rest = match coll_elems e with _ :: r -> r | _ -> [] in + let e' = list_ (coll_elems e @ [ list_ (sym "or" :: rest) ]) in + build_query e' env level current_filter + else if page_ref then + if current_filter = Some "or" || form_equal env.form e then + build_page_ref_or_self_ref env.db e true + else build_page_ref_or_self_ref env.db e false + else + match e with + | QueryFormString _ -> Some (build_block_content e) + | _ when fe_sym "and" || fe_sym "or" || fe_sym "not" -> + build_and_or_not env level e (Option.get fe_name) current_filter + | _ when fe_sym "between" -> build_between e + | _ when fe_sym "property" -> build_property env.db e env + | _ when fe_sym "private-property" -> + build_property env.db e { env with private_property = true } + | _ when fe_sym "todo" || fe_sym "task" -> build_task e + | _ when fe_sym "priority" -> build_priority e + | _ when fe_sym "page" -> build_page e + | _ when fe_sym "sample" -> build_sample e env + | _ when fe_sym "tags" -> build_tags env.db e + | _ -> None + +and build_and_or_not (env : env) (level : int) (e : query_form) (fe : string) + (current_filter : string option) : built option = + let raw_clauses = + List.filter_map + (fun form -> build_query form env (level + 1) (Some fe)) + (match coll_elems e with _ :: r -> r | _ -> []) + in + let clauses = + raw_clauses + |> List.map (fun b -> b.bquery) + |> List.filter (fun q -> not (match q with QueryFormNil -> true | _ -> false)) + |> distinct_preserve_order + in + let clauses = + if fe = "and" then + let nots, others = List.partition not_clause clauses in + others @ nots + else clauses + in + let nested_and = fe = "and" && current_filter = Some "and" in + match clauses with + | [] -> None + | _ -> + let result = build_and_or_not_result fe clauses current_filter nested_and in + List.iter (fun v -> Hashtbl.replace env.vars v ()) (collect_vars result); + let query = + if nested_and then result + else if level = 0 && (fe = "and" || fe = "or") then result + else if fe = "not" && Option.is_some current_filter then result + else vec_ [ result ] + in + Some + { bquery = query; + brules = + Common_util.distinct_by Fun.id + (List.concat_map (fun b -> b.brules) raw_clauses) } + +(* ============ parse ============ *) + +(* collect-vars-by-polarity — vars inside (not ...) count as negative *) +let collect_vars_by_polarity (form : query_form) : string list * string list = + let pos = Hashtbl.create 8 and neg = Hashtbl.create 8 in + let rec walk x positive = + match x with + | QueryFormSymbol s when String.length s > 0 && s.[0] = '?' -> + Hashtbl.replace (if positive then pos else neg) s () + | QueryFormList (QueryFormSymbol "not" :: rest) -> + List.iter (fun c -> walk c false) rest + | QueryFormVector xs | QueryFormList xs | QueryFormSet xs -> + List.iter (fun c -> walk c positive) xs + | QueryFormMap kvs -> + List.iter (fun (k, v) -> walk k positive; walk v positive) kvs + | _ -> () + in + walk form true; + ( Hashtbl.fold (fun k () acc -> k :: acc) pos [], + Hashtbl.fold (fun k () acc -> k :: acc) neg [] ) + +(* add-bindings! — prepend domain-establishing clauses for vars that + only appear negatively *) +let add_bindings (q : query_form list) : query_form list = + let pos, neg = + List.fold_left + (fun (p, n) clause -> + let p', n' = collect_vars_by_polarity clause in + (p @ p', n @ n')) + ([], []) q + in + let pos = List.sort_uniq compare pos and neg = List.sort_uniq compare neg in + let appears v = List.mem v pos || List.mem v neg in + let needs_domain v = appears v && not (List.mem v pos) in + let b_need = needs_domain "?b" and p_need = needs_domain "?p" in + let bindings = + if b_need && p_need then [ [ vec_ [ sym "?b"; kw "block/page"; sym "?p" ] ] ] + else if b_need then + [ [ vec_ [ sym "?b"; kw "block/uuid" ]; + vec_ [ list_ [ sym "missing?"; sym "$"; sym "?b"; kw "logseq.property/built-in?" ] ] ] ] + else if p_need then [ [ vec_ [ sym "?p"; kw "block/name" ] ] ] + else if List.mem "?b" pos && List.mem "?p" pos then + [ [ vec_ [ sym "?b"; kw "block/page"; sym "?p" ] ] ] + else [] + in + List.concat bindings @ q + +type parsed = + { pquery : query_form list option + ; prules : query_form list + ; prule_names : string list + ; pblocks : bool + ; psample : int option + } + +(* query-dsl/parse *) +let parse ?(cards : bool = false) (db : db) (s : string) : parsed option = + ignore cards; + if Unicode.trim s = "" then None + else + let s = + if String.length s > 0 && s.[0] = '#' then + Page_ref.to_page_ref (String.sub s 1 (String.length s - 1)) + else s + in + (* cljs (reader/read-string custom-readers) — malformed EDN throws *) + let form = + simplify_query (apply_custom_readers (Parser.read_edn (pre_transform s))) + in + let env = + { db; form; blocks = false; + sample = None; vars = Hashtbl.create 8; private_property = false } + in + (* cljs (when form (build-query form {:form form ...})) *) + let built = + match form with + | QueryFormNil -> None + | f -> build_query f env 0 None + in + let result = + match built with + | Some { bquery = q; _ } -> (match coll_elems q with [] -> None | elems -> Some (q, elems)) + | None -> None + in + let result' = + match result with + | None -> None + | Some (q, elems) -> + (* key = keyword of first element of first element when it is a + coll, else keyword of the first element *) + let key = + match elems with + | first :: _ when is_coll first -> + (match first_elem first with + | Some (QueryFormSymbol s) -> s + | Some (QueryFormKeyword s) -> s + | _ -> "") + | QueryFormSymbol s :: _ -> s + | QueryFormKeyword k :: _ -> k + | _ -> "" + in + if key = "and" then + (* (and c1 c2 ...) -> (c1 c2 ...) *) + (match q with + | QueryFormList (_ :: clauses) -> Some clauses + | _ -> Some elems) + else Some (coll_elems q) + in + let result' = Option.map add_bindings result' in + let rule_names = + match built with + | Some b -> + let rules = List.sort_uniq compare b.brules in + if List.mem "page-ref" rules then List.sort_uniq compare ("self-ref" :: rules) + else rules + | None -> [] + in + Some + { pquery = result' + ; prules = extract_rules rule_names + ; prule_names = rule_names + ; pblocks = env.blocks + ; psample = env.sample + } + +let parse_query ?(cards : bool = false) db s options = + ignore cards; + let current_page_title, today_day = options in + parse ~cards db (resolve_dynamic_template s ~current_page_title ~today_day) + +(* ============ query wrapper + execution ============ *) + +(* query-dsl/query-wrapper — where is the clause list produced by parse *) +let query_wrapper (where : query_form list) ~blocks ~block_attrs_edn : string = + let attrs = + match block_attrs_edn with + | Some e -> (match try Some (Parser.read_edn e) with _ -> None with Some f -> f | None -> vec_ [ sym "*" ]) + | None -> vec_ [ sym "*" ] + in + let find = + if blocks then + [ kw "find"; list_ [ sym "pull"; sym "?b"; attrs ]; kw "in"; sym "$"; sym "%"; kw "where" ] + else + [ kw "find"; list_ [ sym "pull"; sym "?p"; vec_ [ sym "*" ] ]; kw "in"; sym "$"; sym "%"; kw "where" ] + in + let elems = + match where with + | first :: _ when is_coll first -> find @ where + | _ -> find @ [ list_ where ] + in + Ds_wire.edn_of_query_form (vec_ elems) + +let with_raw_title (r : query_result) : query_result = + match r with + | Result_pull p -> + let has k = List.exists (fun (key, _) -> key = Keyword k) p.pulled_attrs in + if has "block/title" && not (has "block/raw-title") then + let title_v = List.assoc (Keyword "block/title") p.pulled_attrs in + Result_pull + { p with pulled_attrs = p.pulled_attrs @ [ (Keyword "block/raw-title", title_v) ] } + else r + | _ -> r + +let query_result_tuples (rows : query_result list list) : query_result list list = + List.map (List.map with_raw_title) rows + +let sample_results (rows : query_result list list) (sample : int option) : query_result list list = + match sample with + | Some n when n > 0 && List.length rows > n -> + let arr = Array.of_list rows in + for i = Array.length arr - 1 downto 1 do + let j = Random.int (i + 1) in + let tmp = arr.(i) in + arr.(i) <- arr.(j); + arr.(j) <- tmp + done; + Array.to_list (Array.sub arr 0 n) + | _ -> rows + +type exec_opts = + { opt_cards : bool + ; opt_block_attrs : string option + ; opt_current_page_title : string option + ; opt_today_day : Time.local_date option + } + +let () = Random.self_init () + +(* query-dsl/execute-query *) +let execute_query (db : db) (query_string : string) (opts : exec_opts) : query_result list list option = + if String.length query_string > 0 && query_string <> "\"\"" then + match + parse_query db query_string + (opts.opt_current_page_title, opts.opt_today_day) + with + | Some { pquery = Some query_star; prules; psample; _ } -> + let query_star = + if opts.opt_cards then + (* cljs card-class-ids: Card + every structured child (tags that + extend Card), matched via a contains? set predicate *) + let card_ids = + match entity db (Ident "logseq.class/Card") with + | Some e -> e.id :: Db_class.get_structured_children db e.id + | None -> [] + in + let clauses = + match query_star with + | first :: _ when is_coll first -> query_star + | _ -> [ list_ query_star ] + in + vec_ [ sym "?b"; kw "block/tags"; sym "?t" ] + :: vec_ + [ list_ + [ sym "contains?" + ; QueryFormSet (List.map int card_ids) + ; sym "?t" ] ] + :: clauses + else query_star + in + let q' = query_wrapper query_star ~blocks:true ~block_attrs_edn:opts.opt_block_attrs in + let rows = Datascript.q_string db q' ~inputs:[ parse_rules_input prules ] in + Some (sample_results (query_result_tuples rows) psample) + | _ -> None + else None + +(* query-dsl/execute-custom-query — :query is a DSL form (list), not a + string. cljs does (resolve-dynamic-template (pr-str (:query m)) {}). *) +let execute_custom_query (db : db) (query_form_edn : string) (opts : exec_opts) : query_result list list option = + (* query_form_edn = pr-str of (:query query-m); empty -> nil like cljs (seq (:query m)) *) + let s = resolve_dynamic_template query_form_edn ~current_page_title:None ~today_day:None in + match parse db s with + | Some { pquery = Some query_star; prules; pblocks; _ } -> + let q' = query_wrapper query_star ~blocks:pblocks ~block_attrs_edn:opts.opt_block_attrs in + Some (query_result_tuples (Datascript.q_string db q' ~inputs:[ parse_rules_input prules ])) + | _ -> None + +end + +module Db_inputs = struct +(* Faithful port of logseq.db.frontend.inputs + (deps/db/src/logseq/db/frontend/inputs.cljs): resolves the special + :inputs keywords (:current-page, :query-page, :current-block, + :parent-block, :today/:yesterday/:tomorrow, :right-now-ms), relative + dates (:+7d, :-1w, ...), time-suffixed dates (:today-0230, + :+7d-0230, :1d-before-ms ...), and [[page-ref]] string inputs into + concrete query input values. *) + +open Datascript + +(* cljs opts map: {:keys [current-block-uuid current-page-fn]} *) +type context = + { current_block_uuid : string option + ; current_page_fn : unit -> string option + } + +let kw_name (k : string) : string = + match String.index_opt k '/' with + | Some i -> String.sub k (i + 1) (String.length k - i - 1) + | None -> k + +let kw_namespace (k : string) : string option = + match String.index_opt k '/' with + | Some i -> Some (String.sub k 0 i) + | None -> None + +let is_digit c = c >= '0' && c <= '9' + +(* Split "+7d" into (direction, amount, unit); unit "" when absent. + For inputs like "+7d-ms"/"-3w-start" also returns the trailing + "-ms"/"-start"/"-0230" part. *) +let split_offset (name : string) : (string * int * string * string option) option = + let n = String.length name in + if n < 2 || (name.[0] <> '+' && name.[0] <> '-') then None + else + let direction = String.sub name 0 1 in + let i = ref 1 in + while !i < n && is_digit name.[!i] do + incr i + done; + if !i = 1 || !i >= n then None + else + let amount = int_of_string (String.sub name 1 (!i - 1)) in + let unit = String.sub name !i 1 in + if not (String.contains "dwmy" unit.[0]) then None + else if !i + 1 = n then Some (direction, amount, unit, None) + else Some (direction, amount, unit, Some (String.sub name (!i + 1) (n - !i - 1))) + +(* keyword-input-dispatch — cljs re-find equivalents, hand-implemented + (the Regexp platform vm only supports first-match). *) + +(* #"^[+-]\d+[dwmy]?$" *) +let match_relative_date (name : string) : bool = + match split_offset name with + | Some (_, _, _, None) -> true + | _ -> false + +(* #"^[+-]\d+[dwmy]-(ms|start|end|\d{2}|\d{4}|\d{6}|\d{9})?$" *) +let match_relative_date_time (name : string) : bool = + match split_offset name with + | Some (_, _, _, Some suffix) -> + let suffix = String.sub suffix 1 (String.length suffix - 1) in + (* suffix after the '-' *) + (* cljs dispatch regex allows an empty optional group after the + '-', but the resolve re-find requires a non-empty ts, so "+7d-" + is dispatched then resolves to nil (unresolved). *) + if suffix = "ms" || suffix = "start" || suffix = "end" then true + else + let l = String.length suffix in + (l = 2 || l = 4 || l = 6 || l = 9) + && (let rec digits i = i >= l || (is_digit suffix.[i] && digits (i + 1)) in + digits 0) + | _ -> false + +(* #"^today-(start|end|\d{2}|\d{4}|\d{6}|\d{9})$" *) +let match_today_time (name : string) : bool = + if String.length name > 6 && String.sub name 0 6 = "today-" then + let suffix = String.sub name 6 (String.length name - 6) in + if suffix = "start" || suffix = "end" then true + else + let l = String.length suffix in + (l = 2 || l = 4 || l = 6 || l = 9) + && (let rec digits i = i >= l || (is_digit suffix.[i] && digits (i + 1)) in + digits 0) + else false + +(* #"^\d+d(-before|-after|-before-ms|-after-ms)?$" *) +let match_deprecated (name : string) : bool = + let n = String.length name in + let i = ref 0 in + while !i < n && is_digit name.[!i] do + incr i + done; + !i > 0 + && !i < n + && name.[!i] = 'd' + && (let rest = String.sub name (!i + 1) (n - !i - 1) in + rest = "" || rest = "-before" || rest = "-after" || rest = "-before-ms" + || rest = "-after-ms") + +type dispatch = + | Fixed + | Relative_date + | Relative_date_time + | Today_time + | Deprecated_relative_date + | Unresolved + +let dispatch (k : string) : dispatch = + match k with + | "current-page" | "query-page" | "current-block" | "parent-block" + | "today" | "yesterday" | "tomorrow" | "right-now-ms" -> + Fixed + | _ -> + let name = kw_name k in + if match_relative_date name then Relative_date + else if match_relative_date_time name then Relative_date_time + else if k = "start-of-today-ms" || k = "end-of-today-ms" || match_today_time name + then Today_time + else if match_deprecated name then Deprecated_relative_date + else Unresolved + +let ends_with s suffix = + let n = String.length s and l = String.length suffix in + n >= l && String.sub s (n - l) l = suffix + +let contains_sub s sub = + let n = String.length s and l = String.length sub in + let rec find i = + if i + l > n then false + else if String.sub s i l = sub then true + else find (i + 1) + in + l > 0 && find 0 + +(* old->new-relative-date-format: :1d-before -> :today/-1d, + :1d-after-ms -> :today/+1d-ms *) +let old_to_new_relative_date_format (k : string) : string = + let name = kw_name k in + let i = ref 0 in + while !i < String.length name && is_digit name.[!i] do + incr i + done; + let count' = String.sub name 0 !i in + let plus_minus = if contains_sub name "after" then "+" else "-" in + let ms = if ends_with name "-ms" then "-ms" else "" in + "today/" ^ plus_minus ^ count' ^ "d" ^ ms + +(* get-relative-date — only the "today" namespace is supported in cljs *) +let get_relative_date (k : string) : int64 = + match kw_namespace k with + | None | Some "today" -> Date_time_util.today_ms () + | Some ns -> invalid_arg ("unsupported date namespace: " ^ ns) + +(* get-offset-date *) +let get_offset_date (relative_to : int64) (direction : string) (amount : int) + (unit : string) : int64 = + let p = + match unit with + | "d" -> Date_time_util.Days + | "w" -> Date_time_util.Weeks + | "m" -> Date_time_util.Months + | "y" -> Date_time_util.Years + | _ -> invalid_arg ("unsupported offset unit: " ^ unit) + in + match direction with + | "+" -> Date_time_util.plus p amount relative_to + | "-" -> Date_time_util.minus p amount relative_to + | _ -> invalid_arg ("unsupported offset direction: " ^ direction) + +(* get-ts-units — offset-time is the raw suffix string ("ms", "start", + "end", or HHMM[SS[mmm]] digits). *) +let get_ts_units (offset_direction : string) (offset_time : string) : + int * int * int * int = + match offset_time with + | "ms" -> + if offset_direction = "+" then (23, 59, 59, 999) else (0, 0, 0, 0) + | "start" -> (0, 0, 0, 0) + | "end" -> (23, 59, 59, 999) + | _ -> + let t = offset_time ^ "000000000" in + let pair i = int_of_string (String.sub t i 2) in + (min 23 (pair 0), min 59 (pair 2), min 59 (pair 4), + min 999 (int_of_string (String.sub t 6 3))) + +let current_block_ent (db : db) (ctx : context) : entity option = + match ctx.current_block_uuid with + | Some uuid -> entity db (Lookup_ref ("block/uuid", Uuid uuid)) + | None -> None + +(* resolve-keyword-input — returns None for the cljs nil cases; + resolve-input falls back to the unresolved input. *) +let rec resolve_keyword_input (db : db) (k : string) (ctx : context) : + value option = + match dispatch k with + | Fixed -> + (match k with + | "current-page" -> + (match ctx.current_page_fn () with + | Some title -> Some (String (Unicode.lowercase title)) + | None -> None) + | "query-page" -> + (match current_block_ent db ctx with + | Some block -> + (match Entity_refs.ref_ent block "block/page" with + | Some page -> Ldb.value page "block/name" + | None -> None) + | None -> None) + | "current-block" -> + Option.map (fun (e : entity) -> Int64 (Int64.of_int e.id)) (current_block_ent db ctx) + | "parent-block" -> + (match current_block_ent db ctx with + | Some block -> + Option.map (fun (p : entity) -> Int64 (Int64.of_int p.id)) + (Entity_refs.ref_ent block "block/parent") + | None -> None) + | "today" -> + Some + (Int64 + (Int64.of_int + (Date_time_util.date_to_int (Date_time_util.today_ms ())))) + | "yesterday" -> + Some + (Int64 + (Int64.of_int + (Date_time_util.date_to_int + (Date_time_util.minus Days 1 (Date_time_util.today_ms ()))))) + | "tomorrow" -> + Some + (Int64 + (Int64.of_int + (Date_time_util.date_to_int + (Date_time_util.plus Days 1 (Date_time_util.today_ms ()))))) + | "right-now-ms" -> + Some (Common_util.value_of_ms (Date_time_util.time_ms ())) + | _ -> None) + | Today_time -> + let hh, mm, ss, ms = + match k with + | "start-of-today-ms" -> (0, 0, 0, 0) + | "end-of-today-ms" -> (23, 59, 59, 999) + | _ -> get_ts_units "" (String.sub (kw_name k) 6 (String.length (kw_name k) - 6)) + in + Some + (Common_util.value_of_ms + (Date_time_util.date_at_local_ms + (Date_time_util.today_ms ()) hh mm ss ms)) + | Relative_date -> + let name = kw_name k in + let relative_to = get_relative_date k in + (match split_offset name with + | Some (direction, amount, unit, None) -> + let offset_date = get_offset_date relative_to direction amount unit in + Some (Int64 (Int64.of_int (Date_time_util.date_to_int offset_date))) + | _ -> invalid_arg ("invalid relative date input: " ^ k)) + | Relative_date_time -> + let name = kw_name k in + let relative_to = get_relative_date k in + (match split_offset name with + | Some (direction, amount, unit, Some suffix) when suffix <> "" -> + let ts = String.sub suffix 1 (String.length suffix - 1) in + let offset_date = + get_offset_date relative_to direction amount unit + in + let hh, mm, ss, ms = get_ts_units direction ts in + Some + (Common_util.value_of_ms + (Date_time_util.date_at_local_ms offset_date hh mm ss ms)) + | _ -> invalid_arg ("invalid relative date-time input: " ^ k)) + | Deprecated_relative_date -> + resolve_keyword_input db (old_to_new_relative_date_format k) ctx + | Unresolved -> None + +(* resolve-input *) +let resolve_input (db : db) (input : value) (ctx : context) : value = + match input with + | Keyword k -> + (match resolve_keyword_input db k ctx with + | Some v -> v + | None -> input) + | String s when Page_ref.is_page_ref s -> + (match Page_ref.get_page_name s with + | Some name -> String (Unicode.lowercase name) + | None -> input) + | _ -> input + +end + + +module Malli = struct + let integer_float f = Float.is_finite f && Float.floor f = f +end + +module Dispatcher = struct + exception Exn_info of string * (Wire.t * Wire.t) list +end +module Edn_eval = struct +(* Minimal sci/eval-string evaluator for :result-transform. + + cljs runs the EDN source through SCI inside the worker + (handler/render_resource/query.cljs apply-result-transform). This module + interprets the same EDN forms over Datascript.value. Query-result entities + cross in as [Ent eid] so keyword lookups resolve against the live db via + the caller-supplied [entity_attr] resolver. + + Scope: the core-fn surface result transforms realistically use — seq + manipulation (map/filter/remove/keep/group-by/sort-by/take/drop/...), + map access (get/assoc/dissoc/select-keys/update-in/...), fn shorthand + (#(%), fn with & rest and basic destructuring), threading (->, ->>, + cond->, some->), let/if/when/cond/case, clojure.string basics, and + try/catch via Throw_value. Unsupported forms fail fast with Eval_error + rather than guessing. *) + +open Datascript + +exception Eval_error of string +exception Throw_value of value + +let eval_error fmt = Printf.ksprintf (fun msg -> raise (Eval_error msg)) fmt + +let split_regex text pattern limit = + let trim parts = + let rec drop = function String "" :: rest -> drop rest | rest -> rest in + if limit = 0 && List.length parts > 1 then List.rev (drop (List.rev parts)) else parts in + if pattern = "" then begin + let units = Unicode.utf16_units text in + let count = Array.length units in + let chars length = List.init length (fun i -> String (Unicode.of_utf16_units [|units.(i)|])) in + let parts = + if limit <= 0 || limit >= count + 2 then String "" :: chars count @ [String ""] + else if limit = 1 then [String text] + else String "" :: chars (limit - 2) @ [String (Unicode.js_sub text (limit - 2) count)] in + trim parts + end else begin + let regex = Regexp.compile pattern in + if limit > 0 then + (* CLJS repeats re-find on the remaining substring, so anchors reset + after each separator when a positive limit is supplied. *) + let rec limited remaining slots pieces = + if slots = 1 then List.rev (String remaining :: pieces) + else match Regexp.exec regex remaining with + | None -> List.rev (String remaining :: pieces) + | Some found -> limited + (String.sub remaining found.last (String.length remaining - found.last)) + (slots - 1) (String (String.sub remaining 0 found.offset) :: pieces) in + limited text limit [] + else + let length = String.length text in + let finish start pieces = + trim (List.rev (String (String.sub text start (length - start)) :: pieces)) in + let advance position = + if position >= length then length + 1 + else + let remaining = String.sub text position (length - position) in + let character = Unicode.js_sub remaining 0 1 in + let complete_character = if character = "" then Unicode.js_sub remaining 0 2 else character in + position + String.length complete_character in + let rec loop start position pieces = + if position > length then finish start pieces + else match Regexp.exec ~pos:position regex text with + | None -> finish start pieces + | Some found when found.offset = found.last && found.offset = start -> + loop start (advance found.last) pieces + | Some found when found.offset = found.last && found.last = length -> finish start pieces + | Some found -> + let pieces = String (String.sub text start (found.offset - start)) :: pieces in + let _, pieces = Array.fold_left (fun (index, acc) group -> + index + 1, if index = 0 then acc + else (match group with Some text -> String text | None -> Nil) :: acc) + (0, pieces) found.groups in + loop found.last (if found.last = found.offset then advance found.last else found.last) pieces in + loop 0 0 [] + end + +let literal_pattern text = + if text = "" then "(?:)" + else + let output = Buffer.create (String.length text) in + String.iter (fun character -> + if String.contains "[]\\^$.|?*+(){}" character then Buffer.add_char output '\\'; + Buffer.add_char output character) text; + Buffer.contents output + +(* Runtime values: plain EDN values plus closures and pooled entities + (datascript/Entity cells decoded by the render-resource caller). + + [Seq] is a lazy-seq of runtime values: cljs seqs preserve the identity of + their elements, but [value] collections cannot hold [Ent]/[Fn]. Seq ops + that just select or reorder elements (map/filter/take/drop/...) return + [Seq] so entity rows keep keyword attr access and tagged re-emission on + the way back out. Concrete constructors (vec/set/hash-map, mapv/filterv, + values nested inside maps) still collapse to [value] — the cljs values + they hold are not entities either. *) +type rt = + | V of value + | Ent of entity_id + | Fn of (rt list -> rt) + | Seq of rt list + +type ctx = { entity_attr : entity_id -> attr -> value } + +(* Core-fn table entries see ctx through this ref — set for the duration of + each [apply_edn] call (worker is single-threaded). *) +let current_ctx : ctx option ref = ref None + +let ctx () = + match !current_ctx with + | Some c -> c + | None -> eval_error "edn_eval used outside apply_edn" + +type env = + { vars : (string, rt) Hashtbl.t + ; parent : env option + } + +let env_create parent = { vars = Hashtbl.create 8; parent } +let env_bind env name v = Hashtbl.replace env.vars name v + +let rec env_lookup env name = + match Hashtbl.find_opt env.vars name with + | Some v -> Some v + | None -> (match env.parent with Some p -> env_lookup p name | None -> None) + +(* ---- wire <-> rt marshalling ---- *) + +let rt_of_wire (w : Wire.t) : rt = + match w with + | Wire.Tagged ("datascript/Entity", Wire.Int eid) -> Ent eid + | Wire.Tagged ("datascript/Entity", Wire.Int64 n) -> Ent (Int64.to_int n) + | _ -> V (Ds_wire.value_of_transit w) + +let rec wire_of_rt (r : rt) : Wire.t = + match r with + | V v -> Ds_wire.transit_of_value v + | Ent eid -> Wire.Tagged ("datascript/Entity", Wire.Int eid) + | Fn _ -> eval_error "function escapes result-transform" + | Seq xs -> Wire.Array (List.map wire_of_rt xs) + +let rec value_of_rt = function + | V v -> v + | Ent eid -> Ref eid + | Fn _ -> eval_error "function used as a value" + | Seq xs -> List (List.map value_of_rt xs) + +(* ---- value semantics (cljs core) ---- *) + +(* Hash consistent with [Util.value_equal]: equal values always land in the + same bucket (NaN and -0.0 normalize like [value_equal] does), collisions + are then checked with [value_equal]. Bucketed membership turns the + seen-list dedups below from O(n²) compares into ~O(n). *) +let rec value_hash (v : value) : int = + let h = Hashtbl.hash in + match v with + | Nil -> h 0 + | Int64 i -> h (1, i) + | Float f -> + if classify_float f = FP_nan then h (2, 0) + else if f = 0.0 then h (2, 1) + else h (2, f) + | String s -> h (3, s) + | Symbol s -> h (4, s) + | Bool b -> h (5, b) + | Keyword s -> h (6, s) + | Uuid s -> h (7, s) + | Instant i -> h (8, i) + | Regex s -> h (9, s) + | Ref e -> h (10, e) + | List xs -> h (11, List.map value_hash xs) + | Vector xs -> h (12, List.map value_hash xs) + | Map kvs -> h (13, List.map (fun (k, x) -> (value_hash k, value_hash x)) kvs) + | Set xs -> h (14, List.map value_hash xs) + | Tuple xs -> h (15, List.map (Option.map value_hash) xs) + | TxRef -> h 16 + | Ref_to r -> h (17, entity_ref_hash r) +and entity_ref_hash (r : entity_ref) : int = + let h = Hashtbl.hash in + match r with + | Entity_id e -> h (0, e) + | Temp_id s -> h (1, s) + | CurrentTx -> h 2 + | Ident s -> h (3, s) + | Lookup_ref (a, v) -> h (4, a, value_hash v) + +(* Order-preserving dedup of [vs] — keeps the first element of each + [Util.value_equal] class, same result as a [seen]-list scan. + [~seed] members pre-mark the buckets without entering the result (set + conj/into keep their existing elements verbatim). *) +let dedup_values ?(seed : value list = []) (vs : value list) : value list = + let buckets : (int, value list) Hashtbl.t = Hashtbl.create 64 in + let mark v = + let h = value_hash v in + let seen = Option.value ~default:[] (Hashtbl.find_opt buckets h) in + if List.exists (Util.value_equal v) seen then false + else begin + Hashtbl.replace buckets h (v :: seen); + true + end + in + List.iter (fun v -> ignore (mark v)) seed; + List.filter mark vs + +let truthy = function + | V Nil | V (Bool false) -> false + | _ -> true + +let rt_equal a b = + match a, b with + | Ent x, Ent y -> x = y + | Fn f, Fn g -> f == g + | Ent e, V (Keyword k) | V (Keyword k), Ent e -> ( + match (ctx ()).entity_attr e "db/ident" with + | Keyword ik -> String.equal ik k + | _ -> false) + | Fn _, _ | _, Fn _ -> false + | _ -> Util.value_equal (value_of_rt a) (value_of_rt b) + +(* cljs compare — numbers compare numerically across int/float/instant. *) +let rt_compare a b = + let as_float = function + | Int64 n -> Some (Int64.to_float n) + | Float f -> Some f + | Instant n -> Some (Int64.to_float n) + | _ -> None + in + match a, b with + | V x, V y -> ( + match as_float x, as_float y with + | Some fx, Some fy -> compare fx fy + | _ -> Util.compare_value x y) + | Ent x, Ent y -> compare x y + | Fn _, _ | _, Fn _ -> eval_error "compare on incomparable runtime values" + | _ -> Util.compare_value (value_of_rt a) (value_of_rt b) + +let num_of = function + | V (Int64 n) -> Int64.to_float n + | V (Float f) -> f + | V (Instant n) -> Int64.to_float n + | _ -> eval_error "expected number" + +(* seqable: colls -> element list; maps -> [k v] vectors; nil -> [] *) +let elems_of_rt = function + | Seq xs -> xs + | V (List xs) | V (Vector xs) | V (Set xs) -> List.map (fun v -> V v) xs + | V (Map kvs) -> List.map (fun (k, v) -> V (Vector [ k; v ])) kvs + | V (Tuple vs) -> + List.filter_map (function Some v -> Some (V v) | None -> None) vs + | V Nil -> [] + | V (String s) -> + List.init (String.length s) (fun i -> V (String (String.make 1 s.[i]))) + | _ -> eval_error "value is not seqable" + +let seq_coll xs = + match xs with [] -> V Nil | _ -> Seq xs + +let take_elems n xs = + let rec go acc i = function + | _ when i = 0 -> List.rev acc + | x :: rest -> go (x :: acc) (i - 1) rest + | [] -> List.rev acc + in + go [] n xs + +let drop_elems n xs = + let rec go i = function + | xs when i <= 0 -> xs + | _ :: rest -> go (i - 1) rest + | [] -> [] + in + go n xs + +(* cljs get — map/vector/set/entity/nil *) +let rt_get m k ~default = + match m, k with + | V (Map kvs), V kv -> ( + match + List.find_map + (fun (mk, mv) -> if Util.value_equal mk kv then Some mv else None) + kvs + with + | Some v -> V v + | None -> default) + | Ent e, V (Keyword a) -> V ((ctx ()).entity_attr e a) + | Ent e, V (String a) -> V ((ctx ()).entity_attr e a) + | V (Vector xs), V (Int64 i) -> ( + match Datascript.Util.int64_to_int i with + | Some i when i >= 0 && i < List.length xs -> V (List.nth xs i) + | _ -> V Nil) + | V (Set xs), V kv -> + if List.exists (fun x -> Util.value_equal x kv) xs then V kv else default + | V Nil, _ -> default + | _ -> default + +let rt_assoc m k v = + match m, k with + | V (Map kvs), V kv -> + let rec go acc = function + | [] -> List.rev ((kv, value_of_rt v) :: acc) + | (mk, _) :: rest when Util.value_equal mk kv -> + List.rev_append acc ((kv, value_of_rt v) :: rest) + | kv' :: rest -> go (kv' :: acc) rest + in + V (Map (go [] kvs)) + | V (Vector xs), V (Int64 i) -> ( + match Datascript.Util.int64_to_int i with + | Some i when i >= 0 && i < List.length xs -> + V (Vector (List.mapi (fun j x -> if j = i then value_of_rt v else x) xs)) + | _ -> V Nil) + | Ent e, _ -> eval_error "assoc on entity %d is not supported" e + | _ -> eval_error "assoc on non-associative value" + +let rt_dissoc m ks = + match m with + | V (Map kvs) -> + let kvs' = + List.fold_left + (fun acc rk -> + let k = value_of_rt rk in + List.filter (fun (mk, _) -> not (Util.value_equal mk k)) acc) + kvs ks + in + V (Map kvs') + | _ -> eval_error "dissoc on non-map" + +let rec get_in_value m path ~default = + match path with + | [] -> m + | k :: rest -> ( + let missing = V (Symbol "logseq.edn-eval/missing") in + let step = rt_get m k ~default:missing in + match step with + | V (Symbol "logseq.edn-eval/missing") -> default + | _ -> get_in_value step rest ~default) + +(* ---- evaluator ---- *) + +let core_table : (string, rt list -> rt) Hashtbl.t option ref = ref None + +let rec eval_form env (form : value) : rt = + match form with + | Symbol s -> ( + match env_lookup env s with + | Some v -> v + | None -> ( + let tbl = + match !core_table with + | Some t -> t + | None -> + let t = build_core_fns () in + core_table := Some t; + t + in + match Hashtbl.find_opt tbl s with + | Some f -> Fn f + | None -> eval_error "unbound symbol %s" s)) + | List xs -> eval_list env xs + | Vector xs -> + V (Vector (List.map (fun f -> value_of_rt (eval_form env f)) xs)) + | Map kvs -> + V + (Map + (List.map + (fun (k, v) -> + (value_of_rt (eval_form env k), value_of_rt (eval_form env v))) + kvs)) + | Set xs -> + V (Set (List.map (fun f -> value_of_rt (eval_form env f)) xs)) + | other -> V other + +and eval_list env xs = + match xs with + | [] -> V (List []) + | head :: args -> ( + match head with + | Symbol "quote" -> ( + match args with + | [ x ] -> V x + | _ -> eval_error "quote takes one form") + | Symbol ("fn" | "fn*") -> make_fn env args + | Symbol "let" | Symbol "let*" | Symbol "loop" -> eval_let env args + | Symbol "if" -> ( + match args with + | c :: t :: e -> + let branch = + if truthy (eval_form env c) then t + else match e with [ e ] -> e | _ -> Nil + in + eval_form env branch + | _ -> eval_error "if wants test/then[/else]") + | Symbol "when" -> ( + match args with + | c :: body -> + if truthy (eval_form env c) then eval_do env body else V Nil + | _ -> eval_error "when wants test/body") + | Symbol "when-not" -> ( + match args with + | c :: body -> + if truthy (eval_form env c) then V Nil else eval_do env body + | _ -> eval_error "when-not wants test/body") + | Symbol "do" -> eval_do env args + | Symbol "and" -> eval_and env args + | Symbol "or" -> eval_or env args + | Symbol "->" -> eval_form env (thread true args) + | Symbol "->>" -> eval_form env (thread false args) + | Symbol "cond->" -> eval_cond_thread env args ~first:true + | Symbol "cond->>" -> eval_cond_thread env args ~first:false + | Symbol "some->" -> eval_some_thread env args ~first:true + | Symbol "some->>" -> eval_some_thread env args ~first:false + | Symbol "cond" -> eval_cond env args + | Symbol "case" -> eval_case env args + | Symbol ("if-let" | "when-let" | "if-some" | "when-some") -> + eval_bind_cond env head args + | Symbol "try" -> eval_try env args + | Symbol "throw" -> ( + match List.map (eval_form env) args with + | [ v ] -> raise (Throw_value (value_of_rt v)) + | _ -> eval_error "throw takes one argument") + | Symbol "comment" -> V Nil + | _ -> + let f = eval_form env head in + apply_rt f (List.map (eval_form env) args)) + +and splice_into acc f first = + match f, first with + | List (h :: tl), true -> List (h :: acc :: tl) + | List (h :: tl), false -> List (h :: (tl @ [ acc ])) + | other, _ -> List [ other; acc ] + +and thread first = function + | x :: forms -> List.fold_left (fun acc f -> splice_into acc f first) x forms + | [] -> Nil + +and eval_cond_thread env args ~first = + match args with + | x :: pairs -> + let rec go acc = function + | c :: f :: rest -> + if truthy (eval_form env c) then + go (value_of_rt (eval_form env (splice_into acc f first))) rest + else go acc rest + | [] -> acc + | _ -> eval_error "cond-> wants even clauses" + in + V (go x pairs) + | _ -> eval_error "cond-> wants expr + clauses" + +and eval_some_thread env args ~first = + match args with + | x :: forms -> + let rec go acc = function + | f :: rest -> ( + match acc with + | Nil -> Nil + | _ -> go (value_of_rt (eval_form env (splice_into acc f first))) rest) + | [] -> acc + in + V (go x forms) + | _ -> eval_error "some-> wants expr + forms" + +and eval_cond env args = + match args with + | Symbol ":else" :: e :: _ -> eval_form env e + | Keyword ":else" :: e :: _ -> eval_form env e + | c :: e :: rest -> + if truthy (eval_form env c) then eval_form env e + else eval_cond env rest + | [ c ] -> eval_form env c + | [] -> V Nil + +and eval_case env args = + match args with + | x :: clauses -> + let xv = eval_form env x in + let rec go = function + | c :: e :: rest -> if rt_equal xv (V c) then Some e else go rest + | [ default ] -> Some default + | [] -> None + in + (match go clauses with + | Some e -> eval_form env e + | None -> eval_error "no matching clause") + | _ -> eval_error "case wants expr + clauses" + +and eval_bind_cond env head args = + let name = match head with Symbol s -> s | _ -> "" in + let is_some = String.ends_with ~suffix:"-some" name in + let is_when = String.starts_with ~prefix:"when" name in + match args with + | Vector [ Symbol b; bound ] :: branches -> + let v = eval_form env bound in + let ok = + if is_some then not (Util.value_equal (value_of_rt v) Nil) + else truthy v + in + if ok then ( + let env' = env_create (Some env) in + env_bind env' b v; + if is_when then eval_do env' branches + else eval_form env' (List.hd branches)) + else if is_when then V Nil + else (match branches with [ _; e ] -> eval_form env e | _ -> V Nil) + | _ -> eval_error "binding form malformed" + +and eval_try env args = + let rec split acc = function + | (List (Symbol "catch" :: _) as c) :: rest -> (List.rev acc, Some c, rest) + | (List (Symbol "finally" :: _) as f) :: rest -> (List.rev acc, None, f :: rest) + | x :: rest -> split (x :: acc) rest + | [] -> (List.rev acc, None, []) + in + let body, catch_form, finally_forms = split [] args in + let run_finally () = + List.iter + (fun f -> + match f with + | List (Symbol "finally" :: fs) -> ignore (eval_do env fs) + | _ -> ()) + finally_forms + in + try + let r = eval_do env body in + run_finally (); + r + with e -> ( + match catch_form with + | Some (List (Symbol "catch" :: _err :: binding :: handlers)) -> + let env' = env_create (Some env) in + let payload = + match e with + | Throw_value v -> V v + | Eval_error m -> V (String m) + | exn -> V (String (Printexc.to_string exn)) + in + (match binding with Symbol b -> env_bind env' b payload | _ -> ()); + run_finally (); + eval_do env' handlers + | _ -> + run_finally (); + raise e) + +and eval_do env body = + match body with + | [] -> V Nil + | [ last ] -> eval_form env last + | f :: rest -> + ignore (eval_form env f); + eval_do env rest + +and eval_and env = function + | [] -> V (Bool true) + | [ last ] -> eval_form env last + | f :: rest -> ( + match eval_form env f with + | v when truthy v -> eval_and env rest + | v -> v) + +and eval_or env = function + | [] -> V Nil + | f :: rest -> ( + match eval_form env f with v when truthy v -> v | _ -> eval_or env rest) + +and bind_pattern env pat value = + match pat, value with + | Symbol s, v -> env_bind env s v + | Vector pats, v -> + let elems = elems_of_rt v in + let rec go i = function + | [] -> () + | Symbol "&" :: Symbol r :: _ -> + env_bind env r (Seq (drop_elems i elems)) + | ((Symbol _ | Vector _) as sub) :: rest -> + let elem = match List.nth_opt elems i with Some x -> x | None -> V Nil in + bind_pattern env sub elem; + go (i + 1) rest + | _ :: rest -> go (i + 1) rest + in + go 0 pats + | Map pats, v -> + List.iter + (fun (k, p) -> + match k, p with + | Symbol s, Keyword kw -> + env_bind env s (rt_get v (V (Keyword kw)) ~default:(V Nil)) + | Keyword "keys", Vector syms -> + List.iter + (fun sym -> + match sym with + | Symbol s -> + env_bind env s (rt_get v (V (Keyword s)) ~default:(V Nil)) + | _ -> ()) + syms + | Keyword "strs", Vector syms -> + List.iter + (fun sym -> + match sym with + | Symbol s -> + env_bind env s (rt_get v (V (String s)) ~default:(V Nil)) + | _ -> ()) + syms + | Keyword "syms", Vector syms -> + List.iter + (fun sym -> + match sym with + | Symbol s -> + env_bind env s (rt_get v (V (Symbol s)) ~default:(V Nil)) + | _ -> ()) + syms + | Symbol s, Map _ -> + (* {s {:keys [...]}} — nested destructure of (:s m) *) + bind_pattern env p (rt_get v (V (Keyword s)) ~default:(V Nil)) + | _ -> eval_error "unsupported map binding pattern") + pats + | _ -> eval_error "unsupported binding pattern" + +and eval_let env = function + | Vector bindings :: body -> + let env' = env_create (Some env) in + let rec go = function + | pat :: expr :: rest -> + bind_pattern env' pat (eval_form env' expr); + go rest + | [] -> eval_do env' body + | _ -> eval_error "let wants even bindings" + in + go bindings + | _ -> eval_error "let wants a bindings vector" + +and is_pct_sym s = + String.length s > 0 + && s.[0] = '%' + && (String.equal s "%" || String.equal s "%&" + || (String.length s > 1 + && String.for_all + (fun c -> c >= '0' && c <= '9') + (String.sub s 1 (String.length s - 1)))) + +(* fn / fn* — #(..) lands as (fn* [] body) with % placeholders in body *) +and make_fn env args = + let params, body = + match args with + | Symbol _named :: Vector ps :: body -> (ps, body) + | Vector ps :: body -> (ps, body) + | _ -> eval_error "fn wants [params] body" + in + let anon_syms = + let rec collect acc = function + | Symbol s :: rest when is_pct_sym s -> collect (s :: acc) rest + | List xs :: rest -> collect (collect acc xs) rest + | Vector xs :: rest -> collect (collect acc xs) rest + | Set xs :: rest -> collect (collect acc xs) rest + | Map kvs :: rest -> + collect (collect acc (List.concat_map (fun (a, b) -> [ a; b ]) kvs)) rest + | _ :: rest -> collect acc rest + | [] -> acc + in + collect [] body |> List.sort_uniq String.compare + in + let variadic = + List.mem "%&" anon_syms + || List.exists (function Symbol "&" -> true | _ -> false) params + in + let param_names = + List.filter_map + (function + | Symbol s -> Some s + | _ -> eval_error "unsupported fn parameter") + params + in + let positional = + if param_names = [] then ( + let max_n = + List.fold_left + (fun mx s -> + match s with + | "%" -> max mx 1 + | "%&" -> mx + | _ -> ( + match int_of_string_opt (String.sub s 1 (String.length s - 1)) with + | Some n -> max mx n + | None -> mx)) + 0 anon_syms + in + List.init max_n (fun i -> "%" ^ string_of_int (i + 1))) + else List.filter (fun s -> not (String.equal s "&")) param_names + in + Fn + (fun call_args -> + let env' = env_create (Some env) in + if param_names = [] then ( + List.iteri + (fun i a -> env_bind env' ("%" ^ string_of_int (i + 1)) a) + call_args; + (match call_args with first :: _ -> env_bind env' "%" first | [] -> ()); + if variadic then + env_bind env' "%&" + (Seq (drop_elems (List.length positional) call_args))) + else ( + let rec bind ps args = + match ps, args with + | "&" :: r :: _, rest -> env_bind env' r (Seq rest) + | p :: prest, a :: arest -> + env_bind env' p a; + bind prest arest + | p :: prest, [] -> + env_bind env' p (V Nil); + bind prest [] + | [], _ -> () + in + bind param_names call_args); + eval_do env' body) + +and apply_rt f args = + match f with + | Fn g -> g args + | V (Keyword k) -> ( + match args with + | m :: rest -> + let default = match rest with d :: _ -> d | [] -> V Nil in + rt_get m (V (Keyword k)) ~default + | [] -> eval_error "keyword fn wants a map") + | Ent e -> ( + match args with + | V (Keyword k) :: _ -> V ((ctx ()).entity_attr e k) + | V (String k) :: _ -> V ((ctx ()).entity_attr e k) + | _ -> V Nil) + | V (Map kvs) -> ( + match args with + | k :: _ -> rt_get (V (Map kvs)) k ~default:(V Nil) + | [] -> V Nil) + | V (Vector xs) -> ( + match args with + | V (Int64 i) :: _ -> ( + match Datascript.Util.int64_to_int i with + | Some i when i >= 0 && i < List.length xs -> V (List.nth xs i) + | _ -> V Nil) + | _ -> V Nil) + | V (Set xs) -> ( + match args with + | k :: _ -> ( + let kv = value_of_rt k in + if List.exists (fun x -> Util.value_equal x kv) xs then V kv else V Nil) + | [] -> V Nil) + | V Nil -> V Nil + | V (Symbol s) -> eval_error "%s is not callable" s + | _ -> eval_error "value is not callable" + +(* ---- helpers used by the core-fn table ---- *) + +and one = function [ x ] -> x | _ -> eval_error "arity error" + +and str_of_rt = function + | V (String s) -> s + | V Nil -> "" + | V (Uuid s) -> s + | V (Instant ms) -> Ds_wire.iso_of_ms ms + | V v -> Edn_util.pr_str v + | Ent eid -> "#datascript/Entity " ^ string_of_int eid + | Fn _ -> "#fn" + | Seq xs -> Edn_util.pr_str (List (List.map value_of_rt xs)) + +and str_one args = + match one args with V (String s) -> s | v -> str_of_rt v + +and strip_colon s = + if String.length s > 0 && s.[0] = ':' then + String.sub s 1 (String.length s - 1) + else s + +and last_seg s = + match String.rindex_opt s '/' with + | Some i -> String.sub s (i + 1) (String.length s - i - 1) + | None -> s + +and contains_sub s p = + let ls = String.length s and lp = String.length p in + let rec go i = i + lp <= ls && (String.sub s i lp = p || go (i + 1)) in + lp = 0 || go 0 + +and replace_sub s from to_ = + if from = "" then s + else ( + let ls = String.length s and lf = String.length from in + let buf = Buffer.create ls in + let rec go i = + if i + lf <= ls && String.sub s i lf = from then ( + Buffer.add_string buf to_; + go (i + lf)) + else if i < ls then ( + Buffer.add_char buf s.[i]; + go (i + 1)) + in + go 0; + Buffer.contents buf) + +(* ---- core fn table ---- *) + +and build_core_fns () = + let tbl = Hashtbl.create 256 in + let reg name f = Hashtbl.replace tbl name f in + + (* comparisons / logic *) + reg "=" (fun args -> + match args with + | [] -> V (Bool true) + | first :: rest -> V (Bool (List.for_all (rt_equal first) rest))); + reg "not=" (fun args -> + match args with + | [] -> V (Bool true) + | first :: rest -> V (Bool (not (List.for_all (rt_equal first) rest)))); + List.iter + (fun (name, pred) -> + reg name (fun args -> + let rec go = function + | a :: b :: rest -> + if pred (rt_compare a b) then go (b :: rest) else V (Bool false) + | _ -> V (Bool true) + in + go args)) + [ "<", (fun c -> c < 0) + ; ">", (fun c -> c > 0) + ; "<=", (fun c -> c <= 0) + ; ">=", (fun c -> c >= 0) + ]; + reg "compare" (fun args -> + match args with + | [ a; b ] -> V (Int64 (Int64.of_int (rt_compare a b))) + | _ -> eval_error "compare wants 2 args"); + reg "not" (fun args -> V (Bool (not (truthy (one args))))); + reg "boolean" (fun args -> V (Bool (truthy (one args)))); + reg "nil?" (fun args -> + match args with [ V Nil ] -> V (Bool true) | _ -> V (Bool false)); + reg "some?" (fun args -> + match args with [ V Nil ] -> V (Bool false) | [ _ ] -> V (Bool true) | _ -> eval_error "some?"); + reg "true?" (fun args -> + match args with [ V (Bool true) ] -> V (Bool true) | _ -> V (Bool false)); + reg "false?" (fun args -> + match args with [ V (Bool false) ] -> V (Bool true) | _ -> V (Bool false)); + reg "fn?" (fun args -> + match args with [ Fn _ ] -> V (Bool true) | _ -> V (Bool false)); + reg "ifn?" (fun args -> + match args with + | [ (Fn _ | V (Keyword _ | Map _ | Vector _ | Set _)) ] -> V (Bool true) + | _ -> V (Bool false)); + (* cljs number?/integer?/float? on a Date are all false *) + reg "number?" (fun args -> + match args with + | [ V (Int64 _ | Float _) ] -> V (Bool true) + | _ -> V (Bool false)); + reg "integer?" (fun args -> + match args with + | [ V (Int64 _) ] -> V (Bool true) + | [ V (Float f) ] -> V (Bool (Malli.integer_float f)) + | _ -> V (Bool false)); + reg "float?" (fun args -> + match args with + | [ V (Int64 _ | Float _) ] -> V (Bool true) + | _ -> V (Bool false)); + reg "string?" (fun args -> + match args with [ V (String _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "keyword?" (fun args -> + match args with [ V (Keyword _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "symbol?" (fun args -> + match args with [ V (Symbol _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "uuid?" (fun args -> + match args with [ V (Uuid _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "map?" (fun args -> + match args with [ V (Map _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "vector?" (fun args -> + match args with [ V (Vector _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "set?" (fun args -> + match args with [ V (Set _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "sequential?" (fun args -> + match args with [ V (Vector _ | List _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "coll?" (fun args -> + match args with + | [ V (Map _ | Vector _ | List _ | Set _) ] -> V (Bool true) + | _ -> V (Bool false)); + reg "seq?" (fun args -> + match args with [ V (List _) ] -> V (Bool true) | _ -> V (Bool false)); + reg "zero?" (fun args -> V (Bool (num_of (one args) = 0.0))); + reg "pos?" (fun args -> V (Bool (num_of (one args) > 0.0))); + reg "neg?" (fun args -> V (Bool (num_of (one args) < 0.0))); + reg "even?" (fun args -> V (Bool (Float.rem (num_of (one args)) 2.0 = 0.0))); + reg "odd?" (fun args -> V (Bool (Float.rem (num_of (one args)) 2.0 <> 0.0))); + reg "empty?" (fun args -> V (Bool (elems_of_rt (one args) = []))); + + (* arithmetic *) + let num_val args f = + let xs = List.map num_of args in + let r = f xs in + if + List.for_all (function V (Int64 _) -> true | _ -> false) args + && Float.equal r (Float.of_int (int_of_float r)) + then V (Int64 (Int64.of_int (int_of_float r))) + else V (Float r) + in + reg "+" (fun args -> num_val args (List.fold_left ( +. ) 0.0)); + reg "-" (fun args -> + match args with + | [ V (Int64 n) ] -> V (Int64 (Int64.neg n)) + | [ x ] -> V (Float (Float.neg (num_of x))) + | x :: rest -> V (Float (List.fold_left (fun a b -> a -. b) (num_of x) (List.map num_of rest))) + | [] -> eval_error "- wants args"); + reg "*" (fun args -> num_val args (List.fold_left ( *. ) 1.0)); + reg "/" (fun args -> + let xs = List.map num_of args in + match xs with + | [ x ] -> V (Float (1.0 /. x)) + | x :: rest -> V (Float (List.fold_left (fun a b -> a /. b) x rest)) + | [] -> eval_error "/ wants args"); + reg "inc" (fun args -> + match args with + | [ V (Int64 n) ] -> V (Int64 (Int64.add n 1L)) + | [ V (Instant n) ] -> V (Instant (Int64.add n 1L)) + | [ x ] -> V (Float (num_of x +. 1.0)) + | _ -> eval_error "inc"); + reg "dec" (fun args -> + match args with + | [ V (Int64 n) ] -> V (Int64 (Int64.sub n 1L)) + | [ V (Instant n) ] -> V (Instant (Int64.sub n 1L)) + | [ x ] -> V (Float (num_of x -. 1.0)) + | _ -> eval_error "dec"); + reg "min" (fun args -> + match List.map num_of args with + | [] -> eval_error "min wants args" + | x :: rest -> V (Float (List.fold_left Float.min x rest))); + reg "max" (fun args -> + match List.map num_of args with + | [] -> eval_error "max wants args" + | x :: rest -> V (Float (List.fold_left Float.max x rest))); + reg "mod" (fun args -> + match args with + | [ V (Int64 a); V (Int64 b) ] -> V (Int64 (Int64.rem a b)) + | [ a; b ] -> V (Float (Float.rem (num_of a) (num_of b))) + | _ -> eval_error "mod"); + reg "rem" (fun args -> + match args with + | [ a; b ] -> V (Float (Float.rem (num_of a) (num_of b))) + | _ -> eval_error "rem"); + reg "quot" (fun args -> + match args with + | [ a; b ] -> V (Int64 (Int64.of_int (int_of_float (num_of a) / int_of_float (num_of b)))) + | _ -> eval_error "quot"); + reg "abs" (fun args -> V (Float (Float.abs (num_of (one args))))); + + (* seq access *) + reg "first" (fun args -> + match elems_of_rt (one args) with x :: _ -> x | [] -> V Nil); + reg "second" (fun args -> + match elems_of_rt (one args) with _ :: x :: _ -> x | _ -> V Nil); + reg "last" (fun args -> + match List.rev (elems_of_rt (one args)) with x :: _ -> x | [] -> V Nil); + reg "rest" (fun args -> + match elems_of_rt (one args) with + | _ :: t -> Seq t + | [] -> Seq []); + reg "next" (fun args -> + match elems_of_rt (one args) with + | _ :: (_ :: _ as t) -> Seq t + | _ -> V Nil); + reg "nth" (fun args -> + match args with + | coll :: V (Int64 i) :: default -> ( + match + Option.bind (Datascript.Util.int64_to_int i) + (List.nth_opt (elems_of_rt coll)) + with + | Some x -> x + | None -> ( + match default with + | d :: _ -> d + | [] -> eval_error "nth out of bounds")) + | _ -> eval_error "nth wants (coll i [default])"); + reg "seq" (fun args -> seq_coll (elems_of_rt (one args))); + reg "count" (fun args -> + match args with + | [ V (String s) ] -> V (Int64 (Int64.of_int (String.length s))) + | [ x ] -> V (Int64 (Int64.of_int (List.length (elems_of_rt x)))) + | _ -> eval_error "count"); + reg "empty" (fun args -> + match args with + | [ V (Vector _) ] -> V (Vector []) + | [ V (Set _) ] -> V (Set []) + | [ V (Map _) ] -> V (Map []) + | _ -> V (List [])); + reg "cons" (fun args -> + match args with + | [ x; coll ] -> Seq (x :: elems_of_rt coll) + | _ -> eval_error "cons"); + reg "conj" (fun args -> + match args with + | coll :: xs -> ( + match coll with + | V (Vector es) -> V (Vector (es @ List.map value_of_rt xs)) + | V (List es) -> Seq (List.rev xs @ List.map (fun v -> V v) es) + | Seq es -> Seq (List.rev xs @ es) + | V (Set es) -> + (* cljs conj onto a set keeps the existing items and adds the + unseen new ones — same contents here: dedup'd newcomers + cons'd on in fold order (front, reversed). *) + V + (Set + (List.rev + (dedup_values ~seed:es (List.map value_of_rt xs)) + @ es)) + | V (Map kvs) -> + List.fold_left + (fun acc x -> + match x with + | V (Vector [ k; v ]) | V (List [ k; v ]) -> + rt_assoc acc (V k) (V v) + | _ -> eval_error "conj into map wants [k v]") + (V (Map kvs)) xs + | V Nil -> Seq (List.rev xs) + | _ -> eval_error "conj") + | [] -> eval_error "conj"); + reg "concat" (fun args -> Seq (List.concat_map elems_of_rt args)); + reg "reverse" (fun args -> Seq (List.rev (elems_of_rt (one args)))); + reg "distinct" (fun args -> + (* cljs distinct is hash-based; value-hash buckets mirror it while + still emitting the original rt values. *) + let buckets : (int, value list) Hashtbl.t = Hashtbl.create 64 in + Seq + (List.filter_map + (fun x -> + let v = value_of_rt x in + let h = value_hash v in + let seen = Option.value ~default:[] (Hashtbl.find_opt buckets h) in + if List.exists (Util.value_equal v) seen then None + else begin + Hashtbl.replace buckets h (v :: seen); + Some x + end) + (elems_of_rt (one args)))); + reg "dedupe" (fun args -> + let rec go acc prev = function + | x :: rest -> ( + let v = value_of_rt x in + match prev with + | Some p when Util.value_equal p v -> go acc prev rest + | _ -> go (x :: acc) (Some v) rest) + | [] -> List.rev acc + in + Seq (go [] None (elems_of_rt (one args)))); + reg "flatten" (fun args -> + let rec flat acc xs = + List.fold_left + (fun a x -> + match x with + | V (List _ | Vector _ | Set _) | Seq _ -> flat a (elems_of_rt x) + | _ -> x :: a) + acc xs + in + Seq (List.rev (flat [] (elems_of_rt (one args))))); + reg "sort" (fun args -> + Seq (List.stable_sort rt_compare (elems_of_rt (one args)))); + reg "range" (fun args -> + let lo, hi, step = + match args with + | [] -> eval_error "unbounded range is not supported" + | [ a ] -> (0.0, num_of a, 1.0) + | [ a; b ] -> (num_of a, num_of b, 1.0) + | [ a; b; s ] -> (num_of a, num_of b, num_of s) + | _ -> eval_error "range wants 1-3 args" + in + let rec go acc x = + if (step > 0.0 && x < hi) || (step < 0.0 && x > hi) then + go (x :: acc) (x +. step) + else List.rev acc + in + V + (List + (List.map + (fun f -> + if Float.equal f (Float.of_int (int_of_float f)) then + Int64 (Int64.of_int (int_of_float f)) + else Float f) + (go [] lo)))); + reg "repeat" (fun args -> + match args with + | [ V (Int64 n); x ] -> ( + match Datascript.Util.int64_to_int n with + | Some n -> Seq (List.init n (fun _ -> x)) + | None -> eval_error "repeat") + | _ -> eval_error "repeat"); + reg "repeatedly" (fun args -> + match args with + | [ V (Int64 n); f ] -> ( + match Datascript.Util.int64_to_int n with + | Some n -> Seq (List.init n (fun _ -> apply_rt f [])) + | None -> eval_error "repeatedly") + | _ -> eval_error "repeatedly wants (repeatedly n f)"); + reg "take" (fun args -> + match args with + | [ V (Int64 n); coll ] -> ( + match Datascript.Util.int64_to_int n with + | Some n -> Seq (take_elems n (elems_of_rt coll)) + | None -> eval_error "take") + | _ -> eval_error "take"); + reg "drop" (fun args -> + match args with + | [ V (Int64 n); coll ] -> ( + match Datascript.Util.int64_to_int n with + | Some n -> Seq (drop_elems n (elems_of_rt coll)) + | None -> eval_error "drop") + | _ -> eval_error "drop"); + reg "take-last" (fun args -> + match args with + | [ V (Int64 n); coll ] -> + let xs = elems_of_rt coll in + (match Datascript.Util.int64_to_int n with + | Some n -> Seq (drop_elems (max 0 (List.length xs - n)) xs) + | None -> eval_error "take-last") + | _ -> eval_error "take-last"); + reg "drop-last" (fun args -> + match args with + | coll :: rest -> + let n = + match rest with + | [ V (Int64 n) ] -> Option.value (Datascript.Util.int64_to_int n) ~default:1 + | _ -> 1 + in + let xs = elems_of_rt coll in + Seq (take_elems (max 0 (List.length xs - n)) xs) + | _ -> eval_error "drop-last"); + reg "butlast" (fun args -> + let xs = elems_of_rt (one args) in + Seq (take_elems (max 0 (List.length xs - 1)) xs)); + reg "take-while" (fun args -> + match args with + | [ p; coll ] -> + let rec go acc = function + | x :: rest when truthy (apply_rt p [ x ]) -> go (x :: acc) rest + | _ -> List.rev acc + in + Seq (go [] (elems_of_rt coll)) + | _ -> eval_error "take-while"); + reg "drop-while" (fun args -> + match args with + | [ p; coll ] -> + let rec go = function + | _ :: rest as xs -> + (match xs with + | x :: _ when truthy (apply_rt p [ x ]) -> go rest + | _ -> xs) + | [] -> [] + in + Seq (go (elems_of_rt coll)) + | _ -> eval_error "drop-while"); + reg "take-nth" (fun args -> + match args with + | [ V (Int64 n); coll ] -> + let kept = + (match Datascript.Util.int64_to_int n with + | Some n -> + elems_of_rt coll + |> List.mapi (fun i x -> i, x) + |> List.filter (fun (i, _) -> i mod n = 0) + |> List.map snd + | None -> []) + in + Seq kept + | _ -> eval_error "take-nth"); + reg "interleave" (fun args -> + let cols = List.map elems_of_rt args in + let rec go acc cols = + if List.exists (fun c -> c = []) cols then List.rev acc + else + go + (List.rev_append (List.map (fun c -> List.hd c) cols) acc) + (List.map List.tl cols) + in + Seq (go [] cols)); + reg "interpose" (fun args -> + match args with + | [ sep; coll ] -> ( + match elems_of_rt coll with + | [] -> Seq [] + | x :: rest -> + Seq + (List.rev + (List.fold_left (fun a x -> x :: sep :: a) [ x ] rest))) + | _ -> eval_error "interpose"); + reg "partition" (fun args -> + match args with + | V (Int64 n) :: rest -> ( + match Datascript.Util.int64_to_int n with + | Some n -> + let step, coll = + match rest with + | [ coll ] -> (n, coll) + | [ V (Int64 s); coll ] -> ( + match Datascript.Util.int64_to_int s with + | Some s -> (s, coll) + | None -> eval_error "partition") + | _ -> eval_error "partition wants n [step] coll" + in + let rec go acc xs = + if List.length xs >= n then + go (Seq (take_elems n xs) :: acc) (drop_elems step xs) + else List.rev acc + in + Seq (go [] (elems_of_rt coll)) + | None -> eval_error "partition") + | _ -> eval_error "partition"); + reg "split-at" (fun args -> + match args with + | [ V (Int64 n); coll ] -> ( + match Datascript.Util.int64_to_int n with + | Some n -> + let xs = elems_of_rt coll in + V + (Vector + [ List (List.map value_of_rt (take_elems n xs)) + ; List (List.map value_of_rt (drop_elems n xs)) + ]) + | None -> eval_error "split-at") + | _ -> eval_error "split-at"); + reg "split-with" (fun args -> + match args with + | [ p; coll ] -> + let rec go acc = function + | x :: rest when truthy (apply_rt p [ x ]) -> go (x :: acc) rest + | xs -> (List.rev acc, xs) + in + let a, b = go [] (elems_of_rt coll) in + V (Vector [ List (List.map value_of_rt a); List (List.map value_of_rt b) ]) + | _ -> eval_error "split-with"); + + (* higher order *) + let map_cols colls = + let cols = List.map elems_of_rt colls in + let rec go acc cols = + if List.exists (fun c -> c = []) cols then List.rev acc + else + go + ((List.map (fun c -> List.hd c) cols) :: acc) + (List.map List.tl cols) + in + go [] cols + in + reg "map" (fun args -> + match args with + | f :: colls -> + Seq (List.map (fun heads -> apply_rt f heads) (map_cols colls)) + | [] -> eval_error "map"); + reg "mapv" (fun args -> + match args with + | f :: colls -> + V + (Vector + (List.map + (fun heads -> value_of_rt (apply_rt f heads)) + (map_cols colls))) + | [] -> eval_error "mapv"); + reg "map-indexed" (fun args -> + match args with + | [ f; coll ] -> + Seq + (List.mapi + (fun i x -> apply_rt f [ V (Int64 (Int64.of_int i)); x ]) + (elems_of_rt coll)) + | _ -> eval_error "map-indexed"); + reg "filter" (fun args -> + match args with + | [ p; coll ] -> + Seq (List.filter (fun x -> truthy (apply_rt p [ x ])) (elems_of_rt coll)) + | _ -> eval_error "filter"); + reg "filterv" (fun args -> + match args with + | [ p; coll ] -> + V + (Vector + (List.filter_map + (fun x -> + if truthy (apply_rt p [ x ]) then Some (value_of_rt x) + else None) + (elems_of_rt coll))) + | _ -> eval_error "filterv"); + reg "remove" (fun args -> + match args with + | [ p; coll ] -> + Seq (List.filter (fun x -> not (truthy (apply_rt p [ x ]))) (elems_of_rt coll)) + | _ -> eval_error "remove"); + reg "keep" (fun args -> + match args with + | [ f; coll ] -> + Seq + (List.filter_map + (fun x -> + match apply_rt f [ x ] with + | V Nil -> None + | r -> Some r) + (elems_of_rt coll)) + | _ -> eval_error "keep"); + reg "keep-indexed" (fun args -> + match args with + | [ f; coll ] -> + let kept = + elems_of_rt coll + |> List.mapi (fun i x -> i, x) + |> List.filter_map (fun (i, x) -> + match apply_rt f [ V (Int64 (Int64.of_int i)); x ] with + | V Nil -> None + | r -> Some r) + in + Seq kept + | _ -> eval_error "keep-indexed"); + reg "mapcat" (fun args -> + match args with + | f :: colls -> + Seq + (List.concat_map + (fun heads -> elems_of_rt (apply_rt f heads)) + (map_cols colls)) + | [] -> eval_error "mapcat"); + reg "reduce" (fun args -> + match args with + | [ f; coll ] -> ( + match elems_of_rt coll with + | [] -> apply_rt f [] + | x :: rest -> + List.fold_left (fun acc x -> apply_rt f [ acc; x ]) x rest) + | [ f; init; coll ] -> + List.fold_left (fun acc x -> apply_rt f [ acc; x ]) init + (elems_of_rt coll) + | _ -> eval_error "reduce"); + reg "apply" (fun args -> + match args with + | f :: args' -> + let rec prefix acc = function + | [ last ] -> acc @ elems_of_rt last + | x :: rest -> prefix (acc @ [ x ]) rest + | [] -> acc + in + apply_rt f (prefix [] args') + | [] -> eval_error "apply"); + reg "some" (fun args -> + match args with + | [ p; coll ] -> + let rec go = function + | x :: rest -> ( + let r = apply_rt p [ x ] in + if truthy r then r else go rest) + | [] -> V Nil + in + go (elems_of_rt coll) + | _ -> eval_error "some"); + reg "every?" (fun args -> + match args with + | [ p; coll ] -> + V (Bool (List.for_all (fun x -> truthy (apply_rt p [ x ])) (elems_of_rt coll))) + | _ -> eval_error "every?"); + reg "not-every?" (fun args -> + match args with + | [ p; coll ] -> + V + (Bool + (not (List.for_all (fun x -> truthy (apply_rt p [ x ])) (elems_of_rt coll)))) + | _ -> eval_error "not-every?"); + reg "not-any?" (fun args -> + match args with + | [ p; coll ] -> + V + (Bool + (not (List.exists (fun x -> truthy (apply_rt p [ x ])) (elems_of_rt coll)))) + | _ -> eval_error "not-any?"); + reg "sort-by" (fun args -> + match args with + | [ f; coll ] -> + let sorted = + List.stable_sort + (fun a b -> rt_compare (apply_rt f [ a ]) (apply_rt f [ b ])) + (elems_of_rt coll) + in + Seq sorted + | [ f; cmp; coll ] -> + let sorted = + List.stable_sort + (fun a b -> + match apply_rt cmp [ apply_rt f [ a ]; apply_rt f [ b ] ] with + | V (Int64 n) -> Int64.to_int n + | V (Float x) -> int_of_float x + | r -> if truthy r then -1 else 0) + (elems_of_rt coll) + in + Seq sorted + | _ -> eval_error "sort-by"); + reg "group-by" (fun args -> + match args with + | [ f; coll ] -> + let order = ref [] in + List.iter + (fun x -> + let k = value_of_rt (apply_rt f [ x ]) in + match + List.find_map + (fun (kk, vs) -> if Util.value_equal kk k then Some vs else None) + !order + with + | Some vs -> vs := value_of_rt x :: !vs + | None -> order := (k, ref [ value_of_rt x ]) :: !order) + (elems_of_rt coll); + V (Map (List.rev_map (fun (k, vs) -> (k, Vector (List.rev !vs))) !order)) + | _ -> eval_error "group-by"); + reg "frequencies" (fun args -> + let order = ref [] in + List.iter + (fun x -> + let v = value_of_rt x in + match + List.find_map + (fun (k, c) -> if Util.value_equal k v then Some c else None) + !order + with + | Some c -> incr c + | None -> order := (v, ref 1) :: !order) + (elems_of_rt (one args)); + V (Map (List.rev_map (fun (k, c) -> (k, Int64 (Int64.of_int !c))) !order))); + reg "zipmap" (fun args -> + match args with + | [ ks; vs ] -> + V + (Map + (List.combine + (List.map value_of_rt (elems_of_rt ks)) + (List.map value_of_rt (elems_of_rt vs)))) + | _ -> eval_error "zipmap"); + + (* fn combinators *) + reg "comp" (fun args -> + let fs = List.rev args in + Fn + (fun call_args -> + match fs with + | [] -> (match call_args with [ x ] -> x | _ -> eval_error "comp") + | first :: rest -> + List.fold_left + (fun acc f -> apply_rt f [ acc ]) + (apply_rt first call_args) + rest)); + reg "partial" (fun args -> + match args with + | f :: bound -> Fn (fun rest -> apply_rt f (bound @ rest)) + | [] -> eval_error "partial"); + reg "juxt" (fun args -> + let apply_each call_args = + List.map (fun f -> value_of_rt (apply_rt f call_args)) args + in + Fn (fun call_args -> V (Vector (apply_each call_args)))); + reg "complement" (fun args -> + match args with + | [ f ] -> + let complemented xs = not (truthy (apply_rt f xs)) in + Fn (fun xs -> V (Bool (complemented xs))) + | _ -> eval_error "complement"); + reg "fnil" (fun args -> + match args with + | f :: defaults -> + let default_at i x = + match x, List.nth_opt defaults i with + | V Nil, Some d -> d + | _ -> x + in + Fn (fun xs -> apply_rt f (List.mapi default_at xs)) + | [] -> eval_error "fnil"); + reg "identity" (fun args -> one args); + reg "constantly" (fun args -> Fn (fun _ -> one args)); + + (* map ops *) + reg "get" (fun args -> + match args with + | m :: k :: rest -> + let d = match rest with d :: _ -> d | [] -> V Nil in + rt_get m k ~default:d + | _ -> eval_error "get"); + reg "get-in" (fun args -> + match args with + | m :: path :: rest -> + let d = match rest with d :: _ -> d | [] -> V Nil in + get_in_value m (List.map (fun p -> V p) (List.map value_of_rt (elems_of_rt path))) ~default:d + | _ -> eval_error "get-in"); + reg "assoc" (fun args -> + match args with + | m :: kvs -> + let rec go acc = function + | k :: v :: rest -> go (rt_assoc acc k v) rest + | [] -> acc + | _ -> eval_error "assoc wants even kvs" + in + go m kvs + | _ -> eval_error "assoc"); + reg "assoc-in" (fun args -> + match args with + | [ m; path; v ] -> + let rec assoc_at m = function + | [ k ] -> rt_assoc m k v + | k :: rest -> + let inner = + match rt_get m k ~default:(V Nil) with + | V Nil -> V (Map []) + | x -> x + in + rt_assoc m k (assoc_at inner rest) + | [] -> m + in + assoc_at m (List.map (fun p -> V p) (List.map value_of_rt (elems_of_rt path))) + | _ -> eval_error "assoc-in"); + reg "dissoc" (fun args -> + match args with m :: ks -> rt_dissoc m ks | _ -> eval_error "dissoc"); + reg "update" (fun args -> + match args with + | m :: k :: f :: extra -> + rt_assoc m k (apply_rt f (rt_get m k ~default:(V Nil) :: extra)) + | _ -> eval_error "update"); + reg "update-in" (fun args -> + match args with + | m :: path :: f :: extra -> + let rec upd m = function + | [ k ] -> + rt_assoc m k (apply_rt f (rt_get m k ~default:(V Nil) :: extra)) + | k :: rest -> + let inner = + match rt_get m k ~default:(V Nil) with + | V Nil -> V (Map []) + | x -> x + in + rt_assoc m k (upd inner rest) + | [] -> m + in + upd m (List.map (fun p -> V p) (List.map value_of_rt (elems_of_rt path))) + | _ -> eval_error "update-in"); + reg "merge" (fun args -> + match args with + | [] -> V Nil + | first :: rest -> + List.fold_left + (fun acc m -> + match acc, m with + | _, V Nil -> acc + | V (Map _), V (Map b) -> + List.fold_left + (fun acc' (k, v) -> rt_assoc acc' (V k) (V v)) + acc b + | _ -> eval_error "merge wants maps") + first rest); + reg "merge-with" (fun args -> + match args with + | f :: maps -> + let order = ref [] in + List.iter + (fun m -> + match m with + | V (Map kvs) -> + List.iter + (fun (k, v) -> + match + List.find_map + (fun (kk, vv) -> if Util.value_equal kk k then Some vv else None) + !order + with + | Some vv -> vv := value_of_rt (apply_rt f [ V !vv; V v ]) + | None -> order := (k, ref v) :: !order) + kvs + | _ -> eval_error "merge-with wants maps") + maps; + V (Map (List.rev_map (fun (k, vr) -> (k, !vr)) !order)) + | [] -> V Nil); + reg "select-keys" (fun args -> + match args with + | [ m; keys ] -> + let kvs = match m with V (Map kvs) -> kvs | _ -> [] in + V + (Map + (List.filter_map + (fun kr -> + let k = value_of_rt kr in + match + List.find_map + (fun (mk, mv) -> if Util.value_equal mk k then Some mv else None) + kvs + with + | Some mv -> Some (k, mv) + | None -> None) + (elems_of_rt keys))) + | _ -> eval_error "select-keys"); + reg "keys" (fun args -> + match args with [ V (Map kvs) ] -> V (List (List.map fst kvs)) | _ -> V (List [])); + reg "vals" (fun args -> + match args with [ V (Map kvs) ] -> V (List (List.map snd kvs)) | _ -> V (List [])); + reg "find" (fun args -> + match args with + | [ V (Map kvs); k ] -> ( + let kv = value_of_rt k in + match + List.find_map + (fun (mk, mv) -> if Util.value_equal mk kv then Some mv else None) + kvs + with + | Some mv -> V (Vector [ kv; mv ]) + | None -> V Nil) + | _ -> V Nil); + reg "contains?" (fun args -> + match args with + | [ m; k ] -> ( + match m with + | V (Map kvs) -> + let kv = value_of_rt k in + V (Bool (List.exists (fun (mk, _) -> Util.value_equal mk kv) kvs)) + | V (Vector xs) -> ( + match k with + | V (Int64 i) -> ( + match Datascript.Util.int64_to_int i with + | Some i -> V (Bool (i >= 0 && i < List.length xs)) + | None -> V (Bool false)) + | _ -> V (Bool false)) + | V (Set xs) -> + let kv = value_of_rt k in + V (Bool (List.exists (fun x -> Util.value_equal x kv) xs)) + | Ent e -> ( + match value_of_rt k with + | Keyword a -> + V (Bool (match (ctx ()).entity_attr e a with Nil -> false | _ -> true)) + | _ -> V (Bool false)) + | _ -> V (Bool false)) + | _ -> eval_error "contains?"); + + (* constructors / strings *) + reg "vector" (fun args -> V (Vector (List.map value_of_rt args))); + reg "vec" (fun args -> + V (Vector (List.map value_of_rt (elems_of_rt (one args))))); + reg "list" (fun args -> V (List (List.map value_of_rt args))); + reg "hash-map" (fun args -> + let rec go acc = function + | k :: v :: rest -> go ((value_of_rt k, value_of_rt v) :: acc) rest + | [] -> List.rev acc + | _ -> eval_error "hash-map wants even args" + in + V (Map (go [] args))); + reg "set" (fun args -> + let xs = List.map value_of_rt (elems_of_rt (one args)) in + V (Set (dedup_values xs))); + reg "into" (fun args -> + match args with + | [ to_; from ] -> ( + let elems = elems_of_rt from in + match to_ with + | V (Vector xs) -> V (Vector (xs @ List.map value_of_rt elems)) + | V (List xs) -> V (List (xs @ List.map value_of_rt elems)) + | V (Set xs) -> + V (Set (xs @ dedup_values ~seed:xs (List.map value_of_rt elems))) + | V (Map kvs) -> + List.fold_left + (fun acc x -> + match x with + | V (Vector [ k; v ]) | V (List [ k; v ]) | V (Map [ (k, v) ]) -> + rt_assoc acc (V k) (V v) + | _ -> eval_error "into map wants [k v] entries") + (V (Map kvs)) elems + | V Nil -> V (List (List.map value_of_rt elems)) + | _ -> eval_error "into") + | _ -> eval_error "into"); + reg "str" (fun args -> V (String (String.concat "" (List.map str_of_rt args)))); + reg "pr-str" (fun args -> + V + (String + (String.concat " " + (List.map (fun a -> Edn_util.pr_str (value_of_rt a)) args)))); + reg "name" (fun args -> + match args with + | [ V (Keyword k) ] | [ V (Symbol k) ] -> V (String (last_seg k)) + | [ V (String s) ] -> V (String s) + | _ -> eval_error "name"); + reg "namespace" (fun args -> + match args with + | [ V (Keyword k) ] | [ V (Symbol k) ] -> ( + match String.rindex_opt k '/' with + | Some i -> V (String (String.sub k 0 i)) + | None -> V Nil) + | _ -> V Nil); + reg "keyword" (fun args -> + match args with + | [ V (String s) ] -> V (Keyword (strip_colon s)) + | [ V (Keyword k) ] -> V (Keyword k) + | [ V (Symbol s) ] -> V (Keyword s) + | [ V (String ns); V (String n) ] -> V (Keyword (ns ^ "/" ^ n)) + | _ -> eval_error "keyword"); + reg "symbol" (fun args -> + match args with + | [ V (String s) ] -> V (Symbol s) + | [ V (Symbol s) ] -> V (Symbol s) + | [ V (Keyword k) ] -> V (Symbol k) + | _ -> eval_error "symbol"); + reg "uuid" (fun args -> + match args with [ V (String s) ] -> V (Uuid s) | _ -> eval_error "uuid"); + reg "subs" (fun args -> + match args with + | [ V (String s); V (Int64 i); V (Int64 j) ] -> ( + match Datascript.Util.int64_to_int i, Datascript.Util.int64_to_int j with + | Some i, Some j -> V (String (String.sub s i (j - i))) + | _ -> eval_error "subs") + | [ V (String s); V (Int64 i) ] -> ( + match Datascript.Util.int64_to_int i with + | Some i -> V (String (String.sub s i (String.length s - i))) + | None -> eval_error "subs") + | _ -> eval_error "subs"); + reg "subvec" (fun args -> + match args with + | [ V (Vector xs); V (Int64 i); V (Int64 j) ] -> ( + match Datascript.Util.int64_to_int i, Datascript.Util.int64_to_int j with + | Some i, Some j -> V (Vector (take_elems (j - i) (drop_elems i xs))) + | _ -> eval_error "subvec") + | [ V (Vector xs); V (Int64 i) ] -> ( + match Datascript.Util.int64_to_int i with + | Some i -> V (Vector (drop_elems i xs)) + | None -> eval_error "subvec") + | _ -> eval_error "subvec"); + List.iter + (fun (names, f) -> List.iter (fun n -> reg n f) names) + [ ( [ "clojure.string/lower-case"; "string/lower-case" ] + , fun args -> V (String (Unicode.lowercase (str_one args))) ) + ; ( [ "clojure.string/upper-case"; "string/upper-case" ] + , fun args -> V (String (Unicode.uppercase (str_one args))) ) + ; ( [ "clojure.string/trim"; "string/trim" ] + , fun args -> V (String (Unicode.trim (str_one args))) ) + ; ( [ "clojure.string/blank?"; "string/blank?" ] + , fun args -> + match args with + | [ V Nil ] | [ V (String "") ] -> V (Bool true) + | [ V (String s) ] -> V (Bool (Unicode.trim s = "")) + | _ -> V (Bool false) ) + ; ( [ "clojure.string/join"; "string/join" ] + , fun args -> + match args with + | [ coll ] -> + V (String (String.concat "" (List.map str_of_rt (elems_of_rt coll)))) + | [ V (String sep); coll ] -> + V (String (String.concat sep (List.map str_of_rt (elems_of_rt coll)))) + | _ -> eval_error "join" ) + ; ( [ "clojure.string/starts-with?"; "string/starts-with?" ] + , fun args -> + match args with + | [ V (String s); V (String p) ] -> V (Bool (String.starts_with ~prefix:p s)) + | _ -> eval_error "starts-with?" ) + ; ( [ "clojure.string/ends-with?"; "string/ends-with?" ] + , fun args -> + match args with + | [ V (String s); V (String p) ] -> V (Bool (String.ends_with ~suffix:p s)) + | _ -> eval_error "ends-with?" ) + ; ( [ "clojure.string/includes?"; "string/includes?" ] + , fun args -> + match args with + | [ V (String s); V (String p) ] -> V (Bool (contains_sub s p)) + | _ -> eval_error "includes?" ) + ; ( [ "clojure.string/replace"; "string/replace" ] + , fun args -> + match args with + | [ V (String s); V (String from); V (String to_) ] -> + V (String (replace_sub s from to_)) + | _ -> eval_error "replace" ) + ; ( [ "clojure.string/split"; "string/split" ] + , fun args -> + match args with + | [ V (String s); V (Regex r) ] -> V (Vector (split_regex s r 0)) + | [ V (String s); V (String separator) ] -> + V (Vector (split_regex s (literal_pattern separator) 0)) + | [ V (String s); V (Regex r); V (Int64 limit) ] -> + V (Vector (split_regex s r (Int64.to_int limit))) + | _ -> eval_error "split" ) + ]; + reg "ex-info" (fun args -> + match args with + | V (String m) :: _ -> V (Map [ (Keyword "logseq/ex-message", String m) ]) + | _ -> eval_error "ex-info"); + tbl + +(* entry point: eval-string then apply to rows *) +let apply_edn ~(entity_attr : entity_id -> attr -> value) (edn : string) + (rows : Wire.t list) : Wire.t = + let c = { entity_attr } in + let saved = !current_ctx in + current_ctx := Some c; + Common_util.protect + ~finally:(fun () -> current_ctx := saved) + (fun () -> + let form = Edn_util.read_string edn in + let transform = eval_form (env_create None) form in + (match transform with + | Fn _ -> () + | _ -> eval_error "Query result transform is not a function"); + (* cljs applies the transform to ONE collection argument: + (transform rows). Elements go in as [rt] so entity cells keep + their datascript/Entity identity through the fn body. *) + let out = apply_rt transform [ Seq (List.map rt_of_wire rows) ] in + match out with + | V (List xs) | V (Vector xs) | V (Set xs) -> + Wire.Array (List.map (fun v -> wire_of_rt (V v)) xs) + | other -> wire_of_rt other) + + +end + +open Datascript +let rec form_of_wire (t : Wire.t) : query_form = + match t with + | Wire.Nil -> QueryFormNil + | Wire.Bool b -> QueryFormBool b + | Wire.Int n -> QueryFormInt (Int64.of_int n) + | Wire.Int64 n -> QueryFormInt n + | Wire.Float f -> QueryFormFloat f + | Wire.String s -> QueryFormString s + | Wire.Binary s -> QueryFormString s + | Wire.Keyword s -> QueryFormKeyword s + | Wire.Symbol s -> QueryFormSymbol s + | Wire.Big_int s -> + (try QueryFormInt (Int64.of_string s) + with _ -> QueryFormFloat (float_of_string s)) + | Wire.Big_decimal s -> QueryFormFloat (float_of_string s) + | Wire.Date_ms ms -> + QueryFormTagged ("inst", QueryFormString (Ds_wire.iso_of_ms ms)) + | Wire.Uuid s -> QueryFormTagged ("uuid", QueryFormString s) + | Wire.Uri s -> QueryFormString s + | Wire.Array xs -> QueryFormVector (List.map form_of_wire xs) + | Wire.List xs -> QueryFormList (List.map form_of_wire xs) + | Wire.Set xs -> QueryFormSet (List.map form_of_wire xs) + | Wire.Map kvs -> + QueryFormMap (List.map (fun (k, v) -> (form_of_wire k, form_of_wire v)) kvs) + | Wire.Tagged (tag, rep) -> QueryFormTagged (tag, form_of_wire rep) + +let rec value_of_form (f : query_form) : value = + match f with + | QueryFormNil -> Nil + | QueryFormBool b -> Bool b + | QueryFormInt n -> Int64 n + | QueryFormFloat x -> Float x + | QueryFormString s -> String s + | QueryFormKeyword k -> Keyword k + | QueryFormSymbol s -> Symbol s + | QueryFormVector xs -> Vector (List.map value_of_form xs) + | QueryFormList xs -> List (List.map value_of_form xs) + | QueryFormSet xs -> Set (List.map value_of_form xs) + | QueryFormMap kvs -> Map (List.map (fun (k, v) -> (value_of_form k, value_of_form v)) kvs) + | QueryFormTagged ("uuid", QueryFormString s) -> + Uuid (Datascript.Util.uuid_canonicalize s) + | QueryFormTagged ("regex", QueryFormString s) -> Regex s + | QueryFormTagged ("inst", QueryFormString s) -> + (match Date_time_util.epoch_ms_of_iso s with + | Some ms -> Instant ms + | None -> String s) + | QueryFormTagged (_, f) -> value_of_form f + +(* cljs resolve-input passes values through unchanged — a keyword input is a + keyword value, an eid a number. The engine equates Int64 with Ref when + matching datom values, and resolves QValue keywords to attrs in attribute + position. Result_attr/Result_entity inputs must not be used here: the + engine drops them when the bound var is substituted into value position. *) + +let result_arg (v : value) : query_arg = Arg_scalar (Result_value v) + +let query_input_value (t : Wire.t) : value = + match t with + | Wire.String s when not (Page_ref.is_page_ref s) -> + (match (try Some (Parser.read_edn s) with _ -> None) with + | Some (QueryFormSymbol _) -> String s + | Some _ when String.length s > 0 && s.[0] = '\\' -> String s + | Some f -> value_of_form f + | None -> String s) + | t -> Ds_wire.value_of_transit t + +let resolve_page_ref_equality (form : query_form) : query_form = + let is_page_ref_str = function + | QueryFormString s -> Page_ref.is_page_ref s + | _ -> false + in + Db_query_dsl.postwalk + (fun f -> + match f with + | QueryFormList [ QueryFormSymbol "="; left; right ] + when is_page_ref_str left || is_page_ref_str right -> + let page_reference, sym_f = + if is_page_ref_str left then (left, right) else (right, left) + in + let name = + match page_reference with + | QueryFormString s -> + let lowered = Unicode.lowercase s in + (match Page_ref.get_page_name lowered with + | Some n -> n + | None -> lowered) + | _ -> assert false + in + QueryFormList + [ QueryFormSymbol "contains?"; sym_f; QueryFormString name ] + | f -> f) + form + +let query_current_page_title (db : db) (ctx : (Wire.t * Wire.t) list) : string option = + let get k = List.assoc_opt (Wire.Keyword k) ctx in + match get "current-page-title" with + | Some (Wire.String t) when Unicode.trim t <> "" -> Some t + | _ -> + let block_title = + match get "current-block-uuid" with + | Some v -> ( + match Ds_wire.value_of_transit v with + | Uuid u -> ( + match entity db (Lookup_ref ("block/uuid", Uuid u)) with + | Some block -> ( + match Entity_refs.ref_ent block "block/page" with + | Some page -> Ldb.string_value page "block/title" + | None -> None) + | None -> None) + | _ -> None) + | None -> None + in + (match block_title with + | Some t -> Some t + | None -> + (match get "current-page" with + | Some v -> ( + match Ldb.get_page db (Ds_wire.value_of_transit v) with + | Some page -> Ldb.string_value page "block/title" + | None -> None) + | None -> None)) + +let resolve_custom_query_input (db : db) (input : Wire.t) + (ctx : (Wire.t * Wire.t) list) : value = + let get k = List.assoc_opt (Wire.Keyword k) ctx in + let current_block_uuid = + match get "current-block-uuid" with + | Some (Wire.Uuid u) -> Some u + | Some (Wire.String s) -> Some s + | _ -> None + in + let today_day = + match get "today-day" with + | Some (Wire.Int n) -> + Time.local_date_of_journal_day (Time.local_tz ()) n + | _ -> None + in + let require_today_day = + match get "require-today-day?" with + | Some (Wire.Bool b) -> b + | _ -> false + in + let resolved_input = query_input_value input in + let current_page_title = query_current_page_title db ctx in + (match resolved_input with + | Keyword "today" -> + if require_today_day && Option.is_none today_day then + raise (Dispatcher.Exn_info ("Query today input requires :today-day", [])) + | Keyword "current-page" -> + if Option.is_none current_page_title then + raise + (Dispatcher.Exn_info + ("Query current-page input requires a current page", [])) + | Keyword ("query-page" | "current-block" | "parent-block") -> + if Option.is_none current_block_uuid then + raise + (Dispatcher.Exn_info + ( "Query block input requires :current-block-uuid" + , [ (Wire.keyword "input", Ds_wire.transit_of_value resolved_input) ] )) + | _ -> ()); + match resolved_input, today_day with + | Keyword "today", Some day -> + Int64 (Int64.of_int (Time.journal_day_of_local_date day)) + | _ -> + Db_inputs.resolve_input db resolved_input + { Db_inputs.current_block_uuid = current_block_uuid + ; current_page_fn = (fun () -> current_page_title) } + +let add_query_rules (query : query_form list) (user_rules : query_form list) + : query_form list * query_form list * bool = + let sections = Db_query_dsl.query_map_sections query in + let section k = + Option.value + (Option.map snd (List.find_opt (fun (k', _) -> k' = Some k) sections)) + ~default:[] + in + let where = section "where" and in_ = section "in" in + let rules_found = + Db_query_dsl.find_rules_in_where where + (List.map fst Db_query_dsl.db_query_dsl_rules) + in + let built_in = Db_query_dsl.extract_rules rules_found in + let rules_input = + Db_query_dsl.distinct_preserve_order (user_rules @ built_in) + in + let has_pct = + List.exists (function QueryFormSymbol "%" -> true | _ -> false) in_ + in + let rules_required = rules_input <> [] || has_pct in + let query_with_rules = + if rules_required && not has_pct then + if List.exists (fun (k, _) -> k = Some "in") sections then + Db_query_dsl.add_to_end_of_query_section query "in" [ QueryFormSymbol "%" ] + else + query @ [ QueryFormKeyword "in"; QueryFormSymbol "$"; QueryFormSymbol "%" ] + else query + in + (query_with_rules, rules_input, rules_required) + +(* execute-custom-query returning typed rows (the wire-level endpoint + version flattens Result_entity to Int, losing the entity/int + distinction normalize-query-cell relies on). *) + +let execute_custom_query_typed (db : db) (query_forms : query_form list) + (inputs : Wire.t list) (user_rules : query_form list) + (ctx : (Wire.t * Wire.t) list) : query_result list list = + let query_with_rules, rules_input, rules_required = + add_query_rules query_forms user_rules + in + let resolved_query = List.map resolve_page_ref_equality query_with_rules in + let resolved_inputs = + List.map (fun i -> result_arg (resolve_custom_query_input db i ctx)) inputs + in + let query_args = + resolved_inputs + @ (if rules_required then [ Db_query_dsl.parse_rules_input rules_input ] else []) + in + let query_edn = Ds_wire.edn_of_query_form (QueryFormVector resolved_query) in + Datascript.q_string db query_edn ~inputs:query_args + +(* query-form tree-seq over [query; rules] — all nested coll forms *) diff --git a/shared/src/logseq/core/dev_query.mli b/shared/src/logseq/core/dev_query.mli new file mode 100644 index 00000000..ebfe1174 --- /dev/null +++ b/shared/src/logseq/core/dev_query.mli @@ -0,0 +1,47 @@ +(** Query algorithms extracted from the pinned upstream dev worker. *) +module Wire : sig + include module type of Dev_sync.Wire with type t = Dev_sync.Wire.t +end +module Time : sig + type epoch_ms + type tz + type local_date + val epoch_ms : int64 -> epoch_ms + val epoch_ms_of_float : float -> epoch_ms + val epoch_ms_to_float : epoch_ms -> float + val local_tz : unit -> tz + val local_date_of_journal_day : tz -> int -> local_date option +end +module Unicode : sig + val trim : string -> string + val lowercase : string -> string +end +module Date_time_util : sig + type period = Days | Weeks | Months | Years | Hours | Minutes + val time_ms : unit -> int64 + val minus : period -> int -> int64 -> int64 +end +module Ds_wire : sig + val edn_of_query_form : Datascript.query_form -> string + val value_of_transit : Wire.t -> Datascript.value + val transit_of_value : Datascript.value -> Wire.t +end +module Edn_util : sig + val read_string : string -> Datascript.value + val pr_str : Datascript.value -> string +end +module Db_query_dsl : sig + type exec_opts = { + opt_cards : bool; + opt_block_attrs : string option; + opt_current_page_title : string option; + opt_today_day : Time.local_date option; + } + val execute_query : Datascript.db -> string -> exec_opts -> Datascript.query_result list list option + val execute_custom_query : Datascript.db -> string -> exec_opts -> Datascript.query_result list list option +end +module Edn_eval : sig + val apply_edn : entity_attr:(int -> string -> Datascript.value) -> string -> Wire.t list -> Wire.t +end +val execute_custom_query_typed : Datascript.db -> Datascript.query_form list -> Wire.t list -> + Datascript.query_form list -> (Wire.t * Wire.t) list -> Datascript.query_result list list diff --git a/shared/src/logseq/core/dev_view.ml b/shared/src/logseq/core/dev_view.ml new file mode 100644 index 00000000..e3fbcf46 --- /dev/null +++ b/shared/src/logseq/core/dev_view.ml @@ -0,0 +1,1659 @@ +(* Generated by scripts/vendor-dev-view.py from logseq/logseq a7191d3d9deba5e34a6fb51d6454ed1d7e680965. + License: shared/vendor/logseq-query-LICENSE.md *) + +module Time = Dev_query.Time +module Unicode = Dev_query.Unicode +module Date_time_util = Dev_query.Date_time_util +module Common_util = struct +let js_string_of_float (f : float) : string = + if Float.is_nan f then "NaN" + else if f = Float.infinity then "Infinity" + else if f = Float.neg_infinity then "-Infinity" + else if f = 0. then "0" + else + (* shortest %.*e precision that round-trips *) + let rec find_p p = + if p > 17 then 17 + else + let s = Printf.sprintf "%.*e" (p - 1) f in + if float_of_string s = f then p else find_p (p + 1) + in + let sci = Printf.sprintf "%.*e" (find_p 1 - 1) f in + let epos = String.index sci 'e' in + let mant = String.sub sci 0 epos in + let exp = + int_of_string (String.sub sci (epos + 1) (String.length sci - epos - 1)) + in + let neg = mant.[0] = '-' in + let m = if neg then String.sub mant 1 (String.length mant - 1) else mant in + let digits = String.concat "" (String.split_on_char '.' m) in + let k = String.length digits in + let sign = if neg then "-" else "" in + if exp >= -6 && exp < 21 then + if exp >= k - 1 then sign ^ digits ^ String.make (exp - k + 1) '0' + else if exp >= 0 then + sign ^ String.sub digits 0 (exp + 1) ^ "." + ^ String.sub digits (exp + 1) (k - exp - 1) + else sign ^ "0." ^ String.make (-exp - 1) '0' ^ digits + else + let m2 = + if k = 1 then digits + else String.sub digits 0 1 ^ "." ^ String.sub digits 1 (k - 1) + in + Printf.sprintf "%s%s%s%d" sign m2 + (if exp < 0 then "e-" else "e+") (abs exp) + +(* common-util/tag-valid? *) + +let js_number_of_string (s : string) : float option = + if s = "" then Some 0. + else if String.contains s '_' then None + else + match s with + | "Infinity" | "+Infinity" -> Some Float.infinity + | "-Infinity" -> Some Float.neg_infinity + | _ -> + let n = String.length s in + let radix_digits base s = + let ok = + s <> "" + && String.for_all + (fun c -> + match base with + | 16 -> + (c >= '0' && c <= '9') + || (c >= 'a' && c <= 'f') + || (c >= 'A' && c <= 'F') + | 8 -> c >= '0' && c <= '7' + | _ -> c = '0' || c = '1') + s + in + if ok then + let acc = + String.fold_left + (fun acc c -> + let d = + if c >= '0' && c <= '9' then Char.code c - Char.code '0' + else if c >= 'a' && c <= 'f' then + Char.code c - Char.code 'a' + 10 + else Char.code c - Char.code 'A' + 10 + in + acc *. float_of_int base +. float_of_int d) + 0. s + in + Some acc + else None + in + if + n > 2 && s.[0] = '0' + && (s.[1] = 'x' || s.[1] = 'X' || s.[1] = 'o' || s.[1] = 'O' + || s.[1] = 'b' || s.[1] = 'B') + then + let base = + match s.[1] with + | 'x' | 'X' -> 16 + | 'o' | 'O' -> 8 + | _ -> 2 + in + radix_digits base (String.sub s 2 (n - 2)) + else + (* reject OCaml-only spellings that Number returns NaN for *) + let signless = + if n > 0 && (s.[0] = '+' || s.[0] = '-') then + String.sub s 1 (n - 1) + else s + in + let lowered = String.lowercase_ascii signless in + if + lowered = "inf" || lowered = "infinity" || lowered = "nan" + then None + else if + (* a sign before 0x/0o/0b is NaN in JS, accepted in OCaml *) + signless <> s + && String.length signless > 2 + && signless.[0] = '0' + && (signless.[1] = 'x' || signless.[1] = 'o' + || signless.[1] = 'b') + then None + else float_of_string_opt s + +(* js/parseInt — leading JS whitespace skipped, optional sign, then the + longest valid digit prefix. With ~radix:0 (default, matching cljs + parse-long/parse-int's bare js/parseInt) a "0x"/"0X" prefix selects + base 16, otherwise base 10; an explicit ~radix uses that base and + (for 16 only) also strips a leading "0x". Returns NaN as [None]. *) + +end + +(* Graph adapters for the pinned native view algorithms. *) +module Ldb = struct + open Datascript + let ent_of_id db id = entity db (Entity_id id) + let ent_of_ref db reference = entity db reference + let values (e : entity) attr = match Entity.entity_attr_raw e attr with + | Some (One_value value) -> [value] + | Some (Many_values values) -> values + | _ -> [] + let value e attr = List.nth_opt (values e attr) 0 + let string_value e attr = match value e attr with Some (String s) -> Some s | _ -> None + let ident_of e = match value e "db/ident" with Some (Keyword s) -> Some s | _ -> None + let truthy = function None | Some Nil | Some (Bool false) -> false | _ -> true + let is_class (e : entity) = Graph_read.entity_is_instance_of e.db e.id "logseq.class/Tag" + let many_attr db attr = match List.assoc_opt attr db.schema with + | Some spec -> spec.cardinality = Many + | None -> Option.bind (entity db (Ident attr)) (fun e -> value e "db/cardinality") + = Some (Keyword "db.cardinality/many") +end +module Db_class = struct + let ident_eid db ident = Datascript.entid db "db/ident" (Datascript.Keyword ident) + let get_structured_children db id = + Graph_read.class_descendants db id |> List.filter (fun child -> child <> id) +end +module Db_property = struct + let property_value_content entity = match Ldb.value entity "block/title" with + | Some _ as title -> title + | None -> Ldb.value entity "logseq.property/value" +end + +open Datascript +module Int_set = Set.Make(Int) + +let contains_substring haystack needle = + let lh = String.length haystack and ln = String.length needle in + if ln = 0 then true + else if ln > lh then false + else begin + let rec go i = + i + ln <= lh && (String.sub haystack i ln = needle || go (i + 1)) + in + go 0 + end + +(* cljs distinct — first occurrence kept, order preserved *) + +let dedupe_ids (ids : entity_id list) : entity_id list = + let seen = Hashtbl.create 7 in + List.filter + (fun id -> + if Hashtbl.mem seen id then false + else begin + Hashtbl.replace seen id (); + true + end) + ids + +(* ---------- common/reference.cljs datoms helpers ---------- *) + +(* reference/entid — ref datom values are already entids *) + +let entid : value -> entity_id option = function + | Ref id -> Some id + | _ -> None + +(* reference/datom-v *) + +let get_block_alias_ids db (eid : entity_id) : entity_id list = + let forward = + List.filter_map + (fun (d : datom) -> entid d.v) + (List.of_seq (datoms db Eavt ~e:eid ~a:"block/alias" ())) + in + let backward = + List.map + (fun (d : datom) -> d.e) + (List.of_seq (datoms db Avet ~a:"block/alias" ~v:(Ref eid) ())) + in + dedupe_ids (forward @ backward) + +(* common-initial-data/get-block-alias — the bidirectional :alias rule + query (shared with Db_reference). *) + +let hidden_eid_pred db : entity_id option -> bool = + let cache : (entity_id, bool) Hashtbl.t = Hashtbl.create 31 in + let rec hidden (eid : entity_id option) (seen : entity_id list) : bool = + match eid with + | None -> false + | Some id when List.mem id seen -> false + | Some id -> + (match Hashtbl.find_opt cache id with + | Some b -> b + | None -> + (* one eavt slice covers hide?/deleted-at/parent — three + separate seeks per ancestor on storage-backed indexes *) + let hide = ref None and del = ref None and parent = ref None in + datoms db Eavt ~e:id () + |> Seq.iter (fun (d : datom) -> + if d.a = "logseq.property/hide?" && !hide = None then + hide := Some d.v + else if d.a = "logseq.property/deleted-at" && !del = None + then del := Some d.v + else if d.a = "block/parent" && !parent = None then + parent := entid d.v); + let result = + Ldb.truthy !hide + || Ldb.truthy !del + || hidden !parent (id :: seen) + in + Hashtbl.replace cache id result; + result) + in + fun eid -> hidden eid [] + +(* common-initial-data/hidden-ref-id-pred — ~hidden_eid lets a batch of + blocks share one memoized ancestor walk *) + +let hidden_ref_id_pred_with db (id : entity_id) + ~(hidden_eid : entity_id option -> bool) + ?(is_class : bool option) + ?(entity_ident : attr option option) + () : entity_id option -> bool = + let entity_ident, class_ids = + match is_class, entity_ident with + | Some ic, Some ident -> + ( ident + , if ic then Some (id :: Db_class.get_structured_children db id) + else None ) + | _ -> + let entity = Ldb.ent_of_id db id in + ( Option.bind entity Ldb.ident_of + , match entity with + | Some e when Ldb.is_class e -> + Some (id :: Db_class.get_structured_children db id) + | _ -> None ) + in + fun ref_eid -> + match ref_eid with + | None -> true + | Some rid -> + if rid = id then true + else + (* one eavt slice answers block/page, view-for, tags and the + ident check — cljs issues ~4 separate index scans per ref; + each is a real storage seek on this backend *) + let page = ref None + and view_for = ref None + and tags = ref [] + and ident_hit = ref false in + datoms db Eavt ~e:rid () + |> Seq.iter (fun (d : datom) -> + if d.a = "block/page" && !page = None then + page := entid d.v + else if d.a = "logseq.property/view-for" && !view_for = None + then view_for := entid d.v + else if d.a = "block/tags" then + (match entid d.v with + | Some t -> tags := t :: !tags + | None -> ()) + else ( + match entity_ident with + | Some ident -> if d.a = ident then ident_hit := true + | None -> ())); + !page = Some id + || !view_for = Some id + || hidden_eid !page + || hidden_eid ref_eid + || (match class_ids with + | Some cids -> + List.exists (fun cid -> List.mem cid cids) !tags + | None -> false) + || !ident_hit + +let hidden_ref_id_pred db (id : entity_id) : entity_id option -> bool = + hidden_ref_id_pred_with db id ~hidden_eid:(hidden_eid_pred db) () + +(* common-initial-data/hidden-ref-pred — entity variant *) + +let get_block_refs_count db (id : entity_id) : int = + let with_alias = dedupe_ids (id :: get_block_alias_ids db id) in + let hidden_ref = hidden_ref_id_pred db id in + List.fold_left + (fun total alias_id -> + List.fold_left + (fun n (d : datom) -> if hidden_ref (Some d.e) then n else n + 1) + total + (List.of_seq (datoms db Avet ~a:"block/refs" ~v:(Ref alias_id) ()))) + 0 with_alias + +(* common-initial-data/get-block-children-ids (include-collapsed-children? + defaults true; our callers always use the default) *) + +let get_property_value_content db (v : value) : value option = + match v with + | Nil | Bool false -> None + | Uuid u -> + (match Ldb.ent_of_ref db (Lookup_ref ("block/uuid", Uuid u)) with + | Some e -> Db_property.property_value_content e + | None -> None) + | Ref id -> + (match Ldb.ent_of_id db id with + | Some e -> Db_property.property_value_content e + | None -> None) + | Keyword k -> Some (String (":" ^ k)) + | v -> Some v + +let str_of_value = function + | String s -> s + | Int64 i -> Int64.to_string i + | Float f -> Common_util.js_string_of_float f + | Bool b -> string_of_bool b + | Keyword k -> ":" ^ k + | Uuid u -> u + | Symbol s -> s + | Nil -> "nil" + | _ -> "" + +(* cljs select-keys {:db/id, :block/uuid} on an entity *) + +let property_object_eids db (prop_ident : string) : entity_id list = + let rules_edn = + "[[(class-extends ?p ?c) [?c :logseq.property.class/extends ?p]] \ + [(class-extends ?p ?c) [?t :logseq.property.class/extends ?p] \ + (class-extends ?t ?c)] \ + [(object-has-class-property? ?b ?prop) \ + [?prop-e :db/ident ?prop] \ + [?t :logseq.property.class/properties ?prop-e] \ + [?b :block/tags ?tc] \ + (or [(= ?t ?tc)] (class-extends ?t ?tc))] \ + [(has-property-or-object-property? ?b ?prop) \ + [?prop-e :db/ident ?prop] \ + (or [?b ?prop _] \ + (object-has-class-property? ?b ?prop))]]" + in + q_string db + "[:find [?b ...] :in $ % ?prop :where \ + (has-property-or-object-property? ?b ?prop)]" + ~inputs: + [ Arg_rules (Parser.parse_rules (Parser.read_edn rules_edn)); + Arg_scalar (Result_value (Keyword prop_ident)) ] + |> List.filter_map + (fun row -> match row with [ Result_entity b ] -> Some b | _ -> None) + +(* db-class/build-new-class — creates a fresh :db/ident via + create-user-class-ident-from-name then sqlite-util/build-new-class. *) + +let get_timestamp (v : value) : Time.epoch_ms option = + let now = Date_time_util.time_ms () in + let shift p n = Time.epoch_ms (Date_time_util.minus p n now) in + match v with + | String s -> + (match s with + | "1 day ago" -> Some (shift Days 1) + | "3 days ago" -> Some (shift Days 3) + | "1 week ago" -> Some (shift Weeks 1) + | "1 month ago" -> Some (shift Months 1) + | "3 months ago" -> Some (shift Months 3) + | "1 year ago" -> Some (shift Years 1) + | _ -> None) + | Int64 i -> Some (Time.epoch_ms i) + | Float f -> Some (Time.epoch_ms_of_float f) + | Instant i -> Some (Time.epoch_ms i) + | _ -> None + +(* db-property-type sets *) +let closed_value_property_types = [ "default"; "number"; "url" ] +let all_ref_property_types = + [ "default"; "url"; "number"; "date"; "node"; "asset"; "entity" + ; "class"; "page"; "property" ] + +let valid_type_for_sort (v : value) : bool = + match v with + | Int64 _ | Float _ | Instant _ | String _ | Bool _ -> true + | _ -> false + +let prop_type_kw (property : entity option) : string option = + Option.bind property (fun p -> + match Ldb.value p "logseq.property/type" with + | Some (Keyword t) -> Some t + | _ -> None) + +(* JS ToNumber for relational operators: strings parse to numbers (or + NaN), booleans/null to 0/1. Non-convertible → None (NaN). *) +let js_number_opt (v : value) : float option = + match v with + | Int64 i -> Some (Int64.to_float i) + | Float f -> Some f + | Instant i -> Some (Int64.to_float i) + | Bool b -> Some (if b then 1. else 0.) + | Nil -> Some 0. + | String s -> + let s = Unicode.trim s in + if s = "" then Some 0. + else + (match Common_util.js_number_of_string s with + | Some f when Float.is_nan f -> None + | Some f -> Some f + | None -> None) + | _ -> None + +let strict_number_opt (v : value) : float option = + match v with + | Int64 i -> Some (Int64.to_float i) + | Float f -> Some f + | Instant i -> Some (Int64.to_float i) + | _ -> None + +(* JS relational comparison result, None = unordered (NaN operand). Both + strings compare lexicographically; otherwise ToNumber both. *) +let js_cmp (a : value) (b : value) : int option = + match a, b with + | String x, String y -> Some (String.compare x y) + | _ -> + (match js_number_opt a, js_number_opt b with + | Some x, Some y -> Some (compare x y) + | _ -> None) + +(* cljs compare over scalars: same-type pairs compare directly; mixed or + non-comparable pairs go through goog.array.defaultCompare, which is + relational (unordered → 0). Nil sorts first (cljs compare nil). *) +let compare_scalars (a : value) (b : value) : int = + match a, b with + | Nil, Nil -> 0 + | Nil, _ -> -1 + | _, Nil -> 1 + | Keyword x, Keyword y + | Symbol x, Symbol y + | Uuid x, Uuid y + | String x, String y -> String.compare x y + | _ -> Option.value ~default:0 (js_cmp a b) + +(* view/compare-sort-values — nils last *) +let compare_sort_values (a : value option) (b : value option) (asc_ : bool) : int = + let comparable = function Some v when valid_type_for_sort v -> Some v | _ -> None in + match comparable a, comparable b with + | None, None -> 0 + | None, _ -> 1 + | _, None -> -1 + | Some va, Some vb -> + let same_type = match va, vb with + | (Int64 _ | Float _ | Instant _), (Int64 _ | Float _ | Instant _) + | String _, String _ | Bool _, Bool _ -> true + | _ -> false in + let c = if same_type then compare_scalars va vb else 0 in + if asc_ then c else -c + +let js_num_str (f : float) : string = + if Float.is_integer f && Float.abs f < 1e21 then Printf.sprintf "%.0f" f + else Printf.sprintf "%.15g" f + +(* cljs (str v) for scalars. *) +let js_str (v : value) : string = + match v with + | Int64 i -> Int64.to_string i + | Float f -> js_num_str f + | Instant i -> Int64.to_string i + | String s -> s + | Bool b -> if b then "true" else "false" + | Keyword k -> ":" ^ k + | Uuid u -> u + | Symbol s -> s + | Nil -> "" + | v -> str_of_value v + +let lowercase = Unicode.lowercase + +let vmap_get (k : attr) (kvs : (value * value) list) : value option = + List.find_map + (fun (key, v) -> + match key with + | Keyword s | String s when String.equal s k -> Some v + | _ -> None) + kvs + +(* Clojure truthiness keeps zero and empty strings truthy. *) +let cljs_truthy (v : value) : bool = + match v with + | Nil | Bool false -> false + | _ -> true + +let uuid_str_of_eid db (eid : entity_id) : string option = + match Seq.uncons (datoms db Eavt ~e:eid ~a:"block/uuid" ()) with + | Some (d, _) -> (match d.v with Uuid u -> Some u | String s -> Some s | _ -> None) + | None -> None + +let uuid_to_eid db (u : string) : entity_id option = + match Seq.uncons (datoms db Avet ~a:"block/uuid" ~v:(Uuid u) ()) with + | Some (d, _) -> Some d.e + | None -> None + +let indexed_attr_value db (eid : entity_id) (a : attr) : value option = + match Seq.uncons (datoms db Eavt ~e:eid ~a ()) with + | Some (d, _) -> Some d.v + | None -> None + +let indexed_attr_values db (eid : entity_id) (a : attr) : value list = + List.map (fun (d : datom) -> d.v) (List.of_seq (datoms db Eavt ~e:eid ~a ())) + +(* view/attr-keyword — ref values resolve to their :db/ident *) +let attr_keyword db (eid : entity_id) (a : attr) : value option = + match indexed_attr_value db eid a with + | Some (Ref id) -> indexed_attr_value db id "db/ident" + | v -> v + +(* view/ref-value-content *) +let ref_value_content db (value_eid : entity_id) : value option = + match indexed_attr_value db value_eid "logseq.property/value" with + | Some v -> Some v + | None -> indexed_attr_value db value_eid "block/title" + +(* entity/map-level title|value — cljs (or :block/title + :logseq.property/value) *) +let entity_title_or_value db (eid : entity_id) : value option = + match indexed_attr_value db eid "block/title" with + | Some v -> Some v + | None -> indexed_attr_value db eid "logseq.property/value" + +(* cljs (get e a) — card-many gives a set *) +let row_get (e : entity) (a : attr) : value option = + let vs = Ldb.values e a in + if Ldb.many_attr e.db a then + (match vs with [] -> None | _ -> Some (Set vs)) + else List.nth_opt vs 0 + +let row_value_list (raw : value option) : value list = + match raw with + | Some (Set vs) -> vs + | Some v -> [ v ] + | None -> [] + +let empty_placeholder_value empty_id = function + | Keyword "logseq.property/empty-placeholder" -> true + | Ref id -> Some id = empty_id + | Map kvs -> vmap_get "db/ident" kvs = Some (Keyword "logseq.property/empty-placeholder") + | _ -> false + +(* cljs row-matched?'s (empty-value? v) — over the raw get result. *) +let empty_value_opt empty_id (v : value option) : bool = + match v with + | None -> true + | Some v -> + (match v with + | Nil -> true + | v when empty_placeholder_value empty_id v -> true + | String s -> Unicode.trim s = "" + | List values | Vector values | Set values -> List.for_all (empty_placeholder_value empty_id) values + | _ -> false) + +let is_empty_coll (v : value) : bool = + match v with Set [] | List [] | Vector [] | Map [] -> true | _ -> false + +let coll_items (v : value) : value list = + match v with Set xs | Vector xs | List xs -> xs | _ -> [] + +(* cljs (some match coll) for a set-or-scalar match — membership test. *) +let match_items (m : value) : value list = + match m with Set xs -> xs | _ -> [ m ] + +let value_mem (v : value) (xs : value list) : bool = + List.exists (fun x -> Util.value_equal x v) xs + +let closed_value_ents_of db (prop_eid : entity_id) : entity list = + List.filter_map + (fun (d : datom) -> Ldb.ent_of_id db d.e) + (List.of_seq + (datoms db Avet ~a:"block/closed-value-property" ~v:(Ref prop_eid) ())) + +(* view/match-property-value-as-entity? *) +let match_property_value_as_entity db (value_eid : entity_id) (property : entity option) : bool = + (match Ldb.ent_of_id db value_eid with + | Some e -> Option.is_some (Ldb.ident_of e) + | None -> false) + || (match prop_type_kw property with + | Some t -> not (List.mem t closed_value_property_types) + | None -> true) + +(* db-property/property-value-content over a raw value (Ref → entity) — + title first, then :logseq.property/value. *) +let dp_pvc_of_value db (v : value) : value option = + match v with + | Ref id -> + (match Ldb.ent_of_id db id with + | Some e -> Db_property.property_value_content e + | None -> None) + | _ -> None + +let dp_pvc_of_uuid db (u : string) : value option = + match uuid_to_eid db u with + | Some id -> dp_pvc_of_value db (Ref id) + | None -> None + +let dp_pvc_of_map (kvs : (value * value) list) : value option = + match vmap_get "block/title" kvs with + | Some v -> Some v + | None -> vmap_get "logseq.property/value" kvs + +(* view/get-property-value-for-search *) +let get_property_value_for_search db (block : entity) (property : entity) : value option = + match Ldb.ident_of property with + | None -> None + | Some ident -> + let typ = prop_type_kw (Some property) in + let many = + Ldb.value property "db/cardinality" + = Some (Keyword "db.cardinality/many") + in + let ref_type = + match typ with Some t -> List.mem t all_ref_property_types | None -> false + in + let number_type = typ = Some "number" || typ = Some "datetime" in + if many then begin + let col = + List.filter_map + (fun v -> + if ref_type then dp_pvc_of_value db v + else (match v with Nil -> None | _ -> Some v)) + (List.filter (fun value -> not (empty_placeholder_value (Db_class.ident_eid db "logseq.property/empty-placeholder") value)) (Ldb.values block ident)) + in + if number_type then + (match List.filter_map strict_number_opt col with + | [] -> None + | nums -> Some (Float (List.fold_left ( +. ) 0. nums))) + else match col with [] -> None | _ -> Some (String (String.concat ", " (List.map js_str col))) + end + else + match Ldb.value block ident with + | Some v when valid_type_for_sort v -> Some v + | raw -> + (match raw with + | Some (Ref _) when ref_type -> Option.bind raw (dp_pvc_of_value db) + | Some (Uuid _) when ref_type -> Option.bind raw (get_property_value_content db) + | _ -> raw) + +(* view/get-value-for-sort — precomputed closed-value map *) +let get_value_for_sort db (property : entity option) (db_ident : attr) : + entity -> value option = + let closed_values = + match property with + | Some p -> closed_value_ents_of db p.id + | None -> [] + in + let closed_map : (entity_id, value) Hashtbl.t option = + match closed_values with + | [] -> None + | cvs -> + let m = Hashtbl.create (List.length cvs) in + if List.for_all (fun (cv : entity) -> Option.is_some (Ldb.value cv "block/order")) cvs + then + List.iter + (fun (cv : entity) -> + match Ldb.value cv "block/order" with + | Some v -> Hashtbl.replace m cv.id v + | None -> ()) + cvs + else + List.iteri (fun i (cv : entity) -> Hashtbl.replace m cv.id (Int64 (Int64.of_int i))) cvs; + Some m + in + let get_property_value (e : entity) : value option = + match property with + | Some p -> + if prop_type_kw (Some p) = Some "date" then + (match Ldb.value e db_ident with + | Some (Ref id) -> + (match Ldb.ent_of_id db id with + | Some je -> Ldb.value je "block/journal-day" + | None -> None) + | _ -> None) + else get_property_value_for_search db e p + | None -> Ldb.value e db_ident + in + fun (e : entity) : value option -> + match closed_map with + | Some m -> + (match Ldb.value e db_ident with + | Some (Ref id) -> Hashtbl.find_opt m id + | _ -> None) + | None -> + (match get_property_value e with + | Some v when valid_type_for_sort v -> Some v + | _ -> None) + +type sorting_item = { s_id : attr; s_asc : bool } + +let sorting_of_value (v : value) : sorting_item list = + let item m = + match m with + | Map kvs -> + (match vmap_get "id" kvs with + | Some (Keyword id) | Some (String id) -> + Some + { s_id = id + ; s_asc = + (match vmap_get "asc?" kvs with + | Some (Bool b) -> b + | _ -> true) + } + | _ -> None) + | _ -> None + in + match v with + | Vector xs | List xs | Set xs -> List.filter_map item xs + | _ -> [] + +let sort_key_fn db (s : sorting_item) : entity -> value option = + if s.s_id = "block.temp/refs-count" then + fun e -> Some (Int64 (Int64.of_int (get_block_refs_count db e.id))) + else get_value_for_sort db (Ldb.ent_of_ref db (Ident s.s_id)) s.s_id + +let dedupe_entities (es : entity list) : entity list = + let seen = Hashtbl.create 31 in + List.filter + (fun (e : entity) -> + if Hashtbl.mem seen e.id then false + else begin + Hashtbl.replace seen e.id (); + true + end) + es + +let partition_by (key_eq : 'a -> 'a -> bool) (f : 'b -> 'a) (xs : 'b list) : + 'b list list = + match xs with + | [] -> [] + | x :: tl -> + let groups, cur, _ = + List.fold_left + (fun (groups, cur, last_k) x -> + let k = f x in + if key_eq k last_k then (groups, x :: cur, k) + else (List.rev cur :: groups, [ x ], k)) + ([], [ x ], f x) + tl + in + List.rev (List.rev cur :: groups) + +let sort_key_eq (a : value option) (b : value option) : bool = + match a, b with + | None, None -> true + | Some x, Some y -> Util.value_equal x y + | _ -> false + +(* view/sort-by-single-property — returns the sorted entities split into + partitions when partition is true (cljs partition-by on major key). *) +let sort_by_single_property db (s : sorting_item) (entities : entity list) + ~(partition : bool) : entity list list = + let property = Ldb.ent_of_ref db (Ident s.s_id) in + let get_value_fn = + if s.s_id = "block.temp/refs-count" then begin + (* each refs-count is an index walk + seeks — memoize per entity so + the sort pays O(n) walks, not O(n log n). Shared with the + partition keys below. *) + let counts : (entity_id, int) Hashtbl.t = + Hashtbl.create (List.length entities) + in + fun (e : entity) -> + Some + (Int64 + (Int64.of_int + (match Hashtbl.find_opt counts e.id with + | Some n -> n + | None -> + let n = get_block_refs_count db e.id in + Hashtbl.replace counts e.id n; + n))) + end + else sort_key_fn db s + in + let sorted = + if s.s_id = "block.temp/refs-count" then + let r = + List.stable_sort + (fun a b -> compare_sort_values (get_value_fn a) (get_value_fn b) s.s_asc) + entities + in + r + else begin + let prop_ident = + match property with + | Some p -> Option.value ~default:s.s_id (Ldb.ident_of p) + | None -> s.s_id + in + let value_type_ref = + match property with + | Some p -> Ldb.value p "db/valueType" = Some (Keyword "db.type/ref") + | None -> false + in + let use_datom_sort = + List.mem prop_ident [ "block/updated-at"; "block/created-at"; "block/title" ] + && (not value_type_ref) + && List.length entities > 10000 + in + if use_datom_sort then begin + let row_ids : (entity_id, entity) Hashtbl.t = + Hashtbl.create (List.length entities) + in + List.iter (fun (e : entity) -> Hashtbl.replace row_ids e.id e) entities; + let seen = Hashtbl.create (List.length entities) in + let sorted = Seq.fold_left (fun acc (d : datom) -> + match Hashtbl.find_opt row_ids d.e with + | Some e when not (Hashtbl.mem seen d.e) -> + Hashtbl.replace seen d.e (); e :: acc + | _ -> acc) [] (datoms db Avet ~a:s.s_id ()) in + let sorted = if s.s_asc then List.rev sorted else sorted in + let missing = List.filter (fun (e : entity) -> not (Hashtbl.mem seen e.id)) entities + |> List.sort (fun (a : entity) (b : entity) -> if s.s_asc then compare a.id b.id else compare b.id a.id) in + sorted @ missing + end + else + List.stable_sort + (fun a b -> + compare_sort_values (get_value_fn a) (get_value_fn b) s.s_asc) + entities + end + |> dedupe_entities + in + if partition then partition_by sort_key_eq get_value_fn sorted else [ sorted ] + +(* view/sort-entities *) +let sort_entities db (sorting : sorting_item list) (entities : entity list) : + entity list = + let major = + match sorting with + | s :: _ -> s + | [] -> { s_id = "block/updated-at"; s_asc = false } + in + let minors = match sorting with _ :: rest -> rest | [] -> [] in + let groups = sort_by_single_property db major entities ~partition:(minors <> []) in + if minors = [] then List.concat groups + else begin + let minor_fns = + List.map (fun (s : sorting_item) -> (s.s_asc, sort_key_fn db s)) minors + in + let cmp a b = + let rec loop = function + | [] -> 0 + | (asc, f) :: rest -> + let c = compare_sort_values (f a) (f b) asc in + if c <> 0 then c else loop rest + in + loop minor_fns + in + List.concat_map (fun g -> List.stable_sort cmp g) groups + end + +(* ---------- view filters ---------- *) + +type filter_clause = + { f_ident : attr + ; f_op : string + ; f_match : value } + +type view_filters = + { vf_or : bool + ; vf_clauses : filter_clause list + ; vf_present : bool } + +let no_filters = { vf_or = false; vf_clauses = []; vf_present = false } + +let parse_clause (v : value) : filter_clause = + match v with + | Vector [ Keyword k; Keyword o; m ] | List [ Keyword k; Keyword o; m ] -> + { f_ident = k; f_op = o; f_match = m } + (* cljs destructures [property-ident operator match] — a clause the + frontend persisted without a match keeps ident/operator and a nil + match, which eid-clause-match? treats as match-all. *) + | Vector [ Keyword k; Keyword o ] | List [ Keyword k; Keyword o ] -> + { f_ident = k; f_op = o; f_match = Nil } + | _ -> { f_ident = ""; f_op = ""; f_match = Nil } + +let parse_filters (v : value) : view_filters = + match v with + | Map [] -> no_filters + | Map kvs -> + let or_ = + match vmap_get "or?" kvs with Some (Bool b) -> b | _ -> false + in + let clauses = + match vmap_get "filters" kvs with + | Some (Vector xs) | Some (List xs) | Some (Set xs) -> + List.map parse_clause xs + | _ -> [] + in + { vf_or = or_; vf_clauses = clauses; vf_present = true } + (* cljs (seq filters) — any non-empty coll counts as "present" *) + | Set (_ :: _) | Vector (_ :: _) | List (_ :: _) -> + { vf_or = false; vf_clauses = []; vf_present = true } + | _ -> no_filters + +(* view/match-item->id *) +let match_item_id db (v : value) : entity_id option = + match v with + | Nil -> None + | Int64 i -> Datascript.Util.int64_to_int i + | Float f -> Some (int_of_float f) + | Uuid u -> uuid_to_eid db u + | Keyword k -> Db_class.ident_eid db k + | Map kvs -> + (match vmap_get "db/id" kvs with + | Some (Int64 id) -> Datascript.Util.int64_to_int id + | _ -> None) + | _ -> None + +(* view/match-item-content — keep drops nils *) +let match_item_content db (v : value) : value option = + match v with + | Nil -> None + | Uuid u -> Option.bind (uuid_to_eid db u) (ref_value_content db) + | Keyword k -> Option.bind (Db_class.ident_eid db k) (ref_value_content db) + | Int64 i -> + (match Datascript.Util.int64_to_int i with + | None -> Some v + | Some i -> + match indexed_attr_value db i "block/uuid" with + | Some _ -> ref_value_content db i + | None -> Some v) + | Map kvs -> dp_pvc_of_map kvs + | _ -> Some v + +(* view/match-journal-day *) +let match_journal_day db (m : value) : value option = + match m with + | Map kvs -> vmap_get "block/journal-day" kvs + | Ref id -> indexed_attr_value db id "block/journal-day" + | Uuid u -> + Option.bind (uuid_to_eid db u) (fun eid -> indexed_attr_value db eid "block/journal-day") + | Int64 i -> + (match Option.bind (Datascript.Util.int64_to_int i) + (fun i -> indexed_attr_value db i "block/journal-day") with + | Some d -> Some d + | None -> Some (Int64 i)) + | _ -> None + +(* view/->filter-match-id *) +let filter_match_id db (v : value) : entity_id option = + match v with + | Ref id -> Some id + | Nil -> None + | Int64 i -> Datascript.Util.int64_to_int i + | Float f -> Some (int_of_float f) + | Uuid u -> uuid_to_eid db u + | Map kvs -> + (match vmap_get "db/id" kvs with + | Some (Int64 id) -> Datascript.Util.int64_to_int id + | _ -> None) + | _ -> None + +(* view/build-fast-filter-pred — single ref :is/:is-not clause *) +let build_fast_filter_pred db (filters : view_filters) (input : string) : + (entity -> bool) option = + if Unicode.trim input <> "" || filters.vf_or then None + else + match filters.vf_clauses with + | [ { f_ident; f_op; f_match = Set items } ] + when (f_op = "is" || f_op = "is-not") + && items <> [] + && not (value_mem (Keyword "empty") items) -> + (match Ldb.ent_of_ref db (Ident f_ident) with + | Some p + when Ldb.value p "db/valueType" = Some (Keyword "db.type/ref") -> + let match_ids = List.filter_map (filter_match_id db) items in + (match match_ids with + | [] -> None + | ids -> + Some + (let id_set = + List.fold_left (fun s id -> Int_set.add id s) Int_set.empty ids + in + fun (row : entity) -> + let hit = + List.exists + (fun v -> + match filter_match_id db v with + | Some id -> Int_set.mem id id_set + | None -> false) + (row_value_list (row_get row f_ident)) + in + if f_op = "is" then hit else not hit)) + | _ -> None) + | _ -> None + +(* view/row-matched? — entity-level clause evaluation *) +let row_matched db (row : entity) (filters : view_filters) (input : string) : bool = + let title_ok = + Unicode.trim input = "" + || (match Ldb.string_value row "block/title" with + | Some t -> contains_substring (lowercase t) (lowercase input) + | None -> false) + in + title_ok + && + let check (c : filter_clause) : bool = + if c.f_match = Nil then true + else + let raw = row_get row c.f_ident in + let value' = row_value_list raw in + let entity_in_values = match value' with Ref _ :: _ -> true | _ -> false in + let prop_entity = Ldb.ent_of_ref db (Ident c.f_ident) in + let treat_as_entity vid = match_property_value_as_entity db vid prop_entity in + let uuid_hit negate = + let items = match_items c.f_match in + let found = + List.exists + (fun v -> + match v with + | Ref id -> + (match uuid_str_of_eid db id with + | Some u -> value_mem (Uuid u) items + | None -> false) + | _ -> false) + value' + in + if negate then not found else found + in + let content_hit negate = + (* set/intersection of dp-pvc maps — nils participate *) + let vc = List.map (dp_pvc_of_value db) value' in + let mc = + List.map + (fun mi -> + match mi with + | Uuid u -> dp_pvc_of_uuid db u + | _ -> dp_pvc_of_value db mi) + (match_items c.f_match) + in + let opt_eq a b = Option.equal Util.value_equal a b in + let found = List.exists (fun c -> List.exists (fun m -> opt_eq c m) mc) vc in + if negate then not found else found + in + let raw_hit negate = + let found = List.exists (fun v -> value_mem v (match_items c.f_match)) value' in + if negate then not found else found + in + match c.f_op with + | "is" -> + (match c.f_match with + | Bool m -> + (match Option.bind raw (get_property_value_content db) with + | Some pv -> cljs_truthy pv = m + | None -> not m) + | Keyword "empty" -> empty_value_opt (Db_class.ident_eid db "logseq.property/empty-placeholder") raw + | m when is_empty_coll m -> true + | _ -> + if entity_in_values then + (match value' with + | Ref vid :: _ -> + if treat_as_entity vid then uuid_hit false else content_hit false + | _ -> false) + else raw_hit false) + | "is-not" -> + (match c.f_match with + | Bool m -> + (match Option.bind raw (get_property_value_content db) with + | Some pv -> cljs_truthy pv <> m + | None -> m) + | Keyword "empty" -> not (empty_value_opt (Db_class.ident_eid db "logseq.property/empty-placeholder") raw) + | m when is_empty_coll m && value' <> [] -> true + | m when (not (is_empty_coll m)) && value' = [] -> true + | _ -> + if entity_in_values then + (match value' with + | Ref vid :: _ -> + if treat_as_entity vid then uuid_hit true else content_hit true + | _ -> true) + else raw_hit true) + | "text-contains" -> + let needle = lowercase (js_str c.f_match) in + List.exists + (fun v -> + match get_property_value_content db v with + | Some pv -> contains_substring (lowercase (js_str pv)) needle + | None -> false) + value' + | "text-not-contains" -> + let needle = lowercase (js_str c.f_match) in + not + (List.exists + (fun v -> + match get_property_value_content db v with + | Some pv -> contains_substring (lowercase (js_str pv)) needle + | None -> false) + value') + | "number-gt" | "number-gte" | "number-lt" | "number-lte" -> + (match raw with + | None | Some Nil | Some (Bool false) -> false + | Some _ -> + (match c.f_match with + | Nil -> true + | m -> + List.exists + (fun v -> + let pv = + match get_property_value_content db v with + | Some pv -> pv + | None -> Nil + in + match c.f_op with + | "number-gt" -> (match js_cmp pv m with Some c -> c > 0 | None -> false) + | "number-gte" -> (match js_cmp pv m with Some c -> c >= 0 | None -> false) + | "number-lt" -> (match js_cmp pv m with Some c -> c < 0 | None -> false) + | _ -> (match js_cmp pv m with Some c -> c <= 0 | None -> false)) + value')) + | "between" -> + (match coll_items c.f_match with + | [] -> true + | start :: rest -> + let end_ = match rest with e :: _ -> e | [] -> Nil in + List.exists + (fun v -> + let pv = + match get_property_value_content db v with + | Some pv -> pv + | None -> Nil + in + (match start with + | Nil -> true + | _ -> (match js_cmp start pv with Some c -> c <= 0 | None -> false)) + && + (match end_ with + | Nil -> true + | _ -> (match js_cmp pv end_ with Some c -> c <= 0 | None -> false))) + value') + | "date-before" | "date-after" -> + (match raw with + | None -> false + | Some _ -> + (match c.f_match with + | Nil -> true + | m -> + let mday = + match m with + | Map kvs -> + Option.value ~default:Nil + (vmap_get "block/journal-day" kvs) + | _ -> Option.value ~default:Nil (match_journal_day db m) + in + List.exists + (fun v -> + let day = + match v with + | Ref id -> Option.value ~default:Nil (indexed_attr_value db id "block/journal-day") + | _ -> Nil + in + let cmp = js_cmp day mday in + match c.f_op, cmp with + | "date-before", Some c -> c < 0 + | _, Some c -> c > 0 + | _ -> false) + value')) + | "before" | "after" -> + (match raw with + | None -> false + | Some v -> + (match get_timestamp c.f_match with + | None -> true + | Some ts -> + (match js_cmp v (Float (Time.epoch_ms_to_float ts)) with + | Some o when c.f_op = "before" -> o <= 0 + | Some o -> o >= 0 + | None -> false))) + | _ -> true + in + if filters.vf_or then List.exists check filters.vf_clauses + else List.for_all check filters.vf_clauses + +(* ---------- compiled (eid-level) filter path ---------- *) + +type attr_schema = + { s_ident : attr + ; s_type : string option + ; s_ref : bool + ; s_many : bool + ; s_closed_order : (entity_id, value) Hashtbl.t option } + +(* view/property-attr-schema *) +let property_attr_schema db (property_ident : attr) : attr_schema = + let prop_eid = Db_class.ident_eid db property_ident in + let kw_of_attr a = Option.bind prop_eid (fun e -> attr_keyword db e a) in + let kw_str = function Some (Keyword s) -> Some s | _ -> None in + let value_type = kw_of_attr "db/valueType" in + let cardinality = kw_of_attr "db/cardinality" in + let prop_type = kw_of_attr "logseq.property/type" in + let built_in_ref = + List.mem property_ident [ "block/page"; "block/tags"; "block/refs"; "block/parent" ] + in + let s_ref = + built_in_ref + || value_type = Some (Keyword "db.type/ref") + || (match kw_str prop_type with + | Some t -> List.mem t all_ref_property_types + | None -> false) + in + let closed_eids = + match prop_eid with + | Some pid -> + List.map + (fun (d : datom) -> d.e) + (List.of_seq (datoms db Avet ~a:"block/closed-value-property" ~v:(Ref pid) ())) + | None -> [] + in + let s_closed_order = + match closed_eids with + | [] -> None + | _ -> + let m = Hashtbl.create 7 in + if + List.for_all + (fun eid -> Option.is_some (indexed_attr_value db eid "block/order")) + closed_eids + then + List.iter + (fun eid -> + Hashtbl.replace m eid + (Option.value ~default:Nil (indexed_attr_value db eid "block/order"))) + closed_eids + else begin + let sorted = + List.sort + (fun a b -> + compare_scalars + (Option.value ~default:(String "") (indexed_attr_value db a "block/order")) + (Option.value ~default:(String "") (indexed_attr_value db b "block/order"))) + closed_eids + in + List.iteri (fun i eid -> Hashtbl.replace m eid (Int64 (Int64.of_int i))) sorted + end; + Some m + in + { s_ident = property_ident + ; s_type = kw_str prop_type + ; s_ref + ; s_many = + property_ident = "block/tags" + || cardinality = Some (Keyword "db.cardinality/many") + ; s_closed_order } + +(* view/eid-sort-value *) +let eid_sort_value db ~empty_id (schema : attr_schema) (eid : entity_id) : value option = + if schema.s_ident = "block.temp/refs-count" then + Some (Int64 (Int64.of_int (get_block_refs_count db eid))) + else + match List.filter (function + | Keyword "logseq.property/empty-placeholder" -> false + | Ref id when schema.s_ref && Some id = empty_id -> false + | _ -> true) (indexed_attr_values db eid schema.s_ident) with + | [] -> None + | v0 :: _ as vs -> + (match schema.s_closed_order with + | Some m -> + (match v0 with Ref id -> Hashtbl.find_opt m id | _ -> None) + | None -> + if schema.s_ref && schema.s_type = Some "date" then + (match v0 with + | Ref id -> indexed_attr_value db id "block/journal-day" + | _ -> None) + else if + schema.s_many + && (schema.s_type = Some "number" || schema.s_type = Some "datetime") + then begin + let nums = + List.filter_map + (fun v -> + let n = + match v with + | Ref id when schema.s_ref -> + (match indexed_attr_value db id "logseq.property/value" with + | Some x -> Some x + | None -> ref_value_content db id) + | _ -> Some v + in + Option.bind n strict_number_opt) + vs + in + (match nums with + | [] -> None + | _ -> Some (Float (List.fold_left ( +. ) 0. nums))) + end + else if schema.s_many then begin + let col = + List.filter_map + (fun v -> + match v with + | Ref id when schema.s_ref -> ref_value_content db id + | _ -> Some v) + vs + in + (match col with + | [] -> None + | _ -> Some (String (String.concat ", " (List.map js_str col)))) + end + else if schema.s_ref then + (match v0 with + | Ref id -> + if schema.s_type = Some "number" || schema.s_type = Some "datetime" then + (match indexed_attr_value db id "logseq.property/value" with + | Some x -> Some x + | None -> ref_value_content db id) + else ref_value_content db id + | _ -> None) + else Some v0) + +let sort_eids_by_sorting db (eids : entity_id list) (sorting : sorting_item list) : + entity_id list = + let empty_id = Db_class.ident_eid db "logseq.property/empty-placeholder" in + let sorts = + match sorting with [] -> [ { s_id = "block/updated-at"; s_asc = false } ] | s -> s + in + let schemas = + List.map (fun (s : sorting_item) -> (s.s_asc, property_attr_schema db s.s_id)) sorts + in + let value_maps = + List.map + (fun (_, sc) -> + let m = Hashtbl.create 31 in + List.iter + (fun eid -> + match eid_sort_value db ~empty_id sc eid with + | Some v -> Hashtbl.replace m eid v + | None -> ()) + eids; + m) + schemas + in + List.stable_sort + (fun a b -> + let rec loop = function + | [] -> + (* Break ties by eid in the direction of the first sort, the + order an AVET walk ([a v e], reversed when descending) + gives, so a window read from the index and a list sorted + here agree on equal values. *) + let asc0, _ = List.hd schemas in + if asc0 then compare a b else compare b a + | ((asc, _), vm) :: rest -> + let c = + compare_sort_values (Hashtbl.find_opt vm a) (Hashtbl.find_opt vm b) asc + in + if c <> 0 then c else loop rest + in + loop (List.combine schemas value_maps)) + eids + +(* view/unlimited-eid-sort-max — without a row limit, sets up to this + size sort their own eids. The AVET walk would copy the whole index of + the sort attribute (79034 updated-at datoms took 132-165ms), while + sorting reads one value per eid (a 40k All Pages window spent ~2s, + about 50us per eid). *) + +let empty_attr_values (raw : value list) (empty_id : entity_id option) : bool = + raw = [] + || List.for_all + (fun v -> + match v with + | Nil | Keyword "logseq.property/empty-placeholder" -> true + | Ref id -> (match empty_id with Some e -> id = e | None -> false) + | String s -> Unicode.trim s = "" + | List [] | Vector [] | Set [] | Map [] -> true + | _ -> false) + raw + +(* view/compile-filter-clause *) +type compiled_clause = + { c_schema : attr_schema + ; c_op : string + ; c_match : value + ; c_match_eids : entity_id list + ; c_match_contents : value list + ; c_journal_day : value option + ; c_timestamp : Time.epoch_ms option } + +let compile_filter_clause db (c : filter_clause) : compiled_clause = + let items = + match c.f_match with + | Set xs -> + if xs = [] || value_mem (Keyword "empty") xs then [] else xs + | _ -> [] + in + { c_schema = property_attr_schema db c.f_ident + ; c_op = c.f_op + ; c_match = c.f_match + ; c_match_eids = List.filter_map (match_item_id db) items + ; c_match_contents = List.filter_map (match_item_content db) items + ; c_journal_day = + (match c.f_op with + | "date-before" | "date-after" -> match_journal_day db c.f_match + | _ -> None) + ; c_timestamp = + (match c.f_op with + | "before" | "after" -> get_timestamp c.f_match + | _ -> None) } + +(* view/clause-row *) +type clause_row = + { r_raw : value list + ; r_ref : bool + ; r_contents : value list + ; r_treat_as_entity : bool + ; r_empty_values : bool } + +let clause_row db (eid : entity_id) (schema : attr_schema) (empty_id : entity_id option) : clause_row = + let raw = indexed_attr_values db eid schema.s_ident in + let first_raw = match raw with v :: _ -> Some v | [] -> None in + { r_raw = raw + ; r_ref = schema.s_ref + ; r_contents = + List.map + (fun v -> + match v with + | Ref id when schema.s_ref -> Option.value ~default:Nil (ref_value_content db id) + | _ -> v) + raw + ; r_treat_as_entity = + (match first_raw, schema.s_ref with + | Some (Ref id), true -> + Option.is_some (indexed_attr_value db id "db/ident") + || (match schema.s_type with + | Some t -> not (List.mem t closed_value_property_types) + | None -> true) + | _ -> false) + ; r_empty_values = empty_attr_values raw empty_id } + +let hits_values (vs : value list) (match_ : value list) : bool = + List.exists (fun v -> value_mem v match_) vs + +(* raw Ref/Int64 datom values matched against eid lists *) +let hits_eids (vs : value list) (eids : entity_id list) : bool = + List.exists + (fun v -> + match v with + | Ref id -> List.mem id eids + | Int64 i -> ( + match Datascript.Util.int64_to_int i with + | Some i -> List.mem i eids + | None -> false) + | _ -> false) + vs + +(* view/match-is-clause *) +let match_is_clause (row : clause_row) (c : compiled_clause) : bool = + let scalar_match = match_items c.c_match in + match c.c_match with + | Bool m -> + (match row.r_contents with + | x :: _ -> cljs_truthy x = m + | [] -> not m) + | Keyword "empty" -> row.r_empty_values + | m when is_empty_coll m -> true + | Set _ when row.r_ref -> + if row.r_treat_as_entity then hits_eids row.r_raw c.c_match_eids + else hits_values row.r_contents c.c_match_contents + | _ -> hits_values (if row.r_ref then row.r_contents else row.r_raw) scalar_match + +(* view/match-is-not-clause *) +let match_is_not_clause (row : clause_row) (c : compiled_clause) : bool = + let scalar_match = match_items c.c_match in + match c.c_match with + | Bool m -> + (match row.r_contents with + | x :: _ -> cljs_truthy x <> m + | [] -> m) + | Keyword "empty" -> not row.r_empty_values + | m when is_empty_coll m && row.r_raw <> [] -> true + | m when (not (is_empty_coll m)) && coll_items m <> [] && row.r_empty_values -> true + | Set _ when row.r_ref -> + if row.r_treat_as_entity then not (hits_eids row.r_raw c.c_match_eids) + else not (hits_values row.r_contents c.c_match_contents) + | _ -> not (hits_values (if row.r_ref then row.r_contents else row.r_raw) scalar_match) + +(* view/number-compare-match — strict cljs number? on contents, JS + coercion on match; nil match → true *) +let number_compare_match (contents : value list) (m : value) (cmp : float -> float -> bool) : bool = + match contents with + | [] -> false + | _ -> + (match m with + | Nil -> true + | _ -> + (match js_number_opt m with + | None -> false + | Some mn -> + List.exists + (fun v -> + match strict_number_opt v with + | Some cn -> cmp cn mn + | None -> false) + contents)) + +(* view/journal-day-of — cljs integer? covers datom ref values *) +let journal_day_of db (v : value) : value option = + match v with + | Ref id -> indexed_attr_value db id "block/journal-day" + | Int64 id -> + Option.bind (Datascript.Util.int64_to_int id) + (fun id -> indexed_attr_value db id "block/journal-day") + | _ -> Some v + +(* view/match-text-or-number-clause — None = unhandled *) +let match_text_or_number_clause (row : clause_row) (op : string) (m : value) : bool option = + match op with + | "text-contains" -> + let needle = lowercase (js_str m) in + Some + (List.exists + (fun v -> + match v with + | Nil -> false + | _ -> contains_substring (lowercase (js_str v)) needle) + row.r_contents) + | "text-not-contains" -> + let needle = lowercase (js_str m) in + Some + (not + (List.exists (function + | Nil -> false + | v -> contains_substring (lowercase (js_str v)) needle) row.r_contents)) + | "number-gt" -> Some (number_compare_match row.r_contents m (fun a b -> a > b)) + | "number-gte" -> Some (number_compare_match row.r_contents m (fun a b -> a >= b)) + | "number-lt" -> Some (number_compare_match row.r_contents m (fun a b -> a < b)) + | "number-lte" -> Some (number_compare_match row.r_contents m (fun a b -> a <= b)) + | "between" -> + (match coll_items m with + | [] -> Some true + | start :: rest -> + let end_ = match rest with e :: _ -> e | [] -> Nil in + Some + (List.exists + (fun v -> + match strict_number_opt v with + | Some _ -> + (match start with + | Nil -> true + | _ -> + (match js_cmp start v with + | Some c -> c <= 0 + | None -> false)) + && + (match end_ with + | Nil -> true + | _ -> + (match js_cmp v end_ with + | Some c -> c <= 0 + | None -> false)) + | None -> false) + row.r_contents)) + | _ -> None + +(* view/match-temporal-clause *) +let match_temporal_clause db (row : clause_row) (op : string) (m : value) + (journal_day : value option) (timestamp : Time.epoch_ms option) : bool = + match op with + | "date-before" | "date-after" -> + (match row.r_raw with + | [] -> false + | _ -> + (match m with + | Nil -> true + | _ -> + (match journal_day with + | None -> false + | Some jd -> + List.exists + (fun v -> + match journal_day_of db v, jd with + | Some d, jd -> + (match d, jd with + | Int64 d, Int64 jd -> + if op = "date-before" then d < jd else d > jd + | _ -> false) + | None, _ -> false) + row.r_raw))) + | "before" | "after" -> + (match row.r_raw with + | [] -> false + | _ -> + (match timestamp with + | None -> true + | Some ts -> + let tsf = Time.epoch_ms_to_float ts in + let vs = if row.r_ref then row.r_contents else row.r_raw in + List.exists + (fun v -> + match strict_number_opt v with + | Some n -> if op = "before" then n <= tsf else n >= tsf + | None -> false) + vs)) + | _ -> true + +(* view/match-compare-clause *) +let match_compare_clause db (row : clause_row) (op : string) (m : value) + (journal_day : value option) (timestamp : Time.epoch_ms option) : bool = + match match_text_or_number_clause row op m with + | Some r -> r + | None -> match_temporal_clause db row op m journal_day timestamp + +(* view/eid-clause-match? *) +let eid_clause_match db (eid : entity_id) (c : compiled_clause) (empty_id : entity_id option) : bool = + if c.c_match = Nil then true + else + let row = clause_row db eid c.c_schema empty_id in + match c.c_op with + | "is" -> match_is_clause row c + | "is-not" -> match_is_not_clause row c + | op -> match_compare_clause db row op c.c_match c.c_journal_day c.c_timestamp + +(* view/title-matches-input? *) +let title_matches_input db (eid : entity_id) (input : string) : bool = + Unicode.trim input = "" + || (match indexed_attr_value db eid "block/title" with + | Some (String t) -> contains_substring (lowercase t) (lowercase input) + | Some v -> contains_substring (lowercase (js_str v)) (lowercase input) + | None -> false) + +(* view/filter-eids *) +let filter_eids db (eids : entity_id list) (filters : view_filters) (input : string) : + entity_id list = + let clauses = filters.vf_clauses in + if Unicode.trim input = "" && clauses = [] then eids + else begin + let compiled = List.map (compile_filter_clause db) clauses in + let empty_id = Db_class.ident_eid db "logseq.property/empty-placeholder" in + let check = + if filters.vf_or then List.exists else List.for_all + in + List.filter + (fun eid -> + title_matches_input db eid input + && (compiled = [] + || check (fun c -> eid_clause_match db eid c empty_id) compiled)) + eids + end + +(* view/get-feature-row-data *) diff --git a/shared/src/logseq/core/dev_view.mli b/shared/src/logseq/core/dev_view.mli new file mode 100644 index 00000000..824bf6ec --- /dev/null +++ b/shared/src/logseq/core/dev_view.mli @@ -0,0 +1,12 @@ +(** Filtering and sorting extracted from the upstream native worker. *) +type sorting_item = { s_id : Datascript.attr; s_asc : bool } +type filter_clause = { f_ident : Datascript.attr; f_op : string; f_match : Datascript.value } +type view_filters = { vf_or : bool; vf_clauses : filter_clause list; vf_present : bool } +val sorting_of_value : Datascript.value -> sorting_item list +val parse_filters : Datascript.value -> view_filters +val build_fast_filter_pred : Datascript.db -> view_filters -> string -> (Datascript.entity -> bool) option +val row_matched : Datascript.db -> Datascript.entity -> view_filters -> string -> bool +val sort_entities : Datascript.db -> sorting_item list -> Datascript.entity list -> Datascript.entity list +val filter_eids : Datascript.db -> Datascript.entity_id list -> view_filters -> string -> Datascript.entity_id list +val sort_eids_by_sorting : Datascript.db -> Datascript.entity_id list -> sorting_item list -> Datascript.entity_id list +val property_object_eids : Datascript.db -> string -> Datascript.entity_id list diff --git a/shared/src/logseq/core/graph_read.ml b/shared/src/logseq/core/graph_read.ml index 3962ed60..99adf58e 100644 --- a/shared/src/logseq/core/graph_read.ml +++ b/shared/src/logseq/core/graph_read.ml @@ -210,6 +210,26 @@ let choice_for_eid decrypt_title db eid property = else None | None -> None +let property_choices decrypt_title db property = + match Ds.entid db "db/ident" (Ds.Keyword property) with + | None -> [] + | Some property_eid -> + Datascript_value.datoms_by_ref db Ds.Aevt "block/closed-value-property" property_eid + |> Seq.map (fun (datom : Ds.datom) -> datom.e) + |> List.of_seq + |> List.sort (fun a b -> compare (string_value (value db a "block/order"), a) + (string_value (value db b "block/order"), b)) + |> List.filter_map (fun eid -> + Option.map (fun uuid -> + let ident = match value db eid "db/ident" with Some (Ds.Keyword ident) -> Some ident | _ -> None in + let title = Option.value ~default:uuid (protected_string decrypt_title (value db eid "block/title")) in + let icon_field field = match value db eid "logseq.property/icon" with + | Some (Ds.Map fields) -> (match List.assoc_opt (Ds.Keyword field) fields with + | Some (Ds.String text) | Some (Ds.Keyword text) -> Some text | _ -> None) + | _ -> None in + {Model.uuid; ident; title; icon_type = icon_field "type"; icon_id = icon_field "id"; icon_color = icon_field "color"}) + (uuid_for_eid db eid)) + let status_for_eid decrypt_title db eid = choice_for_eid decrypt_title db eid "logseq.property/status" diff --git a/shared/src/logseq/core/graph_read.mli b/shared/src/logseq/core/graph_read.mli index 6962d827..85eac14c 100644 --- a/shared/src/logseq/core/graph_read.mli +++ b/shared/src/logseq/core/graph_read.mli @@ -151,3 +151,5 @@ val blocks : Cache_model.block list val node_icon : Datascript.db -> string -> Yojson.Basic.t option + +val property_choices : (string -> (string, string) result) -> Datascript.db -> string -> Cache_model.status list diff --git a/shared/src/logseq/core/mobile_graph.ml b/shared/src/logseq/core/mobile_graph.ml index 87902745..64abeccb 100644 --- a/shared/src/logseq/core/mobile_graph.ml +++ b/shared/src/logseq/core/mobile_graph.ml @@ -47,6 +47,9 @@ let sync_cursor (host : mobile_graph) = | Some opened -> Some (Sync.applied_server_t opened.state) | None -> None +let projected_db (host : mobile_graph) = + Option.map (fun opened -> Runtime.db opened.read_runtime) !(host.current) + let blocks (host : mobile_graph) = match !(host.current) with | Some opened -> Some (Runtime.blocks opened.read_runtime) diff --git a/shared/src/logseq/core/mobile_graph.mli b/shared/src/logseq/core/mobile_graph.mli index cffb1632..912b726d 100644 --- a/shared/src/logseq/core/mobile_graph.mli +++ b/shared/src/logseq/core/mobile_graph.mli @@ -29,6 +29,7 @@ val import_asset_file : mobile_graph -> string -> string -> (string, string) res val resolve_asset_path : mobile_graph -> string -> string val sync_cursor : mobile_graph -> int option val blocks : mobile_graph -> Cache_model.block list option +val projected_db : mobile_graph -> Datascript.db option val authoritative_blocks : mobile_graph -> Cache_model.block list option val sidebar_pages : mobile_graph -> Graph_read.sidebar_pages option val tag_pages : mobile_graph -> Cache_model.entity_summary list option diff --git a/shared/src/logseq/core/mobile_session.ml b/shared/src/logseq/core/mobile_session.ml index 97e21f3d..432f82a2 100644 --- a/shared/src/logseq/core/mobile_session.ml +++ b/shared/src/logseq/core/mobile_session.ml @@ -63,6 +63,7 @@ let host_options (database : Database.mobile_database) ring catalog = Some (fun body -> Graph.apply_sync_event graph body); sync_cursor = Some (fun () -> Graph.sync_cursor graph); graph_blocks = Some (fun () -> Graph.blocks graph); + graph_db = Some (fun () -> Graph.projected_db graph); authoritative_graph_blocks = Some (fun () -> Graph.authoritative_blocks graph); graph_sidebar_pages = Some (fun () -> Graph.sidebar_pages graph); diff --git a/shared/src/logseq/core/outliner_effects.ml b/shared/src/logseq/core/outliner_effects.ml index 1ef48dc8..f8fc32f0 100644 --- a/shared/src/logseq/core/outliner_effects.ml +++ b/shared/src/logseq/core/outliner_effects.ml @@ -190,6 +190,15 @@ let command base_t now fresh_uuid context cmd = ] []) | None -> Error "task block no longer exists") + | State.Set_task_priority_value value -> + (match find_block context value.State.priority_uuid with + | Some block -> + Ok (result [operation base_t fresh_uuid (Ops.Set_property { + uuid = value.priority_uuid; attr = "logseq.property/priority"; + expected = Option.map status_reference block.Model.priority; + value = value.priority; + })] []) + | None -> Error "task block no longer exists") | State.Create_linked_page title -> let title = String_kit.trim title in if title = "" then Error "page title must not be empty" diff --git a/shared/src/logseq/core/outliner_state.ml b/shared/src/logseq/core/outliner_state.ml index 158b872f..da8962ab 100644 --- a/shared/src/logseq/core/outliner_state.ml +++ b/shared/src/logseq/core/outliner_state.ml @@ -79,6 +79,11 @@ type outliner_status = ; status : Ops.semantic_value } +type outliner_priority = + { priority_uuid : string + ; priority : Ops.semantic_value option + } + type outliner_message = | Tap_block of string | Long_press_block of string @@ -95,6 +100,7 @@ type outliner_message = | Save_editing | Cancel_editing | Set_task_status of outliner_status + | Set_task_priority of outliner_priority | Toggle_collapsed of string | Zoom_in of string | Zoom_out @@ -137,6 +143,7 @@ type outliner_command = | Remove_blocks of string list | Cycle_task_status of string | Set_task_status_value of outliner_status + | Set_task_priority_value of outliner_priority | Create_linked_page of string | Assign_tag of outliner_tag | Pick_attachment of string @@ -1406,6 +1413,8 @@ let update context (state : outliner_state) message = { state with selected = Sset.empty } [ Reparent_blocks moves; Haptic Impact ] | None -> step state []) + | Set_task_priority value -> + step state [ Set_task_priority_value value; Haptic Impact ] | Set_task_status value -> step state [ Set_task_status_value value; Haptic Impact ] | Toggle_collapsed uuid -> diff --git a/shared/src/logseq/core/outliner_state.mli b/shared/src/logseq/core/outliner_state.mli index 643f2042..b8d0d054 100644 --- a/shared/src/logseq/core/outliner_state.mli +++ b/shared/src/logseq/core/outliner_state.mli @@ -76,6 +76,11 @@ type outliner_status = ; status : Pending_ops.semantic_value } +type outliner_priority = + { priority_uuid : string + ; priority : Pending_ops.semantic_value option + } + type outliner_message = | Tap_block of string | Long_press_block of string @@ -92,6 +97,7 @@ type outliner_message = | Save_editing | Cancel_editing | Set_task_status of outliner_status + | Set_task_priority of outliner_priority | Toggle_collapsed of string | Zoom_in of string | Zoom_out @@ -134,6 +140,7 @@ type outliner_command = | Remove_blocks of string list | Cycle_task_status of string | Set_task_status_value of outliner_status + | Set_task_priority_value of outliner_priority | Create_linked_page of string | Assign_tag of outliner_tag | Pick_attachment of string diff --git a/shared/src/logseq/core/pending_ops.ml b/shared/src/logseq/core/pending_ops.ml index 8a5623cf..a2029c35 100644 --- a/shared/src/logseq/core/pending_ops.ml +++ b/shared/src/logseq/core/pending_ops.ml @@ -10,6 +10,10 @@ type pending_state = | Conflicted of string type semantic_value = + | Nil_value + | Uuid_value of string + | Vector_value of semantic_value list + | Set_value of semantic_value list | String_value of string | Int_value of int | Instant_value of int @@ -23,6 +27,12 @@ type semantic_value = let rec semantic_value_from_datascript input = let ( let* ) = Result.bind in match input with + | Ds.Nil -> Ok Nil_value + | Ds.Uuid value -> Ok (Uuid_value value) + | Ds.Vector values | Ds.Set values -> + let* converted = List.fold_left (fun result value -> + let* acc = result in let* value = semantic_value_from_datascript value in Ok (value :: acc)) (Ok []) values in + Ok (match input with Ds.Set _ -> Set_value (List.rev converted) | _ -> Vector_value (List.rev converted)) | Ds.String value -> Ok (String_value value) | Ds.Int64 value -> Ok (Int_value (Int64.to_int value)) | Ds.Instant value -> Ok (Instant_value (Int64.to_int value)) @@ -39,12 +49,12 @@ let rec semantic_value_from_datascript input = let* converted_value = semantic_value_from_datascript native_value in - Ok (acc @ [ (name, converted_value) ]) - | _ -> Error "flashcard state contains a non-keyword key") + Ok ((name, converted_value) :: acc) + | _ -> Error "semantic map contains a non-keyword key") (Ok []) entries in - Ok (Map_value converted) - | _ -> Error "flashcard state contains an unsupported value" + Ok (Map_value (List.rev converted)) + | _ -> Error "unsupported semantic value" type property_change = { attr : string @@ -159,7 +169,17 @@ type pending_page_delete = ; deleted_at : int } +type pending_property_value = + { uuid : string + ; owner_uuid : string + ; property_ident : string + ; content : semantic_value + ; created_at : int + } + type pending_intent = + | Atomic of pending_intent list + | Create_property_value of pending_property_value | Save_title of pending_title | Set_property of pending_property | Set_properties of pending_properties @@ -228,10 +248,15 @@ let normalize_property_change (change : property_change) = value = normalize_optional_value change.attr change.value; } -let normalize_operation db operation = +let rec normalize_operation db operation = let ( let* ) = Result.bind in let* intent = match operation.intent with + | Atomic intents -> + let* normalized = List.fold_left (fun result intent -> + let* acc = result in let* next = normalize_operation db {operation with intent} in + Ok (next.intent :: acc)) (Ok []) intents in + Ok (Atomic (List.rev normalized)) | Save_title value -> let* expected = normalize_expected_title db value.uuid value.expected_title @@ -315,8 +340,9 @@ let search_visible_property attr = "logseq.property/deleted-at"; ] -let affected_uuids db intent = +let rec affected_uuids db intent = match intent with + | Atomic intents -> List.concat_map (affected_uuids db) intents |> List.sort_uniq String.compare | Set_property value -> if search_visible_property value.attr then [ value.uuid ] else [] | Set_properties value -> if @@ -325,6 +351,7 @@ let affected_uuids db intent = value.changes then [ value.uuid ] else [] + | Create_property_value value -> [ value.uuid ] | Save_title value -> [ value.uuid ] | Insert_block value -> [ value.uuid ] | Create_asset value -> value.uuid :: (match value.transcript with Some child -> [child.uuid] | None -> []) @@ -340,9 +367,10 @@ let affected_uuids db intent = | Set_favorite value -> [ value.page_uuid; value.favorite_uuid ] | Delete_page value -> [ value.page_uuid ] -let safe_to_rebase intent = +let rec safe_to_rebase intent = match intent with - | Save_title _ | Set_property _ | Set_properties _ | Split_block _ + | Atomic intents -> List.for_all safe_to_rebase intents + | Create_property_value _ | Save_title _ | Set_property _ | Set_properties _ | Split_block _ | Merge_backward _ | Create_tag _ | Create_page _ | Create_journal _ | Add_tag _ | Insert_block _ | Create_asset _ | Move_block _ | Move_blocks _ | Set_favorite _ | Delete_page _ -> true @@ -383,7 +411,7 @@ let remove_raw = Graph_sqlite.remove_pending let outliner_op intent = match intent with - | Save_title _ | Set_property _ | Set_properties _ | Create_tag _ + | Atomic _ | Create_property_value _ | Save_title _ | Set_property _ | Set_properties _ | Create_tag _ | Create_page _ | Add_tag _ -> "save-block" | Insert_block _ | Create_asset _ | Create_journal _ -> "insert-blocks" | Set_favorite value -> if value.favorite then "insert-blocks" else "delete-blocks" @@ -427,6 +455,10 @@ let option_value f value = let rec semantic_value_json value = let kind, value = match value with + | Nil_value -> ("nil", `Null) + | Uuid_value value -> ("uuid", `String value) + | Vector_value values -> ("vector", `List (List.map semantic_value_json values)) + | Set_value values -> ("set", `List (List.map semantic_value_json values)) | String_value value -> ("string", `String value) | Int_value value -> ("int", `Int value) | Instant_value value -> ("instant", `Int value) @@ -455,6 +487,10 @@ let rec semantic_value_of_json input = match object_fields input "invalid pending semantic value" with | [ ("type", `String kind); ("value", value) ] -> (match (kind, value) with + | "nil", `Null -> Nil_value + | "uuid", `String value -> Uuid_value value + | "vector", `List values -> Vector_value (List.map semantic_value_of_json values) + | "set", `List values -> Set_value (List.map semantic_value_of_json values) | "string", `String value -> String_value value | "int", `Int value -> Int_value value | "instant", `Int value -> Instant_value value @@ -560,9 +596,14 @@ let insert_fields (value : pending_insert) = ("createdAt", `Int value.created_at); ] -let intent_json intent = +let rec intent_json intent = let kind, fields = match intent with + | Atomic intents -> ("atomic", ["intents", `List (List.map intent_json intents)]) + | Create_property_value value -> ("create-property-value", [ + "uuid", `String value.uuid; "ownerUuid", `String value.owner_uuid; + "propertyIdent", `String value.property_ident; "content", semantic_value_json value.content; + "createdAt", `Int value.created_at]) | Save_title value -> ( "save-title" , [ @@ -685,9 +726,10 @@ let merged_title fields = | None -> None | _ -> invalid_arg "invalid pending intent field: mergedTitle" -let intent_of_json input = +let rec intent_of_json input = let fields = object_fields input "pending intent must be an object" in match string_field fields "type" with + | "atomic" -> Atomic (List.map intent_of_json (array_field fields "intents")) | "save-title" -> Save_title { @@ -709,6 +751,11 @@ let intent_of_json input = uuid = string_field fields "uuid"; changes = List.map change_of_json (array_field fields "changes"); } + | "create-property-value" -> + Create_property_value {uuid = string_field fields "uuid"; + owner_uuid = string_field fields "ownerUuid"; property_ident = string_field fields "propertyIdent"; + content = semantic_value_of_json (Option.get (field fields "content")); + created_at = int_field fields "createdAt"} | "insert-block" -> Insert_block { diff --git a/shared/src/logseq/core/pending_ops.mli b/shared/src/logseq/core/pending_ops.mli index df70da6e..8601e21b 100644 --- a/shared/src/logseq/core/pending_ops.mli +++ b/shared/src/logseq/core/pending_ops.mli @@ -10,6 +10,10 @@ type pending_state = | Conflicted of string type semantic_value = + | Nil_value + | Uuid_value of string + | Vector_value of semantic_value list + | Set_value of semantic_value list | String_value of string | Int_value of int | Instant_value of int @@ -133,7 +137,17 @@ type pending_page_delete = ; deleted_at : int } +type pending_property_value = + { uuid : string + ; owner_uuid : string + ; property_ident : string + ; content : semantic_value + ; created_at : int + } + type pending_intent = + | Atomic of pending_intent list + | Create_property_value of pending_property_value | Save_title of pending_title | Set_property of pending_property | Set_properties of pending_properties diff --git a/shared/src/logseq/core/pending_projection.ml b/shared/src/logseq/core/pending_projection.ml index 771e8978..88e066bb 100644 --- a/shared/src/logseq/core/pending_projection.ml +++ b/shared/src/logseq/core/pending_projection.ml @@ -59,6 +59,10 @@ let favorite_block_eid db page_uuid = let rec datascript_value (value : Ops.semantic_value) : Ds.value = match value with + | Ops.Nil_value -> Ds.Nil + | Ops.Uuid_value uuid -> Ds.Uuid uuid + | Ops.Vector_value values -> Ds.Vector (List.map datascript_value values) + | Ops.Set_value values -> Ds.Set (List.map datascript_value values) | Ops.String_value value -> Ds.String value | Ops.Int_value value -> Ds.Int64 (Int64.of_int value) | Ops.Instant_value value -> Ds.Instant (Int64.of_int value) @@ -76,6 +80,13 @@ let rec datascript_value (value : Ops.semantic_value) : Ds.value = let rec semantic_value_equal_value db left right = match (left, right) with + | Ds.Nil, Ops.Nil_value -> true + | Ds.Uuid value, Ops.Uuid_value expected -> value = expected + | Ds.Vector values, Ops.Vector_value expected -> + List.length values = List.length expected && List.for_all2 (semantic_value_equal_value db) values expected + | Ds.Set values, Ops.Set_value expected -> + List.length values = List.length expected && List.for_all (fun expected -> + List.exists (fun value -> semantic_value_equal_value db value expected) values) expected | Ds.String value, Ops.String_value expected -> value = expected | Ds.Int64 value, Ops.Int_value expected -> Int64.equal value (Int64.of_int expected) | Ds.Instant value, Ops.Instant_value expected -> Int64.equal value (Int64.of_int expected) @@ -313,11 +324,40 @@ let page_entity db eid = let would_create_cycle db moving_eid parent_eid = List.exists (fun eid -> eid = parent_eid) (subtree db [ moving_eid ]) -let property_tx uuid attr value = - match value with +let property_tx uuid attr = function | Some value -> Ds.Add (lookup uuid, attr, datascript_value value) | None -> Ds.RetractAttr (lookup uuid, attr) +let property_value db reference attr = + match Ds.entity db reference with + | Some entity -> (match Entity.entity_attr_raw entity attr with + | Some (Ds.One_value value) -> Some value + | Some (Ds.Many_values values) when values <> [] -> Some (Ds.Set values) + | _ -> None) + | None -> None + +let property_txs db uuid attr value = + let many = Option.fold ~none:false ~some:(fun spec -> spec.Ds.cardinality = Ds.Many) + (List.assoc_opt attr db.Ds.schema) in + match many, value with + | true, Some (Ops.Set_value values) -> + Ds.RetractAttr (lookup uuid, attr) :: List.map (fun value -> + Ds.Add (lookup uuid, attr, datascript_value value)) values + | _, value -> [property_tx uuid attr value] + +let property_value_attrs db (value : Ops.pending_property_value) = + let owner = lookup value.owner_uuid in + let page = Option.value ~default:(Ds.Ref_to owner) (one_value db owner "block/page") in + let content_attr = match value.content with Ops.String_value _ -> "block/title" | _ -> "logseq.property/value" in + ["block/uuid", Ds.One_value (Ds.Uuid value.uuid); + "block/page", Ds.One_value page; + "block/parent", Ds.One_value (Ds.Ref_to owner); + "block/order", Ds.One_value (Ds.String (Result.get_ok (Fractional_order.between None None))); + "logseq.property/created-from-property", Ds.One_value (Ds.Ref_to (Ds.Ident value.property_ident)); + content_attr, Ds.One_value (datascript_value value.content); + "block/created-at", Ds.One_value (Ds.Int64 (Int64.of_int value.created_at)); + "block/updated-at", Ds.One_value (Ds.Int64 (Int64.of_int value.created_at))] + let create_attrs db uuid title created_at = let attrs = [ ("block/uuid", Ds.One_value (Ds.Uuid uuid)) ; ( "block/name" @@ -332,6 +372,21 @@ let create_attrs db uuid title created_at = let rec compile db (intent : Ops.pending_intent) = match intent with + | Ops.Atomic intents -> + if intents = [] then Error "atomic operation cannot be empty" + else + let ( let* ) = Result.bind in + let* _, reversed = List.fold_left (fun result intent -> + let* projected, reversed = result in + let* tx = compile projected intent in + try Ok (Ds.db_with tx projected, List.rev_append tx reversed) + with error -> Error (Printexc.to_string error)) (Ok (db, [])) intents in + Ok (List.rev reversed) + | Ops.Create_property_value value -> + if Ds.entid db "block/uuid" (Ds.Uuid value.uuid) <> None then Error "property value UUID already exists" + else if Ds.entid db "block/uuid" (Ds.Uuid value.owner_uuid) = None then Error "property owner no longer exists" + else if Ds.entid db "db/ident" (Ds.Keyword value.property_ident) = None then Error "property no longer exists" + else Ok [entity_tx (Ds.Temp_id ("pending/" ^ value.uuid)) (property_value_attrs db value)] | Ops.Save_title value -> (match string_value (one_value db (lookup value.uuid) "block/title") @@ -347,10 +402,10 @@ let rec compile db (intent : Ops.pending_intent) = else if not (semantic_value_equal db - (one_value db (lookup value.uuid) value.attr) + (property_value db (lookup value.uuid) value.attr) value.expected) then Error "property changed on the server" - else Ok [ property_tx value.uuid value.attr value.value ] + else Ok (property_txs db value.uuid value.attr value.value) | Ops.Set_properties value -> if value.changes = [] then Error "property changes cannot be empty" @@ -361,15 +416,15 @@ let rec compile db (intent : Ops.pending_intent) = (List.for_all (fun (change : Ops.property_change) -> semantic_value_equal db - (one_value db (lookup value.uuid) change.attr) + (property_value db (lookup value.uuid) change.attr) change.expected) value.changes) then Error "property changed on the server" else Ok - (List.map + (List.concat_map (fun (change : Ops.property_change) -> - property_tx value.uuid change.attr change.value) + property_txs db value.uuid change.attr change.value) value.changes) | Ops.Insert_block value -> if Ds.entid db "block/uuid" (Ds.Uuid value.uuid) <> None then @@ -770,19 +825,26 @@ let block_location_matches db uuid page_uuid parent_uuid order = let rec satisfied db (intent : Ops.pending_intent) = match intent with + | Ops.Atomic intents -> intents <> [] && List.for_all (satisfied db) intents + | Ops.Create_property_value value -> + let content_attr = match value.content with Ops.String_value _ -> "block/title" | _ -> "logseq.property/value" in + semantic_value_equal db (one_value db (lookup value.uuid) content_attr) (Some value.content) + && semantic_value_equal db (one_value db (lookup value.uuid) "block/parent") (Some (Ops.Ref_uuid value.owner_uuid)) + && semantic_value_equal db (one_value db (lookup value.uuid) "logseq.property/created-from-property") + (Some (Ops.Ref_ident value.property_ident)) | Ops.Save_title value -> string_value (one_value db (lookup value.uuid) "block/title") = Some value.title | Ops.Set_property value -> semantic_value_equal db - (one_value db (lookup value.uuid) value.attr) + (property_value db (lookup value.uuid) value.attr) value.value | Ops.Set_properties value -> value.changes <> [] && List.for_all (fun (change : Ops.property_change) -> semantic_value_equal db - (one_value db (lookup value.uuid) change.attr) + (property_value db (lookup value.uuid) change.attr) change.value) value.changes | Ops.Insert_block value -> diff --git a/shared/src/logseq/core/query_block.ml b/shared/src/logseq/core/query_block.ml new file mode 100644 index 00000000..4a828cdd --- /dev/null +++ b/shared/src/logseq/core/query_block.ml @@ -0,0 +1,200 @@ +module Ds = Datascript +module Dev = Dev_query +module Wire = Dev.Wire +module Graph = Graph_read + +type row = Block of Cache_model.block | Cells of string list +type result = {kind : string; source : string; rows : row list; error : string option} + +let field key = function + | Ds.QueryFormMap fields -> List.assoc_opt (Ds.QueryFormKeyword key) fields + | _ -> None + +let forms = function + | Some (Ds.QueryFormList xs | Ds.QueryFormVector xs | Ds.QueryFormSet xs) -> xs + | _ -> [] + +let rec pulled_value = function + | Ds.Pulled_scalar value -> value + | Ds.Pulled_many values -> Ds.Vector (List.map pulled_value values) + | Ds.Pulled_entity entity -> pulled_entity entity +and pulled_entity entity = + Ds.Map ((Ds.Keyword "db/id", Ds.Int64 (Int64.of_int entity.Ds.pulled_id)) :: + List.map (fun (key, value) -> key, pulled_value value) entity.pulled_attrs) + +let wire_cell = function + | Ds.Result_entity eid -> Wire.Tagged ("datascript/Entity", Wire.Int eid) + | Ds.Result_pull entity -> Dev.Ds_wire.transit_of_value (pulled_entity entity) + | Ds.Result_value value -> Dev.Ds_wire.transit_of_value value + | Ds.Result_attr attr -> Wire.Keyword attr + | Ds.Result_db _ -> Wire.String "" + +let cell_eid db = function + | Wire.Tagged ("datascript/Entity", Wire.Int eid) -> Some eid + | Wire.Map fields -> + (match List.assoc_opt (Wire.Keyword "block/uuid") fields with + | Some (Wire.Uuid uuid) -> Ds.entid db "block/uuid" (Ds.Uuid uuid) + | _ -> (match List.assoc_opt (Wire.Keyword "db/id") fields with + | Some (Wire.Int eid) -> Some eid + | Some (Wire.Int64 eid) -> Some (Int64.to_int eid) + | _ -> None)) + | _ -> None + +let eid_of_result = function + | Ds.Result_entity eid -> Some eid + | Ds.Result_pull entity -> Some entity.Ds.pulled_id + | _ -> None + +let hidden db eid = + Graph.page_is_hidden db eid + +let block db eid = + match Graph.page_block (fun text -> Ok text) db eid with + | Some value -> Some value + | None -> Graph.block ~with_breadcrumbs:true (fun text -> Ok text) db eid + +let cell_text db cell = + match cell_eid db cell with + | Some eid -> Option.value ~default:(string_of_int eid) + (Graph.string_value (Graph.value db eid "block/title")) + | None -> + let value = Dev.Ds_wire.value_of_transit cell in + match value with Ds.String text -> text | _ -> Dev.Edn_util.pr_str value + +let normalize_rows db wire_rows = + List.map (fun row -> + let cells = match row with Wire.Array xs | Wire.List xs -> xs | value -> [value] in + match cells with + | [cell] -> + (match Option.bind (cell_eid db cell) (block db) with + | Some value -> Block value + | None -> Cells [cell_text db cell]) + | _ -> Cells (List.map (cell_text db) cells)) wire_rows + +let filter_rows db owner definition remove_children rows = + let rows = List.filter (function + | [cell] -> (match eid_of_result cell with + | Some eid -> eid <> owner && eid <> definition && not (hidden db eid) + | None -> true) + | _ -> true) rows in + let ids = Hashtbl.create (List.length rows) in + List.iter (function [cell] -> Option.iter (fun id -> Hashtbl.replace ids id ()) (eid_of_result cell) + | _ -> ()) rows; + let nested eid = + let seen = Hashtbl.create 8 in + let rec walk eid = + if Hashtbl.mem seen eid then false + else begin + Hashtbl.add seen eid (); + match Graph.ref_eids db eid "block/parent" with + | parent :: _ when parent <> eid -> Hashtbl.mem ids parent || walk parent + | _ -> false + end + in walk eid + in + List.filter (function + | [cell] -> (match eid_of_result cell with + | Some eid -> not remove_children || not (nested eid) + | None -> true) + | _ -> true) rows + +let source_for db definition = + Option.value ~default:"" (Graph.string_value (Graph.value db definition "block/title")) + +let execute ?current_page db owner definition source = + let day = Cache_model.journal_day_for_ms (int_of_float (Unix.gettimeofday () *. 1000.)) in + let opts : Dev.Db_query_dsl.exec_opts = { + opt_cards = Graph.entity_is_instance_of db owner "logseq.class/Cards"; + opt_block_attrs = Some "[*]"; + opt_current_page_title = current_page; + opt_today_day = Dev.Time.local_date_of_journal_day (Dev.Time.local_tz ()) day; + } in + let advanced = try Some (Ds.Parser.read_edn source) with _ -> None in + let config = match advanced with Some (Ds.QueryFormMap _ as form) -> Some form | _ -> None in + let kind = if Option.is_some config then "advanced" else "simple" in + if String.trim source = "" then {kind; source; rows = []; error = None} + else + let query_rows, transform, remove_children = match config with + | Some config -> + List.iter (fun name -> match field name config with + | None | Some (Ds.QueryFormVector _ | Ds.QueryFormList _) -> () + | _ -> invalid_arg ("Advanced query :" ^ name ^ " must be a sequence")) ["inputs"; "rules"]; + (match field "remove-block-children?" config with + | None | Some (Ds.QueryFormBool _) -> () + | _ -> invalid_arg "Advanced query :remove-block-children? must be a boolean"); + if Option.is_some (field "view" config) then + invalid_arg "Custom Hiccup query views are not supported on mobile"; + let query_form = match field "query" config with + | Some value -> value | None -> invalid_arg "Advanced query requires :query" in + let rows = match query_form with + | Ds.QueryFormVector (Ds.QueryFormKeyword "find" :: _ as query) -> + let ctx = [Wire.Keyword "current-block-uuid", Wire.Uuid (Option.get (Graph.uuid_for_eid db owner)); + Wire.Keyword "today-day", Wire.Int day] + @ (match current_page with Some title -> [Wire.Keyword "current-page-title", Wire.String title] | None -> []) in + let inputs = forms (field "inputs" config) |> List.map (fun f -> + Dev.Ds_wire.transit_of_value (Dev.Edn_util.read_string (Dev.Ds_wire.edn_of_query_form f))) in + Dev.execute_custom_query_typed db query inputs (forms (field "rules" config)) ctx + | _ -> (match Dev.Db_query_dsl.execute_query db (Dev.Ds_wire.edn_of_query_form query_form) opts with + | Some rows -> rows | None -> invalid_arg "Invalid query DSL") in + rows, field "result-transform" config, field "remove-block-children?" config <> Some (Ds.QueryFormBool false) + | None -> + (match Dev.Db_query_dsl.execute_query db source opts with + | Some rows -> rows, None, true + | None -> invalid_arg "Invalid query DSL") in + let rows = filter_rows db owner definition remove_children query_rows in + let block_results = List.for_all (function [cell] -> Option.is_some (eid_of_result cell) | _ -> false) rows in + let wire_rows = match transform with + | Some form -> + let encoded = List.map (fun row -> if block_results then wire_cell (List.hd row) + else Wire.Array (List.map wire_cell row)) rows in + let entity_attr eid attr = Option.value ~default:Ds.Nil (Graph.value db eid attr) in + (match Dev.Edn_eval.apply_edn ~entity_attr (Dev.Ds_wire.edn_of_query_form form) encoded with + | Wire.Array xs | Wire.List xs | Wire.Set xs -> xs + | _ -> invalid_arg "Query result transform must return a collection") + | None -> List.map (fun row -> Wire.Array (List.map wire_cell row)) rows in + {kind; source; rows = normalize_rows db wire_rows; error = None} + +let is_query db uuid = + match Ds.entid db "block/uuid" (Ds.Uuid uuid) with + | None -> false + | Some eid -> Graph.ref_eids db eid "logseq.property/query" <> [] + || Graph.entity_is_instance_of db eid "logseq.class/Query" + +let render ?current_page db uuid = + match Ds.entid db "block/uuid" (Ds.Uuid uuid) with + | None -> None + | Some eid -> + let definitions = Graph.ref_eids db eid "logseq.property/query" in + if definitions = [] && not (Graph.entity_is_instance_of db eid "logseq.class/Query") then None + else + let source = ref "" in + try + let definition = match definitions with + | id :: _ -> id | [] -> invalid_arg "Query definition is missing" in + source := source_for db definition; + let current_page = match current_page with Some _ -> current_page | None -> + Option.bind (List.nth_opt (Graph.ref_eids db eid "block/page") 0) + (fun page -> Graph.string_value (Graph.value db page "block/title")) in + Some (execute ?current_page db eid definition !source) + with error -> + let message = match error with Invalid_argument message | Failure message -> message + | _ -> Printexc.to_string error in + Some {kind = "error"; source = !source; rows = []; error = Some message} + +let owner_uuids db = + let ids = Hashtbl.create 8 in + let add (datom : Ds.datom) = Hashtbl.replace ids datom.e () in + Seq.iter add (Ds.Db.datoms db Ds.Aevt ~a:"logseq.property/query" ()); + Option.iter (fun query_class -> + List.iter (fun id -> Seq.iter add (Datascript_value.datoms_by_ref db Ds.Aevt "block/tags" id)) + (Graph.class_descendants db query_class)) + (Ds.entid db "db/ident" (Ds.Keyword "logseq.class/Query")); + Hashtbl.fold (fun eid () values -> match Graph.uuid_for_eid db eid with + | Some uuid -> uuid :: values | None -> values) ids [] + +let to_yojson encode result = + `Assoc ["kind", `String result.kind; "source", `String result.source; + "error", (match result.error with Some message -> `String message | None -> `Null); + "rows", `List (List.map (function + | Block block -> `Assoc ["block", encode block] + | Cells cells -> `Assoc ["cells", `List (List.map (fun s -> `String s) cells)]) result.rows)] diff --git a/shared/src/logseq/core/query_block.mli b/shared/src/logseq/core/query_block.mli new file mode 100644 index 00000000..5504d056 --- /dev/null +++ b/shared/src/logseq/core/query_block.mli @@ -0,0 +1,13 @@ +(** Read-only Query block execution against the current projected graph DB. *) +type row = Block of Cache_model.block | Cells of string list +type result = { + kind : string; + source : string; + rows : row list; + error : string option; +} +val render : ?current_page:string -> Datascript.db -> string -> result option +val owner_uuids : Datascript.db -> string list +val to_yojson : (Cache_model.block -> Yojson.Basic.t) -> result -> Yojson.Basic.t + +val is_query : Datascript.db -> string -> bool diff --git a/shared/src/logseq/core/result_view.ml b/shared/src/logseq/core/result_view.ml new file mode 100644 index 00000000..6bf5fad9 --- /dev/null +++ b/shared/src/logseq/core/result_view.ml @@ -0,0 +1,394 @@ +module Ds = Datascript +module G = Graph_read +module Ops = Pending_ops +module J = Yojson.Basic + +let member key = function `Assoc fields -> Option.value ~default:`Null (List.assoc_opt key fields) | _ -> `Null +let text = function `String value -> value | _ -> "" +let required key json = match member key json with `String value when value <> "" -> value + | _ -> invalid_arg ("Missing " ^ key) +let key name = Ds.Keyword name +let ds_field name = function Ds.Map fields -> Option.value ~default:Ds.Nil (List.assoc_opt (key name) fields) | _ -> Ds.Nil +let values = function Ds.Vector xs | Ds.List xs | Ds.Set xs -> xs | Ds.Nil -> [] | value -> [value] +let get db eid attr = Option.value ~default:Ds.Nil (G.value db eid attr) +let eid db uuid = match Ds.entid db "block/uuid" (Ds.Uuid uuid) with Some eid -> eid | None -> invalid_arg "Object no longer exists" +let attr_eid db attr = Ds.entid db "db/ident" (key attr) +let uuid db id = Option.value ~default:"" (G.uuid_for_eid db id) +let ident db id = match get db id "db/ident" with Ds.Keyword name -> name | _ -> "" +let attr_values db id attr = Ds.Db.datoms db Ds.Eavt ~e:id ~a:attr () |> Seq.map (fun (d : Ds.datom) -> d.v) |> List.of_seq +let raw db id attr = match attr_values db id attr with + | [] -> None | [v] when not (List.exists (fun (name, spec) -> name = attr && spec.Ds.cardinality = Ds.Many) db.Ds.schema) -> Some v + | values -> Some (Ds.Set values) +let ref_id db = function Ds.Ref id -> Some id | Ds.Ref_to reference -> Option.map (fun e -> e.Ds.id) (Ds.entity db reference) | _ -> None +let content db value = match ref_id db value with + | Some id when ident db id = "logseq.property/empty-placeholder" -> Ds.Nil + | Some id -> (match get db id "block/title" with Ds.Nil -> get db id "logseq.property/value" | value -> value) + | None -> value +let number = function Ds.Int64 n | Ds.Instant n -> Some (Int64.to_float n) | Ds.Float f when Float.is_finite f -> Some f | _ -> None +let rec display = function + | Ds.Nil -> "" | Ds.String s | Ds.Keyword s | Ds.Uuid s -> s + | Ds.Int64 n | Ds.Instant n -> Int64.to_string n + | Ds.Float f -> if Float.is_integer f then Printf.sprintf "%.0f" f else string_of_float f + | Ds.Bool b -> string_of_bool b + | Ds.Set xs | Ds.Vector xs | Ds.List xs -> String.concat ", " (List.map display xs) + | value -> Dev_query.Edn_util.pr_str value +let rec empty db value = match content db value with + | Ds.Nil | Ds.Keyword "logseq.property/empty-placeholder" -> true + | Ds.String value -> String.trim value = "" + | Ds.Set values | Ds.Vector values | Ds.List values -> List.for_all (empty db) values + | _ -> false +let contains value input = Outliner_state.includes_case_insensitive value input + +type property = {attr : string; title : string; typ : string; many : bool; ref_ : bool; choices : int list} +let property db attr = + let id = attr_eid db attr in + let typ = match Option.map (fun id -> get db id "logseq.property/type") id with Some (Ds.Keyword typ) -> typ | _ -> "default" in + let schema = List.assoc_opt attr db.Ds.schema in + let choices = match id with None -> [] | Some id -> + Datascript_value.datoms_by_ref db Ds.Aevt "block/closed-value-property" id + |> Seq.map (fun (d : Ds.datom) -> d.e) |> List.of_seq + |> List.sort (fun a b -> compare (display (get db a "block/order"), a) (display (get db b "block/order"), b)) in + {attr; typ; choices; + title = (if attr = "block/title" then "Name" else + match Option.map (fun id -> display (get db id "block/title")) id with Some title when title <> "" -> title | _ -> attr); + many = Option.fold ~none:false ~some:(fun schema -> schema.Ds.cardinality = Ds.Many) schema; + ref_ = Option.fold ~none:false ~some:(fun schema -> schema.Ds.value_type = Some Ds.RefType) schema} +let public_attr attr = attr = "block/title" || String.starts_with ~prefix:"user.property/" attr + || List.mem attr ["logseq.property/status"; "logseq.property/priority"; "block/tags"; "block/created-at"; "block/updated-at"] + +let rec semantic db value = match ref_id db value with + | Some id -> let uuid = uuid db id in if uuid <> "" then Ops.Ref_uuid uuid else Ops.Ref_ident (ident db id) + | None -> (match value with + | Ds.Set xs -> Ops.Set_value (List.map (semantic db) xs) + | Ds.Vector xs -> Ops.Vector_value (List.map (semantic db) xs) + | _ -> match Ops.semantic_value_from_datascript value with Ok value -> value | Error message -> invalid_arg message) +let semantic_json db value = Option.fold ~none:`Null ~some:(fun value -> Ops.semantic_value_json (semantic db value)) value +let rec plain = function + | Ds.Nil -> `Null | Ds.String s | Ds.Keyword s | Ds.Uuid s -> `String s + | Ds.Int64 n | Ds.Instant n -> `Int (Int64.to_int n) | Ds.Float f -> `Float f | Ds.Bool b -> `Bool b + | Ds.Set xs | Ds.Vector xs | Ds.List xs -> `List (List.map plain xs) + | Ds.Map fields -> `Assoc (List.filter_map (function Ds.Keyword name, value -> Some (name, plain value) | _ -> None) fields) + | _ -> `Null + +let apply_view db feature sorting filters input rows = + (match filters with + | Ds.Nil | Ds.Keyword "logseq.property/empty-placeholder" -> () + | Ds.Map fields -> + (match List.assoc_opt (Ds.Keyword "filters") fields with + | None | Some (Ds.Vector _) | Some (Ds.List _) | Some (Ds.Set _) -> () + | _ -> invalid_arg "Invalid filters") + | _ -> invalid_arg "Invalid filters"); + (match sorting with + | Ds.Nil | Ds.Keyword "logseq.property/empty-placeholder" -> () + | Ds.Vector keys -> List.iter (function + | Ds.Map _ as key -> (match ds_field "id" key, ds_field "asc?" key with + | Ds.Keyword _, Ds.Bool _ -> () | _ -> invalid_arg "Invalid sorting") + | _ -> invalid_arg "Invalid sorting") keys + | _ -> invalid_arg "Invalid sorting"); + let sorting = Dev_view.sorting_of_value sorting in + let filters = Dev_view.parse_filters filters in + let by_id = Hashtbl.create (List.length rows) in + let entities = List.filter_map (function + | Query_block.Cells _ -> None + | Query_block.Block block as row -> + let id = eid db block.uuid in + Hashtbl.replace by_id id row; + Ds.entity db (Ds.Entity_id id)) rows in + let ids = if feature = "class-objects" then + List.map (fun (entity : Ds.entity) -> entity.id) entities + |> fun ids -> Dev_view.filter_eids db ids filters input + |> fun ids -> Dev_view.sort_eids_by_sorting db ids sorting + else + let predicate = Option.value ~default:(fun entity -> Dev_view.row_matched db entity filters input) + (Dev_view.build_fast_filter_pred db filters input) in + List.filter predicate entities |> Dev_view.sort_entities db sorting + |> List.map (fun (entity : Ds.entity) -> entity.id) in + let blocks = List.filter_map (Hashtbl.find_opt by_id) ids in + let cells = List.filter (function Query_block.Cells cells -> + contains (String.concat " " cells) input | _ -> false) rows in + blocks @ cells + +let saved_views db owner feature = + Datascript_value.datoms_by_ref db Ds.Aevt "logseq.property/view-for" (eid db owner) + |> Seq.map (fun (d : Ds.datom) -> d.e) + |> Seq.filter (fun id -> get db id "logseq.property.view/feature-type" = key feature) + |> List.of_seq |> List.sort (fun a b -> compare (display (get db a "block/order"), a) (display (get db b "block/order"), b)) +let columns db view rows = + let scalar_columns = List.fold_left (fun count -> function Query_block.Cells cells -> max count (List.length cells) | _ -> count) 0 rows in + if scalar_columns > 0 && List.for_all (function Query_block.Cells _ -> true | _ -> false) rows then + List.init scalar_columns (fun index -> {attr = "query.result/" ^ string_of_int index; + title = (if scalar_columns = 1 then "Value" else "Column " ^ string_of_int (index + 1)); + typ = "string"; many = false; ref_ = false; choices = []}) + else + let ordered = match view with None -> [] | Some id -> get db id "logseq.property.table/ordered-columns" |> values + |> List.filter_map (function Ds.Keyword attr -> Some attr | _ -> None) in + let attrs = Hashtbl.create 16 in + Hashtbl.add attrs "block/title" (); + List.iter (function Query_block.Cells _ -> () | Query_block.Block block -> + Seq.iter (fun (d : Ds.datom) -> if public_attr d.a then Hashtbl.replace attrs d.a ()) + (Ds.Db.datoms db Ds.Eavt ~e:(eid db block.uuid) ())) rows; + List.iter (fun attr -> if public_attr attr then Hashtbl.replace attrs attr ()) ordered; + let hidden = match view with None -> [] | Some id -> attr_values db id "logseq.property.table/hidden-columns" in + let rest = Hashtbl.fold (fun attr () acc -> if List.mem attr ordered then acc else attr :: acc) attrs [] |> List.sort String.compare in + List.filter (fun attr -> public_attr attr && not (List.mem (key attr) hidden)) + (if ordered = [] then "block/title" :: List.filter (( <> ) "block/title") rest else ordered @ rest) + |> List.map (property db) +let editable p = p.attr = "block/title" || + ((String.starts_with ~prefix:"user.property/" p.attr || List.mem p.attr ["logseq.property/status"; "logseq.property/priority"]) + && List.mem p.typ ["default"; "url"; "number"; "checkbox"; "date"; "datetime"; "page"; "entity"; "node"; "class"; "property"]) +let column_json db rows p = + let values = (if p.typ = "checkbox" then [Ds.Bool false; Ds.Bool true] else + List.map (fun id -> Ds.Ref id) p.choices @ + List.concat_map (function Query_block.Cells _ -> [] | Query_block.Block block -> + attr_values db (eid db block.uuid) p.attr) rows) |> List.sort_uniq compare in + let filter_values = List.map (fun value -> + let match_value = match value with Ds.Bool value -> `Bool value + | Ds.Ref id -> `List [`String (uuid db id)] | _ -> `List [plain value] in + `Assoc ["title", `String (display (content db value)); "match", match_value; + "value", plain value; + "journalDay", (match ref_id db value with Some id -> plain (get db id "block/journal-day") | None -> `Null)]) values in + `Assoc ["attr", `String p.attr; "title", `String p.title; "kind", `String p.typ; + "many", `Bool p.many; "ref", `Bool p.ref_; "editable", `Bool (editable p); + "closed", `Bool (p.choices <> []); + "canCreate", `Bool (p.choices = [] && p.typ <> "checkbox" && p.typ <> "property"); + "filterValues", `List filter_values; + "choices", `List (List.map (fun id -> `Assoc ["uuid", `String (uuid db id); "title", `String (display (content db (Ds.Ref id)))]) p.choices)] +let row_json db encode properties = function + | Query_block.Cells cells -> `Assoc ["cells", `List (List.map (fun cell -> `String cell) cells)] + | Query_block.Block block -> let id = eid db block.uuid in + `Assoc ["block", encode block; "properties", `List (List.map (fun p -> + `Assoc ["attr", `String p.attr; "kind", `String p.typ; "editable", `Bool (editable p); + "text", `String (String.concat ", " (List.map (fun value -> display (content db value)) (attr_values db id p.attr))); + "raw", semantic_json db (raw db id p.attr)]) properties)] +let render_rows ?(input = "") db ~owner ~feature ~encode_block rows = + let views = saved_views db owner feature in + let views = if views = [] then [None] else List.map Option.some views in + let original_rows = rows in + let view_json view = + let id = Option.fold ~none:(owner ^ ":default") ~some:(uuid db) view in + let setting attr = Option.fold ~none:Ds.Nil ~some:(fun id -> get db id attr) view in + let name = Option.fold ~none:"All" ~some:(fun id -> display (get db id "block/title")) view in + let typ = match Option.bind (ref_id db (setting "logseq.property.view/type")) (fun id -> Some (ident db id)) with + | Some "logseq.property.view/type.table" -> "table" | Some "logseq.property.view/type.gallery" -> "gallery" + | Some "logseq.property.view/type.list" | None -> "list" | _ -> "invalid" in + let fields = ["uuid", `String id; "name", `String name; "type", `String typ; + "persisted", `Bool (view <> None); "sorting", plain (setting "logseq.property.table/sorting"); + "filters", plain (setting "logseq.property.table/filters")] in + try + if typ = "invalid" then invalid_arg "Unsupported view type"; + let rows = apply_view db feature (setting "logseq.property.table/sorting") + (setting "logseq.property.table/filters") input rows in + let properties = columns db view original_rows in + let available = columns db None original_rows in + let known = Ds.Db.datoms db Ds.Aevt ~a:"db/ident" () + |> Seq.filter_map (fun (d : Ds.datom) -> match d.v with + | Ds.Keyword attr when public_attr attr -> Some attr | _ -> None) |> List.of_seq in + let catalog = List.sort_uniq String.compare (known @ List.map (fun p -> p.attr) available) + |> List.map (property db) in + `Assoc (fields @ ["error", `Null; "columns", `List (List.map (column_json db original_rows) properties); + "properties", `List (List.map (column_json db original_rows) catalog); + "rows", `List (List.map (row_json db encode_block properties) rows)]) + with error -> `Assoc (fields @ ["error", `String (match error with Invalid_argument message -> message | _ -> Printexc.to_string error); + "rows", `List []; "columns", `List []]) in + `Assoc ["ownerUuid", `String owner; "featureType", `String feature; "views", `List (List.map view_json views)] + +let scope db owner feature = match feature with + | "query-result" -> (match Query_block.render db owner with Some result -> result.rows | None -> invalid_arg "This object has no query") + | "class-objects" -> List.map (fun block -> Query_block.Block block) (G.objects_for_tag (fun text -> Ok text) db owner) + | "property-objects" -> + let attr = ident db (eid db owner) in + if attr = "" then invalid_arg "This object is not a property"; + Dev_view.property_object_eids db attr + |> List.filter_map (fun id -> if G.page_is_hidden db id || get db id "logseq.property/created-from-property" <> Ds.Nil + || get db id "block/closed-value-property" <> Ds.Nil then None + else Option.map (fun block -> Query_block.Block block) + (match G.page_block (fun text -> Ok text) db id with Some _ as block -> block + | None -> G.block ~with_breadcrumbs:true (fun text -> Ok text) db id)) + | _ -> invalid_arg "Views are only available for queries, tag objects, and property objects" +let render ?input db ~owner ~feature ~encode_block = + try Ok (render_rows ?input db ~owner ~feature ~encode_block (scope db owner feature)) + with error -> Error (match error with Invalid_argument message -> message | _ -> Printexc.to_string error) + +let is_uuid value = String.length value = 36 && value.[8] = '-' && value.[13] = '-' + && value.[18] = '-' && value.[23] = '-' +let rec config_value = function + | `Null -> Ds.Nil | `Bool b -> Ds.Bool b | `Int n -> Ds.Int64 (Int64.of_int n) + | `Float f when Float.is_finite f -> Ds.Float f + | `String value -> if is_uuid value then Ds.Uuid value else Ds.String value + | `List values -> Ds.Vector (List.map config_value values) + | `Assoc fields -> Ds.Map (List.map (fun (key, value) -> Ds.Keyword key, config_value value) fields) + | _ -> invalid_arg "Invalid view setting" +let filter_match operator value = match operator, value with + | ("is" | "is-not"), `String "empty" -> Ds.Keyword "empty" + | ("is" | "is-not"), `List values -> Ds.Set (List.map config_value values) + | _ -> config_value value +let config_settings config = + let fields = match config with `Assoc fields -> fields | _ -> invalid_arg "View configuration must be an object" in + List.filter_map (fun (name, value) -> match name, value with + | "type", `String ("list" | "table" | "gallery" as typ) -> + Some ("logseq.property.view/type", Ops.Ref_ident ("logseq.property.view/type." ^ typ)) + | "sorting", `List keys -> + let keys = List.map (fun key -> Ds.Map [Ds.Keyword "id", Ds.Keyword (required "id" key); + Ds.Keyword "asc?", (match member "asc" key with `Bool asc -> Ds.Bool asc | _ -> invalid_arg "Sort direction is required")]) keys in + Some ("logseq.property.table/sorting", semantic (Ds.empty_db ()) (Ds.Vector keys)) + | "filters", (`Assoc _ as filters) -> + let clauses = match member "clauses" filters with `List clauses -> clauses | _ -> invalid_arg "Filter clauses are required" in + let clauses = List.map (function + | `List [`String attr; `String operator; value] -> + Ds.Vector [Ds.Keyword attr; Ds.Keyword operator; filter_match operator value] + | _ -> invalid_arg "Invalid filter clause") clauses in + let or_ = match member "or" filters with `Bool b -> b | _ -> invalid_arg "Filter match mode is required" in + Some ("logseq.property.table/filters", semantic (Ds.empty_db ()) + (Ds.Map [Ds.Keyword "or?", Ds.Bool or_; Ds.Keyword "filters", Ds.Vector clauses])) + | "orderedColumns", `List columns -> Some ("logseq.property.table/ordered-columns", + Ops.Vector_value (List.map (function `String attr when public_attr attr -> Ops.Keyword_value attr + | _ -> invalid_arg "Invalid column") columns)) + | "hiddenColumns", `List columns -> Some ("logseq.property.table/hidden-columns", + Ops.Set_value (List.map (function `String attr when public_attr attr -> Ops.Keyword_value attr + | _ -> invalid_arg "Invalid column") columns)) + | "name", `String name when String.trim name <> "" -> None + | _ -> invalid_arg ("Invalid view setting: " ^ name)) fields +let property_change db uuid (attr, value) = + {Ops.attr; expected = Option.map (semantic db) (raw db (eid db uuid) attr); value = Some value} +let numeric text = match float_of_string_opt text with + | Some value when Float.is_finite value -> + if Float.is_integer value && value < float_of_int max_int && value > float_of_int min_int + then Ops.Int_value (int_of_float value) else Ops.Float_value value + | _ -> invalid_arg "Enter a valid number" +let calendar_day text = + let digits text = String.for_all (fun c -> c >= '0' && c <= '9') text in + let compact = if String.length text = 10 && text.[4] = '-' && text.[7] = '-' then + String.sub text 0 4 ^ String.sub text 5 2 ^ String.sub text 8 2 + else text in + if String.length compact <> 8 || not (digits compact) then None + else let day = int_of_string compact in + if day / 10000 < 1 || Dev_query.Time.local_date_of_journal_day (Dev_query.Time.local_tz ()) day = None + then invalid_arg "Enter a valid calendar date"; + Some day +let resolve_reference db p value = + let resolved id = + let valid = p.choices <> [] || match p.typ with + | "number" | "datetime" -> Option.is_some (number (content db (Ds.Ref id))) + | "date" -> get db id "block/journal-day" <> Ds.Nil + | "page" -> get db id "block/name" <> Ds.Nil + | "class" -> G.entity_is_instance_of db id "logseq.class/Tag" + | "property" -> G.entity_is_instance_of db id "logseq.class/Property" + | _ -> true in + if not valid then invalid_arg "Choose a value of this property's type"; + semantic db (Ds.Ref id) + in + let matching = if p.choices <> [] then p.choices else + Ds.Db.datoms db Ds.Avet ~a:"block/title" ~v:(Ds.String value) () + |> Seq.map (fun (d : Ds.datom) -> d.e) |> List.of_seq in + let matching = List.find_opt (fun id -> uuid db id = value || display (content db (Ds.Ref id)) = value) matching in + match matching with + | Some id -> resolved id + | None when is_uuid value -> + let id = eid db value in + if p.choices <> [] && not (List.mem id p.choices) then invalid_arg "Choose one of the property's values"; + resolved id + | None -> invalid_arg "Choose an existing object" +let edit_cell db ~now ~fresh_uuid owner feature view json = + let target = required "blockUuid" json and attr = required "attr" json in + let target_id = eid db target in + if not (List.exists (function Query_block.Block block -> block.uuid = target | _ -> false) (scope db owner feature)) + then invalid_arg "This object is no longer in the view"; + let p = property db attr in + if not (editable p) then invalid_arg "This cell is read-only"; + let expected = member "expected" json in + if expected <> semantic_json db (raw db target_id attr) then invalid_arg "This cell changed. Reopen it to edit the latest value"; + let text = match member "value" json with `String value -> value | _ -> invalid_arg "A cell value is required" in + if attr = "block/title" then + Ops.Save_title {uuid = target; expected_title = display (get db target_id attr); title = text} + else + let created = ref [] in + let value text = + if p.choices <> [] then resolve_reference db p text + else if p.typ = "checkbox" then (match String.lowercase_ascii text with + | "true" -> Ops.Bool_value true | "false" -> Ops.Bool_value false + | _ -> invalid_arg "Choose true or false") + else if p.typ = "date" then (match calendar_day text with + | None -> resolve_reference db p text + | Some day -> + (match Seq.uncons (Ds.Db.datoms db Ds.Avet ~a:"block/journal-day" ~v:(Ds.Int64 (Int64.of_int day)) ()) with + | Some (d, _) -> semantic db (Ds.Ref d.e) + | None -> + let uuid = Rpc_wire.journal_page_uuid day in + created := Ops.Create_journal {page_uuid = uuid; block_uuid = fresh_uuid (); + title = Rpc_wire.journal_day_title day; journal_day = day; created_at = now} :: !created; + Ops.Ref_uuid uuid)) + else if List.mem p.typ ["number"; "datetime"; "default"; "url"] then + let content = if p.typ = "number" || p.typ = "datetime" then numeric text else Ops.String_value text in + if p.ref_ then ( + let uuid = fresh_uuid () in + created := Ops.Create_property_value {uuid; owner_uuid = target; property_ident = attr; content; created_at = now} :: !created; + Ops.Ref_uuid uuid) + else content + else if member "create" json = `Bool true && List.mem p.typ ["page"; "node"; "entity"; "class"] then + (try resolve_reference db p text with Invalid_argument _ -> + let uuid = fresh_uuid () in + let page = {Ops.uuid; title = text; created_at = now} in + created := (if p.typ = "class" then Ops.Create_tag page else Ops.Create_page page) :: !created; + Ops.Ref_uuid uuid) + else resolve_reference db p text in + let assigned = match member "selectedValues" json with + | `List selected -> + if not p.ref_ then invalid_arg "This property does not accept object references"; + if not p.many && List.length selected > 1 then invalid_arg "Choose a single value"; + let selected = List.map (function + | `String uuid when is_uuid uuid -> resolve_reference db p uuid + | _ -> invalid_arg "Choose an existing value") selected in + let selected = selected @ (match member "newValues" json with + | `Null -> [] + | `List values when p.many && member "create" json = `Bool true -> List.map (function + | `String text when String.trim text <> "" -> value (String.trim text) + | _ -> invalid_arg "Enter a value") values + | _ -> invalid_arg "Invalid new values") in + (match selected with [] -> None | [value] when not p.many -> Some value + | values -> Some (Ops.Set_value values)) + | `Null -> if String.trim text = "" then None else + Some (if p.many then Ops.Set_value (List.map (fun text -> value (String.trim text)) (String.split_on_char ',' text)) + else value text) + | _ -> invalid_arg "Invalid selected values" in + let intent = Ops.Set_property {uuid = target; attr; expected = Option.map (semantic db) (raw db target_id attr); value = assigned} in + let _ = view in + if !created = [] then intent else Ops.Atomic (List.rev !created @ [intent]) +let mutation db ~now ~fresh_uuid json = + try + let owner = required "ownerUuid" json and feature = required "featureType" json in + let _ = scope db owner feature in + let view = text (member "viewUuid" json) and action = required "action" json in + let creating = action = "create" || view = owner ^ ":default" in + if not creating && not (List.mem (eid db view) (saved_views db owner feature)) then + invalid_arg "This view no longer belongs to the object"; + if action = "editCell" then Ok (edit_cell db ~now ~fresh_uuid owner feature view json) + else if action <> "save" && action <> "create" then Error "Unknown view action" + else + let config = member "config" json in + let settings = config_settings config in + let name = match member "name" config with `String value when String.trim value <> "" -> String.trim value + | _ -> if creating then "New view" else display (get db (eid db view) "block/title") in + if creating then ( + let page, create_page = match Seq.uncons (Ds.Db.datoms db Ds.Avet ~a:"block/name" ~v:(Ds.String "$$$views") ()) with + | Some (d, _) -> uuid db d.e, [] + | None -> let uuid = fresh_uuid () in uuid, [Ops.Create_page {uuid; title = "$$$views"; created_at = now}] in + let view = fresh_uuid () in + let last_order = match Ds.entid db "block/uuid" (Ds.Uuid page) with + | None -> None + | Some page_id -> Ds.Db.datoms db Ds.Aevt ~a:"block/page" ~v:(Ds.Ref page_id) () + |> Seq.filter_map (fun (d : Ds.datom) -> match get db d.e "block/order" with Ds.String value -> Some value | _ -> None) + |> Seq.fold_left (fun current value -> Some (Option.fold ~none:value ~some:(fun current -> max current value) current)) None in + let order = Result.get_ok (Fractional_order.between last_order None) in + let defaults = ["logseq.property/view-for", Ops.Ref_uuid owner; + "logseq.property.view/feature-type", Ops.Keyword_value feature; + "logseq.property.view/type", Ops.Ref_ident "logseq.property.view/type.list"] in + let settings = List.filter (fun (attr, _) -> not (List.mem_assoc attr settings)) defaults @ settings in + Ok (Ops.Atomic (create_page @ [Ops.Insert_block {uuid = view; title = name; page_uuid = page; + parent_uuid = page; order; created_at = now}; Ops.Set_properties {uuid = view; + changes = List.map (fun (attr, value) -> {Ops.attr; expected = None; value = Some value}) settings}])) + ) else + let title = display (get db (eid db view) "block/title") in + let intents = (if title = name then [] else [Ops.Save_title {uuid = view; expected_title = title; title = name}]) + @ (if settings = [] then [] else [Ops.Set_properties {uuid = view; changes = List.map (property_change db view) settings}]) in + match intents with [] -> Error "No view settings changed" | [intent] -> Ok intent | intents -> Ok (Ops.Atomic intents) + with error -> Error (match error with Invalid_argument message -> message | _ -> Printexc.to_string error) diff --git a/shared/src/logseq/core/result_view.mli b/shared/src/logseq/core/result_view.mli new file mode 100644 index 00000000..bcc83efa --- /dev/null +++ b/shared/src/logseq/core/result_view.mli @@ -0,0 +1,11 @@ +val render_rows : + ?input:string -> Datascript.db -> owner:string -> feature:string -> + encode_block:(Cache_model.block -> Yojson.Basic.t) -> Query_block.row list -> Yojson.Basic.t + +val render : + ?input:string -> Datascript.db -> owner:string -> feature:string -> + encode_block:(Cache_model.block -> Yojson.Basic.t) -> (Yojson.Basic.t, string) result + +val mutation : + Datascript.db -> now:int -> fresh_uuid:(unit -> string) -> Yojson.Basic.t -> + (Pending_ops.pending_intent, string) result diff --git a/shared/src/logseq/core/rpc_ops.ml b/shared/src/logseq/core/rpc_ops.ml index 0738932d..bc58f698 100644 --- a/shared/src/logseq/core/rpc_ops.ml +++ b/shared/src/logseq/core/rpc_ops.ml @@ -258,6 +258,7 @@ let projected_status (value : Ops.semantic_value option) = let rec project_outliner_intent (blocks : Model.block list) (intent : Ops.pending_intent) = match intent with + | Ops.Atomic intents -> List.fold_left project_outliner_intent blocks intents | Ops.Save_title value -> List.map (fun (block : Model.block) -> @@ -367,12 +368,13 @@ let rec project_outliner_intent (blocks : Model.block list) (fun block -> not (List.mem block.Model.uuid value.uuids)) blocks | Ops.Set_property value -> - if value.attr = "logseq.property/status" then + if value.attr = "logseq.property/status" || value.attr = "logseq.property/priority" then let status = projected_status value.value in List.map (fun (block : Model.block) -> if block.uuid = value.uuid then - { block with status; sync_status = "pending" } + (if value.attr = "logseq.property/status" then { block with status; sync_status = "pending" } + else { block with priority = status; sync_status = "pending" }) else block) blocks else blocks @@ -388,6 +390,7 @@ let merge_live_block_metadata (optimistic : Model.block) references = live.references; breadcrumbs = live.breadcrumbs; status = live.status; + priority = live.priority; display_type = live.display_type; is_asset = live.is_asset; asset_type = live.asset_type; diff --git a/shared/src/logseq/core/rpc_session.ml b/shared/src/logseq/core/rpc_session.ml index 4babbc59..9dad14ea 100644 --- a/shared/src/logseq/core/rpc_session.ml +++ b/shared/src/logseq/core/rpc_session.ml @@ -87,7 +87,104 @@ let cancel_pending_sync = Pump.cancel_pending_sync let node_icon session uuid = Option.bind (host session).Types.graph_node_icon (fun resolve -> resolve uuid) -let success session result = Rpc.success (Rpc.with_node_icons (node_icon session) result) +let query_db session = + match (host session).Types.graph_db with + | Some load -> load () + | None -> Some (state session).model.db + +let result_block_encoder db = + let pages = Hashtbl.create 4 in + let encode_tree block = + let children = match Hashtbl.find_opt pages block.Model.page_id with + | Some children -> children + | None -> + let children = Hashtbl.create 16 in + List.iter (fun (block : Model.block) -> Option.iter (fun parent -> + let siblings = Option.value ~default:[] (Hashtbl.find_opt children parent) in + Hashtbl.replace children parent (block :: siblings)) block.parent_id) + (Graph_read.blocks_for_page (fun text -> Ok text) db block.page_id); + Hashtbl.iter (fun parent blocks -> Hashtbl.replace children parent + (List.sort Outliner.compare_blocks blocks)) children; + Hashtbl.replace pages block.page_id children; + children in + let rec encode ancestors depth (block : Model.block) = + if depth > 128 then invalid_arg "Result block nesting is too deep"; + let descendants = Option.value ~default:[] (Hashtbl.find_opt children block.uuid) + |> List.filter (fun (child : Model.block) -> not (Outliner.Sset.mem child.uuid ancestors)) in + let ancestors = Outliner.Sset.add block.uuid ancestors in + match Rpc.block_json block with + | `Assoc fields -> `Assoc (("children", `List (List.map (encode ancestors (depth + 1)) descendants)) :: fields) + | value -> value in + encode Outliner.Sset.empty 0 block in + encode_tree + +let query_for session db uuid = + let current_page = match active_node_route session with + | Some route -> Some route.Types.page.title + | None -> Option.map (fun (page : Model.entity_summary) -> page.title) + (state session).selected_sidebar_page in + let encode_tree = result_block_encoder db in + Query_block.render ?current_page db uuid + |> Option.map (fun result -> + try + let views = Result_view.render_rows db ~owner:uuid ~feature:"query-result" ~encode_block:encode_tree result.Query_block.rows in + (match Query_block.to_yojson encode_tree result, views with + | `Assoc fields, `Assoc view_fields -> `Assoc (fields @ view_fields) + | value, _ -> value) + with error -> Query_block.to_yojson Rpc.block_json + {result with Query_block.rows = []; error = Some (Printexc.to_string error)}) + +let object_views_for session owner is_tag is_property = + if not is_tag && not is_property then `Null + else match query_db session with + | None -> `Null + | Some db -> + let feature = if is_tag then "class-objects" else "property-objects" in + match Result_view.render db ~owner ~feature ~encode_block:(result_block_encoder db) with + | Ok value -> value + | Error message -> `Assoc ["ownerUuid", `String owner; "featureType", `String feature; + "views", `List [`Assoc ["uuid", `String (owner ^ ":default"); "name", `String "All"; + "type", `String "list"; "rows", `List []; "columns", `List []; "error", `String message]]] + +let query_expansion_key session uuid = + Option.fold ~none:"" ~some:(fun (config : Api.api_config) -> config.graph_id) (state session).config + ^ "/" ^ uuid + +let query_projection session db uuid = + if not (Query_block.is_query db uuid) then None + else if Outliner.Sset.mem (query_expansion_key session uuid) (state session).expanded_queries then + Option.map (function `Assoc fields -> `Assoc (("expanded", `Bool true) :: fields) | value -> value) + (query_for session db uuid) + else Some (`Assoc ["kind", `String "deferred"; "ownerUuid", `String uuid; + "featureType", `String "query-result"; "expanded", `Bool false; + "rows", `List []; "views", `List []; "error", `Null]) + +let with_queries session result = + match query_db session with + | None -> result + | Some db -> + let cache = Hashtbl.create 8 in + let query uuid = match Hashtbl.find_opt cache uuid with + | Some value -> value + | None -> let value = query_projection session db uuid in + Hashtbl.replace cache uuid value; value in + let rec decorate = function + | `List values -> `List (List.map decorate values) + | `Assoc fields -> + let fields = List.map (fun (key, value) -> + key, if key = "query" then value else decorate value) fields in + (match List.assoc_opt "uuid" fields, List.assoc_opt "pageId" fields, + List.assoc_opt "isShell" fields with + | Some (`String uuid), Some _, shell when shell <> Some (`Bool true) -> + (match query uuid with + | Some value -> `Assoc (("query", value) :: List.remove_assoc "query" fields) + | None -> `Assoc fields) + | _ -> `Assoc fields) + | value -> value in + decorate result + +let success session result = + Rpc.success (Rpc.with_node_icons (node_icon session) (with_queries session result)) let take count values = let rec loop count result = function @@ -157,6 +254,7 @@ let node_routes_json session serialize serialize_plain = ; ("scrollTarget", match route.scroll_target with Some uuid -> `String uuid | None -> `Null) ; ("isTag", `Bool route.is_tag) ; ("isProperty", `Bool route.is_property) + ; ("resultViews", object_views_for session route.uuid route.is_tag route.is_property) ; ("page", Rpc.summary_json route.page) ; ( "blocks" , Rpc.json_list (List.map serialize (projection_blocks session @@ -234,6 +332,9 @@ let snapshot session context_blocks blocks = ; ( "linkedReferenceBlocks" , Rpc.json_list (List.map linked_serialize linked) ) + ; ("resultViews", (match s.selected_sidebar_page with + | Some page -> object_views_for session page.uuid (selected_page_is_tag session) (selected_page_is_property session) + | None -> `Null)) ; ("selectedPageIsTag", `Bool (selected_page_is_tag session)) ; ( "selectedPageIsProperty" , `Bool (selected_page_is_property session) ) @@ -285,6 +386,11 @@ let snapshot session context_blocks blocks = | None -> `Null ) ; ("syncConnected", `Bool s.sync_connected) ; ("syncTransport", Sync_driver.to_yojson s.sync_transport) + ; ( "taskPriorities" + , Rpc.json_list (List.map Rpc.status_response_json + (match query_db session with + | Some db -> Graph_read.property_choices (fun text -> Ok text) db "logseq.property/priority" + | None -> []))) ; ( "taskStatuses" , Rpc.json_list (List.map Rpc.status_response_json @@ -317,12 +423,27 @@ let snapshot session context_blocks blocks = let outliner_patch_result session context blocks deleted splices = let s = state session in - Rpc.outliner_patch_result s.model.revision context s.outliner_state + let blocks = + if blocks = [] && splices = [] then blocks + else match query_db session with + | None -> blocks + | Some db -> + let queries = Hashtbl.create 8 and included = Hashtbl.create (List.length blocks) in + List.iter (fun uuid -> Hashtbl.replace queries uuid ()) (Query_block.owner_uuids db); + List.iter (fun (block : Model.block) -> Hashtbl.replace included block.uuid ()) blocks; + let refreshed = List.filter (fun (block : Model.block) -> + Hashtbl.mem queries block.uuid && not (Hashtbl.mem included block.uuid)) context.Outliner.blocks in + List.rev_append (List.rev blocks) refreshed in + let encoded = Rpc.outliner_patch_result s.model.revision context s.outliner_state ~node_icon:(node_icon session) ?sync_error:(Pump.pending_sync_error session) s.outliner_revision s.outliner_commands (has_pending_operations session) - blocks deleted splices + blocks deleted splices in + match Json.from_string encoded with + | `Assoc fields -> (match List.assoc_opt "result" fields with + | Some result -> success session result | None -> encoded) + | _ -> encoded let outliner_patch session context changed_ids = let changed = @@ -478,6 +599,33 @@ let resolve_graph (config : Api.api_config) = end else Error "Select a Logseq graph before syncing" +let outliner_action_context session context message = + let current = (state session).outliner_state in + let targets = Outliner.interaction_targets current |> Outliner.Sset.elements in + let targets = match message with + | Outliner.Tap_block uuid | Long_press_block uuid | Toggle_collapsed uuid | Zoom_in uuid -> uuid :: targets + | Drop_blocks value -> value.target_uuid :: targets + | Set_task_status value -> value.status_uuid :: targets + | Set_task_priority value -> value.priority_uuid :: targets + | _ -> targets in + let missing = List.filter (fun uuid -> Outliner.find_block context uuid = None) targets in + match missing, query_db session with + | [], _ | _, None -> context, false + | _, Some db -> + let pages = Hashtbl.create 4 in + let extra = List.fold_left (fun blocks uuid -> + match Graph_read.node_destination (fun text -> Ok text) db uuid with + | Some (page, _) when not (Hashtbl.mem pages page.Model.uuid) -> + Hashtbl.add pages page.uuid (); + let loaded = Graph_read.blocks_for_page (fun text -> Ok text) db page.uuid in + let loaded = match Datascript.entid db "block/uuid" (Datascript.Uuid page.uuid) with + | Some eid -> (match Graph_read.page_block (fun text -> Ok text) db eid with + | Some block -> block :: loaded | None -> loaded) + | None -> loaded in + List.rev_append loaded blocks + | _ -> blocks) [] missing in + So.with_extra_blocks context extra, extra <> [] + let dispatch_outliner_event session payload = match Rpc.outliner_message payload with | Error message -> Rpc.failure "invalid_outliner_event" message @@ -488,11 +636,12 @@ let dispatch_outliner_event session payload = (state session).outliner_state payload) then outliner_patch session (outliner_context session) [] else begin - let context, aggregate = + let display_context, aggregate = match aggregate_return_context session payload message with | Some (context, uuid) -> (context, Some uuid) | None -> (outliner_context session, None) in + let context, external_results = outliner_action_context session display_context message in let previous = (state session).outliner_state in let next_state, commands = Outliner.update context previous message @@ -554,8 +703,14 @@ let dispatch_outliner_event session payload = { !(session.state) with outliner_state = next_state; - outliner_optimistic_blocks = - Some projected.Outliner.blocks; + outliner_optimistic_blocks = Some + (if not external_results then projected.Outliner.blocks + else + let pages = Hashtbl.create 4 in + List.iter (fun (block : Model.block) -> Hashtbl.replace pages block.page_id ()) + display_context.Outliner.blocks; + List.filter (fun (block : Model.block) -> Hashtbl.mem pages block.page_id) + projected.blocks); outliner_commands = interpreted.platform; outliner_revision = (state session).outliner_revision + 1; @@ -563,7 +718,7 @@ let dispatch_outliner_event session payload = (match message with | Outliner.Toggle_collapsed _ -> So.persist_collapsed_nodes session | _ -> ()); - if (state session).node_routes <> [] then + if external_results || (state session).node_routes <> [] then snapshot_visible session else (match event_patch_plan message operations with @@ -1520,6 +1675,47 @@ let rec dispatch session action payload = | "ensureJournal" -> ensure_journal session payload | "selectPage" -> select_page session payload | "hydrateOutlinerRows" -> hydrate_outliner_rows session payload + | "queryBlock" -> + (match payload, query_db session with + | Some uuid, Some db -> success session (Rpc.json_object ["query", + Option.value ~default:`Null (query_for session db uuid)]) + | None, _ -> Rpc.failure "invalid_params" "A query block UUID is required" + | _, None -> Rpc.failure "graph_unavailable" "No graph is open") + | "resultViews" -> + (match payload, query_db session with + | Some payload, Some db -> + (try let json = Json.from_string payload in + let string key = match json with `Assoc fields -> + (match List.assoc_opt key fields with Some (`String s) -> s | _ -> "") | _ -> "" in + (match Result_view.render ~input:(string "input") db ~owner:(string "ownerUuid") + ~feature:(string "featureType") ~encode_block:Rpc.block_json with + | Ok value -> success session value + | Error message -> Rpc.failure "invalid_view" message) + with error -> Rpc.failure "invalid_view" (Printexc.to_string error)) + | _ -> Rpc.failure "graph_unavailable" "No graph is open") + | "resultView" -> + (match payload, query_db session with + | Some payload, Some db -> + (try + let input = Json.from_string payload in + let get name = match input with `Assoc fields -> Option.value ~default:`Null (List.assoc_opt name fields) | _ -> `Null in + if get "action" = `String "setExpanded" then ( + match get "ownerUuid", get "featureType", get "expanded" with + | `String uuid, `String "query-result", `Bool expanded when Query_block.is_query db uuid -> + let key = query_expansion_key session uuid in + let current = state session in + session.Types.state := {current with expanded_queries = + (if expanded then Outliner.Sset.add else Outliner.Sset.remove) key current.expanded_queries}; + snapshot_visible session + | _ -> Rpc.failure "invalid_query" "A query block and expansion state are required") + else match editing_cursor session with + | Error (code, message) -> Rpc.failure code message + | Ok cursor -> + (match Result_view.mutation db ~now:(now_ms ()) ~fresh_uuid:fresh_squuid input with + | Ok intent -> stage_result session (fresh_squuid ()) cursor intent + | Error message -> Rpc.failure "invalid_view" message) + with error -> Rpc.failure "invalid_view" (Printexc.to_string error)) + | _ -> Rpc.failure "graph_unavailable" "No graph is open") | "cachedImageGallery" -> (match payload with Some uuid -> cached_image_gallery session uuid | None -> Rpc.failure "invalid_params" "An image UUID is required") diff --git a/shared/src/logseq/core/rpc_wire.ml b/shared/src/logseq/core/rpc_wire.ml index 28a913e1..f2246b89 100644 --- a/shared/src/logseq/core/rpc_wire.ml +++ b/shared/src/logseq/core/rpc_wire.ml @@ -277,6 +277,17 @@ let decode_outliner_event fields = | "addRootBlock" -> let* uuid = required_string fields "uuid" in Ok (Outliner.Add_root_block uuid) + | "setTaskPriority" -> + let* uuid = required_string fields "uuid" in + let* ident = optional_string fields "priorityIdent" in + let* priority_uuid = optional_string fields "priorityUuid" in + let priority = match ident, priority_uuid with + | Some ident, _ -> Ok (Some (Ops.Ref_ident ident)) + | None, Some uuid -> Ok (Some (Ops.Ref_uuid uuid)) + | None, None when List.assoc_opt "priority" fields = Some `Null -> Ok None + | _ -> Error "setTaskPriority requires a priority reference or explicit null" in + let* priority = priority in + Ok (Outliner.Set_task_priority {Outliner.priority_uuid = uuid; priority}) | "setTaskStatus" -> let* uuid = required_string fields "uuid" in let* ident = optional_string fields "statusIdent" in diff --git a/shared/src/logseq/core/session_outliner.ml b/shared/src/logseq/core/session_outliner.ml index f4057c83..1e294cb7 100644 --- a/shared/src/logseq/core/session_outliner.ml +++ b/shared/src/logseq/core/session_outliner.ml @@ -258,13 +258,16 @@ let projected_node_destination (session : Types.session) uuid = | _ -> None let with_extra_blocks (context : Outliner.outliner_context) extra = - let present = List.map (fun b -> b.Model.uuid) context.blocks in + let present = Hashtbl.create (List.length context.blocks) in + List.iter (fun (block : Model.block) -> Hashtbl.replace present block.uuid ()) context.blocks; { context with Outliner.blocks = context.blocks @ List.filter - (fun block -> not (List.mem block.Model.uuid present)) + (fun (block : Model.block) -> + if Hashtbl.mem present block.uuid then false + else begin Hashtbl.add present block.uuid (); true end) extra; } diff --git a/shared/src/logseq/core/session_types.ml b/shared/src/logseq/core/session_types.ml index 27f3600a..ba67e530 100644 --- a/shared/src/logseq/core/session_types.ml +++ b/shared/src/logseq/core/session_types.ml @@ -83,6 +83,7 @@ type host_options = ; apply_sync_event : (string -> (unit, string) result) option ; sync_cursor : (unit -> int option) option ; graph_blocks : (unit -> Model.block list option) option + ; graph_db : (unit -> Datascript.db option) option ; authoritative_graph_blocks : (unit -> Model.block list option) option ; graph_sidebar_pages : (unit -> Graph.sidebar_pages option) option ; graph_tag_pages : (unit -> Model.entity_summary list option) option @@ -163,6 +164,7 @@ type session_state = ; outliner_optimistic_blocks : Model.block list option ; outliner_commands : Effects.outliner_platform_command list ; outliner_revision : int + ; expanded_queries : Outliner_state.Sset.t ; sidebar_deferred : bool } @@ -184,6 +186,7 @@ let default_options = apply_sync_event = None; sync_cursor = None; graph_blocks = None; + graph_db = None; authoritative_graph_blocks = None; graph_sidebar_pages = None; graph_tag_pages = None; @@ -318,6 +321,7 @@ let create_session options = outliner_optimistic_blocks = None; outliner_commands = []; outliner_revision = 0; + expanded_queries = Outliner.Sset.empty; sidebar_deferred = false; }; } diff --git a/shared/src/logseq/core/session_types.mli b/shared/src/logseq/core/session_types.mli index 3e5d537f..fc3ecb3a 100644 --- a/shared/src/logseq/core/session_types.mli +++ b/shared/src/logseq/core/session_types.mli @@ -76,6 +76,7 @@ type host_options = ; apply_sync_event : (string -> (unit, string) result) option ; sync_cursor : (unit -> int option) option ; graph_blocks : (unit -> Cache_model.block list option) option + ; graph_db : (unit -> Datascript.db option) option ; authoritative_graph_blocks : (unit -> Cache_model.block list option) option ; graph_sidebar_pages : (unit -> Graph_read.sidebar_pages option) option ; graph_tag_pages : (unit -> Cache_model.entity_summary list option) option @@ -156,6 +157,7 @@ type session_state = ; outliner_optimistic_blocks : Cache_model.block list option ; outliner_commands : Outliner_effects.outliner_platform_command list ; outliner_revision : int + ; expanded_queries : Outliner_state.Sset.t ; sidebar_deferred : bool } diff --git a/shared/src/logseq/model.ml b/shared/src/logseq/model.ml index 92c4d044..39dd0ced 100644 --- a/shared/src/logseq/model.ml +++ b/shared/src/logseq/model.ml @@ -120,6 +120,7 @@ type outline_row = ; row_loaded : bool ; row_title : string ; markup_json : string + ; query_json : string ; youtube_target_url : string option ; row_breadcrumb : string ; row_breadcrumbs : sidebar_page list @@ -145,6 +146,7 @@ type sidebar_projection = ; selected_page : sidebar_page option ; selected_page_is_tag : bool ; selected_page_is_property : bool + ; result_views_json : string ; related_rows : outline_row list ; linked_reference_rows : outline_row list } @@ -189,6 +191,7 @@ type node_projection = ; node_is_tag : bool ; node_is_property : bool ; node_outliner_rows : outline_row list + ; node_result_views_json : string ; node_related_rows : outline_row list ; node_linked_reference_rows : outline_row list ; node_outliner_editing : outliner_editing option @@ -214,6 +217,7 @@ type core_projection = ; is_graph_unlocked : bool ; sidebar : sidebar_projection ; task_statuses : task_status list + ; task_priorities : task_status list ; flashcards : flashcard list ; sync_connected : bool ; applied_server_t : int option @@ -247,6 +251,7 @@ type core_projection = } type logseq_effect = + | ResultViewEffect of int * string * string | SendCaptureEffect of int * string | SendAssetEffect of int * composer_asset | SendTaskEffect of int * string * task_status @@ -261,6 +266,7 @@ type logseq_effect = | SyncNowEffect of int | SyncPendingEffect of int | SetOutlinerTaskStatusEffect of int * string * task_status + | SetOutlinerTaskPriorityEffect of int * string * task_status option | SearchNodesEffect of int * string | LoadSearchPageEffect of int * string * int | LoadPageReferencesEffect of int * string @@ -333,9 +339,11 @@ type logseq_model = ; selected_page_is_tag : bool ; selected_page_is_property : bool ; selected_page_ready : bool + ; result_views_json : string ; related_rows : outline_row list ; linked_reference_rows : outline_row list ; task_statuses : task_status list + ; task_priorities : task_status list ; selected_task_status : task_status option ; flashcards : flashcard list ; flashcard_cloze_revealed : bool @@ -396,6 +404,7 @@ type logseq_model = ; pending_effects : logseq_effect list ; in_flight_effects : logseq_effect list ; next_effect_id : int + ; result_view_feedback : (string * int * string option) list ; effect_error : string option ; last_core_response : string option ; attachment_picker_open : bool @@ -407,6 +416,7 @@ type logseq_model = } type logseq_action = + | SubmitResultView of string * string | SelectGraph of string | BeginSync | SyncSucceeded @@ -504,6 +514,7 @@ type logseq_action = | CloseSyncDetails | SyncNow | SetOutlinerTaskStatus of string * string + | SetOutlinerTaskPriority of string * string | OpenJournalCalendar | OpenSettings | DismissSettings @@ -658,9 +669,11 @@ let initial () = selected_page_is_tag = false; selected_page_is_property = false; selected_page_ready = true; + result_views_json = ""; related_rows = []; linked_reference_rows = []; task_statuses = built_in_task_statuses (); + task_priorities = []; selected_task_status = None; flashcards = []; flashcard_cloze_revealed = false; @@ -718,6 +731,7 @@ let initial () = composer_assets = []; composer_autofocus = false; capture_confirmation = None; + result_view_feedback = []; pending_effects = []; in_flight_effects = []; next_effect_id = 1; @@ -763,6 +777,7 @@ let navigation_route_uuid route = let effect_id eff = match eff with + | ResultViewEffect (id, _, _) -> id | SendCaptureEffect (id, _) -> id | SendAssetEffect (id, _) -> id | SendTaskEffect (id, _, _) -> id @@ -777,6 +792,7 @@ let effect_id eff = | SyncNowEffect id -> id | SyncPendingEffect id -> id | SetOutlinerTaskStatusEffect (id, _, _) -> id + | SetOutlinerTaskPriorityEffect (id, _, _) -> id | SearchNodesEffect (id, _) | LoadSearchPageEffect (id, _, _) -> id | LoadPageReferencesEffect (id, _) -> id | HydrateOutlinerRowsEffect (id, _) -> id @@ -1021,6 +1037,7 @@ let journal_preview_route (current : logseq_model) uuid = node_is_property = false; node_outliner_rows = sub_list section.start_index section.end_index rows; + node_result_views_json = ""; node_related_rows = []; node_linked_reference_rows = []; node_outliner_editing = None; @@ -1064,6 +1081,7 @@ let outliner_preview_route (current : logseq_model) uuid = node_is_tag = false; node_is_property = false; node_outliner_rows = sub_list index end_index rows; + node_result_views_json = ""; node_related_rows = []; node_linked_reference_rows = []; node_outliner_editing = None; @@ -1150,7 +1168,8 @@ let preview_sidebar_page (current : logseq_model) uuid = selected_page_ready = rows <> []; selected_page_is_tag = false; selected_page_is_property = false; - related_rows = []; + result_views_json = ""; + related_rows = []; linked_reference_rows = []; outliner_rows = rows; outliner_section_markers = journal_section_markers rows; @@ -1370,7 +1389,7 @@ let cancels_outliner_autosave = function | DropOutlinerBlocksEffect _ | ConfirmOutlinerDeleteEffect _ | ChooseOutlinerAutocompleteEffect _ | CancelOutlinerEditingEffect _ - | SetOutlinerTaskStatusEffect _ | SelectSidebarPageEffect _ + | SetOutlinerTaskStatusEffect _ | SetOutlinerTaskPriorityEffect _ | SelectSidebarPageEffect _ | ClearSelectedPageEffect _ | OpenAppNodeEffect _ | CloseAppNodeEffect _ | OpenSearchNodeEffect _ | CloseSearchNodeEffect _ | OpenSearchResultEffect _ | OpenGraphEffect _ | DeleteLocalGraphEffect _ | SignOutEffect _ -> true @@ -1834,6 +1853,9 @@ let sidebar_after_navigation current = let rec update (current : logseq_model) action = match action with + | SubmitResultView (uuid, payload) -> + enqueue_effect {current with result_view_feedback = List.filter (fun (view, _, _) -> view <> uuid) current.result_view_feedback} + (ResultViewEffect (current.next_effect_id, uuid, payload)) | SaveUISession -> enqueue_effect current (PersistUISessionEffect (current.next_effect_id, ui_session current)) @@ -2145,8 +2167,12 @@ let rec update (current : logseq_model) action = (match succeeded, eff with | true, ChooseOutlinerAutocompleteEffect _ -> current.outliner_selection_revision + 1 | _ -> current.outliner_selection_revision); + result_view_feedback = (match eff with + | ResultViewEffect (_, uuid, _) -> (uuid, id, (if succeeded then None else Some message)) + :: List.filter (fun (view, _, _) -> view <> uuid) current.result_view_feedback + | _ -> resolved_current.result_view_feedback); effect_error = - (if succeeded || (match eff with + (if succeeded || (match eff with ResultViewEffect _ -> true | _ -> false) || (match eff with | CreateGraphEffect _ -> String.ends_with ~suffix:E2ee_keyring.password_required_message message | _ -> false) then None else Some message); @@ -2530,6 +2556,13 @@ let rec update (current : logseq_model) action = enqueue_effect updated (SetOutlinerTaskStatusEffect (id, block_id, status)) | None -> current) + | SetOutlinerTaskPriority (block_id, priority_id) -> + let priority = task_status_by_id current.task_priorities priority_id in + if priority_id <> "" && priority = None then current + else + let updated = { current with sync_state = editing_sync_state current } in + enqueue_effect updated + (SetOutlinerTaskPriorityEffect (updated.next_effect_id, block_id, priority)) | ToggleActivePageFavorite -> (match active_page current with | Some page -> @@ -2985,11 +3018,13 @@ and apply_core_snapshot (current : logseq_model) selected_page_ready = true; selected_page_is_tag = sidebar.selected_page_is_tag; selected_page_is_property = sidebar.selected_page_is_property; + result_views_json = sidebar.result_views_json; related_rows = (if root_reference_pending && not sidebar.selected_page_is_tag then current.related_rows else if selected_graph_changed then sidebar.related_rows else retain_shell_contents current.related_rows sidebar.related_rows); linked_reference_rows = (if root_reference_pending && sidebar.selected_page_is_tag then current.linked_reference_rows else if selected_graph_changed then sidebar.linked_reference_rows else retain_shell_contents current.linked_reference_rows sidebar.linked_reference_rows); task_statuses = available_task_statuses projection.task_statuses; + task_priorities = projection.task_priorities; flashcards = projection.flashcards; flashcard_cloze_revealed = (if card_changed then false else current.flashcard_cloze_revealed); diff --git a/shared/src/logseq/model.mli b/shared/src/logseq/model.mli index f43c49d3..b5b6bcd8 100644 --- a/shared/src/logseq/model.mli +++ b/shared/src/logseq/model.mli @@ -117,6 +117,7 @@ type outline_row = ; row_loaded : bool ; row_title : string ; markup_json : string + ; query_json : string ; youtube_target_url : string option ; row_breadcrumb : string ; row_breadcrumbs : sidebar_page list @@ -142,6 +143,7 @@ type sidebar_projection = ; selected_page : sidebar_page option ; selected_page_is_tag : bool ; selected_page_is_property : bool + ; result_views_json : string ; related_rows : outline_row list ; linked_reference_rows : outline_row list } @@ -186,6 +188,7 @@ type node_projection = ; node_is_tag : bool ; node_is_property : bool ; node_outliner_rows : outline_row list + ; node_result_views_json : string ; node_related_rows : outline_row list ; node_linked_reference_rows : outline_row list ; node_outliner_editing : outliner_editing option @@ -211,6 +214,7 @@ type core_projection = ; is_graph_unlocked : bool ; sidebar : sidebar_projection ; task_statuses : task_status list + ; task_priorities : task_status list ; flashcards : flashcard list ; sync_connected : bool ; applied_server_t : int option @@ -244,6 +248,7 @@ type core_projection = } type logseq_effect = + | ResultViewEffect of int * string * string | SendCaptureEffect of int * string | SendAssetEffect of int * composer_asset | SendTaskEffect of int * string * task_status @@ -258,6 +263,7 @@ type logseq_effect = | SyncNowEffect of int | SyncPendingEffect of int | SetOutlinerTaskStatusEffect of int * string * task_status + | SetOutlinerTaskPriorityEffect of int * string * task_status option | SearchNodesEffect of int * string | LoadSearchPageEffect of int * string * int | LoadPageReferencesEffect of int * string @@ -330,9 +336,11 @@ type logseq_model = ; selected_page_is_tag : bool ; selected_page_is_property : bool ; selected_page_ready : bool + ; result_views_json : string ; related_rows : outline_row list ; linked_reference_rows : outline_row list ; task_statuses : task_status list + ; task_priorities : task_status list ; selected_task_status : task_status option ; flashcards : flashcard list ; flashcard_cloze_revealed : bool @@ -393,6 +401,7 @@ type logseq_model = ; pending_effects : logseq_effect list ; in_flight_effects : logseq_effect list ; next_effect_id : int + ; result_view_feedback : (string * int * string option) list ; effect_error : string option ; last_core_response : string option ; attachment_picker_open : bool @@ -404,6 +413,7 @@ type logseq_model = } type logseq_action = + | SubmitResultView of string * string | SelectGraph of string | BeginSync | SyncSucceeded @@ -501,6 +511,7 @@ type logseq_action = | CloseSyncDetails | SyncNow | SetOutlinerTaskStatus of string * string + | SetOutlinerTaskPriority of string * string | OpenJournalCalendar | OpenSettings | DismissSettings diff --git a/shared/src/logseq/native_bridge.ml b/shared/src/logseq/native_bridge.ml index 4ae2215c..afa48955 100644 --- a/shared/src/logseq/native_bridge.ml +++ b/shared/src/logseq/native_bridge.ml @@ -1,15 +1,23 @@ open Lui_protocol -let latest_patch = ref "" +let patch_batches : patch_batch list ref = ref [] + +let take_patch () = + match !patch_batches with + | [] -> "" + | [batch] -> patch_batches := []; Lui_wire.encode_batch batch + | latest :: _ as batches -> + (* Reentrant flushes can emit several batches. Preserve every operation + in order while returning the final generation through the native ABI. *) + patch_batches := []; + let ops = List.fold_left (fun reversed batch -> List.rev_append batch.ops reversed) + [] (List.rev batches) |> List.rev in + Lui_wire.encode_batch {generation = latest.generation; ops} let current_app : (Model.logseq_model, Model.logseq_action) Lui_app.reducer_app option ref = ref None -let send_patch json = - latest_patch := json; - true - let operating_system platform_code = match platform_code with | 2 -> IOS @@ -53,18 +61,18 @@ let note_effect_deadlines () = if Hashtbl.mem active id then Some deadline else None) effect_deadlines let flush_event event = - latest_patch := ""; + patch_batches := []; ignore (Lui_app.dispatch_event (app ()) event); ignore (Lui_app.flush (app ())); note_effect_deadlines (); - !latest_patch + take_patch () let flush_action action = - latest_patch := ""; + patch_batches := []; ignore (Lui_app.send (app ()) action); ignore (Lui_app.flush (app ())); note_effect_deadlines (); - !latest_patch + take_patch () let apply_response encoded = flush_action @@ -259,6 +267,8 @@ let encode_effect (eff : Model.logseq_effect) = | DeletePageEffect (id, uuid) -> "{\"id\":" ^ string_of_int id ^ ",\"kind\":\"delete-page\",\"text\":" ^ Lui_wire.quoted uuid ^ "}" + | ResultViewEffect (id, _, payload) -> + Yojson.Basic.to_string (`Assoc ["id", `Int id; "kind", `String "result-view"; "text", `String payload]) | SyncNowEffect id -> "{\"id\":" ^ string_of_int id ^ ",\"kind\":\"sync-now\",\"text\":\"\"}" | SyncPendingEffect id -> @@ -269,6 +279,9 @@ let encode_effect (eff : Model.logseq_effect) = ^ Lui_wire.quoted block_id ^ ",\"metadata\":" ^ Lui_wire.quoted (encode_task_status status) ^ "}" + | SetOutlinerTaskPriorityEffect (id, block_id, priority) -> + Yojson.Basic.to_string (`Assoc ["id", `Int id; "kind", `String "set-outliner-task-priority"; + "text", `String block_id; "metadata", `String (Option.fold ~none:"null" ~some:encode_task_status priority)]) | LoadPageReferencesEffect (id, uuid) -> "{\"id\":" ^ string_of_int id ^ ",\"kind\":\"load-page-references\",\"text\":" ^ Lui_wire.quoted uuid ^ "}" @@ -452,7 +465,7 @@ let backend host_profile = backend_profile = host_profile; apply_batch = (fun batch -> - ignore (send_patch (Lui_wire.encode_batch batch)); + patch_batches := batch :: !patch_batches; true); } @@ -461,10 +474,10 @@ let start_application application = current_app := Some application; ignore (Lui_app.start application); ignore (Lui_app.flush application); - !latest_patch + take_patch () let initialize platform_code host_code authentication_code = - latest_patch := ""; + patch_batches := []; let authentication_state = initial_authentication_state authentication_code in @@ -508,6 +521,7 @@ let extension_event node identifier name text value = let open Lui_protocol in let values = match identifier, name with + | "outliner-block-row", "set-priority" -> ["priority", StringValue text] | "outliner-block-row", "set-status" -> ["uuid", StringValue text; "count", IntValue value] | "outliner-block-row", "drop" -> ["uuid", StringValue text; "placement", StringValue (match value with 0 -> "before" | 1 -> "inside" | _ -> "after")] @@ -547,10 +561,10 @@ let extension_event node identifier name text value = flush_event (ExtensionEvent (node, identifier, name, value_map)) let dispose () = - latest_patch := ""; + patch_batches := []; ignore (Lui_app.dispose (app ())); current_app := None; - !latest_patch + take_patch () let root_node () = Lui_app.root_node (app ()) diff --git a/shared/src/logseq/native_bridge.mli b/shared/src/logseq/native_bridge.mli index 87769ba2..71e4b9e7 100644 --- a/shared/src/logseq/native_bridge.mli +++ b/shared/src/logseq/native_bridge.mli @@ -1,5 +1,3 @@ -val send_patch : string -> bool - val operating_system : int -> Lui_protocol.operating_system val host_kind : int -> Lui_protocol.host_kind diff --git a/shared/src/logseq/response_snapshot.ml b/shared/src/logseq/response_snapshot.ml index f2ad2a27..36e37e2c 100644 --- a/shared/src/logseq/response_snapshot.ml +++ b/shared/src/logseq/response_snapshot.ml @@ -240,6 +240,8 @@ let outline_row_from_block youtube_target_url opens_as_page depth | Some row_uuid, Some row_title -> Some { Model.row_uuid; row_title; row_loaded = not (bool_member "isShell" fields); + query_json = (match List.assoc_opt "query" fields with + | Some (`Assoc _ as value) -> Yojson.Basic.to_string value | _ -> ""); markup_json = (match List.assoc_opt "markup" fields with | Some markup -> Yojson.Basic.to_string markup @@ -393,6 +395,7 @@ let node_route input = node_breadcrumbs = breadcrumbs fields; node_scroll_target = string_member "scrollTarget" fields; node_outliner_rows = outliner_rows_member "outlinerRows" fields; + node_result_views_json = (match List.assoc_opt "resultViews" fields with Some (`Assoc _ as value) -> Json.to_string value | _ -> ""); node_related_rows = related_rows_member "relatedBlocks" fields; node_linked_reference_rows = related_rows_member "linkedReferenceBlocks" fields; @@ -413,6 +416,7 @@ let sidebar_projection fields = selected_page_is_tag = bool_member "selectedPageIsTag" fields; selected_page_is_property = bool_member "selectedPageIsProperty" fields; + result_views_json = (match List.assoc_opt "resultViews" fields with Some (`Assoc _ as value) -> Json.to_string value | _ -> ""); related_rows = related_rows_member "relatedBlocks" fields; linked_reference_rows = related_rows_member "linkedReferenceBlocks" fields } @@ -439,6 +443,7 @@ let core_projection fields = is_graph_encrypted = bool_member "isGraphEncrypted" fields; is_graph_unlocked = bool_member "isGraphUnlocked" fields; sidebar = sidebar_projection fields; + task_priorities = List.filter_map task_status (list_member "taskPriorities" fields); task_statuses = List.filter_map task_status (list_member "taskStatuses" fields); flashcards = List.filter_map flashcard (list_member "flashcards" fields); diff --git a/shared/src/logseq/response_snapshot.mli b/shared/src/logseq/response_snapshot.mli index e7519425..854e0d26 100644 --- a/shared/src/logseq/response_snapshot.mli +++ b/shared/src/logseq/response_snapshot.mli @@ -1 +1,3 @@ val decode_response : string -> (Model.core_projection, string) result + +val related_row : Yojson.Basic.t -> Model.outline_row option diff --git a/shared/src/logseq/view.ml b/shared/src/logseq/view.ml index a80dc5ff..8168b63e 100644 --- a/shared/src/logseq/view.ml +++ b/shared/src/logseq/view.ml @@ -116,6 +116,7 @@ let outliner_block_row_schema () = Lui_extension.event "collapse" [uuid]; Lui_extension.event "long-press" [uuid]; Lui_extension.event "drag-start" [uuid]; Lui_extension.event "drop" [uuid; Lui_extension.event_field "placement" StringScalar true]; + Lui_extension.event "set-priority" [Lui_extension.event_field "priority" StringScalar true]; Lui_extension.event "set-status" [uuid; Lui_extension.event_field "count" IntScalar true]] let native_navigation_stack_schema () = diff --git a/shared/src/logseq/view_base.ml b/shared/src/logseq/view_base.ml index 5428f609..b49aaf59 100644 --- a/shared/src/logseq/view_base.ml +++ b/shared/src/logseq/view_base.ml @@ -385,6 +385,14 @@ let task_status_icon_name status = | "canceled" -> "app:task-canceled" | _ -> "app:task-todo" +let task_priority_icon_name (priority : Model.task_status) = + let level = match priority.ident, priority.icon_id with + | Some "logseq.property/priority.urgent", _ | _, Some "priorityLvlUrgent" -> "urgent" + | Some "logseq.property/priority.high", _ | _, Some "priorityLvlHigh" -> "high" + | Some "logseq.property/priority.medium", _ | _, Some "priorityLvlMedium" -> "medium" + | _ -> "low" in + "app:priority-" ^ level + let task_status_foreground (status : Model.task_status) = match status.icon_color with | Some color -> color @@ -772,6 +780,11 @@ let node_related_section_visible_ (current : Model.logseq_model) = && (not (current_content_is_tag_ current)) && active_node_related_rows current <> [] +let active_node_result_views (current : Model.logseq_model) = + match active_node_projection current with + | Some node -> node.node_result_views_json + | None -> current.result_views_json + let node_tag_section_visible_ (current : Model.logseq_model) = current_content_active_ current && current_content_is_tag_ current @@ -1366,6 +1379,7 @@ let journal_navigation_model (current : Model.logseq_model) = selected_page = None; selected_page_is_tag = false; selected_page_is_property = false; + result_views_json = ""; related_rows = []; linked_reference_rows = []; node_routes = []; diff --git a/shared/src/logseq/view_base.mli b/shared/src/logseq/view_base.mli index 8842ea36..a9128879 100644 --- a/shared/src/logseq/view_base.mli +++ b/shared/src/logseq/view_base.mli @@ -394,3 +394,6 @@ val with_int_prop_signal : val with_liquid_glass : string -> Lui_elements.t -> Lui_elements.t val with_reading_insets : Lui_elements.t -> Lui_elements.t val icon_of_wire_name : string -> Lui_elements.icon +val active_node_result_views : Model.logseq_model -> string + +val task_priority_icon_name : Model.task_status -> string diff --git a/shared/src/logseq/view_outliner.ml b/shared/src/logseq/view_outliner.ml index 103516cc..e9254368 100644 --- a/shared/src/logseq/view_outliner.ml +++ b/shared/src/logseq/view_outliner.ml @@ -292,6 +292,31 @@ let outliner_status_control (context : Lui_ui.ui_context) model_source ~accessibility_identifier:"button.block-task-status" [ status_menu ])) +let outliner_priority_control model_source row_source send : t = + let row = Signal.sample row_source in + let choose uuid = ignore (send (Model.SetOutlinerTaskPriority (row.Model.row_uuid, uuid))) in + stack ~width:20 ~height:24 [ + View_base.with_string_prop_signal InlineIconName + (Signal.map (fun (row : Model.outline_row) -> + Option.fold ~none:"app:priority-low" ~some:View_base.task_priority_icon_name row.row_priority) row_source) + (View_base.with_label_signal + (Signal.map (fun (row : Model.outline_row) -> Option.fold ~none:"Priority" ~some:(fun (p : Model.task_status) -> p.title) row.row_priority) row_source) + (menu_trigger ~foreground:"muted-foreground" + ~accessibility_identifier:"button.block-task-priority" + [dropdown_menu [ + keyed ~source:(Signal.map (fun (m : Model.logseq_model) -> m.task_priorities) model_source) + ~key:View_base.task_status_identifier ~cmp:compare ~mount:(fun choice_source -> + let choice = Signal.sample choice_source in + menu_item ~text_signal:(reactive (fun (p : Model.task_status) -> p.title) choice_source) + ~icon_signal:(Signal.map (fun p -> View_base.icon_of_wire_name (View_base.task_priority_icon_name p)) choice_source) + ~selected_signal:(Signal.map2 (fun (row : Model.outline_row) (p : Model.task_status) -> + Option.fold ~none:false ~some:(fun (selected : Model.task_status) -> selected.uuid = p.uuid) row.row_priority) row_source choice_source) + ~accessibility_identifier:("button.block-task-priority-option." ^ choice.uuid) + ~on_press:(fun _ -> choose (Signal.sample choice_source).uuid) []); + menu_item ~text:"Clear priority" + ~accessibility_identifier:"button.block-task-priority-clear" ~on_press:(fun _ -> choose "") [] + ]]))] + let outliner_row_main_content (context : Lui_ui.ui_context) model_source retained_row_source row_source send : t = let current_row = Signal.sample row_source in @@ -347,18 +372,7 @@ let outliner_row_main_content (context : Lui_ui.ui_context) model_source (column ~cross:`start [ outliner_status_control context model_source row_source send ]); if_ ~test:(reactive (fun (row : Model.outline_row) -> row.row_priority <> None) row_source) - (icon ~name:(reactive (fun (row : Model.outline_row) -> - let level = match row.row_priority with - | None -> "none" - | Some priority -> - let ident = Option.value ~default:"" priority.ident in - match List.rev (String.split_on_char '/' ident) with - | name :: _ when name <> "" -> name - | _ -> String.lowercase_ascii priority.title in - `app ("priority-" ^ level)) row_source) - ~width:20 ~height:24 ~foreground:"muted-foreground" - ~tooltip:(reactive (fun (row : Model.outline_row) -> - match row.row_priority with Some priority -> priority.title | None -> "") row_source) []); + (outliner_priority_control model_source row_source send); column ~gap:2 ~grow:1.0 ~cross:`start ~accessibility_identifier:("outliner.title-and-tags." ^ current_row.row_uuid) [ @@ -428,13 +442,12 @@ let native_outliner_row model_source retained_source row_source send : t = "opensAsPage", `Bool row.opens_as_page; "journalBullet", `Bool false; "syncFailed", `Bool (View_base.outliner_row_sync_failed_ row); - "priority", (match row.row_priority with - | None -> `Null - | Some priority -> - let ident = Option.value ~default:"" priority.ident in - let level = match String.split_on_char '.' ident |> List.rev with value :: _ -> value | [] -> "none" in - `Assoc ["uuid", `String priority.uuid; "title", `String priority.title; - "icon", `String ("app:priority-" ^ level)]); + "priority", (match row.row_priority with None -> `Null | Some priority -> + `Assoc ["uuid", `String priority.uuid; "title", `String priority.title; + "icon", `String (View_base.task_priority_icon_name priority)]); + "priorities", `List (List.map (fun (priority : Model.task_status) -> + `Assoc ["uuid", `String priority.uuid; "title", `String priority.title; + "icon", `String (View_base.task_priority_icon_name priority)]) current.task_priorities); "status", (match row.row_status with Some value -> status value | None -> `Null); "statuses", `List (List.map status current.task_statuses); "tags", `List (List.map summary row.tags)]) in @@ -447,6 +460,10 @@ let native_outliner_row model_source retained_source row_source send : t = Lui_ui.on_event context node (function | ExtensionEvent (_, _, "collapse", _) -> ignore (send (Model.ToggleOutlinerCollapsed (Signal.sample row_source).row_uuid)) | ExtensionEvent (_, _, "long-press", _) -> ignore (send (Model.LongPressOutlinerBlock (Signal.sample row_source).row_uuid)) + | ExtensionEvent (_, _, "set-priority", values) -> + (match String_map.find_opt "priority" values with + | Some (StringValue priority) -> ignore (send (Model.SetOutlinerTaskPriority ((Signal.sample row_source).row_uuid, priority))) + | _ -> ()) | ExtensionEvent (_, _, "set-status", values) -> let index = match String_map.find_opt "count" values with Some (IntValue value) -> value | _ -> -1 in (match (if index < 0 then None else List.nth_opt (Signal.sample model_source).Model.task_statuses index) with @@ -455,7 +472,7 @@ let native_outliner_row model_source retained_source row_source send : t = | input -> ignore (View_base.handle_outliner_block_content_event input model_source send)); node -let outliner_row (context : Lui_ui.ui_context) model_source +let outliner_row_body (context : Lui_ui.ui_context) model_source retained_row_source row_source send : t = let current_row = Signal.sample row_source in let search_open = (Signal.sample model_source : Model.logseq_model).search_open in @@ -547,6 +564,30 @@ let outliner_row (context : Lui_ui.ui_context) model_source retained_row_source row_source send search_open; ])) +let render_result_block context model_source row_source send = + let retained = Signal.map2 View_rows.make_retained_outline_row model_source row_source in + column ~gap:0 [ + if_ ~test:(Signal.map View_base.outliner_row_structured_breadcrumb_ row_source) + (scroll ~orientation:`horizontal ~height:28 [related_row_breadcrumbs model_source row_source send]); + if_ ~test:(Signal.map View_base.outliner_row_fallback_breadcrumb_ row_source) + (text ~value_signal:(Signal.map View_base.outliner_row_breadcrumb row_source) + ~style_class:"caption" ~foreground:"muted-foreground" []); + outliner_row_body context model_source retained row_source send] + +let outliner_row context model_source retained_row_source row_source send : t = + let body = outliner_row_body context model_source retained_row_source row_source send in + let render_block = render_result_block context model_source in + let bullet_inset = if Lui_ui.host context = KotlinHost then 12 else 20 in + dyn (fun has_query -> + if has_query then column ~gap:0 [body; + View_base.with_int_prop_signal PaddingLeft + (Signal.map (fun (row : Model.outline_row) -> bullet_inset + row.depth * 22) row_source) + (box ~padding_horizontal:8 + ~accessibility_identifier_signal:(Signal.map (fun (row : Model.outline_row) -> "query.inset." ^ row.row_uuid) row_source) + [View_query.view ~render_block model_source row_source send])] + else body) + (Signal.map (fun (row : Model.outline_row) -> row.query_json <> "") row_source) + let journal_heading model_source row_source send children : t = fun context parent -> let node = @@ -896,6 +937,10 @@ let related_section_heading title : t = let reference_entry context model_source entry_source send : t = (* The key fixes the entry kind; row values keep their own reactive bindings. *) match Signal.sample entry_source with + | View_rows.Result_views _ -> + let raw_source = Signal.map (function View_rows.Result_views value -> value | _ -> "") entry_source in + box ~padding_horizontal:16 ~padding_vertical:12 [ + View_query.collection ~render_block:(render_result_block context model_source) model_source raw_source send] | View_rows.Reference_heading (key, title) -> let identifier = if key = "tagged" then "section.tag.tagged-nodes" diff --git a/shared/src/logseq/view_query.ml b/shared/src/logseq/view_query.ml new file mode 100644 index 00000000..ed90df0a --- /dev/null +++ b/shared/src/logseq/view_query.ml @@ -0,0 +1,587 @@ +open Lui_elements + +module Expanded = Set.Make (String) +type block = {row : Model.outline_row; children : block list} +type item = {index : int; uuid : string option; title : string; block : block option; json : Yojson.Basic.t} +type query = {rows : item list; error : string option; source : string} + +let member name = function `Assoc fields -> List.assoc_opt name fields | _ -> None +let string = function Some (`String text) -> text | _ -> "" +let rec decode_block depth json = + if depth > 128 then invalid_arg "Result block nesting is too deep"; + match Response_snapshot.related_row json with + | None -> invalid_arg "Invalid result block" + | Some row -> + let children = match member "children" json with + | Some (`List children) -> List.map (decode_block (depth + 1)) children + | _ -> [] in + {row = {row with Model.query_json = ""; has_children = children <> []; + is_collapsed = children <> []}; children} +let decode raw = + try + let json = Yojson.Basic.from_string raw in + let rows = match member "rows" json with Some (`List rows) -> rows | _ -> [] in + {source = string (member "source" json); + error = (match member "error" json with Some (`String text) -> Some text | _ -> None); + rows = List.mapi (fun index json -> match member "block" json with + | Some block_json -> let block = decode_block 0 block_json in { + index; uuid = Some block.row.row_uuid; title = block.row.row_title; block = Some block; json} + | None -> let cells = match member "cells" json with Some (`List xs) -> xs | _ -> [] in + {index; uuid = None; title = String.concat " · " (List.map (fun value -> string (Some value)) cells); + block = None; json}) rows} + with _ -> {rows = []; error = Some "Unable to display query results"; source = ""} + +let result_item owner render_block send source : t = + fun context parent -> + let initial = Signal.sample source in + let expanded = Signal.state context.ui_scheduler Expanded.empty in + let rows = Signal.own_signal context.ui_scope (Signal.map2 (fun item expanded -> + let rec collect depth block acc = + let row = {block.row with Model.depth; + is_collapsed = block.children <> [] && not (Expanded.mem block.row.row_uuid expanded); + row_breadcrumbs = (if depth = 0 then block.row.row_breadcrumbs else []); + row_breadcrumb = (if depth = 0 then block.row.row_breadcrumb else "")} in + let acc = row :: acc in + if row.is_collapsed then acc else List.fold_left (fun acc child -> collect (depth + 1) child acc) acc block.children in + match item.block with None -> [] | Some block -> List.rev (collect 0 block [])) source (Signal.value expanded)) in + let send = function + | Model.ToggleOutlinerCollapsed uuid -> + let current = Signal.sample (Signal.value expanded) in + Signal.set expanded (if Expanded.mem uuid current then Expanded.remove uuid current else Expanded.add uuid current); + true + | action -> send action in + let identifier = "query.result." ^ owner ^ "." ^ string_of_int initial.index in + (box ~padding:0 ~accessibility_identifier:identifier [ + (match initial.block with + | Some _ -> keyed ~source:rows ~key:(fun row -> row.Model.row_uuid) ~cmp:String.compare + ~mount:(fun source -> render_block source send) + | None -> text ~value_signal:(Signal.map (fun item -> item.title) source) ~text_alignment:`start [])]) context parent + +let legacy_view ~render_block _model_source row_source send : t = + fun context parent -> + let owner = (Signal.sample row_source).Model.row_uuid in + let identifier name = "query." ^ name ^ "." ^ owner in + let own source = Signal.own_signal context.Lui_ui.ui_scope source in + let query = own (Signal.map (fun row -> decode row.Model.query_json) row_source) in + let expanded = Signal.state context.ui_scheduler true in + let limit = Signal.state context.ui_scheduler 20 in + let entries = own (Signal.map2 (fun query count -> + let rec take acc count = function + | _ when count <= 0 -> List.rev acc | [] -> List.rev acc + | row :: rest -> take (row :: acc) (count - 1) rest in + take [] count query.rows) query (Signal.value limit)) in + let visible = own (Signal.map (fun row -> row.Model.query_json <> "" && not row.is_collapsed) row_source) in + (if_ ~test:visible + (box ~padding_horizontal:16 ~padding_vertical:8 + ~accessibility_identifier:(identifier "block") + [column ~gap:4 [ + button ~variant:`ghost ~text_alignment:`start + ~text_signal:(own (Signal.map2 (fun query expanded -> + (if expanded then "▾ " else "▸ ") ^ string_of_int (List.length query.rows) ^ " results") + query (Signal.value expanded))) + ~label:"Toggle query results" ~accessibility_identifier:(identifier "toggle") + ~on_press:(fun _ -> Signal.set expanded (not (Signal.sample (Signal.value expanded)))) []; + if_ ~test:(Signal.value expanded) + (column ~gap:4 ~accessibility_identifier:(identifier "rows") [ + if_ ~test:(own (Signal.map (fun query -> query.error <> None) query)) + (text ~value_signal:(own (Signal.map (fun query -> Option.value ~default:"" query.error) query)) + ~foreground:"destructive" ~accessibility_identifier:(identifier "error") []); + if_ ~test:(own (Signal.map (fun query -> query.error = None && query.rows = []) query)) + (text ~value_signal:(own (Signal.map (fun query -> + if String.trim query.source = "" then "No query defined" else "No results") query)) + ~foreground:"muted-foreground" ~accessibility_identifier:(identifier "empty") []); + keyed ~source:entries ~key:(fun row -> Option.value ~default:"cell" row.uuid ^ ":" ^ string_of_int row.index) + ~cmp:String.compare ~mount:(fun source -> result_item owner render_block send source); + if_ ~test:(own (Signal.map2 (fun query limit -> List.length query.rows > limit) query (Signal.value limit))) + (button ~variant:`ghost ~text:"Show more" ~accessibility_identifier:(identifier "more") + ~on_press:(fun _ -> Signal.set limit (Signal.sample (Signal.value limit) + 20)) []); + ]); + ]])) context parent + + +module Json = Yojson.Basic +let jfield name json = Option.value ~default:`Null (member name json) +let jtext json = string (Some json) +let jlist = function `List values -> values | _ -> [] +let jbool = function `Bool value -> value | _ -> false +let items json = (decode (Json.to_string json)).rows +let text_value = function + | `String value -> value | `Int value -> string_of_int value | `Float value -> string_of_float value + | `Bool value -> string_of_bool value | `Null -> "" | value -> Json.to_string value +let fields json = match json with `Assoc fields -> fields | _ -> [] +let csv value = String.split_on_char ',' value |> List.map String.trim |> List.filter ((<>) "") +let input_value = function `List values -> String.concat ", " (List.map text_value values) + | `Assoc fields -> (match List.assoc_opt "block/journal-day" fields with + | Some (`Int day) -> Printf.sprintf "%04d-%02d-%02d" (day / 10000) (day / 100 mod 100) (day mod 100) + | _ -> "") + | value -> text_value value +let local_input set = function Lui_protocol.TextChanged (_, value) -> set value | _ -> () +let list_take count values = List.filteri (fun index _ -> index < count) values + +type saved_view = {id : string; name : string; typ : string; data : Json.t} +let saved_views raw = + try Json.from_string raw |> jfield "views" |> jlist |> List.mapi (fun index data -> + let id = jtext (jfield "uuid" data) in + {id = (if id = "" then "invalid." ^ string_of_int index else id); + name = jtext (jfield "name" data); typ = jtext (jfield "type" data); data}) + with _ -> [] +let operator_title = function + | "is" -> "Is" | "is-not" -> "Is not" | "text-contains" -> "Contains" + | "text-not-contains" -> "Does not contain" | "number-gt" -> "Greater than" + | "number-gte" -> "At least" | "number-lt" -> "Less than" | "number-lte" -> "At most" + | "between" -> "Between" | "date-before" | "before" -> "Before" + | "date-after" | "after" -> "After" | value -> value +let operators kind = ["is"; "is-not"] @ (match kind with + | "number" -> ["number-gt"; "number-gte"; "number-lt"; "number-lte"; "between"] + | "date" -> ["date-before"; "date-after"] | "datetime" -> ["before"; "after"; "between"] + | "checkbox" -> [] | _ -> ["text-contains"; "text-not-contains"]) +let choices view = jlist (jfield "columns" view.data) +let property_choices view = match jlist (jfield "properties" view.data) with [] -> choices view | values -> values +let view_column view attr = Option.value ~default:(`Assoc ["attr", `String attr; "title", `String attr; "kind", `String "default"]) + (List.find_opt (fun value -> jfield "attr" value = `String attr) (property_choices view)) +let payload owner feature view action extra = + Json.to_string (`Assoc (["ownerUuid", `String owner; "featureType", `String feature; + "viewUuid", `String view; "action", `String action] @ extra)) +let feedback source id = Signal.map (fun (model : Model.logseq_model) -> + List.find_opt (fun (view, _, _) -> view = id) model.result_view_feedback) source +let action_error source id = if_ ~test:(Signal.map (function Some (_, _, Some _) -> true | _ -> false) (feedback source id)) + (text ~foreground:"destructive" ~style_class:"footnote" ~accessibility_identifier:("view.action.error." ^ id) + ~value_signal:(Signal.map (function Some (_, _, Some message) -> message | _ -> "") (feedback source id)) []) +let waiting source id = Signal.map (fun (model : Model.logseq_model) -> + List.exists (function Model.ResultViewEffect (_, view, _) -> view = id | _ -> false) + (model.pending_effects @ model.in_flight_effects)) source +let action_error_section source id = + if_ ~test:(Signal.map (function Some (_, _, Some _) -> true | _ -> false) (feedback source id)) + (list_section [list_item [action_error source id]]) + +type filter_draft = {key : int; attr : string; op : string; value : Json.t} +type sort_draft = {key : int; attr : string; asc : bool} +let filter_value_title col value = match value with + | `List values -> String.concat ", " (List.map (fun value -> + match List.find_opt (fun choice -> jfield "match" choice = `List [value]) (jlist (jfield "filterValues" col)) with + | Some choice -> jtext (jfield "title" choice) | None -> text_value value) values) + | value -> input_value value + +let settings_sheet mode owner feature view_source model_source send close : t = + fun context parent -> + let initial = Signal.sample view_source in + let own value = Signal.own_signal context.ui_scope value in + let state value = Signal.state context.ui_scheduler value in + let or_ = state (jbool (jfield "or?" (jfield "filters" initial.data))) in + let filters = state (List.mapi (fun key -> function + | `List [`String attr; `String op; value] -> {key; attr; op; value} + | _ -> {key; attr = "block/title"; op = "text-contains"; value = `String ""}) + (jlist (jfield "filters" (jfield "filters" initial.data)))) in + let sorts = state (List.mapi (fun key value -> {key; attr = jtext (jfield "id" value); asc = jbool (jfield "asc?" value)}) + (jlist (jfield "sorting" initial.data))) in + let sequence = ref (List.length (Signal.sample (Signal.value filters)) + List.length (Signal.sample (Signal.value sorts))) in + let next () = incr sequence; !sequence in + let update_filter key change = Signal.set filters (List.map (fun (value : filter_draft) -> if value.key = key then change value else value) + (Signal.sample (Signal.value filters))) in + let update_sort key change = Signal.set sorts (List.map (fun (value : sort_draft) -> if value.key = key then change value else value) + (Signal.sample (Signal.value sorts))) in + let choose_property label value choose = menu ~text_signal:label ~label:"Property" [ + keyed ~source:(own (Signal.map property_choices view_source)) ~key:(fun col -> jtext (jfield "attr" col)) ~cmp:String.compare + ~mount:(fun col -> let col = Signal.sample col in + menu_item ~text:(jtext (jfield "title" col)) ~selected_signal:(own (Signal.map ((=) (jtext (jfield "attr" col))) value)) + ~on_press:(fun _ -> choose (jtext (jfield "attr" col))) [])] in + let filter_row source : t = + let first : filter_draft = Signal.sample source in + let attr_source = own (Signal.map (fun (value : filter_draft) -> value.attr) source) in + let col = own (Signal.map2 view_column view_source attr_source) in + let matches = own (Signal.map (fun (value : filter_draft) -> List.mem value.op ["is"; "is-not"]) source) in + let between = own (Signal.map (fun (value : filter_draft) -> value.op = "between") source) in + let bound index label = text_field ~grow:1.0 ~placeholder:label ~label + ~text_signal:(own (Signal.map (fun (draft : filter_draft) -> + Option.fold ~none:"" ~some:text_value (List.nth_opt (jlist draft.value) index)) source)) + ~on_input:(local_input (fun text -> update_filter first.key (fun draft -> + let scalar text = match float_of_string_opt (String.trim text) with + | Some value when Float.is_finite value -> `Float value + | _ -> if String.trim text = "" then `Null else `String text in + {draft with value = `List (List.init 2 (fun position -> + if position = index then scalar text else Option.value ~default:`Null (List.nth_opt (jlist draft.value) position)))}))) [] in + list_section ~header:(text ~value_signal:(own (Signal.map (fun values -> + let rec position index = function + | [] -> index | (value : filter_draft) :: _ when value.key = first.key -> index + | _ :: rest -> position (index + 1) rest in + "Filter " ^ string_of_int (position 1 values)) (Signal.value filters))) []) [ + list_item [row ~main:`space_between ~cross:`center [ + choose_property (own (Signal.map (fun col -> jtext (jfield "title" col)) col)) attr_source + (fun attr -> update_filter first.key (fun value -> {value with attr; op = "is"; value = `String "empty"})); + button ~variant:`ghost ~text:"Remove" ~label:"Remove filter" + ~on_press:(fun _ -> Signal.set filters (List.filter (fun (value : filter_draft) -> value.key <> first.key) (Signal.sample (Signal.value filters)))) []]]; + list_item [menu ~text_signal:(own (Signal.map (fun (value : filter_draft) -> operator_title value.op) source)) ~label:"Filter operator" [ + keyed ~source:(own (Signal.map (fun col -> operators (jtext (jfield "kind" col))) col)) ~key:Fun.id ~cmp:String.compare + ~mount:(fun op -> let op = Signal.sample op in menu_item ~text:(operator_title op) + ~on_press:(fun _ -> update_filter first.key (fun value -> {value with op})) [])]]; + if_ ~test:(own (Signal.map2 (fun matches between -> not matches && not between) matches between)) + (list_item [text_field ~text_signal:(own (Signal.map2 (fun col (value : filter_draft) -> filter_value_title col value.value) col source)) + ~placeholder:"Value" ~label:"Filter value" ~accessibility_identifier:("view.filter.value." ^ initial.id ^ "." ^ string_of_int first.key) + ~on_input:(local_input (fun text -> update_filter first.key (fun value -> + let kind = jtext (jfield "kind" (Signal.sample col)) in + let scalar text = match float_of_string_opt text with Some n when Float.is_finite n -> `Float n | _ -> `String text in + let matched = if value.op = "between" then + let values = String.split_on_char ',' text in + `List (List.map (fun value -> if String.trim value = "" then `Null else scalar (String.trim value)) values) + else if (value.op = "is" || value.op = "is-not") && text = "empty" then `String "empty" + else if kind = "checkbox" && (text = "true" || text = "false") then `Bool (text = "true") + else if value.op = "is" || value.op = "is-not" then + let choices = jlist (jfield "filterValues" (Signal.sample col)) in + `List (List.concat_map (fun title -> + match List.find_opt (fun choice -> jfield "title" choice = `String title) choices with + | Some choice -> jlist (jfield "match" choice) + | None -> [if kind = "number" && not (jbool (jfield "ref" (Signal.sample col))) then scalar title else `String title]) (csv text)) + else if kind = "date" then (match int_of_string_opt (String.concat "" (String.split_on_char '-' text)) with + | Some day -> `Assoc ["block/journal-day", `Int day] | _ -> `String text) + else if kind = "number" || kind = "datetime" then scalar text else `String text in + {value with value = matched}))) []]); + if_ ~test:between (list_item [row ~gap:12 [bound 0 "Minimum"; bound 1 "Maximum"]]); + if_ ~test:(own (Signal.map (fun (draft : filter_draft) -> List.mem draft.op ["is"; "is-not"; "date-before"; "date-after"]) source)) + (list_item [row ~gap:8 [ + if_ ~test:matches (button ~text:"Empty" ~variant:`ghost ~on_press:(fun _ -> update_filter first.key (fun value -> {value with value = `String "empty"})) []); + menu ~text_signal:(own (Signal.map2 (fun col (draft : filter_draft) -> + let title = filter_value_title col draft.value in if title = "" then "Select values" else title) col source)) + ~label:"Choose filter value" [ + keyed ~source:(own (Signal.map (fun col -> jlist (jfield "filterValues" col)) col)) ~key:(fun value -> Json.to_string value) ~cmp:String.compare + ~mount:(fun value -> let value = Signal.sample value in menu_item ~text:(jtext (jfield "title" value)) + ~selected_signal:(own (Signal.map (fun (draft : filter_draft) -> + let matched = jfield "match" value in + match matched with `Bool _ -> draft.value = matched + | `List values -> values <> [] && List.for_all (fun value -> List.mem value (jlist draft.value)) values + | _ -> false) source)) + ~on_press:(fun _ -> update_filter first.key (fun draft -> {draft with value = + (if draft.op = "date-before" || draft.op = "date-after" then + `Assoc ["block/journal-day", jfield "journalDay" value] + else match jfield "match" value with + | `List values -> let current = jlist draft.value in + `List (if List.for_all (fun value -> List.mem value current) values then + List.filter (fun value -> not (List.mem value values)) current + else current @ List.filter (fun value -> not (List.mem value current)) values) + | value -> value)})) [])]]]) + ] in + let sort_row source : t = + let first : sort_draft = Signal.sample source in + let attr_source = own (Signal.map (fun (value : sort_draft) -> value.attr) source) in + list_section ~header:(text ~value_signal:(own (Signal.map (fun values -> + let rec position index = function + | [] -> index | (value : sort_draft) :: _ when value.key = first.key -> index + | _ :: rest -> position (index + 1) rest in + "Sort " ^ string_of_int (position 1 values)) (Signal.value sorts))) []) [ + list_item [row ~gap:8 ~main:`space_between ~cross:`center [ + choose_property (own (Signal.map2 (fun view attr -> jtext (jfield "title" (view_column view attr))) view_source attr_source)) attr_source + (fun attr -> update_sort first.key (fun value -> {value with attr})); + menu ~text_signal:(own (Signal.map (fun (value : sort_draft) -> if value.asc then "Ascending" else "Descending") source)) + ~label:"Sort direction" (List.map (fun asc -> menu_item ~text:(if asc then "Ascending" else "Descending") + ~selected_signal:(own (Signal.map (fun (value : sort_draft) -> value.asc = asc) source)) + ~on_press:(fun _ -> update_sort first.key (fun value -> {value with asc})) []) [true; false]); + menu ~icon:(`app "more-horiz") ~label:"Sort actions" [ + menu_item ~text:"Move up" ~on_press:(fun _ -> + let rec move = function + | previous :: (value : sort_draft) :: rest when value.key = first.key -> value :: previous :: rest + | value :: rest -> value :: move rest | [] -> [] in + Signal.set sorts (move (Signal.sample (Signal.value sorts)))) []; + menu_item ~text:"Remove" ~variant:`destructive ~on_press:(fun _ -> + Signal.set sorts (List.filter (fun (value : sort_draft) -> value.key <> first.key) (Signal.sample (Signal.value sorts)))) []; + ]; + ]]; + ] in + let save _ = + let filters = Signal.sample (Signal.value filters) and sorts = Signal.sample (Signal.value sorts) in + let config = `Assoc (if mode = "filter" then [ + "filters", `Assoc ["or", `Bool (Signal.sample (Signal.value or_)); "clauses", `List (List.map (fun (value : filter_draft) -> + `List [`String value.attr; `String value.op; value.value]) filters)]] + else ["sorting", `List (List.map (fun (value : sort_draft) -> `Assoc ["id", `String value.attr; "asc", `Bool value.asc]) sorts)]) in + ignore (send (Model.SubmitResultView (initial.id, payload owner feature initial.id "save" ["config", config]))) in + let cancel = button ~text:"Cancel" ~variant:`ghost ~style_class:"cancellation-action" + ~accessibility_identifier:("view.settings.cancel." ^ initial.id) ~on_press:(fun _ -> close ()) [] in + let save = button ~text:"Done" ~variant:`ghost ~style_class:"confirmation-action" + ~disabled_signal:(waiting model_source initial.id) + ~accessibility_identifier:("view.settings.save." ^ initial.id) ~on_press:save [] in + (sheet ~text:(if mode = "filter" then "Filters" else "Sort") ~style_class:"navigation-list navigation-inline-title" ~detents:"medium,large" + ~accessibility_identifier:("view.settings.sheet." ^ initial.id) + ~on_dismiss:(fun _ -> close ()) [ + list ~grow:1.0 ~style:`inset_grouped ~accessibility_identifier:("view." ^ mode ^ ".list." ^ initial.id) + (action_error_section model_source initial.id :: + (if mode = "filter" then [ + list_section ~header:(text ~value:"Match" []) [list_item [ + tabs (List.map (fun value -> button ~text:(if value then "Any" else "All") + ~selected_signal:(own (Signal.map ((=) value) (Signal.value or_))) + ~on_press:(fun _ -> Signal.set or_ value) []) [false; true])]]; + keyed ~source:(Signal.value filters) ~key:(fun (value : filter_draft) -> value.key) ~cmp:Int.compare ~mount:filter_row; + list_section [list_item [button ~text:"Add filter" ~variant:`ghost ~accessibility_identifier:("view.filter.add." ^ initial.id) + ~on_press:(fun _ -> Signal.set filters (Signal.sample (Signal.value filters) @ [{key = next (); attr = "block/title"; op = "text-contains"; value = `String ""}])) []]]; + ] else [ + keyed ~source:(Signal.value sorts) ~key:(fun (value : sort_draft) -> value.key) ~cmp:Int.compare ~mount:sort_row; + list_section [list_item [button ~text:"Add sort" ~variant:`ghost ~accessibility_identifier:("view.sort.add." ^ initial.id) + ~on_press:(fun _ -> Signal.set sorts (Signal.sample (Signal.value sorts) @ [{key = next (); attr = "block/title"; asc = true}])) []]]; + ])); + (if Lui_ui.host context = KotlinHost then row ~main:`space_between ~padding:12 [cancel; save] + else toolbar ~label:"View settings actions" ~style_class:"navigation-actions" [cancel; save]); + ]) context parent + +let rec raw_selection_values raw = + match jtext (jfield "type" raw) with + | "ref-uuid" -> [jtext (jfield "value" raw)] + | "set" | "vector" -> List.concat_map raw_selection_values (jlist (jfield "value" raw)) + | "" -> [] + | _ -> [text_value (jfield "value" raw)] + +let value_sheet owner feature view model_source send item property close : t = + fun context parent -> + let own value = Signal.own_signal context.ui_scope value in + let state value = Signal.state context.ui_scheduler value in + let attr = jtext (jfield "attr" property) in + let col = view_column view attr in + let plain = attr = "block/title" in + let checkbox = jfield "kind" col = `String "checkbox" in + let many = jbool (jfield "many" col) in + let ref_ = jbool (jfield "ref" col) in + let closed = jlist (jfield "choices" col) <> [] || jbool (jfield "closed" col) in + let query = state (if plain then jtext (jfield "text" property) else "") in + let selected = state (raw_selection_values (jfield "raw" property)) in + let created = state [] in + let submit ?selected_values ?(new_values = []) ?(create = false) value = + ignore (send (Model.SubmitResultView (view.id, payload owner feature view.id "editCell" + (["blockUuid", `String (Option.value ~default:"" item.uuid); "attr", `String attr; + "expected", jfield "raw" property; "value", `String value; "create", `Bool create] + @ (match selected_values with None -> [] | Some values -> ["selectedValues", `List (List.map (fun value -> `String value) values)]) + @ (if new_values = [] then [] else ["newValues", `List (List.map (fun value -> `String value) new_values)]))))) in + let options = + let choices = jlist (jfield "choices" col) in + if choices <> [] then List.map (fun choice -> + jtext (jfield "uuid" choice), jtext (jfield "title" choice)) choices + else List.map (fun choice -> + let value = if ref_ then match jlist (jfield "match" choice) with + | [`String uuid] -> uuid | _ -> "" + else text_value (jfield "value" choice) in + value, jtext (jfield "title" choice)) (jlist (jfield "filterValues" col)) + |> List.filter (fun (value, _) -> value <> "") in + let visible = own (Signal.map (fun input -> List.filter (fun (_, title) -> + String_kit.includes ~sub:(Dev_query.Unicode.lowercase input) (Dev_query.Unicode.lowercase title)) options) (Signal.value query)) in + let toggle value = + let values = Signal.sample (Signal.value selected) in + Signal.set selected (if List.mem value values then List.filter ((<>) value) values else values @ [value]) in + let choose value = + if many then toggle value + else if ref_ then submit ~selected_values:[value] "" else submit value in + let can_create = not closed && not plain && not checkbox && + (jfield "canCreate" col <> `Bool false) in + let create_visible = own (Signal.map (fun input -> can_create && String.trim input <> "" + && not (List.exists (fun (_, title) -> Dev_query.Unicode.lowercase title = Dev_query.Unicode.lowercase (String.trim input)) options) + && not (List.mem (String.trim input) (Signal.sample (Signal.value created)))) (Signal.value query)) in + let confirm _ = if plain then submit (Signal.sample (Signal.value query)) + else if ref_ then submit ~selected_values:(Signal.sample (Signal.value selected)) + ~new_values:(Signal.sample (Signal.value created)) ~create:true "" + else submit (String.concat ", " (Signal.sample (Signal.value selected) @ Signal.sample (Signal.value created))) in + let cancel = button ~text:"Cancel" ~variant:`ghost ~style_class:"cancellation-action" + ~accessibility_identifier:("view.edit.cancel." ^ view.id) ~on_press:(fun _ -> close ()) [] in + let confirm = button ~text:"Done" ~variant:`ghost ~style_class:"confirmation-action" + ~accessibility_identifier:("view.edit.save." ^ view.id) + ~disabled_signal:(waiting model_source view.id) ~on_press:confirm [] in + let option_row (value, title) = list_item [ + menu_item ~text:title ~min_height:44 + ~selected_signal:(own (Signal.map (List.mem value) (Signal.value selected))) + ~disabled_signal:(waiting model_source view.id) + ~accessibility_identifier:("view.edit.option." ^ view.id ^ "." ^ value) + ~on_press:(fun _ -> choose value) []] in + let controls = if plain || many then [cancel; confirm] else [cancel] in + (sheet ~text:(jtext (jfield "title" col)) ~style_class:"navigation-list navigation-inline-title" ~detents:"medium,large" + ~accessibility_identifier:("view.edit.sheet." ^ view.id) ~on_dismiss:(fun _ -> close ()) [ + list ~grow:1.0 ~style:`inset_grouped ~accessibility_identifier:("view.edit.list." ^ view.id) + ((if plain then [list_section [list_item [text_field ~text_signal:(Signal.value query) + ~label:"Value" ~placeholder:"Value" ~autofocus:true ~accessibility_identifier:("view.edit.value." ^ view.id) + ~on_input:(local_input (Signal.set query)) []]]] + else if checkbox then [list_section (List.map (fun value -> list_item [ + menu_item ~text:(if value then "True" else "False") ~min_height:44 + ~selected:(jfield "value" (jfield "raw" property) = `Bool value) + ~accessibility_identifier:("view.edit.bool." ^ string_of_bool value ^ "." ^ view.id) + ~disabled_signal:(waiting model_source view.id) ~on_press:(fun _ -> submit (string_of_bool value)) []]) [true; false])] + else [ + search_field ~container_relative_frame:`horizontal ~padding_horizontal:16 + ~text_signal:(Signal.value query) ~placeholder:"Search or create a value" ~label:"Search values" + ~accessibility_identifier:("view.edit.value." ^ view.id) ~on_input:(local_input (Signal.set query)) []; + list_section [ + keyed ~source:visible ~key:fst ~cmp:String.compare ~mount:(fun source -> option_row (Signal.sample source)); + keyed ~source:(Signal.value created) ~key:Fun.id ~cmp:String.compare ~mount:(fun source -> + let value = Signal.sample source in list_item [menu_item ~text:value ~selected:true + ~on_press:(fun _ -> Signal.set created (List.filter ((<>) value) (Signal.sample (Signal.value created)))) []]); + if_ ~test:create_visible (list_item [button ~variant:`ghost ~text_alignment:`start ~min_height:44 + ~text_signal:(own (Signal.map (fun input -> "Create “" ^ String.trim input ^ "”") (Signal.value query))) + ~accessibility_identifier:("view.edit.create." ^ view.id) ~disabled_signal:(waiting model_source view.id) + ~on_press:(fun _ -> let value = String.trim (Signal.sample (Signal.value query)) in + if many then (Signal.set created (Signal.sample (Signal.value created) @ [value]); Signal.set query "") + else submit ~create:true value) []]); + ]; + ]) @ [ + list_section [list_item [button ~text:"Clear value" ~variant:`ghost ~min_height:44 + ~accessibility_identifier:("view.edit.clear." ^ view.id) ~disabled_signal:(waiting model_source view.id) + ~on_press:(fun _ -> if many then (Signal.set selected []; Signal.set created []) else submit "") []]]; + action_error_section model_source view.id; + ]); + (if Lui_ui.host context = KotlinHost then row ~main:`space_between ~padding:12 controls + else toolbar ~label:"Property value actions" ~style_class:"navigation-actions" controls); + ]) context parent + +let collection ~render_block model_source raw_source send : t = + fun context parent -> + let own value = Signal.own_signal context.ui_scope value in + let initial = try Json.from_string (Signal.sample raw_source) with _ -> `Null in + let owner = jtext (jfield "ownerUuid" initial) and feature = jtext (jfield "featureType" initial) in + let views = own (Signal.map saved_views raw_source) in + let active = Signal.state context.ui_scheduler "" and search = Signal.state context.ui_scheduler "" in + let is_query_expansion raw = try member "expanded" (Json.from_string raw) <> None with _ -> false in + let source_expanded raw = try match member "expanded" (Json.from_string raw) with Some (`Bool value) -> value | _ -> true with _ -> true in + let expanded = Signal.state context.ui_scheduler (source_expanded (Signal.sample raw_source)) in + ignore (Signal.own context.ui_scope (Signal.observe raw_source (fun raw -> + if is_query_expansion raw then Signal.set expanded (source_expanded raw)))); + let search_open = Signal.state context.ui_scheduler false in + let chosen = own (Signal.map2 (fun views id -> + match List.find_opt (fun view -> view.id = id) views with Some view -> [view] + | None -> list_take 1 views) views (Signal.value active)) in + let results_toggle () = + button ~variant:`ghost ~text_alignment:`start ~grow:1.0 + ~accessibility_identifier:("query.toggle." ^ owner) + ~disabled_signal:(waiting model_source owner) + ~text_signal:(own (Signal.map2 (fun views expanded -> + if not expanded then "▸ Results" else + "▾ " ^ string_of_int (List.fold_left (fun count view -> max count (List.length (items view.data))) 0 views) ^ " results") views (Signal.value expanded))) + ~on_press:(fun _ -> + let next = not (Signal.sample (Signal.value expanded)) in + if is_query_expansion (Signal.sample raw_source) then + ignore (send (Model.SubmitResultView (owner, payload owner feature "" "setExpanded" ["expanded", `Bool next]))) + else Signal.set expanded next) [] in + let mount view_source : t = + fun context parent -> + let own value = Signal.own_signal context.ui_scope value in + let view = Signal.sample view_source in + let limit = Signal.state context.ui_scheduler 20 in + let settings = Signal.state context.ui_scheduler "" in + let editing = Signal.state context.ui_scheduler None in + let rows = own (Signal.map2 (fun view input -> items view.data |> List.filter (fun item -> + String.trim input = "" || String_kit.includes ~sub:(Dev_query.Unicode.lowercase input) + (Dev_query.Unicode.lowercase item.title))) view_source (Signal.value search)) in + let entries = own (Signal.map2 list_take (Signal.value limit) rows) in + let finished = ref None in + ignore (Signal.own context.ui_scope (Signal.observe (feedback model_source view.id) (function + | Some (_, id, None) when !finished <> Some id -> finished := Some id; Signal.set editing None; Signal.set settings "" + | _ -> ()))); + let edit row property = + Signal.set editing (Some (row, property)) in + let cell view item attr = + let row = item.json in + List.find_opt (fun property -> jfield "attr" property = `String attr) (jlist (jfield "properties" row)) + |> Option.value ~default:(`Assoc ["text", `String ""; "attr", `String attr; "raw", `Null; + "editable", jfield "editable" (view_column view attr)]) in + let table_row item_source : t = + dyn (fun (view, item) -> row ~gap:0 ~cross:`stretch (List.map (fun col -> let attr = jtext (jfield "attr" col) in + if String.starts_with ~prefix:"query.result/" attr then + let index = int_of_string (String.sub attr 13 (String.length attr - 13)) in + let values = jlist (jfield "cells" item.json) in + text ~value:(Option.fold ~none:"" ~some:text_value (List.nth_opt values index)) ~width:170 ~min_height:48 ~padding:12 + ~accessibility_identifier:("view.scalar." ^ view.id ^ "." ^ string_of_int item.index ^ "." ^ string_of_int index) [] + else + let property = cell view item attr in + let value = jtext (jfield "text" property) in + let label = jtext (jfield "title" col) ^ ": " ^ (if value = "" then "Empty" else value) in + button ~text:value ~label ~text_alignment:`start ~variant:`ghost + ~width:(if attr = "block/title" then 260 else 170) ~min_height:48 ~corner_radius:0 ~padding_horizontal:12 + ~disabled:(not (jbool (jfield "editable" property))) + ~accessibility_identifier:("view.cell." ^ view.id ^ "." ^ Option.value ~default:"" item.uuid ^ "." ^ attr) + ~on_press:(fun _ -> edit item property) []) (choices view))) (own (Signal.map2 (fun view item -> view, item) view_source item_source)) in + let gallery_card item_source : t = + dyn (fun (view, item) -> column ~gap:10 ~padding:16 ~background:"secondary" ~border_color:"border" ~border_width:1 ~corner_radius:12 + ~accessibility_identifier:("view.card." ^ view.id ^ "." ^ Option.value ~default:"" item.uuid) [ + button ~text:item.title ~text_alignment:`start ~variant:`ghost ~min_height:44 + ~on_press:(fun _ -> Option.iter (fun uuid -> ignore (send (Model.RequestAppNode uuid))) item.uuid) []; + column ~gap:8 (choices view |> List.filter (fun col -> jfield "attr" col <> `String "block/title") + |> List.map (fun col -> let property = cell view item (jtext (jfield "attr" col)) in + row ~gap:12 ~main:`space_between [text ~value:(jtext (jfield "title" col)) ~foreground:"muted-foreground" ~style_class:"caption" []; + text ~value:(jtext (jfield "text" property)) ~style_class:"caption" []]))]) (own (Signal.map2 (fun view item -> view, item) view_source item_source)) in + let error = own (Signal.map (fun view -> jtext (jfield "error" view.data)) view_source) in + (column ~gap:8 ~cross:`stretch [ + row ~gap:0 ~cross:`center ~accessibility_identifier:("view.toolbar." ^ owner) [ + (if feature = "query-result" then results_toggle () else + tabs ~grow:1.0 ~style_class:"scrollable" ~accessibility_identifier:("view.tabs." ^ owner) [ + keyed ~source:views ~key:(fun view -> view.id) ~cmp:String.compare ~mount:(fun source -> + let tab = Signal.sample source in + button ~text_signal:(own (Signal.map (fun tab -> tab.name) source)) + ~selected:(tab.id = view.id) ~accessibility_identifier:("view.tab." ^ tab.id) + ~on_press:(fun _ -> Signal.set active tab.id) [])]); + button ~icon:(`app "view-filter") ~label:"Filters" ~variant:`ghost ~width:40 ~height:44 + ~accessibility_identifier:("view.filter." ^ view.id) ~on_press:(fun _ -> Signal.set settings "filter") []; + button ~icon:(`app "view-sort") ~label:"Sort" ~variant:`ghost ~width:40 ~height:44 + ~accessibility_identifier:("view.sort." ^ view.id) ~on_press:(fun _ -> Signal.set settings "sort") []; + button ~icon:(`app "search") ~label:"Search results" ~variant:`ghost ~width:40 ~height:44 + ~accessibility_identifier:("view.search.toggle." ^ owner) + ~on_press:(fun _ -> + let was_open = Signal.sample (Signal.value search_open) in + if was_open then Signal.set search ""; + Signal.set search_open (not was_open)) []; + menu ~icon_signal:(own (Signal.map (fun view -> `app ("view-" ^ view.typ)) view_source)) + ~label:"View type" ~accessibility_identifier:("view.type." ^ view.id) + ~disabled_signal:(waiting model_source view.id) + ((if feature = "query-result" then [ + submenu ~text:"Saved views" [ + keyed ~source:views ~key:(fun view -> view.id) ~cmp:String.compare ~mount:(fun source -> + let saved = Signal.sample source in + menu_item ~text_signal:(own (Signal.map (fun view -> view.name) source)) + ~selected:(saved.id = view.id) ~accessibility_identifier:("view.tab." ^ saved.id) + ~on_press:(fun _ -> Signal.set active saved.id) [])] + ] else []) @ List.map (fun (typ, title) -> menu_item ~text:title ~icon:(`app ("view-" ^ typ)) + ~selected_signal:(own (Signal.map (fun view -> view.typ = typ) view_source)) + ~accessibility_identifier:("view.type.option." ^ view.id ^ "." ^ typ) + ~on_press:(fun _ -> + if (Signal.sample view_source).typ <> typ then ignore (send (Model.SubmitResultView + (view.id, payload owner feature view.id "save" ["config", `Assoc ["type", `String typ; "name", `String (Signal.sample view_source).name]])))) []) + ["list", "List"; "table", "Table"; "gallery", "Gallery"]); + ]; + if_ ~test:(Signal.value search_open) + (row ~cross:`center [search_field ~grow:1.0 ~text_signal:(Signal.value search) ~placeholder:"Search results" ~label:"Search results" + ~accessibility_identifier:("view.search." ^ owner) ~on_input:(local_input (Signal.set search)) []]); + action_error model_source view.id; + if_ ~test:(own (Signal.map ((<>) "") error)) + (text ~value_signal:error ~foreground:"destructive" ~accessibility_identifier:("view.error." ^ view.id) []); + if_ ~test:(own (Signal.map ((=) "") error)) + (column ~gap:8 [ + if_ ~test:(own (Signal.map ((=) []) rows)) (text ~value:"No results" ~foreground:"muted-foreground" ~accessibility_identifier:("query.empty." ^ owner) []); + (dyn (fun current -> match current.typ with + | "table" -> scroll ~orientation:`horizontal ~accessibility_identifier:("view.table.scroll." ^ view.id) [ + column ~gap:0 ~cross:`stretch ~border_color:"border" ~border_width:1 ~corner_radius:10 [ + row ~gap:0 (List.map (fun col -> text ~value:(jtext (jfield "title" col)) ~style_class:"subheadline" + ~width:(if jfield "attr" col = `String "block/title" then 260 else 170) ~padding:12 ~background:"secondary" []) (choices current)); + separator []; keyed ~source:entries ~key:(fun item -> item.index) ~cmp:Int.compare ~mount:(fun source -> column ~gap:0 [table_row source; separator []])]] + | "gallery" -> dyn (fun columns -> grid ~columns ~gap:12 ~accessibility_identifier:("view.gallery." ^ view.id) [ + keyed ~source:entries ~key:(fun item -> item.index) ~cmp:Int.compare ~mount:gallery_card]) + (own (Signal.map (fun (model : Model.logseq_model) -> if model.viewport_width >= 700 then 2 else 1) model_source)) + | _ -> column ~gap:4 ~accessibility_identifier:("query.rows." ^ owner) [ + keyed ~source:entries ~key:(fun item -> item.index) ~cmp:Int.compare ~mount:(result_item owner render_block send)]) view_source); + if_ ~test:(own (Signal.map2 (fun rows limit -> List.length rows > limit) rows (Signal.value limit))) + (button ~text:"Show more" ~variant:`ghost ~accessibility_identifier:("query.more." ^ owner) + ~on_press:(fun _ -> Signal.set limit (Signal.sample (Signal.value limit) + 20)) [])]); + if_ ~test:(own (Signal.map ((<>) "") (Signal.value settings))) + (dyn (fun mode -> settings_sheet mode owner feature view_source model_source send (fun () -> Signal.set settings "")) (Signal.value settings)); + if_ ~test:(own (Signal.map Option.is_some (Signal.value editing))) + (dyn (function None -> box [] | Some (item, property) -> + value_sheet owner feature view model_source send item property (fun () -> Signal.set editing None)) (Signal.value editing)); + ]) context parent in + (column ~gap:8 ~cross:`stretch ~accessibility_identifier:("query.block." ^ owner) [ + if_ ~test:(own (Signal.map2 (fun raw expanded -> expanded && (decode raw).error <> None) raw_source (Signal.value expanded))) + (text ~value_signal:(own (Signal.map (fun raw -> Option.value ~default:"" (decode raw).error) raw_source)) + ~foreground:"destructive" ~accessibility_identifier:("query.error." ^ owner) []); + (if feature = "query-result" then + if_ ~test:(own (Signal.map not (Signal.value expanded))) + (row ~cross:`center ~accessibility_identifier:("view.toolbar." ^ owner) [results_toggle ()]) + else box []); + action_error model_source owner; + if_ ~test:(Signal.value expanded) (column ~gap:8 [ + keyed ~source:chosen ~key:(fun view -> view.id) ~cmp:String.compare ~mount; + box ~height:24 ~accessibility_identifier:("view.results-gap." ^ owner) []; + ])]) context parent + +let view ~render_block model_source row_source send : t = + let raw_source = Signal.map (fun (row : Model.outline_row) -> row.query_json) row_source in + dyn (fun has_views -> + if has_views then if_ ~test:(Signal.map (fun (row : Model.outline_row) -> not row.is_collapsed) row_source) + (collection ~render_block model_source raw_source send) + else legacy_view ~render_block model_source row_source send) + (Signal.map (fun raw -> saved_views raw <> [] || (try member "expanded" (Json.from_string raw) <> None with _ -> false)) raw_source) diff --git a/shared/src/logseq/view_query.mli b/shared/src/logseq/view_query.mli new file mode 100644 index 00000000..a4c5840b --- /dev/null +++ b/shared/src/logseq/view_query.mli @@ -0,0 +1,5 @@ +val view : render_block:(Model.outline_row Signal.signal -> (Model.logseq_action -> bool) -> Lui_elements.t) -> + Model.logseq_model Signal.signal -> Model.outline_row Signal.signal -> + (Model.logseq_action -> bool) -> Lui_elements.t +val collection : render_block:(Model.outline_row Signal.signal -> (Model.logseq_action -> bool) -> Lui_elements.t) -> + Model.logseq_model Signal.signal -> string Signal.signal -> (Model.logseq_action -> bool) -> Lui_elements.t diff --git a/shared/src/logseq/view_rows.ml b/shared/src/logseq/view_rows.ml index 1776c596..2e4bea26 100644 --- a/shared/src/logseq/view_rows.ml +++ b/shared/src/logseq/view_rows.ml @@ -150,6 +150,7 @@ let windowed_keyed ?scroll_target ?first_section ?section_titles ?reset_key [Lui_elements.keyed ~source:visible ~key ~cmp ~mount]) context parent type reference_entry = + | Result_views of string | Reference_heading of string * string | Empty_tag | Reference_row of string * Model.outline_row @@ -164,16 +165,19 @@ let reference_entries (current : Model.logseq_model) = let acc = if key = "tagged" && rows = [] then Empty_tag :: acc else acc in List.fold_left (fun acc row -> Reference_row (key, row) :: acc) acc rows in - [] - |> add_section (View_base.node_related_section_visible_ current) + let views = View_base.active_node_result_views current in + let sections = [] + |> add_section (views = "" && View_base.node_related_section_visible_ current) "related" "Linked references" (View_base.active_node_related_rows current) - |> add_section (View_base.node_tag_section_visible_ current) + |> add_section (views = "" && View_base.node_tag_section_visible_ current) "tagged" "Tagged nodes" (View_base.active_node_related_rows current) |> add_section (View_base.node_linked_reference_section_visible_ current) "linked" "Linked references" (View_base.active_node_linked_reference_rows current) - |> List.rev + |> List.rev in + if views = "" then sections else Result_views views :: sections let reference_entry_identifier = function + | Result_views _ -> "objects.views" | Reference_heading (key, _) -> key ^ ".heading" | Empty_tag -> "tagged.empty" | Reference_row (key, row) -> key ^ "." ^ row.Model.row_uuid diff --git a/shared/src/logseq/view_rows.mli b/shared/src/logseq/view_rows.mli index c738545b..6124dd4a 100644 --- a/shared/src/logseq/view_rows.mli +++ b/shared/src/logseq/view_rows.mli @@ -25,6 +25,7 @@ val windowed_keyed : cmp:(string -> string -> int) -> mount:('a Signal.signal -> Lui_elements.t) -> Lui_elements.t type reference_entry = + | Result_views of string | Reference_heading of string * string | Empty_tag | Reference_row of string * Model.outline_row diff --git a/shared/src/logseq/view_screens.ml b/shared/src/logseq/view_screens.ml index d0baf012..9e049750 100644 --- a/shared/src/logseq/view_screens.ml +++ b/shared/src/logseq/view_screens.ml @@ -624,7 +624,14 @@ let native_node_screen (context : Lui_ui.ui_context) model_source (if View_base.node_title_visible_ current then "" else View_base.active_node_title current)) route_model_source) - (View_outliner.node_screen context route_model_source send) + (column ~gap:0 [ + View_outliner.node_screen context route_model_source send; + if_ ~test:(Signal.map2 (fun (current : Model.logseq_model) (route : Model.node_projection) -> + route.node_outliner_selected_block_ids <> [] + && Option.fold ~none:false ~some:(fun (active : Model.node_projection) -> active.node_uuid = route.node_uuid) + (Model.last_opt current.node_routes)) model_source route_source) + (View_outliner.outliner_selection_toolbar context route_model_source send); + ]) let native_node_stack context model_source ~source:routes_source send = keyed diff --git a/shared/test/dune b/shared/test/dune index fbf3f16d..ee094925 100644 --- a/shared/test/dune +++ b/shared/test/dune @@ -34,6 +34,7 @@ ../native/logseq_live_sync.exe ../native/pending_ops_golden.jsonl test_main.exe + (source_tree logseq/fixtures) (source_tree logseq/drive)) (action (run ./test_main.exe))) diff --git a/shared/test/logseq/app_test.ml b/shared/test/logseq/app_test.ml index 8ee935e8..f70cf9ae 100644 --- a/shared/test/logseq/app_test.ml +++ b/shared/test/logseq/app_test.ml @@ -304,6 +304,7 @@ let empty_sidebar_projection () = selected_page = None; selected_page_is_tag = false; selected_page_is_property = false; + result_views_json = ""; related_rows = []; linked_reference_rows = []; } @@ -317,6 +318,7 @@ let node_projection uuid page_uuid title related_rows linked_reference_rows = node_is_tag = false; node_is_property = false; node_outliner_rows = []; + node_result_views_json = ""; node_related_rows = related_rows; node_linked_reference_rows = linked_reference_rows; node_outliner_editing = None; @@ -334,6 +336,7 @@ let empty_core_projection () = is_graph_unlocked = false; sidebar = empty_sidebar_projection (); task_statuses = []; + task_priorities = []; flashcards = []; sync_connected = false; applied_server_t = None; @@ -421,7 +424,7 @@ let journal_outline_row uuid page_id title journal_title journal_day depth = Model.row_uuid = uuid; row_loaded = true; row_title = title; - markup_json = "[]"; + markup_json = "[]"; query_json = ""; youtube_target_url = None; row_breadcrumb = ""; row_breadcrumbs = []; @@ -2755,7 +2758,7 @@ let outline_row uuid title = Model.row_uuid = uuid; row_loaded = true; row_title = title; - markup_json = "[]"; + markup_json = "[]"; query_json = ""; youtube_target_url = None; row_breadcrumb = ""; row_breadcrumbs = []; @@ -2823,7 +2826,8 @@ let sidebar_state_and_page_selection_are_owned_by_lg () = selected_page = None; selected_page_is_tag = false; selected_page_is_property = false; - related_rows = []; + result_views_json = ""; + related_rows = []; linked_reference_rows = []; } [] false "" [] [] None None [] [] [ journal_row ] false []) @@ -2840,7 +2844,8 @@ let sidebar_state_and_page_selection_are_owned_by_lg () = selected_page = Some favorite; selected_page_is_tag = false; selected_page_is_property = false; - related_rows = []; + result_views_json = ""; + related_rows = []; linked_reference_rows = []; } in @@ -2892,7 +2897,8 @@ let sidebar_renders_main_branch_navigation_identifiers () = selected_page = None; selected_page_is_tag = false; selected_page_is_property = false; - related_rows = []; + result_views_json = ""; + related_rows = []; linked_reference_rows = []; } in @@ -3106,7 +3112,8 @@ let sidebar_drag_reserves_app_navigation () = selected_page = None; selected_page_is_tag = false; selected_page_is_property = false; - related_rows = []; + result_views_json = ""; + related_rows = []; linked_reference_rows = []; } in @@ -3147,6 +3154,7 @@ let selected_sidebar_pages_render_their_outliner_and_related_content () = selected_page = Some page; selected_page_is_tag = false; selected_page_is_property = false; + result_views_json = ""; related_rows = [ related_row ]; linked_reference_rows = []; } @@ -8935,7 +8943,7 @@ let kotlin_outliner_markers_match_ios_visual_metrics () = let ios_rows_use_one_native_layout_and_keep_typed_actions () = check_eq (Lui_extension.fingerprint (View.outliner_block_row_schema ())) - "lui-extension-v1|18:outliner-block-row|profiles:ios/swiftui|standard-children:1|children:|properties:7:payload:string:required:none|events:10:drag-start[4:uuid:string:required],10:long-press[4:uuid:string:required],10:set-status[4:uuid:string:required,5:count:int:required],4:drop[4:uuid:string:required,9:placement:string:required],4:edit[4:uuid:string:required],8:collapse[4:uuid:string:required],9:open-node[4:uuid:string:required]"; + "lui-extension-v1|18:outliner-block-row|profiles:ios/swiftui|standard-children:1|children:|properties:7:payload:string:required:none|events:10:drag-start[4:uuid:string:required],10:long-press[4:uuid:string:required],10:set-status[4:uuid:string:required,5:count:int:required],12:set-priority[8:priority:string:required],4:drop[4:uuid:string:required,9:placement:string:required],4:edit[4:uuid:string:required],8:collapse[4:uuid:string:required],9:open-node[4:uuid:string:required]"; let application = App.create (ios_backend ()) in let row = { (outline_row "native-row" "Native title") with Model.depth = 3; has_children = true; @@ -9088,6 +9096,47 @@ let outliner_long_press_selection_and_toolbar_use_typed_effects () = (App.model application).pending_effects [ Model.OutlinerToolbarEffect (1, "copy") ] +let pushed_node_selection_has_a_destination_toolbar () = + let application = App.create (ios_backend ()) in + start application; + send application (Model.RequestAppNode "child"); + let route = { (node_projection "child" "page" "Child" [] []) with + Model.node_outliner_rows = [outline_row "child" "Child"]; + node_outliner_selected_block_ids = ["child"] } in + send application (Model.ApplyCoreSnapshot { (empty_core_projection ()) with + Model.selected_graph_id = Some "graph"; + node_routes = [route]; outliner_rows = route.node_outliner_rows }); + flush application; + let renderer = Lui_app.runtime application in + let destination = extension_node application "native-navigation-title" in + let toolbar = descendant_with_identifier renderer destination "toolbar.outliner.selection" in + check ~msg:"a pushed node owns its selection toolbar inside the navigation destination" (toolbar <> -1); + let copy = descendant_with_identifier renderer toolbar "button.outliner.selection.copy" in + dispatch application (Lui_protocol.Press copy); + flush application; + check ~msg:"destination toolbar actions reach the shared outliner effect pipeline" + (List.exists (function Model.OutlinerToolbarEffect (_, "copy") -> true | _ -> false) + (App.model application).pending_effects); + let unselected_route = {route with Model.node_outliner_selected_block_ids = []} in + let apply routes = + send application (Model.ApplyCoreSnapshot { (empty_core_projection ()) with + Model.selected_graph_id = Some "graph"; node_routes = routes }); + flush application + in + apply [unselected_route]; + check_eq ~msg:"clearing route selection removes its toolbar" + (descendant_with_identifier renderer destination "toolbar.outliner.selection") (-1); + send application (Model.RequestAppNode "grandchild"); + let nested = { (node_projection "grandchild" "page" "Grandchild" [] []) with + Model.node_outliner_rows = [outline_row "grandchild" "Grandchild"] } in + apply [route; nested]; + check_eq ~msg:"a covered destination cannot keep its selection toolbar active" + (descendant_with_identifier renderer destination "toolbar.outliner.selection") (-1); + apply [route; {nested with Model.node_outliner_selected_block_ids = ["grandchild"]}]; + let toolbar_count = descendant_count_with_identifier renderer + (Lui_app.root_node application) "toolbar.outliner.selection" in + check_eq ~msg:"only the visible destination owns a select bar" toolbar_count 1 + let kotlin_outliner_selection_toolbar_uses_compact_material_actions () = let application = App.create (kotlin_backend ()) in let row = outline_row "parent" "Parent" in @@ -9562,6 +9611,38 @@ let native_bridge_returns_initial_and_disposal_patch_batches () = check ~msg:"the bridge exposes a root node" (Native_bridge.root_node () > 0); check ~msg:"disposal emits a patch" (Native_bridge.dispose () <> "") +let native_bridge_preserves_reentrant_flush_batches () = + List.iter (fun (os, host) -> + let application = ref None in + let reentered = ref false in + let transport = Native_bridge.backend (Lui_protocol.profile os host) in + let backend = {transport with Lui_protocol.apply_batch = (fun batch -> + let accepted = transport.apply_batch batch in + if not !reentered then begin + reentered := true; + let app = Option.get !application in + let runtime = Lui_app.runtime app in + ignore (Lui_runtime.set_prop runtime (Lui_app.root_node app) Lui_protocol.TextValue (Lui_protocol.StringValue "Ready")); + ignore (Lui_app.flush app) + end; + accepted)} in + let app = Lui_app.create backend (Model.initial ()) Model.update + (fun _ _ _ -> Lui_elements.text ~value:"Starting" []) in + application := Some app; + Fun.protect ~finally:(fun () -> ignore (Native_bridge.dispose ())) (fun () -> + let patch = Native_bridge.start_application app in + let batch = Lui_wire.decode_batch patch in + check_eq ~msg:"merged batches acknowledge the final generation" batch.generation 2; + check ~msg:"the native transport retains the component creation before a reentrant update" + (List.exists (function Lui_protocol.CreateNode _ -> true | _ -> false) batch.ops); + check ~msg:"the native transport also retains the later property update" + (List.exists (function Lui_protocol.SetProp (_, Lui_protocol.TextValue, Lui_protocol.StringValue "Ready") -> true | _ -> false) batch.ops); + let index matches = List.find_index matches batch.ops |> Option.get in + check ~msg:"component creation precedes updates to that component" + (index (function Lui_protocol.CreateNode _ -> true | _ -> false) + < index (function Lui_protocol.SetProp (_, Lui_protocol.TextValue, Lui_protocol.StringValue "Ready") -> true | _ -> false)))) + [Lui_protocol.IOS, Lui_protocol.SwiftUIHost; Lui_protocol.AndroidOS, Lui_protocol.KotlinHost] + let native_bridge_preserves_native_search_query_values () = ignore (Native_bridge.initialize 2 2 0); let application = Native_bridge.app () in @@ -10190,6 +10271,7 @@ let quick_actions_open_from_existing_navigation () = current let cases = [ + case "native bridge preserves reentrant flush batches" native_bridge_preserves_reentrant_flush_batches; case "search-routes-mount-their-own-editor-toolbar" search_routes_mount_their_own_editor_toolbar; case "native-bridge-preserves-viewport-width" native_bridge_preserves_viewport_width; case "sidebar-navigation-respects-native-viewport" sidebar_navigation_respects_native_viewport_width; @@ -10393,6 +10475,7 @@ let cases = case "ios rows use one native layout and keep typed actions" ios_rows_use_one_native_layout_and_keep_typed_actions; case "outliner-rows-render-status-tags-and-sync-failures" outliner_rows_render_status_tags_and_sync_failures; case "outliner-long-press-selection-and-toolbar-use-typed-effects" outliner_long_press_selection_and_toolbar_use_typed_effects; + case "pushed-node-selection-has-a-destination-toolbar" pushed_node_selection_has_a_destination_toolbar; case "kotlin-outliner-selection-toolbar-uses-compact-material-actions" kotlin_outliner_selection_toolbar_uses_compact_material_actions; case "kotlin-outliner-editor-toolbar-uses-a-material-bottom-surface" kotlin_outliner_editor_toolbar_uses_a_material_bottom_surface; case "outliner-editor-toolbar-and-autocomplete-use-core-owned-state" outliner_editor_toolbar_and_autocomplete_use_core_owned_state; diff --git a/shared/test/logseq/fixtures/master-views.json b/shared/test/logseq/fixtures/master-views.json new file mode 100644 index 00000000..b1a22a9f --- /dev/null +++ b/shared/test/logseq/fixtures/master-views.json @@ -0,0 +1,29914 @@ +{ + "masterCommit": "05c3ae73e08498e9e20f1b11c3eac5525e5e588d", + "schema": "{:logseq.property.view/type {:db/valueType :db.type/ref}, :block/uuid {:db/unique :db.unique/identity}, :block/updated-at {:db/index true}, :user.property/date {:db/valueType :db.type/ref}, :logseq.property.class/extends {:db/valueType :db.type/ref, :db/cardinality :db.cardinality/many}, :block/refs {:db/valueType :db.type/ref, :db/cardinality :db.cardinality/many}, :block/closed-value-property {:db/valueType :db.type/ref, :db/cardinality :db.cardinality/many}, :user.property/number {:db/valueType :db.type/ref}, :block/created-at {:db/index true}, :logseq.property/built-in? {:db/index true}, :logseq.property/view-for {:db/valueType :db.type/ref}, :user.property/choice {:db/valueType :db.type/ref}, :logseq.property/query {:db/valueType :db.type/ref}, :logseq.property/hide? {:db/index true}, :user.property/many {:db/valueType :db.type/ref, :db/cardinality :db.cardinality/many}, :block/tags {:db/valueType :db.type/ref, :db/cardinality :db.cardinality/many}, :block/title {:db/index true}, :logseq.property/created-from-property {:db/valueType :db.type/ref}, :logseq.property/deleted-at {:db/index true}, :user.property/text {:db/valueType :db.type/ref}, :db/ident {:db/unique :db.unique/identity}, :block/parent {:db/valueType :db.type/ref}, :logseq.property.recycle/original-parent {:db/valueType :db.type/ref}, :block/page {:db/valueType :db.type/ref}}", + "tx": "[{:db/id 950019, :db/ident :block/title, :logseq.property/type :string} {:db/id 950018, :block/uuid #uuid \"30000000-0000-4000-8000-000000000018\", :db/ident :user.property/conformance-row?, :logseq.property/type :checkbox} {:db/id 950010, :db/ident :user.property/text, :logseq.property/type :default, :db/valueType :db.type/ref, :db/cardinality :db.cardinality/one} {:db/id 950011, :db/ident :user.property/number, :logseq.property/type :number, :db/valueType :db.type/ref, :db/cardinality :db.cardinality/one} {:db/id 950012, :db/ident :user.property/many, :logseq.property/type :number, :db/cardinality :db.cardinality/many, :db/valueType :db.type/ref} {:db/id 950013, :db/ident :user.property/date, :logseq.property/type :date, :db/valueType :db.type/ref, :db/cardinality :db.cardinality/one} {:db/id 950014, :db/ident :user.property/choice, :logseq.property/type :default, :db/valueType :db.type/ref, :db/cardinality :db.cardinality/one} {:db/id 950015, :db/ident :user.property/flag, :logseq.property/type :checkbox} {:db/id 950016, :db/ident :user.property/time, :logseq.property/type :datetime} {:db/id 950017, :db/ident :user.property/raw, :logseq.property/type :any} {:db/id 950000, :block/uuid #uuid \"30000000-0000-4000-8000-000000000001\", :block/title \"Fixture page\", :block/name \"fixture page\"} {:db/id 950001, :block/uuid #uuid \"30000000-0000-4000-8000-000000000002\", :block/title \"Fixture query\", :block/page 950000, :block/parent 950000, :block/order \"a0\", :logseq.property/query 950002} {:db/id 950002, :block/uuid #uuid \"30000000-0000-4000-8000-000000000003\", :block/title \"{:query [:find (pull ?b [*]) :where [?b :user.property/conformance-row? true]]}\", :block/page 950000, :block/parent 950000, :block/order \"a1\"} {:logseq.property.view/type 950004, :block/uuid #uuid \"30000000-0000-4000-8000-000000000004\", :logseq.property.view/feature-type :query-result, :logseq.property/view-for 950001, :block/title \"Fixture view\", :db/id 950003, :block/parent 950000, :block/order \"a2\", :block/page 950000} {:db/id 950004, :db/ident :logseq.property.view/type.table} {:db/id 950005, :db/ident :logseq.property/empty-placeholder} {:db/id 950006, :block/uuid #uuid \"30000000-0000-4000-8000-000000000006\", :block/name \"fixture tag\", :block/title \"Fixture tag\", :block/tags [950009]} {:db/id 950007, :block/uuid #uuid \"30000000-0000-4000-8000-000000000007\", :block/title \"Tag view\", :logseq.property/view-for 950006, :logseq.property.view/feature-type :class-objects, :logseq.property.view/type 950004} {:db/id 950008, :block/uuid #uuid \"30000000-0000-4000-8000-000000000008\", :block/title \"Property view\", :logseq.property/view-for 950018, :logseq.property.view/feature-type :property-objects, :logseq.property.view/type 950004} {:db/id 950009, :block/uuid #uuid \"30000000-0000-4000-8000-000000000009\", :db/ident :logseq.class/Tag, :block/name \"tag\", :block/title \"Tag\"} {:db/id 950020, :block/uuid #uuid \"30000000-0000-4000-8000-000000000020\", :block/title \"APPLE\"} {:db/id 950021, :block/uuid #uuid \"30000000-0000-4000-8000-000000000021\", :block/title \"apple\"} {:db/id 950022, :block/uuid #uuid \"30000000-0000-4000-8000-000000000022\", :block/title \"Orange\"} {:db/id 950023, :block/uuid #uuid \"30000000-0000-4000-8000-000000000023\", :block/title \"ΜΗΛΟ\"} {:db/id 950024, :block/uuid #uuid \"30000000-0000-4000-8000-000000000024\", :block/title \"\"} {:db/id 950030, :block/uuid #uuid \"30000000-0000-4000-8000-000000000030\", :logseq.property/value 0} {:db/id 950031, :block/uuid #uuid \"30000000-0000-4000-8000-000000000031\", :logseq.property/value 10} {:db/id 950032, :block/uuid #uuid \"30000000-0000-4000-8000-000000000032\", :logseq.property/value -2.5} {:db/id 950033, :block/uuid #uuid \"30000000-0000-4000-8000-000000000033\", :logseq.property/value 10} {:db/id 950040, :block/uuid #uuid \"30000000-0000-4000-8000-000000000040\", :block/title \"October 1\", :block/journal-day 20261001} {:db/id 950041, :block/uuid #uuid \"30000000-0000-4000-8000-000000000041\", :block/title \"October 3\", :block/journal-day 20261003} {:db/id 950050, :block/uuid #uuid \"30000000-0000-4000-8000-000000000050\", :block/title \"Zulu\", :db/ident :user.choice/zulu, :block/order \"a0\", :block/closed-value-property 950014} {:db/id 950051, :block/uuid #uuid \"30000000-0000-4000-8000-000000000051\", :block/title \"Alpha\", :db/ident :user.choice/alpha, :block/order \"a1\", :block/closed-value-property 950014} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000100\", :block/updated-at 2000, :block/created-at 1000, :user.property/conformance-row? true, :block/tags [950006], :block/title \"Row 0\", :db/id 950100, :block/parent 950000, :block/order \"b0\", :block/page 950000} {:user.property/time 1000, :block/uuid #uuid \"30000000-0000-4000-8000-000000000101\", :block/updated-at 1999, :user.property/date 950040, :user.property/number 950030, :block/created-at 1001, :user.property/raw 0, :user.property/conformance-row? true, :user.property/flag true, :user.property/choice 950050, :user.property/many [950030 950031], :block/tags [950006], :block/title \"Row 1\", :db/id 950101, :user.property/text 950020, :block/parent 950000, :block/order \"b1\", :block/page 950000} {:user.property/time 2000, :block/uuid #uuid \"30000000-0000-4000-8000-000000000102\", :block/updated-at 1998, :user.property/date 950041, :user.property/number 950031, :block/created-at 1002, :user.property/raw \"\", :user.property/conformance-row? true, :user.property/flag false, :user.property/choice 950051, :user.property/many [950032 950031], :block/tags [950006], :block/title \"Row 2\", :db/id 950102, :user.property/text 950021, :block/parent 950000, :block/order \"b2\", :block/page 950000} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000103\", :block/updated-at 1997, :user.property/number 950032, :block/created-at 1003, :user.property/raw \"10\", :user.property/conformance-row? true, :user.property/many [950032], :block/tags [950006], :block/title \"Row 3\", :db/id 950103, :user.property/text 950022, :block/parent 950000, :block/order \"b3\", :block/page 950000} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000104\", :block/updated-at 1996, :user.property/number 950033, :block/created-at 1004, :user.property/raw \"2\", :user.property/conformance-row? true, :block/tags [950006], :block/title \"Row 4\", :db/id 950104, :user.property/text 950023, :block/parent 950000, :block/order \"b4\", :block/page 950000} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000105\", :block/updated-at 1995, :user.property/number 950005, :block/created-at 1005, :user.property/raw :logseq.property/empty-placeholder, :user.property/conformance-row? true, :user.property/many [950005], :block/tags [950006], :block/title \"Row 5\", :db/id 950105, :user.property/text 950024, :block/parent 950000, :block/order \"b5\", :block/page 950000} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000106\", :block/updated-at 1994, :block/created-at 1006, :user.property/raw \" \", :user.property/conformance-row? true, :block/tags [950006], :block/title \"Row 6\", :db/id 950106, :block/parent 950000, :block/order \"b6\", :block/page 950000} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000107\", :block/updated-at 1993, :block/created-at 1007, :user.property/raw false, :user.property/conformance-row? true, :block/tags [950006], :block/title \"Row 7\", :db/id 950107, :block/parent 950000, :block/order \"b7\", :block/page 950000} {:block/uuid #uuid \"30000000-0000-4000-8000-000000000108\", :block/updated-at 1992, :block/created-at 1008, :user.property/raw true, :user.property/conformance-row? true, :block/tags [950006], :block/title \"Row 8\", :db/id 950108, :block/parent 950000, :block/order \"b8\", :block/page 950000}]", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004", + "cases": [ + { + "filters": "nil", + "name": ":query-result sort :block/title true true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :block/title true false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :block/title false true", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :block/title false false", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/text true true", + "rows": [ + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/text true false", + "rows": [ + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/text false true", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/text false false", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/number true true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/number true false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/number false true", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/number false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/many true true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/many true false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/many false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/many false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/date true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/date true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/date false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/date false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/choice true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/choice true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/choice false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/choice false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/time true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/time true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/time false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/time false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/flag true true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/flag true false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/flag false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/flag false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/raw true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? true} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/raw true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/raw false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? false} {:id :block/title, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result sort :user.property/raw false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? false}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is nil]]}", + "name": ":query-result :block/title :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is :empty]]}", + "name": ":query-result :block/title :is :empty", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{}]]}", + "name": ":query-result :block/title :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :block/title :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :block/title :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is true]]}", + "name": ":query-result :block/title :is true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is false]]}", + "name": ":query-result :block/title :is false", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not nil]]}", + "name": ":query-result :block/title :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not :empty]]}", + "name": ":query-result :block/title :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{}]]}", + "name": ":query-result :block/title :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not true]]}", + "name": ":query-result :block/title :is-not true", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not false]]}", + "name": ":query-result :block/title :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is nil]]}", + "name": ":query-result :user.property/text :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is :empty]]}", + "name": ":query-result :user.property/text :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{}]]}", + "name": ":query-result :user.property/text :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is true]]}", + "name": ":query-result :user.property/text :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is false]]}", + "name": ":query-result :user.property/text :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not nil]]}", + "name": ":query-result :user.property/text :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not :empty]]}", + "name": ":query-result :user.property/text :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{}]]}", + "name": ":query-result :user.property/text :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not true]]}", + "name": ":query-result :user.property/text :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not false]]}", + "name": ":query-result :user.property/text :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is nil]]}", + "name": ":query-result :user.property/number :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is :empty]]}", + "name": ":query-result :user.property/number :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{}]]}", + "name": ":query-result :user.property/number :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is true]]}", + "name": ":query-result :user.property/number :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is false]]}", + "name": ":query-result :user.property/number :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not nil]]}", + "name": ":query-result :user.property/number :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not :empty]]}", + "name": ":query-result :user.property/number :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{}]]}", + "name": ":query-result :user.property/number :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not true]]}", + "name": ":query-result :user.property/number :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not false]]}", + "name": ":query-result :user.property/number :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is nil]]}", + "name": ":query-result :user.property/many :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is :empty]]}", + "name": ":query-result :user.property/many :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{}]]}", + "name": ":query-result :user.property/many :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is true]]}", + "name": ":query-result :user.property/many :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is false]]}", + "name": ":query-result :user.property/many :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not nil]]}", + "name": ":query-result :user.property/many :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not :empty]]}", + "name": ":query-result :user.property/many :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{}]]}", + "name": ":query-result :user.property/many :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not true]]}", + "name": ":query-result :user.property/many :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not false]]}", + "name": ":query-result :user.property/many :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is nil]]}", + "name": ":query-result :user.property/date :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is :empty]]}", + "name": ":query-result :user.property/date :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{}]]}", + "name": ":query-result :user.property/date :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is true]]}", + "name": ":query-result :user.property/date :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is false]]}", + "name": ":query-result :user.property/date :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not nil]]}", + "name": ":query-result :user.property/date :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not :empty]]}", + "name": ":query-result :user.property/date :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{}]]}", + "name": ":query-result :user.property/date :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not true]]}", + "name": ":query-result :user.property/date :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not false]]}", + "name": ":query-result :user.property/date :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is nil]]}", + "name": ":query-result :user.property/choice :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is :empty]]}", + "name": ":query-result :user.property/choice :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{}]]}", + "name": ":query-result :user.property/choice :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is true]]}", + "name": ":query-result :user.property/choice :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is false]]}", + "name": ":query-result :user.property/choice :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not nil]]}", + "name": ":query-result :user.property/choice :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not :empty]]}", + "name": ":query-result :user.property/choice :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{}]]}", + "name": ":query-result :user.property/choice :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not true]]}", + "name": ":query-result :user.property/choice :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not false]]}", + "name": ":query-result :user.property/choice :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is nil]]}", + "name": ":query-result :user.property/time :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is :empty]]}", + "name": ":query-result :user.property/time :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{}]]}", + "name": ":query-result :user.property/time :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is true]]}", + "name": ":query-result :user.property/time :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is false]]}", + "name": ":query-result :user.property/time :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not nil]]}", + "name": ":query-result :user.property/time :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not :empty]]}", + "name": ":query-result :user.property/time :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{}]]}", + "name": ":query-result :user.property/time :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not true]]}", + "name": ":query-result :user.property/time :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not false]]}", + "name": ":query-result :user.property/time :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is nil]]}", + "name": ":query-result :user.property/flag :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is :empty]]}", + "name": ":query-result :user.property/flag :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{}]]}", + "name": ":query-result :user.property/flag :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is true]]}", + "name": ":query-result :user.property/flag :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is false]]}", + "name": ":query-result :user.property/flag :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not nil]]}", + "name": ":query-result :user.property/flag :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not :empty]]}", + "name": ":query-result :user.property/flag :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{}]]}", + "name": ":query-result :user.property/flag :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not true]]}", + "name": ":query-result :user.property/flag :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not false]]}", + "name": ":query-result :user.property/flag :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is nil]]}", + "name": ":query-result :user.property/raw :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is :empty]]}", + "name": ":query-result :user.property/raw :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{}]]}", + "name": ":query-result :user.property/raw :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is true]]}", + "name": ":query-result :user.property/raw :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is false]]}", + "name": ":query-result :user.property/raw :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not nil]]}", + "name": ":query-result :user.property/raw :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not :empty]]}", + "name": ":query-result :user.property/raw :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{}]]}", + "name": ":query-result :user.property/raw :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":query-result :user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":query-result :user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not true]]}", + "name": ":query-result :user.property/raw :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not false]]}", + "name": ":query-result :user.property/raw :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"apple\"]]}", + "name": ":query-result :block/title :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"APPLE\"]]}", + "name": ":query-result :block/title :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"μηλο\"]]}", + "name": ":query-result :block/title :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"\"]]}", + "name": ":query-result :block/title :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"10\"]]}", + "name": ":query-result :block/title :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"apple\"]]}", + "name": ":query-result :block/title :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"APPLE\"]]}", + "name": ":query-result :block/title :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"μηλο\"]]}", + "name": ":query-result :block/title :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"\"]]}", + "name": ":query-result :block/title :text-not-contains \"\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"10\"]]}", + "name": ":query-result :block/title :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"apple\"]]}", + "name": ":query-result :user.property/text :text-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/text :text-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/text :text-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"\"]]}", + "name": ":query-result :user.property/text :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"10\"]]}", + "name": ":query-result :user.property/text :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/text :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/text :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/text :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"\"]]}", + "name": ":query-result :user.property/text :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/text :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"apple\"]]}", + "name": ":query-result :user.property/number :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/number :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/number :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"\"]]}", + "name": ":query-result :user.property/number :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"10\"]]}", + "name": ":query-result :user.property/number :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/number :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/number :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/number :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"\"]]}", + "name": ":query-result :user.property/number :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/number :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"apple\"]]}", + "name": ":query-result :user.property/many :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/many :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/many :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"\"]]}", + "name": ":query-result :user.property/many :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"10\"]]}", + "name": ":query-result :user.property/many :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/many :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/many :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/many :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"\"]]}", + "name": ":query-result :user.property/many :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/many :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"apple\"]]}", + "name": ":query-result :user.property/date :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/date :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/date :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"\"]]}", + "name": ":query-result :user.property/date :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"10\"]]}", + "name": ":query-result :user.property/date :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/date :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/date :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/date :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"\"]]}", + "name": ":query-result :user.property/date :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/date :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"apple\"]]}", + "name": ":query-result :user.property/choice :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/choice :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/choice :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"\"]]}", + "name": ":query-result :user.property/choice :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"10\"]]}", + "name": ":query-result :user.property/choice :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/choice :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/choice :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/choice :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"\"]]}", + "name": ":query-result :user.property/choice :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/choice :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"apple\"]]}", + "name": ":query-result :user.property/time :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/time :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/time :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"\"]]}", + "name": ":query-result :user.property/time :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"10\"]]}", + "name": ":query-result :user.property/time :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/time :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/time :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/time :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"\"]]}", + "name": ":query-result :user.property/time :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/time :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"apple\"]]}", + "name": ":query-result :user.property/flag :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/flag :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/flag :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"\"]]}", + "name": ":query-result :user.property/flag :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"10\"]]}", + "name": ":query-result :user.property/flag :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/flag :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/flag :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/flag :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"\"]]}", + "name": ":query-result :user.property/flag :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/flag :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"apple\"]]}", + "name": ":query-result :user.property/raw :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"APPLE\"]]}", + "name": ":query-result :user.property/raw :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"μηλο\"]]}", + "name": ":query-result :user.property/raw :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"\"]]}", + "name": ":query-result :user.property/raw :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"10\"]]}", + "name": ":query-result :user.property/raw :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"apple\"]]}", + "name": ":query-result :user.property/raw :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"APPLE\"]]}", + "name": ":query-result :user.property/raw :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"μηλο\"]]}", + "name": ":query-result :user.property/raw :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"\"]]}", + "name": ":query-result :user.property/raw :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"10\"]]}", + "name": ":query-result :user.property/raw :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt nil]]}", + "name": ":query-result :user.property/number :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 0]]}", + "name": ":query-result :user.property/number :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt -2.5]]}", + "name": ":query-result :user.property/number :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 10]]}", + "name": ":query-result :user.property/number :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 11]]}", + "name": ":query-result :user.property/number :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt \"2\"]]}", + "name": ":query-result :user.property/number :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte nil]]}", + "name": ":query-result :user.property/number :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 0]]}", + "name": ":query-result :user.property/number :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte -2.5]]}", + "name": ":query-result :user.property/number :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 10]]}", + "name": ":query-result :user.property/number :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 11]]}", + "name": ":query-result :user.property/number :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte \"2\"]]}", + "name": ":query-result :user.property/number :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt nil]]}", + "name": ":query-result :user.property/number :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 0]]}", + "name": ":query-result :user.property/number :number-lt 0", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt -2.5]]}", + "name": ":query-result :user.property/number :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 10]]}", + "name": ":query-result :user.property/number :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 11]]}", + "name": ":query-result :user.property/number :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt \"2\"]]}", + "name": ":query-result :user.property/number :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte nil]]}", + "name": ":query-result :user.property/number :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 0]]}", + "name": ":query-result :user.property/number :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte -2.5]]}", + "name": ":query-result :user.property/number :number-lte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 10]]}", + "name": ":query-result :user.property/number :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 11]]}", + "name": ":query-result :user.property/number :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte \"2\"]]}", + "name": ":query-result :user.property/number :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt nil]]}", + "name": ":query-result :user.property/many :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 0]]}", + "name": ":query-result :user.property/many :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt -2.5]]}", + "name": ":query-result :user.property/many :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 10]]}", + "name": ":query-result :user.property/many :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 11]]}", + "name": ":query-result :user.property/many :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt \"2\"]]}", + "name": ":query-result :user.property/many :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte nil]]}", + "name": ":query-result :user.property/many :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 0]]}", + "name": ":query-result :user.property/many :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte -2.5]]}", + "name": ":query-result :user.property/many :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 10]]}", + "name": ":query-result :user.property/many :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 11]]}", + "name": ":query-result :user.property/many :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte \"2\"]]}", + "name": ":query-result :user.property/many :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt nil]]}", + "name": ":query-result :user.property/many :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 0]]}", + "name": ":query-result :user.property/many :number-lt 0", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt -2.5]]}", + "name": ":query-result :user.property/many :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 10]]}", + "name": ":query-result :user.property/many :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 11]]}", + "name": ":query-result :user.property/many :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt \"2\"]]}", + "name": ":query-result :user.property/many :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte nil]]}", + "name": ":query-result :user.property/many :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 0]]}", + "name": ":query-result :user.property/many :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte -2.5]]}", + "name": ":query-result :user.property/many :number-lte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 10]]}", + "name": ":query-result :user.property/many :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 11]]}", + "name": ":query-result :user.property/many :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte \"2\"]]}", + "name": ":query-result :user.property/many :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt nil]]}", + "name": ":query-result :user.property/raw :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 0]]}", + "name": ":query-result :user.property/raw :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt -2.5]]}", + "name": ":query-result :user.property/raw :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 10]]}", + "name": ":query-result :user.property/raw :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 11]]}", + "name": ":query-result :user.property/raw :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt \"2\"]]}", + "name": ":query-result :user.property/raw :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte nil]]}", + "name": ":query-result :user.property/raw :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 0]]}", + "name": ":query-result :user.property/raw :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte -2.5]]}", + "name": ":query-result :user.property/raw :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 10]]}", + "name": ":query-result :user.property/raw :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 11]]}", + "name": ":query-result :user.property/raw :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte \"2\"]]}", + "name": ":query-result :user.property/raw :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt nil]]}", + "name": ":query-result :user.property/raw :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 0]]}", + "name": ":query-result :user.property/raw :number-lt 0", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt -2.5]]}", + "name": ":query-result :user.property/raw :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 10]]}", + "name": ":query-result :user.property/raw :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 11]]}", + "name": ":query-result :user.property/raw :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt \"2\"]]}", + "name": ":query-result :user.property/raw :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte nil]]}", + "name": ":query-result :user.property/raw :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 0]]}", + "name": ":query-result :user.property/raw :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte -2.5]]}", + "name": ":query-result :user.property/raw :number-lte -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 10]]}", + "name": ":query-result :user.property/raw :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 11]]}", + "name": ":query-result :user.property/raw :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte \"2\"]]}", + "name": ":query-result :user.property/raw :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between []]]}", + "name": ":query-result :user.property/number :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [nil nil]]]}", + "name": ":query-result :user.property/number :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [nil 0]]]}", + "name": ":query-result :user.property/number :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [0 nil]]]}", + "name": ":query-result :user.property/number :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [-2.5 10]]]}", + "name": ":query-result :user.property/number :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [10 10]]]}", + "name": ":query-result :user.property/number :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [11 0]]]}", + "name": ":query-result :user.property/number :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between []]]}", + "name": ":query-result :user.property/many :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [nil nil]]]}", + "name": ":query-result :user.property/many :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [nil 0]]]}", + "name": ":query-result :user.property/many :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [0 nil]]]}", + "name": ":query-result :user.property/many :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [-2.5 10]]]}", + "name": ":query-result :user.property/many :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [10 10]]]}", + "name": ":query-result :user.property/many :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [11 0]]]}", + "name": ":query-result :user.property/many :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between []]]}", + "name": ":query-result :user.property/raw :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [nil nil]]]}", + "name": ":query-result :user.property/raw :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [nil 0]]]}", + "name": ":query-result :user.property/raw :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [0 nil]]]}", + "name": ":query-result :user.property/raw :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [-2.5 10]]]}", + "name": ":query-result :user.property/raw :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [10 10]]]}", + "name": ":query-result :user.property/raw :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [11 0]]]}", + "name": ":query-result :user.property/raw :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before nil]]}", + "name": ":query-result :user.property/date :date-before nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before {:block/journal-day 20261002}]]}", + "name": ":query-result :user.property/date :date-before {:block/journal-day 20261002}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before {:block/journal-day 20261001}]]}", + "name": ":query-result :user.property/date :date-before {:block/journal-day 20261001}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after nil]]}", + "name": ":query-result :user.property/date :date-after nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after {:block/journal-day 20261002}]]}", + "name": ":query-result :user.property/date :date-after {:block/journal-day 20261002}", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after {:block/journal-day 20261001}]]}", + "name": ":query-result :user.property/date :date-after {:block/journal-day 20261001}", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before nil]]}", + "name": ":query-result :user.property/time :before nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 1000]]}", + "name": ":query-result :user.property/time :before 1000", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 1500]]}", + "name": ":query-result :user.property/time :before 1500", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 2000]]}", + "name": ":query-result :user.property/time :before 2000", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before \"invalid\"]]}", + "name": ":query-result :user.property/time :before \"invalid\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after nil]]}", + "name": ":query-result :user.property/time :after nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 1000]]}", + "name": ":query-result :user.property/time :after 1000", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 1500]]}", + "name": ":query-result :user.property/time :after 1500", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 2000]]}", + "name": ":query-result :user.property/time :after 2000", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after \"invalid\"]]}", + "name": ":query-result :user.property/time :after \"invalid\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result search \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result search \" \"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": " ", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result search \"ROW 1\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "ROW 1", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result search \"row 9\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "row 9", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":query-result search \"ΜΗΛΟ\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "ΜΗΛΟ", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:filters [[:user.property/number :future-operator 1]]}", + "name": ":query-result unknown operator matches master", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? true, :filters []}", + "name": ":query-result OR empty clauses", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters []}", + "name": ":query-result AND empty clauses", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? true, :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains \"Orange\"]]}", + "name": ":query-result OR with search", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "ROW 1", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains \"apple\"]]}", + "name": ":query-result AND combination", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "query-result", + "owner": "30000000-0000-4000-8000-000000000002", + "view": "30000000-0000-4000-8000-000000000004" + }, + { + "filters": "nil", + "name": ":class-objects sort :block/title true true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :block/title true false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :block/title false true", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :block/title false false", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/text true true", + "rows": [ + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/text true false", + "rows": [ + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/text false true", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/text false false", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/number true true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/number true false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/number false true", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/number false false", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/many true true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/many true false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/many false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/many false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/date true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/date true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/date false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/date false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/choice true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/choice true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/choice false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/choice false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/time true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/time true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/time false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/time false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/flag true true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/flag true false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/flag false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/flag false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/raw true true", + "rows": [ + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? true} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/raw true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/raw false true", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? false} {:id :block/title, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects sort :user.property/raw false false", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? false}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is nil]]}", + "name": ":class-objects :block/title :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is :empty]]}", + "name": ":class-objects :block/title :is :empty", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{}]]}", + "name": ":class-objects :block/title :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :block/title :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :block/title :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is true]]}", + "name": ":class-objects :block/title :is true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is false]]}", + "name": ":class-objects :block/title :is false", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not nil]]}", + "name": ":class-objects :block/title :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not :empty]]}", + "name": ":class-objects :block/title :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{}]]}", + "name": ":class-objects :block/title :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not true]]}", + "name": ":class-objects :block/title :is-not true", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not false]]}", + "name": ":class-objects :block/title :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is nil]]}", + "name": ":class-objects :user.property/text :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is :empty]]}", + "name": ":class-objects :user.property/text :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{}]]}", + "name": ":class-objects :user.property/text :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is true]]}", + "name": ":class-objects :user.property/text :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is false]]}", + "name": ":class-objects :user.property/text :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not nil]]}", + "name": ":class-objects :user.property/text :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not :empty]]}", + "name": ":class-objects :user.property/text :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{}]]}", + "name": ":class-objects :user.property/text :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not true]]}", + "name": ":class-objects :user.property/text :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not false]]}", + "name": ":class-objects :user.property/text :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is nil]]}", + "name": ":class-objects :user.property/number :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is :empty]]}", + "name": ":class-objects :user.property/number :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{}]]}", + "name": ":class-objects :user.property/number :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is true]]}", + "name": ":class-objects :user.property/number :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is false]]}", + "name": ":class-objects :user.property/number :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not nil]]}", + "name": ":class-objects :user.property/number :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not :empty]]}", + "name": ":class-objects :user.property/number :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{}]]}", + "name": ":class-objects :user.property/number :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not true]]}", + "name": ":class-objects :user.property/number :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not false]]}", + "name": ":class-objects :user.property/number :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is nil]]}", + "name": ":class-objects :user.property/many :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is :empty]]}", + "name": ":class-objects :user.property/many :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{}]]}", + "name": ":class-objects :user.property/many :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is true]]}", + "name": ":class-objects :user.property/many :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is false]]}", + "name": ":class-objects :user.property/many :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not nil]]}", + "name": ":class-objects :user.property/many :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not :empty]]}", + "name": ":class-objects :user.property/many :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{}]]}", + "name": ":class-objects :user.property/many :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not true]]}", + "name": ":class-objects :user.property/many :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not false]]}", + "name": ":class-objects :user.property/many :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is nil]]}", + "name": ":class-objects :user.property/date :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is :empty]]}", + "name": ":class-objects :user.property/date :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{}]]}", + "name": ":class-objects :user.property/date :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is true]]}", + "name": ":class-objects :user.property/date :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is false]]}", + "name": ":class-objects :user.property/date :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not nil]]}", + "name": ":class-objects :user.property/date :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not :empty]]}", + "name": ":class-objects :user.property/date :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{}]]}", + "name": ":class-objects :user.property/date :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not true]]}", + "name": ":class-objects :user.property/date :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not false]]}", + "name": ":class-objects :user.property/date :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is nil]]}", + "name": ":class-objects :user.property/choice :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is :empty]]}", + "name": ":class-objects :user.property/choice :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{}]]}", + "name": ":class-objects :user.property/choice :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is true]]}", + "name": ":class-objects :user.property/choice :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is false]]}", + "name": ":class-objects :user.property/choice :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not nil]]}", + "name": ":class-objects :user.property/choice :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not :empty]]}", + "name": ":class-objects :user.property/choice :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{}]]}", + "name": ":class-objects :user.property/choice :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not true]]}", + "name": ":class-objects :user.property/choice :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not false]]}", + "name": ":class-objects :user.property/choice :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is nil]]}", + "name": ":class-objects :user.property/time :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is :empty]]}", + "name": ":class-objects :user.property/time :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{}]]}", + "name": ":class-objects :user.property/time :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is true]]}", + "name": ":class-objects :user.property/time :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is false]]}", + "name": ":class-objects :user.property/time :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not nil]]}", + "name": ":class-objects :user.property/time :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not :empty]]}", + "name": ":class-objects :user.property/time :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{}]]}", + "name": ":class-objects :user.property/time :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not true]]}", + "name": ":class-objects :user.property/time :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not false]]}", + "name": ":class-objects :user.property/time :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is nil]]}", + "name": ":class-objects :user.property/flag :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is :empty]]}", + "name": ":class-objects :user.property/flag :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{}]]}", + "name": ":class-objects :user.property/flag :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is true]]}", + "name": ":class-objects :user.property/flag :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is false]]}", + "name": ":class-objects :user.property/flag :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not nil]]}", + "name": ":class-objects :user.property/flag :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not :empty]]}", + "name": ":class-objects :user.property/flag :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{}]]}", + "name": ":class-objects :user.property/flag :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not true]]}", + "name": ":class-objects :user.property/flag :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not false]]}", + "name": ":class-objects :user.property/flag :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is nil]]}", + "name": ":class-objects :user.property/raw :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is :empty]]}", + "name": ":class-objects :user.property/raw :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{}]]}", + "name": ":class-objects :user.property/raw :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is true]]}", + "name": ":class-objects :user.property/raw :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is false]]}", + "name": ":class-objects :user.property/raw :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not nil]]}", + "name": ":class-objects :user.property/raw :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not :empty]]}", + "name": ":class-objects :user.property/raw :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{}]]}", + "name": ":class-objects :user.property/raw :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":class-objects :user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":class-objects :user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not true]]}", + "name": ":class-objects :user.property/raw :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not false]]}", + "name": ":class-objects :user.property/raw :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"apple\"]]}", + "name": ":class-objects :block/title :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"APPLE\"]]}", + "name": ":class-objects :block/title :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"μηλο\"]]}", + "name": ":class-objects :block/title :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"\"]]}", + "name": ":class-objects :block/title :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"10\"]]}", + "name": ":class-objects :block/title :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"apple\"]]}", + "name": ":class-objects :block/title :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :block/title :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :block/title :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"\"]]}", + "name": ":class-objects :block/title :text-not-contains \"\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"10\"]]}", + "name": ":class-objects :block/title :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/text :text-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/text :text-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/text :text-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"\"]]}", + "name": ":class-objects :user.property/text :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"10\"]]}", + "name": ":class-objects :user.property/text :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/text :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/text :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/text :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/text :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/text :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/number :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/number :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/number :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"\"]]}", + "name": ":class-objects :user.property/number :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"10\"]]}", + "name": ":class-objects :user.property/number :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/number :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/number :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/number :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/number :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/number :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/many :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/many :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/many :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"\"]]}", + "name": ":class-objects :user.property/many :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"10\"]]}", + "name": ":class-objects :user.property/many :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/many :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/many :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/many :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/many :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/many :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/date :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/date :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/date :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"\"]]}", + "name": ":class-objects :user.property/date :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"10\"]]}", + "name": ":class-objects :user.property/date :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/date :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/date :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/date :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/date :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/date :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/choice :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/choice :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/choice :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"\"]]}", + "name": ":class-objects :user.property/choice :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"10\"]]}", + "name": ":class-objects :user.property/choice :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/choice :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/choice :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/choice :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/choice :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/choice :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/time :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/time :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/time :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"\"]]}", + "name": ":class-objects :user.property/time :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"10\"]]}", + "name": ":class-objects :user.property/time :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/time :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/time :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/time :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/time :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/time :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/flag :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/flag :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/flag :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"\"]]}", + "name": ":class-objects :user.property/flag :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"10\"]]}", + "name": ":class-objects :user.property/flag :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/flag :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/flag :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/flag :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/flag :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/flag :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"apple\"]]}", + "name": ":class-objects :user.property/raw :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/raw :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/raw :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"\"]]}", + "name": ":class-objects :user.property/raw :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"10\"]]}", + "name": ":class-objects :user.property/raw :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"apple\"]]}", + "name": ":class-objects :user.property/raw :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"APPLE\"]]}", + "name": ":class-objects :user.property/raw :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"μηλο\"]]}", + "name": ":class-objects :user.property/raw :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"\"]]}", + "name": ":class-objects :user.property/raw :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"10\"]]}", + "name": ":class-objects :user.property/raw :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt nil]]}", + "name": ":class-objects :user.property/number :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 0]]}", + "name": ":class-objects :user.property/number :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt -2.5]]}", + "name": ":class-objects :user.property/number :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 10]]}", + "name": ":class-objects :user.property/number :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 11]]}", + "name": ":class-objects :user.property/number :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt \"2\"]]}", + "name": ":class-objects :user.property/number :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte nil]]}", + "name": ":class-objects :user.property/number :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 0]]}", + "name": ":class-objects :user.property/number :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte -2.5]]}", + "name": ":class-objects :user.property/number :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 10]]}", + "name": ":class-objects :user.property/number :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 11]]}", + "name": ":class-objects :user.property/number :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte \"2\"]]}", + "name": ":class-objects :user.property/number :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt nil]]}", + "name": ":class-objects :user.property/number :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 0]]}", + "name": ":class-objects :user.property/number :number-lt 0", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt -2.5]]}", + "name": ":class-objects :user.property/number :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 10]]}", + "name": ":class-objects :user.property/number :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 11]]}", + "name": ":class-objects :user.property/number :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt \"2\"]]}", + "name": ":class-objects :user.property/number :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte nil]]}", + "name": ":class-objects :user.property/number :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 0]]}", + "name": ":class-objects :user.property/number :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte -2.5]]}", + "name": ":class-objects :user.property/number :number-lte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 10]]}", + "name": ":class-objects :user.property/number :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 11]]}", + "name": ":class-objects :user.property/number :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte \"2\"]]}", + "name": ":class-objects :user.property/number :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt nil]]}", + "name": ":class-objects :user.property/many :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 0]]}", + "name": ":class-objects :user.property/many :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt -2.5]]}", + "name": ":class-objects :user.property/many :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 10]]}", + "name": ":class-objects :user.property/many :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 11]]}", + "name": ":class-objects :user.property/many :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt \"2\"]]}", + "name": ":class-objects :user.property/many :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte nil]]}", + "name": ":class-objects :user.property/many :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 0]]}", + "name": ":class-objects :user.property/many :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte -2.5]]}", + "name": ":class-objects :user.property/many :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 10]]}", + "name": ":class-objects :user.property/many :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 11]]}", + "name": ":class-objects :user.property/many :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte \"2\"]]}", + "name": ":class-objects :user.property/many :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt nil]]}", + "name": ":class-objects :user.property/many :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 0]]}", + "name": ":class-objects :user.property/many :number-lt 0", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt -2.5]]}", + "name": ":class-objects :user.property/many :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 10]]}", + "name": ":class-objects :user.property/many :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 11]]}", + "name": ":class-objects :user.property/many :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt \"2\"]]}", + "name": ":class-objects :user.property/many :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte nil]]}", + "name": ":class-objects :user.property/many :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 0]]}", + "name": ":class-objects :user.property/many :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte -2.5]]}", + "name": ":class-objects :user.property/many :number-lte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 10]]}", + "name": ":class-objects :user.property/many :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 11]]}", + "name": ":class-objects :user.property/many :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte \"2\"]]}", + "name": ":class-objects :user.property/many :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt nil]]}", + "name": ":class-objects :user.property/raw :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 0]]}", + "name": ":class-objects :user.property/raw :number-gt 0", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt -2.5]]}", + "name": ":class-objects :user.property/raw :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 10]]}", + "name": ":class-objects :user.property/raw :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 11]]}", + "name": ":class-objects :user.property/raw :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt \"2\"]]}", + "name": ":class-objects :user.property/raw :number-gt \"2\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte nil]]}", + "name": ":class-objects :user.property/raw :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 0]]}", + "name": ":class-objects :user.property/raw :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte -2.5]]}", + "name": ":class-objects :user.property/raw :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 10]]}", + "name": ":class-objects :user.property/raw :number-gte 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 11]]}", + "name": ":class-objects :user.property/raw :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte \"2\"]]}", + "name": ":class-objects :user.property/raw :number-gte \"2\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt nil]]}", + "name": ":class-objects :user.property/raw :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 0]]}", + "name": ":class-objects :user.property/raw :number-lt 0", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt -2.5]]}", + "name": ":class-objects :user.property/raw :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 10]]}", + "name": ":class-objects :user.property/raw :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 11]]}", + "name": ":class-objects :user.property/raw :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt \"2\"]]}", + "name": ":class-objects :user.property/raw :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte nil]]}", + "name": ":class-objects :user.property/raw :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 0]]}", + "name": ":class-objects :user.property/raw :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte -2.5]]}", + "name": ":class-objects :user.property/raw :number-lte -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 10]]}", + "name": ":class-objects :user.property/raw :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 11]]}", + "name": ":class-objects :user.property/raw :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte \"2\"]]}", + "name": ":class-objects :user.property/raw :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between []]]}", + "name": ":class-objects :user.property/number :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [nil nil]]]}", + "name": ":class-objects :user.property/number :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [nil 0]]]}", + "name": ":class-objects :user.property/number :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [0 nil]]]}", + "name": ":class-objects :user.property/number :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [-2.5 10]]]}", + "name": ":class-objects :user.property/number :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [10 10]]]}", + "name": ":class-objects :user.property/number :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [11 0]]]}", + "name": ":class-objects :user.property/number :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between []]]}", + "name": ":class-objects :user.property/many :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [nil nil]]]}", + "name": ":class-objects :user.property/many :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [nil 0]]]}", + "name": ":class-objects :user.property/many :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [0 nil]]]}", + "name": ":class-objects :user.property/many :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [-2.5 10]]]}", + "name": ":class-objects :user.property/many :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [10 10]]]}", + "name": ":class-objects :user.property/many :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [11 0]]]}", + "name": ":class-objects :user.property/many :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between []]]}", + "name": ":class-objects :user.property/raw :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [nil nil]]]}", + "name": ":class-objects :user.property/raw :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [nil 0]]]}", + "name": ":class-objects :user.property/raw :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [0 nil]]]}", + "name": ":class-objects :user.property/raw :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [-2.5 10]]]}", + "name": ":class-objects :user.property/raw :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [10 10]]]}", + "name": ":class-objects :user.property/raw :between [10 10]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [11 0]]]}", + "name": ":class-objects :user.property/raw :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before nil]]}", + "name": ":class-objects :user.property/date :date-before nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before {:block/journal-day 20261002}]]}", + "name": ":class-objects :user.property/date :date-before {:block/journal-day 20261002}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before {:block/journal-day 20261001}]]}", + "name": ":class-objects :user.property/date :date-before {:block/journal-day 20261001}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after nil]]}", + "name": ":class-objects :user.property/date :date-after nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after {:block/journal-day 20261002}]]}", + "name": ":class-objects :user.property/date :date-after {:block/journal-day 20261002}", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after {:block/journal-day 20261001}]]}", + "name": ":class-objects :user.property/date :date-after {:block/journal-day 20261001}", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before nil]]}", + "name": ":class-objects :user.property/time :before nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 1000]]}", + "name": ":class-objects :user.property/time :before 1000", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 1500]]}", + "name": ":class-objects :user.property/time :before 1500", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 2000]]}", + "name": ":class-objects :user.property/time :before 2000", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before \"invalid\"]]}", + "name": ":class-objects :user.property/time :before \"invalid\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after nil]]}", + "name": ":class-objects :user.property/time :after nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 1000]]}", + "name": ":class-objects :user.property/time :after 1000", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 1500]]}", + "name": ":class-objects :user.property/time :after 1500", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 2000]]}", + "name": ":class-objects :user.property/time :after 2000", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after \"invalid\"]]}", + "name": ":class-objects :user.property/time :after \"invalid\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects search \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects search \" \"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": " ", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects search \"ROW 1\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "ROW 1", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects search \"row 9\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "row 9", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":class-objects search \"ΜΗΛΟ\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "ΜΗΛΟ", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:filters [[:user.property/number :future-operator 1]]}", + "name": ":class-objects unknown operator matches master", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? true, :filters []}", + "name": ":class-objects OR empty clauses", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters []}", + "name": ":class-objects AND empty clauses", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? true, :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains \"Orange\"]]}", + "name": ":class-objects OR with search", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "ROW 1", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains \"apple\"]]}", + "name": ":class-objects AND combination", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "class-objects", + "owner": "30000000-0000-4000-8000-000000000006", + "view": "30000000-0000-4000-8000-000000000007" + }, + { + "filters": "nil", + "name": ":property-objects sort :block/title true true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :block/title true false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :block/title false true", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :block/title false false", + "rows": [ + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/text true true", + "rows": [ + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/text true false", + "rows": [ + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/text false true", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/text false false", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/text, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/number true true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/number true false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/number false true", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/number false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/number, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/many true true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/many true false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/many false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/many false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/many, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/date true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/date true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/date false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/date false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/date, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/choice true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/choice true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/choice false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/choice false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/choice, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/time true true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/time true false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/time false true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/time false false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/time, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/flag true true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/flag true false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/flag false true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/flag false false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/flag, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/raw true true", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? true} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/raw true false", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/raw false true", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000100" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? false} {:id :block/title, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects sort :user.property/raw false false", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :user.property/raw, :asc? false}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is nil]]}", + "name": ":property-objects :block/title :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is :empty]]}", + "name": ":property-objects :block/title :is :empty", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{}]]}", + "name": ":property-objects :block/title :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :block/title :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :block/title :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is true]]}", + "name": ":property-objects :block/title :is true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is false]]}", + "name": ":property-objects :block/title :is false", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not nil]]}", + "name": ":property-objects :block/title :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not :empty]]}", + "name": ":property-objects :block/title :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{}]]}", + "name": ":property-objects :block/title :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :block/title :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not true]]}", + "name": ":property-objects :block/title :is-not true", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :is-not false]]}", + "name": ":property-objects :block/title :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is nil]]}", + "name": ":property-objects :user.property/text :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is :empty]]}", + "name": ":property-objects :user.property/text :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{}]]}", + "name": ":property-objects :user.property/text :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/text :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is true]]}", + "name": ":property-objects :user.property/text :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is false]]}", + "name": ":property-objects :user.property/text :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not nil]]}", + "name": ":property-objects :user.property/text :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not :empty]]}", + "name": ":property-objects :user.property/text :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{}]]}", + "name": ":property-objects :user.property/text :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/text :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not true]]}", + "name": ":property-objects :user.property/text :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :is-not false]]}", + "name": ":property-objects :user.property/text :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is nil]]}", + "name": ":property-objects :user.property/number :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is :empty]]}", + "name": ":property-objects :user.property/number :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{}]]}", + "name": ":property-objects :user.property/number :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/number :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is true]]}", + "name": ":property-objects :user.property/number :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is false]]}", + "name": ":property-objects :user.property/number :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not nil]]}", + "name": ":property-objects :user.property/number :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not :empty]]}", + "name": ":property-objects :user.property/number :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{}]]}", + "name": ":property-objects :user.property/number :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/number :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not true]]}", + "name": ":property-objects :user.property/number :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :is-not false]]}", + "name": ":property-objects :user.property/number :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is nil]]}", + "name": ":property-objects :user.property/many :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is :empty]]}", + "name": ":property-objects :user.property/many :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{}]]}", + "name": ":property-objects :user.property/many :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/many :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is true]]}", + "name": ":property-objects :user.property/many :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is false]]}", + "name": ":property-objects :user.property/many :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not nil]]}", + "name": ":property-objects :user.property/many :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not :empty]]}", + "name": ":property-objects :user.property/many :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{}]]}", + "name": ":property-objects :user.property/many :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/many :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not true]]}", + "name": ":property-objects :user.property/many :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :is-not false]]}", + "name": ":property-objects :user.property/many :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is nil]]}", + "name": ":property-objects :user.property/date :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is :empty]]}", + "name": ":property-objects :user.property/date :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{}]]}", + "name": ":property-objects :user.property/date :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/date :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is true]]}", + "name": ":property-objects :user.property/date :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is false]]}", + "name": ":property-objects :user.property/date :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not nil]]}", + "name": ":property-objects :user.property/date :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not :empty]]}", + "name": ":property-objects :user.property/date :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{}]]}", + "name": ":property-objects :user.property/date :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/date :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not true]]}", + "name": ":property-objects :user.property/date :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :is-not false]]}", + "name": ":property-objects :user.property/date :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is nil]]}", + "name": ":property-objects :user.property/choice :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is :empty]]}", + "name": ":property-objects :user.property/choice :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{}]]}", + "name": ":property-objects :user.property/choice :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/choice :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is true]]}", + "name": ":property-objects :user.property/choice :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is false]]}", + "name": ":property-objects :user.property/choice :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not nil]]}", + "name": ":property-objects :user.property/choice :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not :empty]]}", + "name": ":property-objects :user.property/choice :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{}]]}", + "name": ":property-objects :user.property/choice :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/choice :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not true]]}", + "name": ":property-objects :user.property/choice :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :is-not false]]}", + "name": ":property-objects :user.property/choice :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is nil]]}", + "name": ":property-objects :user.property/time :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is :empty]]}", + "name": ":property-objects :user.property/time :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{}]]}", + "name": ":property-objects :user.property/time :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/time :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is true]]}", + "name": ":property-objects :user.property/time :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is false]]}", + "name": ":property-objects :user.property/time :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not nil]]}", + "name": ":property-objects :user.property/time :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not :empty]]}", + "name": ":property-objects :user.property/time :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{}]]}", + "name": ":property-objects :user.property/time :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/time :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not true]]}", + "name": ":property-objects :user.property/time :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :is-not false]]}", + "name": ":property-objects :user.property/time :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is nil]]}", + "name": ":property-objects :user.property/flag :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is :empty]]}", + "name": ":property-objects :user.property/flag :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{}]]}", + "name": ":property-objects :user.property/flag :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/flag :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is true]]}", + "name": ":property-objects :user.property/flag :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is false]]}", + "name": ":property-objects :user.property/flag :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not nil]]}", + "name": ":property-objects :user.property/flag :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not :empty]]}", + "name": ":property-objects :user.property/flag :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{}]]}", + "name": ":property-objects :user.property/flag :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/flag :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not true]]}", + "name": ":property-objects :user.property/flag :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :is-not false]]}", + "name": ":property-objects :user.property/flag :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is nil]]}", + "name": ":property-objects :user.property/raw :is nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is :empty]]}", + "name": ":property-objects :user.property/raw :is :empty", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{}]]}", + "name": ":property-objects :user.property/raw :is #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/raw :is #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is true]]}", + "name": ":property-objects :user.property/raw :is true", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is false]]}", + "name": ":property-objects :user.property/raw :is false", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not nil]]}", + "name": ":property-objects :user.property/raw :is-not nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not :empty]]}", + "name": ":property-objects :user.property/raw :is-not :empty", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{}]]}", + "name": ":property-objects :user.property/raw :is-not #{}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}]]}", + "name": ":property-objects :user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000020\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}]]}", + "name": ":property-objects :user.property/raw :is-not #{#uuid \"30000000-0000-4000-8000-000000000050\"}", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not true]]}", + "name": ":property-objects :user.property/raw :is-not true", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :is-not false]]}", + "name": ":property-objects :user.property/raw :is-not false", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"apple\"]]}", + "name": ":property-objects :block/title :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"APPLE\"]]}", + "name": ":property-objects :block/title :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"μηλο\"]]}", + "name": ":property-objects :block/title :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"\"]]}", + "name": ":property-objects :block/title :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-contains \"10\"]]}", + "name": ":property-objects :block/title :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"apple\"]]}", + "name": ":property-objects :block/title :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :block/title :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :block/title :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"\"]]}", + "name": ":property-objects :block/title :text-not-contains \"\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:block/title :text-not-contains \"10\"]]}", + "name": ":property-objects :block/title :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/text :text-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/text :text-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/text :text-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"\"]]}", + "name": ":property-objects :user.property/text :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-contains \"10\"]]}", + "name": ":property-objects :user.property/text :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/text :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/text :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/text :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/text :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/text :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/text :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/number :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/number :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/number :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"\"]]}", + "name": ":property-objects :user.property/number :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-contains \"10\"]]}", + "name": ":property-objects :user.property/number :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/number :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/number :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/number :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/number :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/number :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/many :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/many :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/many :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"\"]]}", + "name": ":property-objects :user.property/many :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-contains \"10\"]]}", + "name": ":property-objects :user.property/many :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/many :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/many :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/many :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/many :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/many :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/date :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/date :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/date :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"\"]]}", + "name": ":property-objects :user.property/date :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-contains \"10\"]]}", + "name": ":property-objects :user.property/date :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/date :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/date :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/date :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/date :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/date :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/choice :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/choice :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/choice :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"\"]]}", + "name": ":property-objects :user.property/choice :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-contains \"10\"]]}", + "name": ":property-objects :user.property/choice :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/choice :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/choice :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/choice :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/choice :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/choice :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/choice :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/time :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/time :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/time :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"\"]]}", + "name": ":property-objects :user.property/time :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-contains \"10\"]]}", + "name": ":property-objects :user.property/time :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/time :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/time :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/time :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/time :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/time :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/flag :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/flag :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/flag :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"\"]]}", + "name": ":property-objects :user.property/flag :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-contains \"10\"]]}", + "name": ":property-objects :user.property/flag :text-contains \"10\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/flag :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/flag :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/flag :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/flag :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/flag :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/flag :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"apple\"]]}", + "name": ":property-objects :user.property/raw :text-contains \"apple\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/raw :text-contains \"APPLE\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/raw :text-contains \"μηλο\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"\"]]}", + "name": ":property-objects :user.property/raw :text-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-contains \"10\"]]}", + "name": ":property-objects :user.property/raw :text-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"apple\"]]}", + "name": ":property-objects :user.property/raw :text-not-contains \"apple\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"APPLE\"]]}", + "name": ":property-objects :user.property/raw :text-not-contains \"APPLE\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"μηλο\"]]}", + "name": ":property-objects :user.property/raw :text-not-contains \"μηλο\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"\"]]}", + "name": ":property-objects :user.property/raw :text-not-contains \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :text-not-contains \"10\"]]}", + "name": ":property-objects :user.property/raw :text-not-contains \"10\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt nil]]}", + "name": ":property-objects :user.property/number :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 0]]}", + "name": ":property-objects :user.property/number :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt -2.5]]}", + "name": ":property-objects :user.property/number :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 10]]}", + "name": ":property-objects :user.property/number :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt 11]]}", + "name": ":property-objects :user.property/number :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gt \"2\"]]}", + "name": ":property-objects :user.property/number :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte nil]]}", + "name": ":property-objects :user.property/number :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 0]]}", + "name": ":property-objects :user.property/number :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte -2.5]]}", + "name": ":property-objects :user.property/number :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 10]]}", + "name": ":property-objects :user.property/number :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 11]]}", + "name": ":property-objects :user.property/number :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte \"2\"]]}", + "name": ":property-objects :user.property/number :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt nil]]}", + "name": ":property-objects :user.property/number :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 0]]}", + "name": ":property-objects :user.property/number :number-lt 0", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt -2.5]]}", + "name": ":property-objects :user.property/number :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 10]]}", + "name": ":property-objects :user.property/number :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt 11]]}", + "name": ":property-objects :user.property/number :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lt \"2\"]]}", + "name": ":property-objects :user.property/number :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte nil]]}", + "name": ":property-objects :user.property/number :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 0]]}", + "name": ":property-objects :user.property/number :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte -2.5]]}", + "name": ":property-objects :user.property/number :number-lte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 10]]}", + "name": ":property-objects :user.property/number :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte 11]]}", + "name": ":property-objects :user.property/number :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-lte \"2\"]]}", + "name": ":property-objects :user.property/number :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt nil]]}", + "name": ":property-objects :user.property/many :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 0]]}", + "name": ":property-objects :user.property/many :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt -2.5]]}", + "name": ":property-objects :user.property/many :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 10]]}", + "name": ":property-objects :user.property/many :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt 11]]}", + "name": ":property-objects :user.property/many :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gt \"2\"]]}", + "name": ":property-objects :user.property/many :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte nil]]}", + "name": ":property-objects :user.property/many :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 0]]}", + "name": ":property-objects :user.property/many :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte -2.5]]}", + "name": ":property-objects :user.property/many :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 10]]}", + "name": ":property-objects :user.property/many :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte 11]]}", + "name": ":property-objects :user.property/many :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-gte \"2\"]]}", + "name": ":property-objects :user.property/many :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt nil]]}", + "name": ":property-objects :user.property/many :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 0]]}", + "name": ":property-objects :user.property/many :number-lt 0", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt -2.5]]}", + "name": ":property-objects :user.property/many :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 10]]}", + "name": ":property-objects :user.property/many :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt 11]]}", + "name": ":property-objects :user.property/many :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lt \"2\"]]}", + "name": ":property-objects :user.property/many :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte nil]]}", + "name": ":property-objects :user.property/many :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 0]]}", + "name": ":property-objects :user.property/many :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte -2.5]]}", + "name": ":property-objects :user.property/many :number-lte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 10]]}", + "name": ":property-objects :user.property/many :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte 11]]}", + "name": ":property-objects :user.property/many :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :number-lte \"2\"]]}", + "name": ":property-objects :user.property/many :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt nil]]}", + "name": ":property-objects :user.property/raw :number-gt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 0]]}", + "name": ":property-objects :user.property/raw :number-gt 0", + "rows": [ + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt -2.5]]}", + "name": ":property-objects :user.property/raw :number-gt -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 10]]}", + "name": ":property-objects :user.property/raw :number-gt 10", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt 11]]}", + "name": ":property-objects :user.property/raw :number-gt 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gt \"2\"]]}", + "name": ":property-objects :user.property/raw :number-gt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte nil]]}", + "name": ":property-objects :user.property/raw :number-gte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 0]]}", + "name": ":property-objects :user.property/raw :number-gte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte -2.5]]}", + "name": ":property-objects :user.property/raw :number-gte -2.5", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 10]]}", + "name": ":property-objects :user.property/raw :number-gte 10", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte 11]]}", + "name": ":property-objects :user.property/raw :number-gte 11", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-gte \"2\"]]}", + "name": ":property-objects :user.property/raw :number-gte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt nil]]}", + "name": ":property-objects :user.property/raw :number-lt nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 0]]}", + "name": ":property-objects :user.property/raw :number-lt 0", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt -2.5]]}", + "name": ":property-objects :user.property/raw :number-lt -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 10]]}", + "name": ":property-objects :user.property/raw :number-lt 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt 11]]}", + "name": ":property-objects :user.property/raw :number-lt 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lt \"2\"]]}", + "name": ":property-objects :user.property/raw :number-lt \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte nil]]}", + "name": ":property-objects :user.property/raw :number-lte nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 0]]}", + "name": ":property-objects :user.property/raw :number-lte 0", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte -2.5]]}", + "name": ":property-objects :user.property/raw :number-lte -2.5", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 10]]}", + "name": ":property-objects :user.property/raw :number-lte 10", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte 11]]}", + "name": ":property-objects :user.property/raw :number-lte 11", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :number-lte \"2\"]]}", + "name": ":property-objects :user.property/raw :number-lte \"2\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between []]]}", + "name": ":property-objects :user.property/number :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [nil nil]]]}", + "name": ":property-objects :user.property/number :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [nil 0]]]}", + "name": ":property-objects :user.property/number :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [0 nil]]]}", + "name": ":property-objects :user.property/number :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [-2.5 10]]]}", + "name": ":property-objects :user.property/number :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [10 10]]]}", + "name": ":property-objects :user.property/number :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000104" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :between [11 0]]]}", + "name": ":property-objects :user.property/number :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between []]]}", + "name": ":property-objects :user.property/many :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [nil nil]]]}", + "name": ":property-objects :user.property/many :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [nil 0]]]}", + "name": ":property-objects :user.property/many :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [0 nil]]]}", + "name": ":property-objects :user.property/many :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [-2.5 10]]]}", + "name": ":property-objects :user.property/many :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000105" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [10 10]]]}", + "name": ":property-objects :user.property/many :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/many :between [11 0]]]}", + "name": ":property-objects :user.property/many :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between []]]}", + "name": ":property-objects :user.property/raw :between []", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [nil nil]]]}", + "name": ":property-objects :user.property/raw :between [nil nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [nil 0]]]}", + "name": ":property-objects :user.property/raw :between [nil 0]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [0 nil]]]}", + "name": ":property-objects :user.property/raw :between [0 nil]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [-2.5 10]]]}", + "name": ":property-objects :user.property/raw :between [-2.5 10]", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [10 10]]]}", + "name": ":property-objects :user.property/raw :between [10 10]", + "rows": [ + "30000000-0000-4000-8000-000000000103" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/raw :between [11 0]]]}", + "name": ":property-objects :user.property/raw :between [11 0]", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before nil]]}", + "name": ":property-objects :user.property/date :date-before nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before {:block/journal-day 20261002}]]}", + "name": ":property-objects :user.property/date :date-before {:block/journal-day 20261002}", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-before {:block/journal-day 20261001}]]}", + "name": ":property-objects :user.property/date :date-before {:block/journal-day 20261001}", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after nil]]}", + "name": ":property-objects :user.property/date :date-after nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after {:block/journal-day 20261002}]]}", + "name": ":property-objects :user.property/date :date-after {:block/journal-day 20261002}", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/date :date-after {:block/journal-day 20261001}]]}", + "name": ":property-objects :user.property/date :date-after {:block/journal-day 20261001}", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before nil]]}", + "name": ":property-objects :user.property/time :before nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 1000]]}", + "name": ":property-objects :user.property/time :before 1000", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 1500]]}", + "name": ":property-objects :user.property/time :before 1500", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before 2000]]}", + "name": ":property-objects :user.property/time :before 2000", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :before \"invalid\"]]}", + "name": ":property-objects :user.property/time :before \"invalid\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after nil]]}", + "name": ":property-objects :user.property/time :after nil", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 1000]]}", + "name": ":property-objects :user.property/time :after 1000", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 1500]]}", + "name": ":property-objects :user.property/time :after 1500", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after 2000]]}", + "name": ":property-objects :user.property/time :after 2000", + "rows": [ + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/time :after \"invalid\"]]}", + "name": ":property-objects :user.property/time :after \"invalid\"", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects search \"\"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects search \" \"", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": " ", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects search \"ROW 1\"", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "ROW 1", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects search \"row 9\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "row 9", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "nil", + "name": ":property-objects search \"ΜΗΛΟ\"", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "ΜΗΛΟ", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:filters [[:user.property/number :future-operator 1]]}", + "name": ":property-objects unknown operator matches master", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? true, :filters []}", + "name": ":property-objects OR empty clauses", + "rows": [], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters []}", + "name": ":property-objects AND empty clauses", + "rows": [ + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000108" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? true, :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains \"Orange\"]]}", + "name": ":property-objects OR with search", + "rows": [ + "30000000-0000-4000-8000-000000000101" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "ROW 1", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + }, + { + "filters": "{:or? false, :filters [[:user.property/number :number-gte 0] [:user.property/text :text-contains \"apple\"]]}", + "name": ":property-objects AND combination", + "rows": [ + "30000000-0000-4000-8000-000000000101", + "30000000-0000-4000-8000-000000000102" + ], + "sourceRows": [ + "30000000-0000-4000-8000-000000000102", + "30000000-0000-4000-8000-000000000103", + "30000000-0000-4000-8000-000000000108", + "30000000-0000-4000-8000-000000000107", + "30000000-0000-4000-8000-000000000100", + "30000000-0000-4000-8000-000000000104", + "30000000-0000-4000-8000-000000000105", + "30000000-0000-4000-8000-000000000106", + "30000000-0000-4000-8000-000000000101" + ], + "input": "", + "sorting": "[{:id :block/title, :asc? true}]", + "feature": "property-objects", + "owner": "30000000-0000-4000-8000-000000000018", + "view": "30000000-0000-4000-8000-000000000008" + } + ] +} \ No newline at end of file diff --git a/shared/test/logseq/graph_runtime_test.ml b/shared/test/logseq/graph_runtime_test.ml index f5ce9777..0fb601ff 100644 --- a/shared/test/logseq/graph_runtime_test.ml +++ b/shared/test/logseq/graph_runtime_test.ml @@ -189,11 +189,11 @@ let semantic_maps_reject_invalid_keys_and_unsupported_values () = check_eq (Pending.semantic_value_from_datascript (Ds.Map [ (Ds.String "invalid", Ds.Int64 1L); (Ds.Keyword "later", Ds.Int64 2L) ])) - (Error "flashcard state contains a non-keyword key"); + (Error "semantic map contains a non-keyword key"); check_eq (Pending.semantic_value_from_datascript (Ds.Map [ (Ds.Keyword "invalid", Ds.Ref 42) ])) - (Error "flashcard state contains an unsupported value") + (Error "unsupported semantic value") let projected_readers_share_offline_edits_without_changing_authoritative_data () = with_runtime (fun path conn current -> diff --git a/shared/test/logseq/query_block_test.ml b/shared/test/logseq/query_block_test.ml new file mode 100644 index 00000000..37b9559b --- /dev/null +++ b/shared/test/logseq/query_block_test.ml @@ -0,0 +1,477 @@ +open Test_util +module Ds = Datascript +module Json = Yojson.Basic +module Session = Rpc_session +module Types = Session_types + +let owner = "10000000-0000-4000-8000-000000000001" +let definition = "10000000-0000-4000-8000-000000000002" +let page = "10000000-0000-4000-8000-000000000003" +let alpha = "10000000-0000-4000-8000-000000000004" +let beta = "10000000-0000-4000-8000-000000000005" +let project = "10000000-0000-4000-8000-000000000006" +let member = Rpc_test.member +let items name json = match member name json with `List xs -> xs | _ -> [] +let ref_uuid uuid = Ds.Lookup_ref ("block/uuid", Ds.Uuid uuid) +let put uuid attr value = Ds.Add (ref_uuid uuid, attr, value) + +let fixture source = + let db = match Graph_bootstrap.database "query-tests" false (fun s -> Ok s) with + | Ok db -> db | Error message -> fail message in + let schema = ("user.property/score", {Storage_codec.default_schema_attr with + Ds.indexed = true; value_type = Some Ds.NumberType}) :: db.Ds.schema in + let db = {db with Ds.schema} in + let add_entity uuid title = [Ds.Add (Ds.Entity_id (900000 + int_of_string (String.sub uuid 24 12)), "block/uuid", Ds.Uuid uuid); + put uuid "block/title" (Ds.String title)] in + let block uuid title order = add_entity uuid title @ [ + put uuid "block/page" (Ds.Ref_to (ref_uuid page)); + put uuid "block/parent" (Ds.Ref_to (ref_uuid page)); + put uuid "block/order" (Ds.String order)] in + Ds.db_with (add_entity page "Workspace" @ [put page "block/name" (Ds.String "workspace")] + @ [Ds.Add (Ds.Entity_id 900010, "db/ident", Ds.Keyword "user.property/score"); + Ds.Add (Ds.Entity_id 900010, "block/title", Ds.String "Score"); + Ds.Add (Ds.Entity_id 900010, "block/tags", Ds.Ref_to (Ds.Ident "logseq.class/Property"))] + @ add_entity project "Project" @ [put project "block/name" (Ds.String "project"); + put project "block/tags" (Ds.Ref_to (Ds.Ident "logseq.class/Tag"))] + @ block owner "My query" "a0" @ [ + put owner "block/tags" (Ds.Ref_to (Ds.Ident "logseq.class/Query")); + put owner "logseq.property/query" (Ds.Ref_to (ref_uuid definition))] + @ block definition source "a1" + @ block alpha "Alpha **result**" "a2" @ [ + put alpha "block/tags" (Ds.Ref_to (ref_uuid project)); + put alpha "block/refs" (Ds.Ref_to (ref_uuid project)); + put alpha "user.property/score" (Ds.Int64 2L)] + @ block beta "Beta result" "a3" @ [put beta "user.property/score" (Ds.Int64 1L)]) db + +let make_session ?(limit = None) db = + let db = ref db in + let blocks () = Graph_read.blocks_for_page (fun s -> Ok s) !db page in + let session = Session.create_session {Session.default_options with + outliner_projection_limit = limit; + graph_blocks = Some (fun () -> Some (blocks ())); + graph_page_blocks = Some (fun _ -> Some (blocks ()))} in + let model = (Types.state session).model in + model.Cache_model.db <- !db; + let set_db value = db := value; model.db <- value; model.revision <- model.revision + 1 in + session, set_db + +let dispatch session action payload = Rpc_test.response_result (Rpc_test.dispatch_json session action payload) +let open_results session = + ignore (Rpc_test.dispatch_json session "resultView" (Json.to_string (`Assoc [ + "ownerUuid", `String owner; "featureType", `String "query-result"; + "action", `String "setExpanded"; "expanded", `Bool true]))) +let query session = member "query" (dispatch session "queryBlock" owner) +let query_source source = let session, _ = make_session (fixture source) in query session +let row_ids query = List.filter_map (fun row -> match member "uuid" (member "block" row) with + | `String s -> Some s | _ -> None) (items "rows" query) |> List.sort compare +let cells query = List.concat_map (fun row -> items "cells" row) (items "rows" query) +let expect_ids source expected = + let result = query_source source in + check_eq ~msg:(Json.to_string result) (member "error" result) `Null; + check_eq ~msg:source (row_ids result) (List.sort compare expected) + +let simple_queries () = + List.iter (fun source -> expect_ids source [alpha]) + ["#Project"; "[[Project]]"; "(and #Project (not \"Beta\"))"; + "(and (property :user.property/score 2) #Project)"; + "(or #Project \"not found\")"]; + expect_ids "(page Workspace)" [alpha; beta] + +let advanced_queries () = + expect_ids "{:query [:find (pull ?b [*]) :where [?b :user.property/score ?s] [(> ?s 1)]]}" [alpha]; + expect_ids "{:query [:find [?b ...] :where [?b :user.property/score ?s]]}" [alpha; beta]; + let result = query_source "{:query [:find (count ?b) :where [?b :user.property/score]]}" in + check_eq (cells result) [`String "2"]; + let tuples = query_source "{:query [:find ?t ?s :where [?b :user.property/score ?s] [?b :block/title ?t]]}" in + check_eq (List.length (items "rows" tuples)) 2; + check (List.mem (`String "Alpha **result**") (cells tuples)) + +let contextual_inputs_and_rules () = + expect_ids "{:query [:find (pull ?b [*]) :in $ ?p :where [?p-e :block/name ?p] [?b :block/page ?p-e] [?b :user.property/score]] :inputs [:query-page]}" [alpha; beta]; + expect_ids "{:query [:find (pull ?b [*]) :in $ ?p :where [?p-e :block/name ?p] [?b :block/page ?p-e] [?b :user.property/score]] :inputs [:current-page]}" [alpha; beta]; + expect_ids "{:query [:find (pull ?b [*]) :in $ % :where (scored ?b)] :rules [[(scored ?b) [?b :user.property/score 2]]]}" [alpha]; + let today = Cache_model.journal_day_for_ms (Session_types.now_ms ()) in + let result = query_source "{:query [:find ?day . :in $ ?day :where] :inputs [:today]}" in + check_eq (cells result) [`String (string_of_int today)] + +let transforms () = + expect_ids "{:query [:find (pull ?b [*]) :where [?b :user.property/score]] :result-transform (fn [rows] (take 1 (sort-by :user.property/score rows)))}" [beta]; + let result = query_source "{:query [:find ?s :where [?b :user.property/score ?s]] :result-transform (fn [rows] (map (fn [row] [(inc (first row))]) rows))}" in + check_eq (List.sort compare (cells result)) [`String "2"; `String "3"] + +let invalid_and_empty_queries () = + List.iter (fun source -> let q = query_source source in + check ~msg:("expected a query-local error: " ^ source) + (match member "error" q with `String s -> s <> "" | _ -> false)) + ["(and"; "(unknown-operator foo)"; "{:query [:find ?x :where (missing ?x)]}"; + "{:query [:find ?x :where] :view (fn [x] [:div x])}"; + "{:query [:find ?x :where] :result-transform (fn [rows] (unknown-fn rows))}"]; + check_eq (items "rows" (query_source "#Missing")) []; + check_eq (member "error" (query_source "")) `Null + +let missing_definition_is_isolated () = + let db = fixture "#Project" in + let missing = Ds.db_with [Ds.RetractEntity (ref_uuid definition)] db in + let session, _ = make_session missing in + let q = query session in + check (match member "error" q with `String _ -> true | _ -> false); + let ordinary = member "query" (dispatch session "queryBlock" alpha) in + check_eq ordinary `Null + +let filters_recursive_and_hidden_results () = + let db = fixture ("{:query [:find (pull ?b [*]) :where [?p :block/uuid #uuid \"" ^ page ^ "\"] [?b :block/page ?p]]}") in + let db = Ds.db_with [put beta "logseq.property/hide?" (Ds.Bool true)] db in + let session, _ = make_session db in + let q = query session in + check_eq ~msg:(Json.to_string q) (row_ids q) [alpha] + +let live_updates_and_hydration () = + let db = fixture "#Project" in + let session, set_db = make_session ~limit:(Some 1) db in + open_results session; + let snapshot () = Rpc_test.response_result (Json.from_string (Session.snapshot_visible session)) in + let owner_block response = List.find (fun b -> member "uuid" b = `String owner) (items "blocks" response) in + check_eq (row_ids (member "query" (owner_block (snapshot ())))) [alpha]; + let db = Ds.db_with [put beta "block/tags" (Ds.Ref_to (ref_uuid project)); + put beta "block/refs" (Ds.Ref_to (ref_uuid project))] db in + set_db db; + let q = member "query" (owner_block (snapshot ())) in + check_eq ~msg:(Json.to_string q) (row_ids q) [alpha; beta]; + let hydrated = dispatch session "hydrateOutlinerRows" (Json.to_string (`List [`String owner])) in + check_eq (row_ids (member "query" (List.hd (items "hydratedBlocks" hydrated)))) [alpha; beta]; + set_db (Ds.db_with [put definition "block/title" (Ds.String "\"Beta\"")] db); + check_eq (row_ids (query session)) [beta] + +let query_result_block uuid title = `Assoc ["uuid", `String uuid; "title", `String title; + "pageId", `String page; "markup", `List [`Assoc ["type", `String "text"; "text", `String title]]] + +let ui_response ?(collapsed = false) ?(rows = []) ?(error = `Null) () = + let q = `Assoc ["kind", `String "simple"; "source", `String "#Project"; + "rows", `List rows; "error", error] in + let block = match query_result_block owner "My query" with `Assoc fields -> `Assoc (("query", q) :: fields) | x -> x in + Json.to_string (`Assoc ["ok", `Bool true; "result", `Assoc [ + "selectedGraphId", `String "test-graph"; "graphName", `String "Query graph"; + "outlinerRows", `List [`Assoc ["block", block; "depth", `Int 0; + "hasChildren", `Bool false; "isCollapsed", `Bool collapsed]]]]) + +let with_ui backend response f = + let app = App.create (backend ()) in + Fun.protect ~finally:(fun () -> ignore (Lui_app.dispose app)) (fun () -> + App_test.start app; + (match Response_snapshot.decode_response response with + | Error message -> fail message + | Ok projection -> App_test.send app (Model.ApplyCoreSnapshot projection)); + App_test.flush app; + f app) + +let ui_results_and_navigation () = + List.iter (fun backend -> + with_ui backend (ui_response ~rows:[`Assoc ["block", query_result_block alpha "Alpha result"]] ()) (fun app -> + let runtime = Lui_app.runtime app in + let root = Lui_app.root_node app in + let result = App_test.descendant_with_identifier runtime root ("query.result." ^ owner ^ ".0") in + check ~msg:"query result is mounted on both native hosts" (result <> -1); + let rendered = App_test.descendant_with_identifier runtime result ("outliner.block." ^ alpha) in + check ~msg:"results reuse the full block row" (rendered <> -1); + let native = App_test.descendant_with_extension runtime app rendered "outliner-block-row" in + if native <> -1 then + App_test.dispatch app (Lui_protocol.ExtensionEvent (native, "outliner-block-row", "open-node", + Lui_protocol.String_map.singleton "uuid" (Lui_protocol.StringValue alpha))) + else App_test.dispatch app (Lui_protocol.Press + (App_test.descendant_with_identifier runtime rendered ("button.outliner.zoom." ^ alpha ^ ".Alpha result"))); + App_test.flush app; + check ~msg:"result navigation targets its block" + (List.exists (function Model.OpenAppNodeEffect (_, uuid) -> uuid = alpha | _ -> false) + ((App.model app).pending_effects @ (App.model app).in_flight_effects)))) + [App_test.ios_backend; App_test.kotlin_backend] + +let ui_states_and_disclosure () = + let find app suffix = App_test.descendant_with_identifier (Lui_app.runtime app) + (Lui_app.root_node app) ("query." ^ suffix ^ "." ^ owner) in + List.iter (fun backend -> + with_ui backend (ui_response ()) (fun app -> check (find app "empty" <> -1)); + with_ui backend (ui_response ~error:(`String "Invalid query") ()) + (fun app -> check (find app "error" <> -1)); + with_ui backend (ui_response ~collapsed:true ()) (fun app -> check_eq (find app "empty") (-1)); + let rows = List.init 25 (fun i -> `Assoc ["cells", `List [`String (string_of_int i)]]) in + with_ui backend (ui_response ~rows ()) (fun app -> + let more = find app "more" in + check ~msg:"large results initially mount a bounded slice" (more <> -1); + App_test.dispatch app (Lui_protocol.Press more); App_test.flush app; + check_eq ~msg:"show more reveals the remaining results" (find app "more") (-1); + let fold = find app "toggle" in + check (fold <> -1); + App_test.dispatch app (Lui_protocol.Press fold); App_test.flush app; + check_eq (find app "rows") (-1))) + [App_test.ios_backend; App_test.kotlin_backend] + +let task_priority_and_date_queries () = + let db = fixture "(and (task Todo) (priority High))" in + let db = Ds.db_with [ + put alpha "block/tags" (Ds.Ref_to (Ds.Ident "logseq.class/Task")); + put alpha "logseq.property/status" (Ds.Ref_to (Ds.Ident "logseq.property/status.todo")); + put alpha "logseq.property/priority" (Ds.Ref_to (Ds.Ident "logseq.property/priority.high"))] db in + let session, set_db = make_session db in + check_eq ~msg:(Json.to_string (query session)) (row_ids (query session)) [alpha]; + let today = Cache_model.journal_day_for_ms (Types.now_ms ()) in + let db = Ds.db_with [put page "block/tags" (Ds.Ref_to (Ds.Ident "logseq.class/Journal")); + put page "block/journal-day" (Ds.Int64 (Int64.of_int today)); + put definition "block/title" (Ds.String "(between today today)")] db in + set_db db; + check_eq (row_ids (query session)) [alpha; beta] + +let projected_database_is_authoritative_for_queries () = + Graph_runtime_test.with_store (fun path -> + let db = fixture "\"Beta\"" in + let conn = Ds.conn_from_db db in + let runtime = Graph_runtime.create path 42 conn {Graph_runtime.default_options with auto_create_today = false} in + let session = Session.create_session {Session.default_options with + graph_db = Some (fun () -> Some (Graph_runtime.db runtime)); + graph_blocks = Some (fun () -> Some (Graph_runtime.blocks_for_page runtime page))} in + check_eq (row_ids (query session)) [beta]; + let operation = {Pending_ops.operation_id = "query-edit"; base_t = 42; state = Pending_ops.Queued; + intent = Pending_ops.Save_title {uuid = beta; expected_title = "Beta result"; title = "Gamma result"}} in + check_ok (Graph_runtime.stage runtime operation); + check_eq ~msg:"queries see pending edits instead of the confirmed DB" (row_ids (query session)) []; + check_eq (Graph_read.string_value (Graph_read.value (Ds.conn_db conn) + (Option.get (Ds.entid db "block/uuid" (Ds.Uuid beta))) "block/title")) (Some "Beta result"); + ignore (Ds.transact_conn conn [put alpha "block/title" (Ds.String "Beta from remote")]); + Graph_runtime.rebase runtime 43 [] [alpha]; + check_eq ~msg:"remote changes re-evaluate over the remaining pending projection" (row_ids (query session)) [alpha]; + Graph_runtime_test.cleanup_store path) + +let invalid_advanced_options_are_rejected () = + List.iter (fun option -> + let q = query_source ("{:query [:find ?b :where [?b :user.property/score]] " ^ option ^ "}") in + check ~msg:("invalid query options: " ^ option ^ " -> " ^ Json.to_string q) + (match member "error" q with `String _ -> true | _ -> false)) + [":inputs \"invalid\""; ":rules \"invalid\""; ":remove-block-children? \"invalid\""] + +let query_results_do_not_recurse () = + let db = fixture "(page Workspace)" in + let db = Ds.db_with [put beta "block/tags" (Ds.Ref_to (Ds.Ident "logseq.class/Query")); + put beta "logseq.property/query" (Ds.Ref_to (ref_uuid definition))] db in + let session, _ = make_session db in + open_results session; + let response = Rpc_test.response_result (Json.from_string (Session.snapshot_visible session)) in + let block = List.find (fun b -> member "uuid" b = `String owner) (items "blocks" response) in + let results = items "rows" (member "query" block) in + check_eq (List.length results) 2; + List.iter (fun row -> check_eq (member "query" (member "block" row)) `Null) results + +let result_body_taps_edit_blocks () = + List.iter (fun backend -> + with_ui backend (ui_response ~rows:[`Assoc ["block", query_result_block alpha "Alpha result"]] ()) (fun app -> + let runtime = Lui_app.runtime app in + let result = App_test.descendant_with_identifier runtime (Lui_app.root_node app) ("query.result." ^ owner ^ ".0") in + let native = App_test.descendant_with_extension runtime app result "outliner-block-row" in + let content, extension = if native <> -1 then native, "outliner-block-row" else + App_test.descendant_with_extension runtime app result "outliner-block-content", "outliner-block-content" in + check (content <> -1); + App_test.dispatch app (Lui_protocol.ExtensionEvent (content, extension, "edit", + Lui_protocol.String_map.singleton "uuid" (Lui_protocol.StringValue alpha))); + App_test.flush app; + check_eq (App.model app).outliner_editing None; + check ~msg:"tapping result text uses the ordinary block editing pipeline" + (List.exists (function Model.TapOutlinerBlockEffect (_, uuid) -> uuid = alpha | _ -> false) + ((App.model app).pending_effects @ (App.model app).in_flight_effects)))) + [App_test.ios_backend; App_test.kotlin_backend] + +let result_list_breadcrumbs_and_local_children () = + let child = query_result_block beta "Child result" in + let block = match query_result_block alpha "Parent result" with + | `Assoc fields -> `Assoc (("children", `List [child]) :: + ("breadcrumbs", `List [`Assoc ["uuid", `String page; "title", `String "Workspace"]]) :: fields) + | x -> x in + List.iter (fun backend -> + with_ui backend (ui_response ~rows:[`Assoc ["block", block]] ()) (fun app -> + let runtime = Lui_app.runtime app in + let root = Lui_app.root_node app in + let result = App_test.descendant_with_identifier runtime root ("query.result." ^ owner ^ ".0") in + check ~msg:"list rows show native navigable breadcrumbs" + (App_test.descendant_with_identifier runtime result "breadcrumb.related-blocks" <> -1); + let find uuid = App_test.descendant_with_identifier runtime result ("outliner.block." ^ uuid) in + check (find alpha <> -1); + check_eq ~msg:"children start folded" (find beta) (-1); + let toggle () = + let native = App_test.descendant_with_extension runtime app (find alpha) "outliner-block-row" in + if native <> -1 then App_test.dispatch app (Lui_protocol.ExtensionEvent + (native, "outliner-block-row", "collapse", + Lui_protocol.String_map.singleton "uuid" (Lui_protocol.StringValue alpha))) + else App_test.dispatch app (Lui_protocol.Press + (App_test.descendant_with_identifier runtime (find alpha) ("button.outliner.collapse." ^ alpha))); + App_test.flush app in + toggle (); + check ~msg:"expansion reveals full child blocks" (find beta <> -1); + check ~msg:"result folding does not change source outline folding" + (not (List.exists (function Model.ToggleOutlinerCollapsedEffect _ -> true | _ -> false) + ((App.model app).pending_effects @ (App.model app).in_flight_effects))); + toggle (); + check_eq (find beta) (-1))) [App_test.ios_backend; App_test.kotlin_backend] + +let cross_page_session () = + let other = "10000000-0000-4000-8000-000000000007" in + let db = fixture "#Project" in + let db = Ds.db_with [Ds.Add (Ds.Entity_id 900007, "block/uuid", Ds.Uuid other); + put other "block/title" (Ds.String "Other page"); put other "block/name" (Ds.String "other page"); + put alpha "block/page" (Ds.Ref_to (ref_uuid other)); + put alpha "block/parent" (Ds.Ref_to (ref_uuid other)); + put beta "block/page" (Ds.Ref_to (ref_uuid other)); + put beta "block/parent" (Ds.Ref_to (ref_uuid alpha))] db in + let session = Session.create_session {Session.default_options with + load_graph_catalog = Some (fun () -> Some Rpc_test.plain_graph_catalog); + graph_db = Some (fun () -> Some db); + graph_blocks = Some (fun () -> Some (Graph_read.blocks_for_page (fun s -> Ok s) db page)); + graph_page_blocks = Some (fun uuid -> Some (Graph_read.blocks_for_page (fun s -> Ok s) db uuid))} in + let session = Rpc_test.configure_plain_session session in + open_results session; + session + +let cross_page_result_actions () = + let session = cross_page_session () in + let event fields = Rpc_test.outliner_event session (Json.to_string (`Assoc fields)) in + ignore (event ["type", `String "longPressBlock"; "uuid", `String alpha]); + let copied = event ["type", `String "toolbar"; "action", `String "copy"] in + check ~msg:"select bar copies the actual result from another page" + (List.exists (fun command -> member "text" command = `String "Alpha **result**") + (items "outlinerCommands" copied)); + let edited = event ["type", `String "tapBlock"; "uuid", `String alpha] in + check_eq ~msg:"result editing resolves blocks outside the visible page" + (member "uuid" (member "editing" (member "outlinerState" edited))) (`String alpha); + let response = Rpc_test.response_result (Json.from_string (Session.snapshot_visible session)) in + check ~msg:"loading result action targets does not duplicate them into the main outline" + (not (List.exists (fun row -> member "uuid" (member "block" row) = `String alpha) (items "outlinerRows" response))); + let owner = List.find (fun block -> member "uuid" block = `String owner) (items "blocks" response) in + let result = List.hd (items "rows" (member "query" owner)) in + check_eq ~msg:"result trees include nonmatching children" + (List.map (member "uuid") (items "children" (member "block" result))) [`String beta] + +let result_selection_toolbar () = + List.iter (fun backend -> + let session = cross_page_session () in + with_ui backend (Session.snapshot_visible session) (fun app -> + let runtime = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier runtime (Lui_app.root_node app) id in + let result = find ("query.result." ^ owner ^ ".0") in + check ~msg:"real session query result is visible" (result <> -1); + let native = App_test.descendant_with_extension runtime app result "outliner-block-row" in + if native <> -1 then App_test.dispatch app (Lui_protocol.ExtensionEvent + (native, "outliner-block-row", "long-press", + Lui_protocol.String_map.singleton "uuid" (Lui_protocol.StringValue alpha))) + else App_test.dispatch app (Lui_protocol.ExtensionEvent + (App_test.descendant_with_extension runtime app result "outliner-block-content", + "outliner-block-content", "drag-start", + Lui_protocol.String_map.singleton "uuid" (Lui_protocol.StringValue alpha))); + App_test.flush app; + check ~msg:"result long press enters normal selection" + (List.exists (function Model.LongPressOutlinerBlockEffect (_, uuid) -> uuid = alpha | _ -> false) + ((App.model app).pending_effects @ (App.model app).in_flight_effects)); + let response = Json.to_string (Rpc_test.dispatch_json session "outlinerEvent" + (Json.to_string (`Assoc ["type", `String "longPressBlock"; "uuid", `String alpha]))) in + (match Response_snapshot.decode_response response with + | Error message -> fail message + | Ok projection -> App_test.send app (Model.ApplyCoreSnapshot projection)); + App_test.flush app; + check ~msg:"selecting a result displays the shared select bar" (find "toolbar.outliner.selection" <> -1); + check ~msg:"selected result uses full block selection styling" + (App_test.property_bool runtime (find ("outliner.block." ^ alpha)) Lui_protocol.Selected); + App_test.dispatch app (Lui_protocol.Press (find "button.outliner.selection.copy")); + App_test.flush app; + check (List.exists (function Model.OutlinerToolbarEffect (_, "copy") -> true | _ -> false) + ((App.model app).pending_effects @ (App.model app).in_flight_effects)))) + [App_test.ios_backend; App_test.kotlin_backend] + +let interactive_patches_refresh_query_results () = + let db = fixture "\"Beta\"" in + let session, set_db = make_session db in + open_results session; + let before = match Response_snapshot.decode_response (Session.snapshot_visible session) with + | Ok value -> Model.update (Model.initial ()) (Model.ApplyCoreSnapshot value) + | Error message -> fail message in + let row_query model = + let row = List.find (fun row -> row.Model.row_uuid = owner) model.Model.outliner_rows in + Json.from_string row.query_json in + check_eq (row_ids (row_query before)) [beta]; + set_db (Ds.db_with [put beta "block/title" (Ds.String "Gamma result")] db); + let patch = Session.outliner_patch session (Session.outliner_context session) [beta] in + let after = match Response_snapshot.decode_response patch with + | Ok value -> Model.update before (Model.ApplyCoreSnapshot value) + | Error message -> fail message in + check_eq ~msg:"editing another row must update the query without reopening its page" + (row_ids (row_query after)) [] + +let current_query_children_remain_visible () = + let db = fixture "(page Workspace)" in + let db = Ds.db_with [put alpha "block/parent" (Ds.Ref_to (ref_uuid owner))] db in + let session, set_db = make_session db in + check_eq ~msg:"excluding the owner must not exclude its matching children" (row_ids (query session)) [alpha; beta]; + let db = Ds.db_with [put beta "block/parent" (Ds.Ref_to (ref_uuid alpha))] db in + set_db db; + check_eq (row_ids (query session)) [alpha]; + set_db (Ds.db_with [put definition "block/title" (Ds.String "{:query (page Workspace) :remove-block-children? false}")] db); + check_eq (row_ids (query session)) [alpha; beta] + +let collapsed_queries_do_not_evaluate_until_opened () = + let session, set_db = make_session (fixture "{:query [:find ?x :where (unsupported ?x)]}") in + ignore (Rpc_test.configure_plain_session session); + let current () = + let response = Session.snapshot_visible session |> Json.from_string |> Rpc_test.response_result in + let block = List.find (fun b -> member "uuid" b = `String owner) (items "blocks" response) in + member "query" block in + let folded = current () in + check_eq ~msg:"query results start collapsed" (member "expanded" folded) (`Bool false); + check_eq ~msg:"collapsed queries do not evaluate invalid query definitions" (member "error" folded) `Null; + check_eq (items "rows" folded) []; + let expand value = Rpc_test.dispatch_json session "resultView" (Json.to_string (`Assoc [ + "ownerUuid", `String owner; "featureType", `String "query-result"; + "action", `String "setExpanded"; "expanded", `Bool value])) in + let opened = expand true in + check_eq (member "ok" opened) (`Bool true); + check ~msg:"query errors are evaluated only on explicit expansion" (match member "error" (current ()) with `String _ -> true | _ -> false); + ignore (expand false); + set_db (fixture "#Project"); + check_eq (member "expanded" (current ())) (`Bool false); + check_eq (items "rows" (current ())) []; + ignore (expand true); + check_eq ~msg:"reopening evaluates the current graph rather than stale results" (row_ids (current ())) [alpha]; + List.iter (fun backend -> + ignore (expand false); + with_ui backend (Session.snapshot_visible session) (fun app -> + let runtime = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier runtime (Lui_app.root_node app) id in + let block = find ("outliner.block." ^ owner) in + check ~msg:"folding results preserves the ordinary query block" (block <> -1); + let native = App_test.descendant_with_extension runtime app block "outliner-block-row" in + let content = if native <> -1 then native else + App_test.descendant_with_extension runtime app block "outliner-block-content" in + check ~msg:"the query owner keeps the normal block renderer" (content <> -1); + check_eq (find ("query.result." ^ owner ^ ".0")) (-1); + App_test.dispatch app (Lui_protocol.Press (find ("query.toggle." ^ owner))); App_test.flush app; + check ~msg:"expanding requests results through the core boundary" + (List.exists (function Model.ResultViewEffect (_, id, payload) -> id = owner && + member "action" (Json.from_string payload) = `String "setExpanded" | _ -> false) + (App.model app).pending_effects))) [App_test.ios_backend; App_test.kotlin_backend] + +let cases = [ + case "queries stay unevaluated until expanded and refresh when reopened" collapsed_queries_do_not_evaluate_until_opened; + case "result lists render breadcrumbs and independently folded children" result_list_breadcrumbs_and_local_children; + case "cross-page results retain editing and select bar actions" cross_page_result_actions; + case "result long press displays the functional shared selection toolbar" result_selection_toolbar; + case "query children survive owner filtering and honor nested result options" current_query_children_remain_visible; + case "interactive patches refresh unchanged query owners" interactive_patches_refresh_query_results; + case "task priority and relative date queries use DB properties" task_priority_and_date_queries; + case "queries share pending and remote graph projections" projected_database_is_authoritative_for_queries; + case "malformed advanced options produce local errors" invalid_advanced_options_are_rejected; + case "query blocks returned as results do not recurse" query_results_do_not_recurse; + case "native result body taps edit full blocks" result_body_taps_edit_blocks; + case "simple queries execute against DB graph semantics" simple_queries; + case "advanced queries display blocks aggregates and tuples" advanced_queries; + case "dynamic inputs and user rules resolve in query context" contextual_inputs_and_rules; + case "result transforms operate on real query rows" transforms; + case "invalid and empty queries stay local" invalid_and_empty_queries; + case "missing definitions and ordinary blocks are isolated" missing_definition_is_isolated; + case "results filter hidden definition and current blocks" filters_recursive_and_hidden_results; + case "snapshots and hydration follow live database and definition updates" live_updates_and_hydration; + case "both native hosts render query results and navigate" ui_results_and_navigation; + case "both native hosts render states fold and show more" ui_states_and_disclosure; +] diff --git a/shared/test/logseq/result_view_test.ml b/shared/test/logseq/result_view_test.ml new file mode 100644 index 00000000..ff820367 --- /dev/null +++ b/shared/test/logseq/result_view_test.ml @@ -0,0 +1,929 @@ +open Test_util +module Ds = Datascript +module Q = Query_block_test +module Session = Rpc_session +module Json = Yojson.Basic +let member = Q.member +let items = Q.items +let text = function `String value -> value | _ -> "" +let put = Q.put +let ref_uuid = Q.ref_uuid +let owner = Q.owner +let alpha = Q.alpha +let beta = Q.beta +let gamma = "20000000-0000-4000-8000-000000000001" +let score = "user.property/Score" +let summary = "user.property/Summary" +let ready = "user.property/Ready" +let due = "user.property/Due" +let many_score = "user.property/ManyScores" +let score_property = "20000000-0000-4000-8000-000000000002" +let summary_property = "20000000-0000-4000-8000-000000000003" +let views_page = "20000000-0000-4000-8000-000000000004" +let list_view = "20000000-0000-4000-8000-000000000005" +let table_view = "20000000-0000-4000-8000-000000000006" +let gallery_view = "20000000-0000-4000-8000-000000000007" +let broken_view = "20000000-0000-4000-8000-000000000008" +let value_a = "20000000-0000-4000-8000-000000000009" +let value_b = "20000000-0000-4000-8000-000000000010" +let text_a = "20000000-0000-4000-8000-000000000011" +let text_b = "20000000-0000-4000-8000-000000000012" +let day_a = "20000000-0000-4000-8000-000000000013" +let day_b = "20000000-0000-4000-8000-000000000014" + +let entity n uuid title = [Ds.Add (Ds.Entity_id (910000 + n), "block/uuid", Ds.Uuid uuid); + put uuid "block/title" (Ds.String title)] +let sorting keys = Ds.Vector (List.map (fun (attr, asc) -> Ds.Map + [Ds.Keyword "id", Ds.Keyword attr; Ds.Keyword "asc?", Ds.Bool asc]) keys) +let filters ?(or_ = false) clauses = Ds.Map [Ds.Keyword "or?", Ds.Bool or_; + Ds.Keyword "filters", Ds.Vector (List.map (fun (attr, op, value) -> + Ds.Vector [Ds.Keyword attr; Ds.Keyword op; value]) clauses)] + +let fixture () = + let db = Q.fixture "#Project" in + let ref_attr = {Storage_codec.default_schema_attr with Ds.value_type = Some Ds.RefType; indexed = true} in + let db = {db with Ds.schema = [score, ref_attr; summary, ref_attr; + ready, {ref_attr with Ds.value_type = None}; due, ref_attr; + many_score, {ref_attr with Ds.cardinality = Ds.Many}; + "logseq.property/view-for", ref_attr; "logseq.property.view/type", ref_attr] @ db.schema} in + let db = List.fold_left (fun db (n, name) -> + let ident = "logseq.property.view/type." ^ name in + if Ds.entid db "db/ident" (Ds.Keyword ident) <> None then db + else Ds.db_with [Ds.Add (Ds.Entity_id n, "db/ident", Ds.Keyword ident)] db) + db [919001, "list"; 919002, "table"; 919003, "gallery"] in + let property n uuid title attr typ = entity n uuid title @ [ + put uuid "block/name" (Ds.String (String.lowercase_ascii title)); + put uuid "db/cardinality" (Ds.Keyword (if attr = many_score then "db.cardinality/many" else "db.cardinality/one")); + put uuid "db/ident" (Ds.Keyword attr); put uuid "logseq.property/type" (Ds.Keyword typ); + put uuid "block/tags" (Ds.Ref_to (Ds.Ident "logseq.class/Property"))] + @ (if typ = "checkbox" then [] else [put uuid "db/valueType" (Ds.Keyword "db.type/ref")]) in + let value n uuid property scalar = [Ds.Add (Ds.Entity_id (910000 + n), "block/uuid", Ds.Uuid uuid); + put uuid "logseq.property/created-from-property" (Ds.Ref_to (ref_uuid property)); + put uuid (match scalar with Ds.String _ -> "block/title" | _ -> "logseq.property/value") scalar] in + let view n uuid title typ order = entity n uuid title @ [ + put uuid "block/page" (Ds.Ref_to (ref_uuid views_page)); + put uuid "block/parent" (Ds.Ref_to (ref_uuid views_page)); + put uuid "block/order" (Ds.String order); + put uuid "logseq.property/view-for" (Ds.Ref_to (ref_uuid owner)); + put uuid "logseq.property.view/feature-type" (Ds.Keyword "query-result"); + put uuid "logseq.property.view/type" (Ds.Ref_to (Ds.Ident ("logseq.property.view/type." ^ typ)))] in + Ds.db_with (entity 1 gamma "Gamma result" @ [ + put gamma "block/page" (Ds.Ref_to (ref_uuid Q.page)); + put gamma "block/parent" (Ds.Ref_to (ref_uuid Q.page)); put gamma "block/order" (Ds.String "a4"); + put gamma "block/refs" (Ds.Ref_to (ref_uuid Q.project)); + put beta "block/refs" (Ds.Ref_to (ref_uuid Q.project))] + @ property 2 score_property "Score" score "number" + @ property 3 summary_property "Summary" summary "default" + @ property 15 "20000000-0000-4000-8000-000000000015" "Ready" ready "checkbox" + @ property 16 "20000000-0000-4000-8000-000000000016" "Due" due "date" + @ property 17 "20000000-0000-4000-8000-000000000017" "Scores" many_score "number" + @ entity 4 views_page "$$$views" @ [put views_page "block/name" (Ds.String "$$$views")] + @ value 9 value_a score_property (Ds.Int64 20L) + @ value 10 value_b score_property (Ds.Int64 10L) + @ value 11 text_a summary_property (Ds.String "Research") + @ value 12 text_b summary_property (Ds.String "Writing") + @ entity 13 day_a "October 1st, 2026" @ [put day_a "block/journal-day" (Ds.Int64 20261001L)] + @ entity 14 day_b "October 3rd, 2026" @ [put day_b "block/journal-day" (Ds.Int64 20261003L)] + @ [put alpha score (Ds.Ref_to (ref_uuid value_a)); put beta score (Ds.Ref_to (ref_uuid value_b)); + put alpha summary (Ds.Ref_to (ref_uuid text_a)); put beta summary (Ds.Ref_to (ref_uuid text_b)); + put alpha due (Ds.Ref_to (ref_uuid day_a)); put beta due (Ds.Ref_to (ref_uuid day_b)); + put alpha ready (Ds.Bool true); put beta ready (Ds.Bool false); + put alpha many_score (Ds.Ref_to (ref_uuid value_a)); put alpha many_score (Ds.Ref_to (ref_uuid value_b))] + @ view 5 list_view "Everything" "list" "a0" + @ view 6 table_view "By score" "table" "a1" + @ [put table_view "logseq.property.table/sorting" (sorting [score, true]); + put table_view "logseq.property.table/ordered-columns" (Ds.Vector [Ds.Keyword "block/title"; Ds.Keyword score; Ds.Keyword summary])] + @ view 7 gallery_view "Cards" "gallery" "a2" + @ view 8 broken_view "Broken" "table" "a3" + @ [put broken_view "logseq.property.table/sorting" (Ds.String "invalid")]) db + +let make_session db = + let current = ref db in + let session = Session.create_session {Session.default_options with + graph_db = Some (fun () -> Some !current); + graph_node_destination = Some (fun uuid -> Graph_read.node_destination (fun text -> Ok text) !current uuid); + graph_node_is_tag = Some (fun uuid -> Option.fold ~none:false + ~some:(fun id -> Graph_read.entity_is_instance_of !current id "logseq.class/Tag") + (Ds.entid !current "block/uuid" (Ds.Uuid uuid))); + graph_node_is_property = Some (fun uuid -> Option.fold ~none:false + ~some:(fun id -> Graph_read.entity_is_instance_of !current id "logseq.class/Property") + (Ds.entid !current "block/uuid" (Ds.Uuid uuid))); + graph_blocks = Some (fun () -> Some (Graph_read.blocks_for_page (fun x -> Ok x) !current Q.page)); + graph_page_blocks = Some (fun uuid -> Some (Graph_read.blocks_for_page (fun x -> Ok x) !current uuid))} in + session, current +let read ?(owner = owner) ?(feature = "query-result") ?(input = "") session = + let response = Rpc_test.dispatch_json session "resultViews" (Json.to_string (`Assoc ["ownerUuid", `String owner; + "featureType", `String feature; "input", `String input])) in + check_eq ~msg:(Json.to_string response) (member "ok" response) (`Bool true); + member "result" response +let find_view uuid result = List.find (fun view -> member "uuid" view = `String uuid) (items "views" result) +let ids view = List.map (fun row -> member "uuid" (member "block" row)) (items "rows" view) +let expected_ids expected actual = check_eq ~msg:(Json.to_string actual) (ids actual) (List.map (fun s -> `String s) expected) + +let saved_views_and_isolated_failures () = + let session, _ = make_session (fixture ()) in + Q.open_results session; + let views = read session in + check_eq (List.map (member "uuid") (items "views" views)) + (List.map (fun s -> `String s) [list_view; table_view; gallery_view; broken_view]); + List.iter (fun (uuid, typ) -> let view = find_view uuid views in + check_eq (member "type" view) (`String typ); check_eq (member "error" view) `Null; + check_eq (List.length (items "rows" view)) 3) + [list_view, "list"; table_view, "table"; gallery_view, "gallery"]; + check (match member "error" (find_view broken_view views) with `String text -> text <> "" | _ -> false); + let snapshot = Rpc_test.response_result (Json.from_string (Session.snapshot_visible session)) in + let block = List.find (fun block -> member "uuid" block = `String owner) (items "blocks" snapshot) in + check_eq (List.length (items "views" (member "query" block))) 4 + +let typed_filters_and_search () = + let base = fixture () in + let session, current = make_session base in + let run ?(or_ = false) ?(input = "") clauses expected = + current := Ds.db_with [put list_view "logseq.property.table/filters" (filters ~or_ clauses)] base; + let view = find_view list_view (read ~input session) in + check_eq ~msg:(Json.to_string view) (member "error" view) `Null; + check_eq ~msg:(Json.to_string view) (List.sort compare (ids view)) + (List.sort compare (List.map (fun s -> `String s) expected)) in + List.iter (fun (operator, number, expected) -> run [score, operator, Ds.Int64 number] expected) + ["number-gt", 10L, [alpha]; "number-gte", 10L, [alpha; beta]; + "number-lt", 20L, [beta]; "number-lte", 20L, [alpha; beta]]; + run [score, "between", Ds.Vector [Ds.Int64 10L; Ds.Int64 20L]] [alpha; beta]; + run [score, "between", Ds.Vector [Ds.Nil; Ds.Int64 15L]] [beta]; + run [score, "is", Ds.Keyword "empty"] [gamma]; + run [score, "is-not", Ds.Keyword "empty"] [alpha; beta]; + run [summary, "text-contains", Ds.String "SEAR"] [alpha]; + run [summary, "text-not-contains", Ds.String "SEAR"] [beta; gamma]; + run [summary, "is", Ds.Set [Ds.Uuid text_a]] [alpha]; + run [summary, "is-not", Ds.Set [Ds.Uuid text_a]] [beta; gamma]; + run [ready, "is", Ds.Bool true] [alpha]; + run [ready, "is", Ds.Bool false] [beta; gamma]; + run [ready, "is-not", Ds.Bool true] [beta; gamma]; + run [many_score, "number-lt", Ds.Int64 15L] [alpha]; + run ~or_:true [score, "number-gt", Ds.Int64 15L; summary, "text-contains", Ds.String "writing"] [alpha; beta]; + run ~or_:true ~input:"ALPHA" [score, "number-gt", Ds.Int64 15L; summary, "text-contains", Ds.String "writing"] [alpha]; + run [score, "number-gt", Ds.Nil] [alpha; beta; gamma]; + run [due, "date-before", Ds.Map [Ds.Keyword "block/journal-day", Ds.Int64 20261002L]] [alpha]; + run [due, "date-after", Ds.Map [Ds.Keyword "block/journal-day", Ds.Int64 20261002L]] [beta]; + current := Ds.db_with [put list_view "logseq.property.table/filters" + (filters [score, "unsupported", Ds.Int64 1L])] base; + check_eq (member "error" (find_view list_view (read session))) `Null; + check_eq (List.length (items "rows" (find_view list_view (read session)))) 3 + +let stable_multi_sort_and_property_columns () = + let base = fixture () in + let session, current = make_session base in + let asc = find_view table_view (read session) in + expected_ids [beta; alpha; gamma] asc; + let cells = items "properties" (List.hd (items "rows" asc)) in + check ~msg:"table displays the referenced numeric value" (List.exists (fun cell -> + member "attr" cell = `String score && member "text" cell = `String "10" && member "editable" cell = `Bool true) cells); + current := Ds.db_with [put table_view "logseq.property.table/sorting" (sorting [score, false])] base; + expected_ids [alpha; beta; gamma] (find_view table_view (read session)); + current := Ds.db_with [put value_b "logseq.property/value" (Ds.Int64 20L); + put table_view "logseq.property.table/sorting" (sorting [score, true; "block/title", false])] base; + expected_ids [beta; alpha; gamma] (find_view table_view (read session)); + current := Ds.db_with [put table_view "logseq.property.table/hidden-columns" (Ds.Keyword summary)] base; + check (not (List.exists (fun column -> member "attr" column = `String summary) + (items "columns" (find_view table_view (read session))))) + +let scopes_and_references () = + let db = fixture () in + let session, _ = make_session db in + let tagged = read ~owner:Q.project ~feature:"class-objects" session in + check_eq (List.length (items "views" tagged)) 1; + expected_ids [alpha] (List.hd (items "views" tagged)); + let property = read ~owner:score_property ~feature:"property-objects" session in + check_eq (List.sort compare (ids (List.hd (items "views" property)))) (List.sort compare [`String alpha; `String beta]); + let unsupported = Rpc_test.dispatch_json session "resultViews" (Json.to_string (`Assoc [ + "ownerUuid", `String Q.project; "featureType", `String "linked-references"])) in + check_eq ~msg:"references do not acquire configurable views" (member "ok" unsupported) (`Bool false) + +let with_runtime f = Graph_runtime_test.with_store (fun path -> + Fun.protect ~finally:(fun () -> Graph_runtime_test.cleanup_store path) (fun () -> + let conn = Ds.conn_from_db (fixture ()) in + let runtime = Graph_runtime.create path 42 conn {Graph_runtime.default_options with auto_create_today = false} in + let session = Session.create_session {Session.default_options with + load_graph_catalog = Some (fun () -> Some Rpc_test.plain_graph_catalog); + sync_cursor = Some (fun () -> Some (Graph_runtime.state runtime).server_t); + graph_db = Some (fun () -> Some (Graph_runtime.db runtime)); + stage_operation = Some (Graph_runtime.stage runtime); + pending_operations = Some (fun () -> Graph_runtime.pending_operations runtime); + prepare_operation = Some (Graph_runtime.prepare_sync runtime); + graph_blocks = Some (fun () -> Some (Graph_runtime.blocks_for_page runtime Q.page)); + graph_page_blocks = Some (fun uuid -> Some (Graph_runtime.blocks_for_page runtime uuid))} in + ignore (Rpc_test.configure_plain_session session); + Q.open_results session; + f session runtime conn)) +let action session fields = Rpc_test.dispatch_json session "resultView" (Json.to_string (`Assoc fields)) +let base_action action_name view = ["ownerUuid", `String owner; "featureType", `String "query-result"; + "viewUuid", `String view; "action", `String action_name] + +let priority_choices_and_edits_use_the_real_graph () = with_runtime (fun session runtime conn -> + let custom = "20000000-0000-4000-8000-000000000099" in + let tx = entity 99 custom "Critical" @ [ + put custom "block/closed-value-property" (Ds.Ref_to (Ds.Ident "logseq.property/priority")); + put custom "block/order" (Ds.String "a0"); + put alpha "logseq.property/priority" (Ds.Ref_to (ref_uuid custom))] in + ignore (Ds.transact_conn conn tx); + Graph_runtime.rebase runtime 42 [] [custom; alpha]; + let snapshot = Session.snapshot_visible session |> Json.from_string |> member "result" in + let choices = items "taskPriorities" snapshot in + check ~msg:"priority menus must use the graph's ordered closed values" (choices <> []); + check_eq (member "uuid" (List.hd choices)) (`String custom); + check_eq (member "title" (List.hd choices)) (`String "Critical"); + List.iter (fun backend -> + Q.with_ui backend (Json.to_string (`Assoc ["ok", `Bool true; "result", snapshot])) (fun app -> + let renderer = Lui_app.runtime app in + let root = Lui_app.root_node app in + let rendered = App_test.descendant_with_identifier renderer root ("outliner.block." ^ alpha) in + let native = App_test.native_row app rendered in + if native <> -1 then begin + let payload = App_test.native_row_payload app rendered in + check_eq (member "uuid" (List.hd (items "priorities" payload))) (`String custom); + App_test.dispatch app (Lui_protocol.ExtensionEvent (native, "outliner-block-row", "set-priority", + Lui_protocol.String_map.singleton "priority" (Lui_protocol.StringValue custom))) + end else begin + let find id = App_test.descendant_with_identifier renderer rendered id in + check ~msg:"Android priority glyph must have a menu button" (find "button.block-task-priority" <> -1); + let option = find ("button.block-task-priority-option." ^ custom) in + check ~msg:"Android priority menu must include custom choices" (option <> -1); + App_test.dispatch app (Lui_protocol.Press option) + end; + App_test.flush app; + let chosen_effect = List.find_opt (fun eff -> + member "kind" (Json.from_string (Native_bridge.encode_effect eff)) = `String "set-outliner-task-priority") + ((App.model app).pending_effects @ (App.model app).in_flight_effects) in + check ~msg:"choosing a priority crosses the typed core effect boundary" (chosen_effect <> None))) + [App_test.ios_backend; App_test.kotlin_backend]; + let execute metadata = Core_effect_test.execute session "set-outliner-task-priority" + ["text", `String alpha; "metadata", `String metadata] in + let verify expected = + let db = Graph_runtime.db runtime in + let block = List.find (fun (b : Cache_model.block) -> b.uuid = alpha) (Graph_read.blocks_for_page (fun x -> Ok x) db Q.page) in + check_eq (Option.map (fun (priority : Cache_model.status) -> priority.uuid) block.priority) expected; + let result = find_view list_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" result) in + check_eq (member "uuid" (member "priority" (member "block" row))) + (Option.fold ~none:`Null ~some:(fun uuid -> `String uuid) expected) in + Core_effect_test.success (execute {|{"ident":"logseq.property/priority.high"}|}); + let high = Graph_read.uuid_for_eid (Graph_runtime.db runtime) + (Option.get (Ds.entid (Graph_runtime.db runtime) "db/ident" (Ds.Keyword "logseq.property/priority.high"))) in + verify high; + Core_effect_test.success (execute (Json.to_string (`Assoc ["uuid", `String custom]))); + verify (Some custom); + let count = List.length (Graph_runtime.pending_operations runtime) in + check_eq (member "ok" (execute {|{"uuid":7}|})) (`Bool false); + check_eq (List.length (Graph_runtime.pending_operations runtime)) count; + Core_effect_test.success (execute "null"); + verify None; + let restored = Graph_runtime.create runtime.path 42 conn {Graph_runtime.default_options with auto_create_today = false} in + let restored_block = List.find (fun (b : Cache_model.block) -> b.uuid = alpha) (Graph_runtime.blocks_for_page restored Q.page) in + check_eq restored_block.priority None; + List.iter (fun operation -> check_ok ~msg:"priority edits compile into canonical sync transactions" + (Graph_runtime.prepare_sync runtime operation)) (Graph_runtime.pending_operations runtime)) + +let saved_configuration_projects_and_survives_restart () = with_runtime (fun session runtime _ -> + let config = `Assoc ["type", `String "gallery"; "name", `String "Important"; + "sorting", `List [`Assoc ["id", `String score; "asc", `Bool false]]; + "filters", `Assoc ["or", `Bool false; "clauses", `List [`List [`String score; `String "number-gte"; `Int 15]]]] in + let saved = action session (base_action "save" table_view @ ["config", config]) in + check_eq ~msg:(Json.to_string saved) (member "ok" saved) (`Bool true); + let view = find_view table_view (read session) in + check_eq (member "name" view) (`String "Important"); check_eq (member "type" view) (`String "gallery"); + expected_ids [alpha] view; + let queued = Graph_runtime.pending_operations runtime in + check (queued <> []); + let restored = Graph_runtime.create runtime.path 42 runtime.conn {Graph_runtime.default_options with auto_create_today = false} in + let restored_session, _ = make_session (Graph_runtime.db restored) in + expected_ids [alpha] (find_view table_view (read restored_session)); + List.iter (fun operation -> check_ok ~msg:"view settings compile into sync transactions" (Graph_runtime.prepare_sync runtime operation)) queued; + let created = action session (base_action "create" "" @ ["config", `Assoc ["name", `String "Another"; "type", `String "list"]]) in + check_eq ~msg:(Json.to_string created) (member "ok" created) (`Bool true); + check_eq (List.length (items "views" (read session))) 5) + +let settings_preserve_nested_match_values () = with_runtime (fun session _ _ -> + List.iter (fun (attr, operator, value, expected) -> + let saved = action session (base_action "save" list_view @ ["config", `Assoc [ + "filters", `Assoc ["or", `Bool false; "clauses", `List [`List [`String attr; `String operator; value]]]]]) in + check_eq ~msg:(Json.to_string saved) (member "ok" saved) (`Bool true); + check_eq (List.sort compare (ids (find_view list_view (read session)))) + (List.sort compare (List.map (fun uuid -> `String uuid) expected))) + [summary, "is", `List [`String text_a], [alpha]; + score, "between", `List [`Null; `Float 15.5], [beta]; + score, "is", `String "empty", [gamma]]) + +let many_and_scalar_cells_preserve_types () = with_runtime (fun session runtime _ -> + let edit attr text = + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" view) in + let cell = List.find (fun cell -> member "attr" cell = `String attr) (items "properties" row) in + let result = action session (base_action "editCell" table_view @ ["blockUuid", `String alpha; + "attr", `String attr; "expected", member "raw" cell; "value", `String text]) in + check_eq ~msg:(Json.to_string result) (member "ok" result) (`Bool true) in + edit many_score "10, 25"; + edit ready "false"; + edit summary "Revised text"; + let db = Graph_runtime.db runtime in + let eid = Option.get (Ds.entid db "block/uuid" (Ds.Uuid alpha)) in + check_eq (Graph_read.value db eid ready) (Some (Ds.Bool false)); + let refs = Graph_read.ref_eids db eid many_score in + check_eq (List.sort compare (List.map (fun eid -> Graph_read.value db eid "logseq.property/value") refs)) + [Some (Ds.Int64 10L); Some (Ds.Int64 25L)]; + let text = List.hd (Graph_read.ref_eids db eid summary) in + check_eq (Graph_read.value db text "block/title") (Some (Ds.String "Revised text"))) + +let editable_cells_use_owner_values_and_conflicts () = with_runtime (fun session runtime conn -> + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" view) in + let cell = List.find (fun cell -> member "attr" cell = `String score) (items "properties" row) in + let edit ?(expected = member "raw" cell) value = action session (base_action "editCell" table_view @ [ + "blockUuid", `String alpha; "attr", `String score; "expected", expected; "value", `String value]) in + let changed = edit "35" in + check_eq ~msg:(Json.to_string changed) (member "ok" changed) (`Bool true); + let db = Graph_runtime.db runtime in + let eid = Option.get (Ds.entid db "block/uuid" (Ds.Uuid alpha)) in + let target = List.hd (Graph_read.ref_eids db eid score) in + check_eq (Graph_read.value db target "logseq.property/value") (Some (Ds.Int64 35L)); + check ~msg:"editing a cell does not mutate a shared value entity" + (Graph_read.uuid_for_eid db target <> Some value_a); + let original = Option.get (Ds.entid db "block/uuid" (Ds.Uuid value_a)) in + check_eq (Graph_read.value db original "logseq.property/value") (Some (Ds.Int64 20L)); + let authoritative = Ds.conn_db conn in + check_eq (Graph_read.ref_eids authoritative eid score) + [Option.get (Ds.entid authoritative "block/uuid" (Ds.Uuid value_a))]; + let before = List.length (Graph_runtime.pending_operations runtime) in + check_eq (member "ok" (edit "not a number")) (`Bool false); + check_eq (member "ok" (edit "40")) (`Bool false); + check_eq ~msg:"invalid input and stale edits do not enqueue writes" (List.length (Graph_runtime.pending_operations runtime)) before; + List.iter (fun operation -> check_ok ~msg:"typed cell edits compile into sync transactions" (Graph_runtime.prepare_sync runtime operation)) + (Graph_runtime.pending_operations runtime)) + +let native_view_tabs_search_table_and_gallery () = + List.iter (fun backend -> with_runtime (fun session _ _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let runtime = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier runtime (Lui_app.root_node app) id in + let tab uuid = find ("view.tab." ^ uuid) in + check ~msg:"saved view tabs mount on both native hosts" (tab table_view <> -1); + App_test.dispatch app (Lui_protocol.Press (tab table_view)); App_test.flush app; + let scroll = find ("view.table.scroll." ^ table_view) in + check ~msg:"table scrolling is horizontal" (App_test.property_string runtime scroll Lui_protocol.OrientationValue = "horizontal"); + let cell = find ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ score) in + check (cell <> -1); + App_test.dispatch app (Lui_protocol.Press cell); App_test.flush app; + check ~msg:"tapping a cell opens a native editor" (find ("view.edit.value." ^ table_view) <> -1); + let sheet = find ("view.edit.sheet." ^ table_view) in + check ~msg:"cell editors expose native sheet sizing" (sheet <> -1); + check_eq ~msg:"native sheet detents use the platform wire format" + (App_test.property_string runtime sheet Lui_protocol.Detents) "medium,large"; + App_test.dispatch app (Lui_protocol.TextChanged (find ("view.edit.value." ^ table_view), "35")); + App_test.flush app; + App_test.dispatch app (Lui_protocol.Press (find ("view.edit.create." ^ table_view))); App_test.flush app; + check ~msg:"saving edits uses a real core view action" + (List.exists (fun eff -> member "kind" (Json.from_string (Native_bridge.encode_effect eff)) = `String "result-view") + ((App.model app).pending_effects @ (App.model app).in_flight_effects)); + App_test.dispatch app (Lui_protocol.Press (tab gallery_view)); App_test.flush app; + check (find ("view.gallery." ^ gallery_view) <> -1); + App_test.dispatch app (Lui_protocol.Press (find ("view.search.toggle." ^ owner))); App_test.flush app; + App_test.dispatch app (Lui_protocol.TextChanged (find ("view.search." ^ owner), "ALPHA")); App_test.flush app; + check (find ("view.card." ^ gallery_view ^ "." ^ alpha) <> -1); + check_eq (find ("view.card." ^ gallery_view ^ "." ^ beta)) (-1); + App_test.dispatch app (Lui_protocol.Press (tab broken_view)); App_test.flush app; + check (find ("view.error." ^ broken_view) <> -1); + App_test.dispatch app (Lui_protocol.Press (tab list_view)); App_test.flush app; + check (find ("outliner.block." ^ alpha) <> -1)))) + [App_test.ios_backend; App_test.kotlin_backend] + +let native_view_settings_and_local_errors () = + List.iter (fun backend -> with_runtime (fun session _ _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let runtime = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier runtime (Lui_app.root_node app) id in + let click id = let node = find id in check ~msg:id (node <> -1); + App_test.dispatch app (Lui_protocol.Press node); App_test.flush app in + click ("view.tab." ^ table_view); + click ("view.filter." ^ table_view); + let check_sheet () = + let sheet = find ("view.settings.sheet." ^ table_view) in + check ~msg:"settings expose a native sheet" (sheet <> -1); + check_eq ~msg:"settings open at calendar-like height and expand for longer lists" + (App_test.property_string runtime sheet Lui_protocol.Detents) "medium,large" in + check_sheet (); + check_eq (find ("view.settings.name." ^ table_view)) (-1); + check_eq ~msg:"filters use a native grouped list" + (App_test.node runtime (find ("view.filter.list." ^ table_view))) (Some Lui_protocol.ListContainer); + click ("view.filter.add." ^ table_view); + click ("view.settings.save." ^ table_view); + let pending = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + let id = Model.effect_id pending in + ignore (Lui_app.send app (Model.DequeueEffect id)); + ignore (Lui_app.send app (Model.ResolveEffect (id, false, "This view changed"))); + App_test.flush app; + check_eq ~msg:"view failures remain local" (App.model app).effect_error None; + check (find ("view.action.error." ^ table_view) <> -1); + click ("view.settings.cancel." ^ table_view); + click ("view.sort." ^ table_view); + check_sheet (); + check_eq ~msg:"sorting uses a native grouped list" + (App_test.node runtime (find ("view.sort.list." ^ table_view))) (Some Lui_protocol.ListContainer); + check_eq ~msg:"sort settings do not expose filter controls" + (find ("view.filter.add." ^ table_view)) (-1); + click ("view.sort.add." ^ table_view); + click ("view.settings.cancel." ^ table_view); + click ("view.tab." ^ list_view); + check (find ("outliner.block." ^ alpha) <> -1)))) + [App_test.ios_backend; App_test.kotlin_backend] + +let native_cells_refresh_and_object_collections_mount () = + List.iter (fun backend -> + with_runtime (fun session _ _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let runtime = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier runtime (Lui_app.root_node app) id in + App_test.dispatch app (Lui_protocol.Press (find ("view.tab." ^ table_view))); App_test.flush app; + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" view) in + let cell = List.find (fun cell -> member "attr" cell = `String score) (items "properties" row) in + let result = action session (base_action "editCell" table_view @ ["blockUuid", `String alpha; + "attr", `String score; "expected", member "raw" cell; "value", `String "35"]) in + check_eq (member "ok" result) (`Bool true); + let projection = match Response_snapshot.decode_response (Json.to_string result) with Ok value -> value | Error e -> fail e in + App_test.send app (Model.ApplyCoreSnapshot projection); App_test.flush app; + let cell_node = find ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ score) in + check_eq ~msg:"visible table cells react to projected value changes" + (App_test.property_string runtime cell_node Lui_protocol.TextValue) "35")); + List.iter (fun owner -> + let session, _ = make_session (fixture ()) in + ignore (Rpc_test.configure_plain_session session); + let response = Rpc_test.dispatch_json session "openNode" (Json.to_string (`Assoc ["uuid", `String owner])) in + check_eq ~msg:(Json.to_string response) (member "ok" response) (`Bool true); + Q.with_ui backend (Json.to_string response) (fun app -> + App_test.send app (Model.RequestAppNode owner); + let projection = match Response_snapshot.decode_response (Json.to_string response) with + | Ok value -> value | Error message -> fail message in + App_test.send app (Model.ApplyCoreSnapshot projection); App_test.flush app; + let runtime = Lui_app.runtime app in + check ~msg:"tag and property objects mount native result views" + (App_test.descendant_with_identifier runtime (Lui_app.root_node app) ("view.search.toggle." ^ owner) <> -1); + check ~msg:"tag and property collections expose the same type icon" + (App_test.descendant_with_identifier runtime (Lui_app.root_node app) ("view.type." ^ owner ^ ":default") <> -1))) + [Q.project; score_property]) [App_test.ios_backend; App_test.kotlin_backend] + +let tuple_table_and_query_errors () = + List.iter (fun backend -> + let db = Ds.db_with [put Q.definition "block/title" (Ds.String + "{:query [:find ?t ?s :where [?b :user.property/score ?s] [?b :block/title ?t]]}")] (fixture ()) in + let session, current = make_session db in + ignore (Rpc_test.configure_plain_session session); + Q.open_results session; + let view = find_view table_view (read session) in + check_eq ~msg:"tuple tables expose one column for each query value" (List.length (items "columns" view)) 2; + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let runtime = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier runtime (Lui_app.root_node app) id in + App_test.dispatch app (Lui_protocol.Press (find ("view.tab." ^ table_view))); App_test.flush app; + check ~msg:"tuple values render in read-only table cells" (find ("view.scalar." ^ table_view ^ ".0.0") <> -1); + current := Ds.db_with [put Q.definition "block/title" (Ds.String "(and")] db; + let projection = match Response_snapshot.decode_response (Session.snapshot_visible session) with + | Ok value -> value | Error message -> fail message in + App_test.send app (Model.ApplyCoreSnapshot projection); App_test.flush app; + check ~msg:"query evaluation failures remain visible inside the query block" (find ("query.error." ^ owner) <> -1))) + [App_test.ios_backend; App_test.kotlin_backend] + +let typed_edits_restart_and_sync_acknowledgements () = with_runtime (fun session runtime conn -> + let edit target attr value = + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String target) (items "rows" view) in + let cell = List.find (fun cell -> member "attr" cell = `String attr) (items "properties" row) in + let result = action session (base_action "editCell" table_view @ ["blockUuid", `String target; + "attr", `String attr; "expected", member "raw" cell; "value", `String value]) in + check_eq ~msg:(Json.to_string result) (member "ok" result) (`Bool true) in + edit alpha score "12.5"; + edit beta summary ""; + edit alpha many_score "5, 8"; + let pending = Graph_runtime.pending_operations runtime in + check_eq (List.length pending) 3; + List.iter (fun operation -> check ~msg:"atomic edits have coherent final postconditions" + (Pending_projection.satisfied (Graph_runtime.db runtime) operation.Pending_ops.intent)) pending; + let restored = Graph_runtime.create runtime.path 42 conn {Graph_runtime.default_options with auto_create_today = false} in + let restored_session, _ = make_session (Graph_runtime.db restored) in + let rows = items "rows" (find_view table_view (read restored_session)) in + let property target attr = + let row = List.find (fun row -> member "uuid" (member "block" row) = `String target) rows in + List.find (fun property -> member "attr" property = `String attr) (items "properties" row) in + check_eq (member "text" (property alpha score)) (`String "12.5"); + check_eq (member "raw" (property beta summary)) `Null; + List.iteri (fun index operation -> + let before = (Graph_runtime.state restored).server_t in + let _, tx = match Graph_runtime.prepare_sync restored operation with Ok value -> value | Error message -> fail message in + let journal = match Journal_sync.decode (Json.to_string (`Assoc ["type", `String "tx/batch/ok"; + "t-before", `Int before; "t", `Int (before + 1); "txs", `List [`Assoc ["t", `Int (before + 1); + "tx-id", `String operation.Pending_ops.operation_id; "tx", `String tx]]])) with + | Ok value -> value | Error message -> fail message in + check_ok (Graph_runtime.stage restored {operation with Pending_ops.state = Pending_ops.Accepted (before + 1)}); + let ids, changed = match Journal_sync.apply (fun value -> Ok value) conn before journal with + | Ok value -> value | Error message -> fail message in + Graph_runtime.rebase restored journal.t ids changed; + check_eq ~msg:"server echoes confirm atomic property values and owner assignments together" + (List.length (Graph_runtime.pending_operations restored)) (2 - index)) pending; + check_eq (Graph_runtime.pending_operations restored) []; + let db = Ds.conn_db conn in + let alpha_id = Option.get (Ds.entid db "block/uuid" (Ds.Uuid alpha)) in + let values = Graph_read.ref_eids db alpha_id many_score in + let number id = match Graph_read.value db id "logseq.property/value" with + | Some (Ds.Int64 value) -> Int64.to_float value | Some (Ds.Float value) -> value + | value -> fail ("Synced property value is not numeric: " ^ + Option.fold ~none:"missing" ~some:Dev_query.Edn_util.pr_str value ^ " at eid " ^ string_of_int id) in + check_eq (List.sort Float.compare (List.map number values)) [5.; 8.]) + +let date_cells_accept_calendar_dates () = with_runtime (fun session runtime _ -> + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" view) in + let cell = List.find (fun cell -> member "attr" cell = `String due) (items "properties" row) in + let result = action session (base_action "editCell" table_view @ ["blockUuid", `String alpha; + "attr", `String due; "expected", member "raw" cell; "value", `String "2026-10-23"]) in + check_eq ~msg:(Json.to_string result) (member "ok" result) (`Bool true); + let db = Graph_runtime.db runtime in + let id = Option.get (Ds.entid db "block/uuid" (Ds.Uuid alpha)) in + let journal = List.hd (Graph_read.ref_eids db id due) in + check_eq (Graph_read.value db journal "block/journal-day") (Some (Ds.Int64 20261023L)); + let before = List.length (Graph_runtime.pending_operations runtime) in + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" view) in + let updated = List.find (fun cell -> member "attr" cell = `String due) (items "properties" row) in + let invalid = action session (base_action "editCell" table_view @ ["blockUuid", `String alpha; + "attr", `String due; "expected", member "raw" updated; "value", `String "2026-02-30"]) in + check_eq (member "ok" invalid) (`Bool false); + check_eq (List.length (Graph_runtime.pending_operations runtime)) before) + +let native_boolean_editor_uses_the_real_effect_pipeline () = + List.iter (fun backend -> with_runtime (fun session runtime _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier host (Lui_app.root_node app) id in + let click id = let node = find id in check ~msg:id (node <> -1); + App_test.dispatch app (Lui_protocol.Press node); App_test.flush app in + click ("view.tab." ^ table_view); + click ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ ready); + click ("view.edit.bool.false." ^ table_view); + let pending = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + let action, body = match Core_effect.request ~now:(fun () -> 1) ~fresh_id:(fun () -> "unused") + (Some (Native_bridge.encode_effect pending)) with Ok value -> value | Error message -> fail message in + check_eq action "resultView"; + let response = Rpc_test.dispatch_json session action (Option.get body) in + check_eq ~msg:(Json.to_string response) (member "ok" response) (`Bool true); + let id = Model.effect_id pending in + App_test.send app (Model.DequeueEffect id); + let projection = match Response_snapshot.decode_response (Json.to_string response) with Ok value -> value | Error message -> fail message in + App_test.send app (Model.ApplyCoreSnapshot projection); + App_test.send app (Model.ResolveEffect (id, true, Json.to_string response)); App_test.flush app; + check_eq (find ("view.edit.value." ^ table_view)) (-1); + check_eq (App_test.property_string host (find ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ ready)) Lui_protocol.TextValue) "false"; + let db = Graph_runtime.db runtime in + check_eq (Graph_read.value db (Option.get (Ds.entid db "block/uuid" (Ds.Uuid alpha))) ready) (Some (Ds.Bool false))))) + [App_test.ios_backend; App_test.kotlin_backend] + +let available_properties_and_corrupt_filter_isolation () = + let db = Ds.db_with [put table_view "logseq.property.table/hidden-columns" (Ds.Keyword summary); + put list_view "logseq.property.table/filters" (Ds.String "corrupt")] (fixture ()) in + let session, _ = make_session db in + let views = read session in + let table = find_view table_view views in + check ~msg:"hidden table columns remain available for filter and sort selection" + (List.exists (fun property -> member "attr" property = `String summary) (items "properties" table)); + check ~msg:"corrupt filters are a view-local error" (member "error" (find_view list_view views) <> `Null); + check_eq (member "error" table) `Null; + expected_ids [beta; alpha; gamma] table + +let native_toolbar_alignment_and_search_expansion () = + List.iter (fun (backend, leading) -> with_runtime (fun session _ _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier host (Lui_app.root_node app) id in + let click id = let node = find id in check ~msg:id (node <> -1); + App_test.dispatch app (Lui_protocol.Press node); App_test.flush app in + check_eq ~msg:"query results use a single results and actions header" + (find ("view.tabs." ^ owner)) (-1); + check_eq ~msg:"mobile collections do not offer New view" (find ("view.add." ^ owner)) (-1); + let toolbar = find ("view.toolbar." ^ owner) in + check ~msg:"the entire view toolbar shares one row" (toolbar <> -1); + check_eq (App_test.children host toolbar |> List.map (fun id -> + App_test.property_string host id Lui_protocol.AccessibilityIdentifier)) + ["query.toggle." ^ owner; "view.filter." ^ list_view; "view.sort." ^ list_view; "view.search.toggle." ^ owner; "view.type." ^ list_view]; + check_eq ~msg:"search expands only when requested" (find ("view.search." ^ owner)) (-1); + click ("view.search.toggle." ^ owner); + check (find ("view.search." ^ owner) <> -1); + check_eq ~msg:"search fits its collection instead of claiming the screen width" + (App_test.property_string host (find ("view.search." ^ owner)) Lui_protocol.ContainerRelativeFrameValue) ""; + check_eq ~msg:"expanded results are separated from the next block" + (App_test.property_int host (find ("view.results-gap." ^ owner)) Lui_protocol.HeightValue) 24; + click ("view.search.toggle." ^ owner); + check_eq (find ("view.search." ^ owner)) (-1); + let inset = find ("query.inset." ^ owner) in + check_eq ~msg:"the collection starts at its owning bullet" + (App_test.property_int host inset Lui_protocol.PaddingLeft) leading; + let projection = match Response_snapshot.decode_response (Session.snapshot_visible session) with + | Ok value -> value | Error message -> fail message in + App_test.send app (Model.ApplyCoreSnapshot {projection with Model.outliner_rows = + List.map (fun (row : Model.outline_row) -> {row with depth = 2}) projection.outliner_rows}); + App_test.flush app; + check_eq ~msg:"nested collections follow the same bullet indentation" + (App_test.property_int host inset Lui_protocol.PaddingLeft) (leading + 44)))) + [App_test.ios_backend, 20; App_test.kotlin_backend, 12] + +let native_direct_value_selection_and_creation () = + List.iter (fun backend -> with_runtime (fun session runtime conn -> + let run closed = + if closed then ignore (Ds.transact_conn conn [ + put value_a "block/closed-value-property" (Ds.Ref_to (ref_uuid score_property)); + put value_b "block/closed-value-property" (Ds.Ref_to (ref_uuid score_property))]); + Graph_runtime.rebase runtime (Graph_runtime.state runtime).server_t [] [value_a; value_b]; + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier host (Lui_app.root_node app) id in + let click id = let node = find id in check ~msg:id (node <> -1); + App_test.dispatch app (Lui_protocol.Press node); App_test.flush app in + click ("view.tab." ^ table_view); + click ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ score); + check ~msg:"a cell immediately opens its searchable choices" + (find ("view.edit.option." ^ table_view ^ "." ^ value_b) <> -1); + App_test.dispatch app (Lui_protocol.TextChanged (find ("view.edit.value." ^ table_view), "35")); + App_test.flush app; + check_eq ~msg:"the selector filters existing choices" (find ("view.edit.option." ^ table_view ^ "." ^ value_b)) (-1); + if closed then check_eq ~msg:"closed properties cannot create new choices" + (find ("view.edit.create." ^ table_view)) (-1) + else check ~msg:"an open property offers explicit creation" (find ("view.edit.create." ^ table_view) <> -1); + click ("view.edit.cancel." ^ table_view); + check_eq ~msg:"cancel never writes a property" (App.model app).pending_effects []; + click ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ score); + click ("view.edit.option." ^ table_view ^ "." ^ value_b); + let pending = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + let _, body = match Core_effect.request ~now:(fun () -> 1) ~fresh_id:(fun () -> "unused") + (Some (Native_bridge.encode_effect pending)) with Ok value -> value | Error message -> fail message in + check_eq ~msg:"choosing a value submits its stable reference immediately" + (member "selectedValues" (Json.from_string (Option.get body))) (`List [`String value_b])) + in run false; run true)) [App_test.ios_backend; App_test.kotlin_backend] + +let selected_references_and_explicit_object_creation () = with_runtime (fun session runtime conn -> + let cell attr = + let view = find_view table_view (read session) in + let row = List.find (fun row -> member "uuid" (member "block" row) = `String alpha) (items "rows" view) in + List.find (fun cell -> member "attr" cell = `String attr) (items "properties" row) in + let select attr values = action session (base_action "editCell" table_view @ [ + "blockUuid", `String alpha; "attr", `String attr; "expected", member "raw" (cell attr); + "value", `String ""; "selectedValues", `List (List.map (fun value -> `String value) values)]) in + let response = select score [value_b] in + check_eq ~msg:(Json.to_string response) (member "ok" response) (`Bool true); + let id = Option.get (Ds.entid (Graph_runtime.db runtime) "block/uuid" (Ds.Uuid alpha)) in + check_eq ~msg:"a selected value reuses the existing entity" + (Graph_read.ref_eids (Graph_runtime.db runtime) id score) + [Option.get (Ds.entid (Graph_runtime.db runtime) "block/uuid" (Ds.Uuid value_b))]; + check_eq ~msg:"a number selector rejects unrelated object references" + (member "ok" (select score [Q.page])) (`Bool false); + check_eq ~msg:"single-valued cells reject multiple choices" + (member "ok" (select score [value_a; value_b])) (`Bool false); + let response = select many_score [value_b] in + check_eq (member "ok" response) (`Bool true); + ignore (Ds.transact_conn conn [put value_a "block/closed-value-property" (Ds.Ref_to (ref_uuid score_property))]); + Graph_runtime.rebase runtime (Graph_runtime.state runtime).server_t [] [value_a]; + let invalid = select score [value_b] in + check_eq ~msg:"closed-value validation also applies to direct choices" (member "ok" invalid) (`Bool false); + let contact = "user.property/Contact" and property_uuid = "20000000-0000-4000-8000-000000000030" in + ignore (Ds.transact_conn conn (entity 30 property_uuid "Contact" @ [ + put property_uuid "db/ident" (Ds.Keyword contact); put property_uuid "logseq.property/type" (Ds.Keyword "page"); + put property_uuid "db/valueType" (Ds.Keyword "db.type/ref"); put property_uuid "db/cardinality" (Ds.Keyword "db.cardinality/one") ])); + Graph_runtime.rebase runtime (Graph_runtime.state runtime).server_t [] [property_uuid]; + let create enabled = action session (base_action "editCell" table_view @ [ + "blockUuid", `String alpha; "attr", `String contact; "expected", `Null; + "value", `String "New collaborator"; "create", `Bool enabled]) in + check_eq ~msg:"typing an unknown object never creates it implicitly" (member "ok" (create false)) (`Bool false); + let response = create true in + check_eq ~msg:(Json.to_string response) (member "ok" response) (`Bool true); + let db = Graph_runtime.db runtime in + let created = List.hd (Graph_read.ref_eids db id contact) in + check_eq ~msg:"explicit creation produces a named page" + (Graph_read.value db created "block/name") (Some (Ds.String "new collaborator")); + List.iter (fun pending -> check_ok ~msg:"selector mutations compile into sync operations" + (Graph_runtime.prepare_sync runtime pending)) (Graph_runtime.pending_operations runtime)) + +let native_filter_choices_preserve_master_sets () = + List.iter (fun backend -> with_runtime (fun session _ _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier host (Lui_app.root_node app) id in + let press node = check (node <> -1); App_test.dispatch app (Lui_protocol.Press node); App_test.flush app in + let rec choice node title = + if App_test.node host node = Some Lui_protocol.MenuItem + && App_test.property_string host node Lui_protocol.TextValue = title then node + else List.fold_left (fun found child -> if found <> -1 then found else choice child title) + (-1) (App_test.children host node) in + press (find ("view.tab." ^ table_view)); + press (find ("view.filter." ^ table_view)); + press (find ("view.filter.add." ^ table_view)); + let list = find ("view.filter.list." ^ table_view) in + press (choice list "Score"); + press (choice list "10"); + press (choice list "20"); + press (find ("view.settings.save." ^ table_view)); + let pending = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + let _, body = Result.get_ok (Core_effect.request ~now:(fun () -> 1) ~fresh_id:(fun () -> "unused") + (Some (Native_bridge.encode_effect pending))) in + let config = member "config" (Json.from_string (Option.get body)) in + check_eq ~msg:"editing filters does not overwrite sorting" (member "sorting" config) `Null; + let clauses = items "clauses" (member "filters" config) in + check_eq ~msg:"native choices preserve master's UUID match set" + clauses [`List [`String score; `String "is"; `List [`String value_b; `String value_a]]]))) + [App_test.ios_backend; App_test.kotlin_backend] + +let native_many_selector_stages_choices_until_done () = + List.iter (fun backend -> with_runtime (fun session runtime _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier host (Lui_app.root_node app) id in + let click id = let node = find id in check ~msg:id (node <> -1); + App_test.dispatch app (Lui_protocol.Press node); App_test.flush app in + click ("view.tab." ^ table_view); + click ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ many_score); + check (App_test.property_bool host (find ("view.edit.option." ^ table_view ^ "." ^ value_b)) Lui_protocol.Selected); + click ("view.edit.option." ^ table_view ^ "." ^ value_b); + check_eq ~msg:"multiple selection waits for Done" (App.model app).pending_effects []; + App_test.dispatch app (Lui_protocol.TextChanged (find ("view.edit.value." ^ table_view), "35")); App_test.flush app; + click ("view.edit.create." ^ table_view); + check_eq (App.model app).pending_effects []; + click ("view.edit.save." ^ table_view); + let pending = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + let action, body = Result.get_ok (Core_effect.request ~now:(fun () -> 1) ~fresh_id:(fun () -> "unused") + (Some (Native_bridge.encode_effect pending))) in + let response = Rpc_test.dispatch_json session action (Option.get body) in + check_eq ~msg:(Json.to_string response) (member "ok" response) (`Bool true); + let db = Graph_runtime.db runtime in + let id = Option.get (Ds.entid db "block/uuid" (Ds.Uuid alpha)) in + let values = Graph_read.ref_eids db id many_score |> List.map (fun id -> Graph_read.value db id "logseq.property/value") in + check_eq (List.sort compare values) [Some (Ds.Int64 20L); Some (Ds.Int64 35L)]))) + [App_test.ios_backend; App_test.kotlin_backend] + +let master_conformance () = + let fixture = Json.from_file "logseq/fixtures/master-views.json" in + let schema = match Dev_query.Edn_util.read_string (text (member "schema" fixture)) with + | Ds.Map fields -> List.map (fun (attr, spec) -> + let attr = match attr with Ds.Keyword attr -> attr | _ -> fail "Invalid fixture attribute" in + let field key = match spec with Ds.Map fields -> List.assoc_opt (Ds.Keyword key) fields | _ -> None in + attr, {Storage_codec.default_schema_attr with + Ds.cardinality = (if field "db/cardinality" = Some (Ds.Keyword "db.cardinality/many") then Ds.Many else Ds.One); + indexed = field "db/index" = Some (Ds.Bool true); + unique = (if field "db/unique" = Some (Ds.Keyword "db.unique/identity") then Some Ds.Identity else None); + value_type = (if field "db/valueType" = Some (Ds.Keyword "db.type/ref") then Some Ds.RefType else None)}) fields + | _ -> fail "Invalid master schema" in + let conn = Ds.conn_from_db (Ds.empty_db ~schema ()) in + ignore (Ds.transact_conn_string conn (text (member "tx" fixture))); + let base = Ds.conn_db conn in + let session, current = make_session base in + let failures = List.filter_map (fun case -> + let owner = text (member "owner" case) and view_uuid = text (member "view" case) in + let setting attr key = match Dev_query.Edn_util.read_string (text (member key case)) with + | Ds.Nil -> Ds.RetractAttr (ref_uuid view_uuid, attr) + | value -> put view_uuid attr value in + current := Ds.db_with [setting "logseq.property.table/sorting" "sorting"; + setting "logseq.property.table/filters" "filters"] base; + let feature = text (member "feature" case) and input = text (member "input" case) in + let rpc_view = find_view view_uuid (read ~owner ~feature ~input session) in + (* Datalog collections have no defined order. Test membership through the RPC, + then give both sort implementations the identical candidate sequence. *) + let source_rows = List.map (fun uuid -> + let id = Option.get (Ds.entid !current "block/uuid" (Ds.Uuid (text uuid))) in + Query_block.Block (Option.get (Graph_read.block ~with_breadcrumbs:true (fun x -> Ok x) !current id))) + (items "sourceRows" case) in + let view = find_view view_uuid + (Result_view.render_rows ~input !current ~owner ~feature ~encode_block:Rpc.block_json source_rows) in + if member "error" case = `Bool true then + if member "error" view <> `Null then None else Some (text (member "name" case) ^ ": expected local error") + else if member "error" view <> `Null then Some (text (member "name" case) ^ ": " ^ Json.to_string (member "error" view)) + else if List.sort compare (ids rpc_view) <> List.sort compare (items "rows" case) then + Some (text (member "name" case) ^ ": RPC scope or filtering differs from master") + else if ids view = items "rows" case then None + else Some (text (member "name" case) ^ ": expected " ^ Json.to_string (member "rows" case) ^ " got " ^ Json.to_string (`List (ids view)))) + (items "cases" fixture) in + check_eq ~msg:(string_of_int (List.length failures) ^ " master conformance failures:\n" ^ + String.concat "\n" (List.filteri (fun index _ -> index < 20) failures)) failures [] + +let type_icons_switch_saved_views_and_default_all () = + List.iter (fun backend -> with_runtime (fun session runtime conn -> + let run view_id expected_name typ = + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let renderer = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier renderer (Lui_app.root_node app) id in + let tab = find ("view.tab." ^ view_id) in + check ~msg:"the left tabs retain saved view names" (tab <> -1); + check_eq (App_test.property_string renderer tab Lui_protocol.TextValue) expected_name; + App_test.dispatch app (Lui_protocol.Press tab); App_test.flush app; + let trigger = find ("view.type." ^ view_id) in + check ~msg:"view type has its own icon menu" (trigger <> -1); + let option = find ("view.type.option." ^ view_id ^ "." ^ typ) in + check ~msg:"the type menu exposes list table and gallery" (option <> -1); + App_test.dispatch app (Lui_protocol.Press option); App_test.flush app; + let eff = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + let payload = Json.from_string (Native_bridge.encode_effect eff) |> member "text" |> text |> Json.from_string in + check_eq (member "action" payload) (`String "save"); + check_eq (member "type" (member "config" payload)) (`String typ); + let result = Core_effect_test.execute session "result-view" ["text", `String (Json.to_string payload)] in + Core_effect_test.success result; + let projection = match Response_snapshot.decode_response (Json.to_string result) with Ok x -> x | Error e -> fail e in + App_test.send app (Model.ApplyCoreSnapshot projection); App_test.flush app; + let rendered = find (if typ = "table" then "view.table.scroll." ^ view_id else "view.gallery." ^ view_id) in + check ~msg:"changing a view type replaces its renderer" (rendered <> -1)) in + run list_view "Everything" "table"; + let changed = find_view list_view (read session) in + check_eq (member "name" changed) (`String "Everything"); + check_eq (List.length (items "views" (read session))) 4; + let db = Ds.db_with (List.map (fun uuid -> Ds.RetractEntity (ref_uuid uuid)) + [list_view; table_view; gallery_view; broken_view]) (fixture ()) in + let session, _ = make_session db in + ignore (Rpc_test.configure_plain_session session); + Q.open_results session; + let defaults = read session |> items "views" in + check_eq (List.length defaults) 1; + let all = List.hd defaults in + check_eq (member "name" all) (`String "All"); + check_eq (member "type" all) (`String "list"); + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let renderer = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier renderer (Lui_app.root_node app) id in + check ~msg:"an unsaved collection exposes the All tab" (find ("view.tab." ^ owner ^ ":default") <> -1); + check ~msg:"an unsaved collection also exposes a type icon" (find ("view.type." ^ owner ^ ":default") <> -1)))) + [App_test.ios_backend; App_test.kotlin_backend] + +let pushed_query_type_changes_refresh_the_visible_renderer () = + List.iter (fun backend -> with_runtime (fun session _ _ -> + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let apply response = + let projection = match Response_snapshot.decode_response (Json.to_string response) with + | Ok value -> value | Error message -> fail message in + App_test.send app (Model.ApplyCoreSnapshot projection); App_test.flush app in + App_test.send app (Model.RequestAppNode owner); + apply (Rpc_test.dispatch_json session "openNode" (Json.to_string (`Assoc ["uuid", `String owner]))); + let rec descendants id = id :: List.concat_map descendants (App_test.children host id) in + let find identifier = descendants (Lui_app.root_node app) |> List.filter (fun id -> + App_test.property_string host id Lui_protocol.AccessibilityIdentifier = identifier) |> List.rev + |> function id :: _ -> id | [] -> -1 in + List.iter (fun typ -> + Gc.full_major (); + let option = find ("view.type.option." ^ list_view ^ "." ^ typ) in + check ~msg:"the visible pushed query exposes its type action" (option <> -1); + App_test.dispatch app (Lui_protocol.Press option); App_test.flush app; + let eff = List.find (function Model.ResultViewEffect _ -> true | _ -> false) (App.model app).pending_effects in + App_test.send app (Model.DequeueEffect (Model.effect_id eff)); + let response = Core_effect_test.execute session "result-view" + ["text", member "text" (Json.from_string (Native_bridge.encode_effect eff))] in + Core_effect_test.success response; + apply response; + App_test.send app (Model.ResolveEffect (Model.effect_id eff, true, Json.to_string response)); + App_test.flush app; + let id = if typ = "table" then "view.table.scroll." ^ list_view else "view.gallery." ^ list_view in + check ~msg:("a saved type must replace the pushed query renderer: " ^ typ) (find id <> -1)) + ["table"; "gallery"]))) [App_test.ios_backend; App_test.kotlin_backend] + +let empty_table_cells_have_accessible_names () = + List.iter (fun backend -> + let db = Ds.db_with [Ds.Retract (ref_uuid alpha, summary, None)] (fixture ()) in + let session, _ = make_session db in + ignore (Rpc_test.configure_plain_session session); + Q.open_results session; + Q.with_ui backend (Session.snapshot_visible session) (fun app -> + let host = Lui_app.runtime app in + let find id = App_test.descendant_with_identifier host (Lui_app.root_node app) id in + App_test.dispatch app (Lui_protocol.Press (find ("view.tab." ^ table_view))); App_test.flush app; + let cell = find ("view.cell." ^ table_view ^ "." ^ alpha ^ "." ^ summary) in + check_eq ~msg:"missing properties remain empty cells" (App_test.property_string host cell Lui_protocol.TextValue) ""; + check_eq ~msg:"empty editable cells retain a meaningful accessible name" + (App_test.property_string host cell Lui_protocol.AccessibilityLabel) "Summary: Empty")) + [App_test.ios_backend; App_test.kotlin_backend] + +let cases = [ + case "empty table cells have accessible names" empty_table_cells_have_accessible_names; + case "pushed query type changes refresh the visible renderer" pushed_query_type_changes_refresh_the_visible_renderer; + case "type icons switch saved views and unsaved collections start with All list" type_icons_switch_saved_views_and_default_all; + case "priority menus use graph choices and edits persist typed references" priority_choices_and_edits_use_the_real_graph; + case "master filtering sorting and search match all three view scopes" master_conformance; + case "saved query views isolate invalid configuration" saved_views_and_isolated_failures; + case "master filters resolve typed values and combine search" typed_filters_and_search; + case "multi-key sorting and table columns resolve property references" stable_multi_sort_and_property_columns; + case "tag and property objects use views while references remain unchanged" scopes_and_references; + case "view settings persist through pending projection and restart" saved_configuration_projects_and_survives_restart; + case "saved filters preserve nested UUID sets and nullable bounds" settings_preserve_nested_match_values; + case "many numeric and scalar checkbox and text edits preserve types" many_and_scalar_cells_preserve_types; + case "table edits assign owner values with validation and conflict checks" editable_cells_use_owner_values_and_conflicts; + case "both native hosts expose tabs search table editing and gallery" native_view_tabs_search_table_and_gallery; + case "native settings expose filters sorting and local action errors" native_view_settings_and_local_errors; + case "native cells refresh and tag property collections mount views" native_cells_refresh_and_object_collections_mount; + case "tuple tables and query evaluation failures render on both hosts" tuple_table_and_query_errors; + case "typed edits survive restart and clear after real sync acknowledgements" typed_edits_restart_and_sync_acknowledgements; + case "date cells accept valid calendar dates and reject impossible dates" date_cells_accept_calendar_dates; + case "native boolean editing completes the real core effect pipeline" native_boolean_editor_uses_the_real_effect_pipeline; + case "filter property catalogs survive hidden columns and corrupt sibling settings" available_properties_and_corrupt_filter_isolation; + case "native view toolbar aligns tabs actions and expandable search to the owning bullet" native_toolbar_alignment_and_search_expansion; + case "native cell selectors immediately choose and restrict open value creation" native_direct_value_selection_and_creation; + case "selector references and explicit object creation preserve graph semantics" selected_references_and_explicit_object_creation; + case "native filter choices preserve master's multi-value UUID sets" native_filter_choices_preserve_master_sets; + case "native multi-value selection stages choices and creation until Done" native_many_selector_stages_choices_until_done; +] diff --git a/shared/test/logseq/test_main.ml b/shared/test/logseq/test_main.ml index 53af5768..bf49ff92 100644 --- a/shared/test/logseq/test_main.ml +++ b/shared/test/logseq/test_main.ml @@ -21,6 +21,8 @@ let () = "lui_snapshot", Lui_snapshot_test.cases; "journal_sync", Journal_sync_test.cases; "markup", Markup_test.cases; + "query_block", Query_block_test.cases; + "result_view", Result_view_test.cases; "flashcards", Flashcards_test.cases; "mobile_session", Mobile_session_test.cases; "outliner", Outliner_test.cases; diff --git a/shared/vendor/logseq-query-LICENSE.md b/shared/vendor/logseq-query-LICENSE.md new file mode 100644 index 00000000..0394f2b6 --- /dev/null +++ b/shared/vendor/logseq-query-LICENSE.md @@ -0,0 +1,697 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + +The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. + +Additional permission under GNU GPL version 3 section 7 + +If you modify this Program, or any covered work, by linking or combining it with any of the below libraries (or a modified version of that library), containing parts covered by the terms of any of the below libraries, the licensors of this Program grant you additional permission to convey the resulting work. + +* cider/cider-nrepl +* clojure-complete +* com.cemerick/friend +* compojure +* environ +* hiccup +* medley +* org.clojure/clojure +* org.clojure/clojurescript +* org.clojure/core.async +* org.clojure/core.cache +* org.clojure/core.incubator +* org.clojure/core.logic +* org.clojure/core.match +* org.clojure/core.memoize +* org.clojure/data.csv +* org.clojure/data.json +* org.clojure/data.priority-map +* org.clojure/java.classpath +* org.clojure/java.jdbc +* org.clojure/math.numeric-tower +* org.clojure/tools.analyzer +* org.clojure/tools.analyzer.jvm +* org.clojure/tools.logging +* org.clojure/tools.macro +* org.clojure/tools.namespace +* org.clojure/tools.nrepl +* org.clojure/tools.reader +* org.tcrawley/dynapath +* refactor-nrepl +* slingshot