[{"data":1,"prerenderedAt":2986},["ShallowReactive",2],{"navigation_docs":3,"-apps-reference-migration-sql-grammar":213,"-apps-reference-migration-sql-grammar-surround":2981},[4,142],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":36},"Kinotic Apps","i-lucide-rocket","\u002Fapps","01.apps",[10,14,18,37,58,91,102,122,127],{"title":11,"path":12,"stem":13},"Introduction","\u002Fapps\u002Fintroduction","01.apps\u002F01.introduction",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fapps\u002Fquick-start","01.apps\u002F02.quick-start",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":36},"Application Structure","i-lucide-folder-tree","\u002Fapps\u002Fapplication-structure","01.apps\u002F03.application-structure",[24,28,32],{"title":25,"path":26,"stem":27},"Overview","\u002Fapps\u002Fapplication-structure\u002Foverview","01.apps\u002F03.application-structure\u002F01.overview",{"title":29,"path":30,"stem":31},"Applications and Projects","\u002Fapps\u002Fapplication-structure\u002Fapplications-and-projects","01.apps\u002F03.application-structure\u002F02.applications-and-projects",{"title":33,"path":34,"stem":35},"Artifact Types","\u002Fapps\u002Fapplication-structure\u002Fartifact-types","01.apps\u002F03.application-structure\u002F03.artifact-types",false,{"title":38,"icon":39,"path":40,"stem":41,"children":42,"page":36},"Services","i-lucide-network","\u002Fapps\u002Fservices","01.apps\u002F04.services",[43,46,50,54],{"title":25,"path":44,"stem":45},"\u002Fapps\u002Fservices\u002Foverview","01.apps\u002F04.services\u002F01.overview",{"title":47,"path":48,"stem":49},"Publishing Services","\u002Fapps\u002Fservices\u002Fpublishing-services","01.apps\u002F04.services\u002F02.publishing-services",{"title":51,"path":52,"stem":53},"Service Proxies","\u002Fapps\u002Fservices\u002Fservice-proxies","01.apps\u002F04.services\u002F03.service-proxies",{"title":55,"path":56,"stem":57},"Streaming","\u002Fapps\u002Fservices\u002Fstreaming","01.apps\u002F04.services\u002F04.streaming",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":36},"Persistence","i-lucide-database","\u002Fapps\u002Fpersistence","01.apps\u002F05.persistence",[64,67,71,75,79,83,87],{"title":25,"path":65,"stem":66},"\u002Fapps\u002Fpersistence\u002Foverview","01.apps\u002F05.persistence\u002F01.overview",{"title":68,"path":69,"stem":70},"Defining Entities","\u002Fapps\u002Fpersistence\u002Fdefining-entities","01.apps\u002F05.persistence\u002F02.defining-entities",{"title":72,"path":73,"stem":74},"Entity Decorators","\u002Fapps\u002Fpersistence\u002Fentity-decorators","01.apps\u002F05.persistence\u002F03.entity-decorators",{"title":76,"path":77,"stem":78},"CRUD Operations","\u002Fapps\u002Fpersistence\u002Fcrud-operations","01.apps\u002F05.persistence\u002F04.crud-operations",{"title":80,"path":81,"stem":82},"Named Queries","\u002Fapps\u002Fpersistence\u002Fnamed-queries","01.apps\u002F05.persistence\u002F05.named-queries",{"title":84,"path":85,"stem":86},"Multi-Tenancy","\u002Fapps\u002Fpersistence\u002Fmulti-tenancy","01.apps\u002F05.persistence\u002F06.multi-tenancy",{"title":88,"path":89,"stem":90},"Migrations","\u002Fapps\u002Fpersistence\u002Fmigrations","01.apps\u002F05.persistence\u002F07.migrations",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":36},"Security","i-lucide-shield-check","\u002Fapps\u002Fsecurity","01.apps\u002F06.security",[97],{"title":98,"path":99,"stem":100,"icon":101},"Authentication","\u002Fapps\u002Fsecurity\u002Fauthentication","01.apps\u002F06.security\u002F01.authentication","i-lucide-key-round",{"title":103,"icon":104,"path":105,"stem":106,"children":107,"page":36},"Deployment","i-lucide-cloud-upload","\u002Fapps\u002Fdeployment","01.apps\u002F07.deployment",[108,113,118],{"title":109,"path":110,"stem":111,"icon":112},"Deployment Workflow","\u002Fapps\u002Fdeployment\u002Fworkflow","01.apps\u002F07.deployment\u002F01.workflow","i-lucide-git-branch",{"title":114,"path":115,"stem":116,"icon":117},"Environments","\u002Fapps\u002Fdeployment\u002Fenvironments","01.apps\u002F07.deployment\u002F02.environments","i-lucide-server",{"title":119,"path":120,"stem":121,"icon":6},"Push to Deploy","\u002Fapps\u002Fdeployment\u002Fpush-to-deploy","01.apps\u002F07.deployment\u002F03.push-to-deploy",{"title":123,"path":124,"stem":125,"icon":126},"CLI Reference","\u002Fapps\u002Fcli-reference","01.apps\u002F08.cli-reference","i-lucide-terminal",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":36},"Reference","i-lucide-book-open","\u002Fapps\u002Freference","01.apps\u002F09.reference",[133,138],{"title":134,"path":135,"stem":136,"icon":137},"Decorators Reference","\u002Fapps\u002Freference\u002Fdecorators","01.apps\u002F09.reference\u002F01.decorators","i-lucide-at-sign",{"title":139,"path":140,"stem":141,"icon":60},"Migration SQL Grammar","\u002Fapps\u002Freference\u002Fmigration-sql-grammar","01.apps\u002F09.reference\u002F02.migration-sql-grammar",{"title":143,"icon":117,"path":144,"stem":145,"children":146,"page":36},"Kinotic OS","\u002Fplatform","02.platform",[147,152,156,161,166,171,175,180,185,190,195],{"title":148,"path":149,"stem":150,"icon":151},"System Architecture","\u002Fplatform\u002Farchitecture","02.platform\u002F01.architecture","i-lucide-boxes",{"title":153,"path":154,"stem":155,"icon":6},"Deployment Guide","\u002Fplatform\u002Fdeployment-guide","02.platform\u002F02.deployment-guide",{"title":157,"path":158,"stem":159,"icon":160},"Configuration","\u002Fplatform\u002Fconfiguration","02.platform\u002F03.configuration","i-lucide-settings",{"title":162,"path":163,"stem":164,"icon":165},"Organization Management","\u002Fplatform\u002Forganization-management","02.platform\u002F04.organization-management","i-lucide-building",{"title":167,"path":168,"stem":169,"icon":170},"System Security","\u002Fplatform\u002Fsystem-security","02.platform\u002F05.system-security","i-lucide-shield",{"title":172,"path":173,"stem":174,"icon":93},"Defense in Depth","\u002Fplatform\u002Fdefense-in-depth","02.platform\u002F06.defense-in-depth",{"title":176,"path":177,"stem":178,"icon":179},"MCP Tools","\u002Fplatform\u002Fmcp-tools","02.platform\u002F07.mcp-tools","i-lucide-bot",{"title":181,"path":182,"stem":183,"icon":184},"Observability","\u002Fplatform\u002Fobservability","02.platform\u002F08.observability","i-lucide-activity",{"title":186,"path":187,"stem":188,"icon":189},"Contributing","\u002Fplatform\u002Fcontributing","02.platform\u002F09.contributing","i-lucide-git-pull-request",{"title":191,"path":192,"stem":193,"icon":194},"System Migrations","\u002Fplatform\u002Fsystem-migrations","02.platform\u002F10.system-migrations","i-lucide-database-zap",{"title":128,"icon":129,"path":196,"stem":197,"children":198,"page":36},"\u002Fplatform\u002Freference","02.platform\u002F11.reference",[199,204,209],{"title":200,"path":201,"stem":202,"icon":203},"CRI Format","\u002Fplatform\u002Freference\u002Fcri-format","02.platform\u002F11.reference\u002F01.cri-format","i-lucide-link",{"title":205,"path":206,"stem":207,"icon":208},"Grind Jobs","\u002Fplatform\u002Freference\u002Fgrind-jobs","02.platform\u002F11.reference\u002F02.grind-jobs","i-lucide-workflow",{"title":210,"path":211,"stem":212,"icon":151},"Project Publishing Design","\u002Fplatform\u002Freference\u002Fproject-publishing-design","02.platform\u002F11.reference\u002F03.project-publishing-design",{"id":214,"title":139,"body":215,"description":2974,"extension":2975,"links":2976,"meta":2977,"navigation":2978,"path":140,"seo":2979,"stem":141,"__hash__":2980},"docs\u002F01.apps\u002F09.reference\u002F02.migration-sql-grammar.md",{"type":216,"value":217,"toc":2944},"minimark",[218,222,226,238,242,289,292,295,298,304,320,340,345,391,393,396,409,422,426,441,446,518,524,530,564,568,639,656,658,661,664,668,677,682,736,740,774,776,779,782,786,801,809,813,828,830,833,836,840,849,853,1004,1008,1042,1049,1051,1054,1057,1061,1076,1079,1110,1128,1132,1147,1153,1173,1178,1207,1265,1270,1285,1294,1300,1309,1318,1333,1372,1374,1377,1380,1384,1399,1423,1427,1442,1446,1452,1477,1484,1499,1502,1517,1523,1538,1541,1547,1590,1593,1604,1606,1609,1612,1616,1625,1632,1636,1645,1647,1650,1659,1666,1668,1672,1681,1685,1710,1734,1743,1747,1762,1764,1767,1908,1920,1929,1932,1947,1954,1976,1978,1981,2299,2305,2307,2311,2316,2321,2359,2363,2392,2417,2428,2434,2436,2440,2450,2453,2456,2459,2463,2472,2479,2483,2533,2536,2539,2543,2552,2557,2561,2584,2587,2590,2594,2614,2628,2632,2670,2689,2704,2706,2709,2715,2765,2768,2770,2774,2788,2940],[219,220,25],"h2",{"id":221},"overview",[223,224,225],"p",{},"This grammar reference applies to migration scripts used for schema and data migrations in Kinotic. Migration scripts use a SQL dialect designed for schema and data management.",[223,227,228,229,233,234,237],{},"All statements must end with a semicolon (",[230,231,232],"code",{},";","). Identifiers must start with a letter or underscore and can contain letters, numbers, and underscores. Strings are enclosed in single quotes (",[230,235,236],{},"'...'",").",[219,239,241],{"id":240},"statements-overview","Statements Overview",[243,244,245,251,256,261,266,271,276,281,286],"ul",{},[246,247,248],"li",{},[230,249,250],{},"CREATE TABLE",[246,252,253],{},[230,254,255],{},"CREATE DATA STREAM",[246,257,258],{},[230,259,260],{},"CREATE COMPONENT TEMPLATE",[246,262,263],{},[230,264,265],{},"CREATE INDEX TEMPLATE",[246,267,268],{},[230,269,270],{},"REINDEX",[246,272,273],{},[230,274,275],{},"INSERT",[246,277,278],{},[230,279,280],{},"UPDATE",[246,282,283],{},[230,284,285],{},"DELETE",[246,287,288],{},"Comments",[290,291],"hr",{},[219,293,250],{"id":294},"create-table",[223,296,297],{},"Creates an Elasticsearch index with the specified field mappings.",[223,299,300],{},[301,302,303],"strong",{},"Syntax:",[305,306,311],"pre",{"className":307,"code":308,"language":309,"meta":310,"style":310},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CREATE TABLE [IF NOT EXISTS] \u003Cindex_name> (\u003Ccolumn_name> \u003Ctype> [, \u003Ccolumn_name> \u003Ctype>]*) ;\n","sql","",[230,312,313],{"__ignoreMap":310},[314,315,318],"span",{"class":316,"line":317},"line",1,[314,319,308],{},[243,321,322,328],{},[246,323,324,327],{},[230,325,326],{},"IF NOT EXISTS"," (optional): Only create the index if it does not already exist.",[246,329,330,333,334,339],{},[230,331,332],{},"\u003Ctype>",": See ",[335,336,338],"a",{"href":337},"#supported-types","Supported Types",".",[223,341,342],{},[301,343,344],{},"Example:",[305,346,348],{"className":307,"code":347,"language":309,"meta":310,"style":310},"CREATE TABLE IF NOT EXISTS products (\n    name TEXT,\n    sku KEYWORD,\n    price DOUBLE,\n    inStock BOOLEAN,\n    createdAt DATE\n) ;\n",[230,349,350,355,361,367,373,379,385],{"__ignoreMap":310},[314,351,352],{"class":316,"line":317},[314,353,354],{},"CREATE TABLE IF NOT EXISTS products (\n",[314,356,358],{"class":316,"line":357},2,[314,359,360],{},"    name TEXT,\n",[314,362,364],{"class":316,"line":363},3,[314,365,366],{},"    sku KEYWORD,\n",[314,368,370],{"class":316,"line":369},4,[314,371,372],{},"    price DOUBLE,\n",[314,374,376],{"class":316,"line":375},5,[314,377,378],{},"    inStock BOOLEAN,\n",[314,380,382],{"class":316,"line":381},6,[314,383,384],{},"    createdAt DATE\n",[314,386,388],{"class":316,"line":387},7,[314,389,390],{},") ;\n",[290,392],{},[219,394,255],{"id":395},"create-data-stream",[223,397,398,399,405,406,408],{},"Creates an Elasticsearch ",[335,400,404],{"href":401,"rel":402},"https:\u002F\u002Fwww.elastic.co\u002Fguide\u002Fen\u002Felasticsearch\u002Freference\u002Fcurrent\u002Fdata-streams.html",[403],"nofollow","data stream"," — an append-only, time-series store whose backing indices roll over automatically. Unlike ",[230,407,250],{},", which creates a single index, this creates a data-stream-backing index template (matching the stream name) and then materializes the stream.",[223,410,411,412,415,416,419,420,339],{},"A managed ",[230,413,414],{},"@timestamp"," date field is always added to the mapping; every document written to a data stream must carry it. The declared columns use ",[230,417,418],{},"dynamic: strict"," mappings, the same as ",[230,421,250],{},[223,423,424],{},[301,425,303],{},[305,427,429],{"className":307,"code":428,"language":309,"meta":310,"style":310},"CREATE DATA STREAM \u003Cstream_name> (\u003Ccolumn_name> \u003Ctype> [, \u003Ccolumn_name> \u003Ctype>]*)\n    [WITH (\u003Coption> [, \u003Coption>]*)] ;\n",[230,430,431,436],{"__ignoreMap":310},[314,432,433],{"class":316,"line":317},[314,434,435],{},"CREATE DATA STREAM \u003Cstream_name> (\u003Ccolumn_name> \u003Ctype> [, \u003Ccolumn_name> \u003Ctype>]*)\n",[314,437,438],{"class":316,"line":357},[314,439,440],{},"    [WITH (\u003Coption> [, \u003Coption>]*)] ;\n",[223,442,443],{},[301,444,445],{},"Options:",[447,448,449,465],"table",{},[450,451,452],"thead",{},[453,454,455,459,462],"tr",{},[456,457,458],"th",{},"Option",[456,460,461],{},"Allowed Values",[456,463,464],{},"Description",[466,467,468,496],"tbody",{},[453,469,470,476,483],{},[471,472,473],"td",{},[230,474,475],{},"DATA_RETENTION",[471,477,478,479,482],{},"String (e.g., ",[230,480,481],{},"'30d'",")",[471,484,485,486,491,492,495],{},"A ",[335,487,490],{"href":488,"rel":489},"https:\u002F\u002Fwww.elastic.co\u002Fdocs\u002Fmanage-data\u002Flifecycle\u002Fdata-stream",[403],"data stream lifecycle"," retention period. Elasticsearch rolls backing indices over automatically and deletes data older than this — the native data stream lifecycle (",[230,493,494],{},"template.lifecycle.data_retention","), not ILM, so there is no policy object or bootstrap index to manage.",[453,497,498,503,510],{},[471,499,500],{},[230,501,502],{},"TIME_REFERENCE",[471,504,505,506,509],{},"String naming a declared ",[230,507,508],{},"DATE"," column",[471,511,512,513,515,516,339],{},"Designates that column as the natural time field your application reads and writes; ",[230,514,414],{}," becomes its required Elasticsearch companion (see below). The named column must exist and be of type ",[230,517,508],{},[223,519,520,333,522,339],{},[230,521,332],{},[335,523,338],{"href":337},[223,525,526,527,529],{},"Every data stream document must carry a ",[230,528,414],{}," date field, which Elasticsearch requires and which is added to the mapping automatically — you do not (and cannot) declare it as a column. There are two ways to supply it at write time:",[243,531,532,546],{},[246,533,534,539,540,542,543,237],{},[301,535,536,537],{},"Without ",[230,538,502],{}," — documents carry ",[230,541,414],{}," directly (for a Java DTO, map a field with ",[230,544,545],{},"@JsonProperty(\"@timestamp\")",[246,547,548,554,555,557,558,561,562,339],{},[301,549,550,551],{},"With ",[230,552,553],{},"TIME_REFERENCE = '\u003Ccol>'"," — the named column is the natural time field your code works with, and ",[230,556,414],{}," is duplicated from it on write. Use this for streams backing entities whose time field carries a ",[230,559,560],{},"@TimeReference",", so the stored document keeps both the friendly column (queryable by its own name) and ",[230,563,414],{},[223,565,566],{},[301,567,344],{},[305,569,571],{"className":307,"code":570,"language":309,"meta":310,"style":310},"-- raw stream: writers provide @timestamp directly\nCREATE DATA STREAM events (\n    level   KEYWORD,\n    message TEXT\n) WITH (DATA_RETENTION = '30d') ;\n\n-- entity-style stream: eventTime is the natural field, @timestamp rides alongside it\nCREATE DATA STREAM sensor_readings (\n    id        KEYWORD,\n    eventTime DATE,\n    value     DOUBLE\n) WITH (DATA_RETENTION = '30d', TIME_REFERENCE = 'eventTime') ;\n",[230,572,573,578,583,588,593,598,604,609,615,621,627,633],{"__ignoreMap":310},[314,574,575],{"class":316,"line":317},[314,576,577],{},"-- raw stream: writers provide @timestamp directly\n",[314,579,580],{"class":316,"line":357},[314,581,582],{},"CREATE DATA STREAM events (\n",[314,584,585],{"class":316,"line":363},[314,586,587],{},"    level   KEYWORD,\n",[314,589,590],{"class":316,"line":369},[314,591,592],{},"    message TEXT\n",[314,594,595],{"class":316,"line":375},[314,596,597],{},") WITH (DATA_RETENTION = '30d') ;\n",[314,599,600],{"class":316,"line":381},[314,601,603],{"emptyLinePlaceholder":602},true,"\n",[314,605,606],{"class":316,"line":387},[314,607,608],{},"-- entity-style stream: eventTime is the natural field, @timestamp rides alongside it\n",[314,610,612],{"class":316,"line":611},8,[314,613,614],{},"CREATE DATA STREAM sensor_readings (\n",[314,616,618],{"class":316,"line":617},9,[314,619,620],{},"    id        KEYWORD,\n",[314,622,624],{"class":316,"line":623},10,[314,625,626],{},"    eventTime DATE,\n",[314,628,630],{"class":316,"line":629},11,[314,631,632],{},"    value     DOUBLE\n",[314,634,636],{"class":316,"line":635},12,[314,637,638],{},") WITH (DATA_RETENTION = '30d', TIME_REFERENCE = 'eventTime') ;\n",[640,641,643,648,649,652,653,655],"callout",{"type":642},"info",[301,644,645,647],{},[230,646,475],{}," is a retention floor measured from rollover, not a per-document TTL."," Retention is applied per backing index, timed from when that index is rolled over — not from when each document was written. A lifecycle pass (every 10 minutes by default) deletes a whole backing index once ",[230,650,651],{},"now - rollover_time"," exceeds the period. So a document written just before a rollover can outlive the period by the age of its backing index, and deletion happens at backing-index granularity rather than per row. Use this to keep \"roughly the last N days\"; if you need deletion timed from a business field, use a scheduled ",[230,654,285],{},"\u002Fdelete-by-query instead.",[290,657],{},[219,659,260],{"id":660},"create-component-template",[223,662,663],{},"Creates a reusable component template that can be referenced by index templates.",[223,665,666],{},[301,667,303],{},[305,669,671],{"className":307,"code":670,"language":309,"meta":310,"style":310},"CREATE COMPONENT TEMPLATE \u003Ctemplate_name> (\u003Cdefinition> [, \u003Cdefinition>]*) ;\n",[230,672,673],{"__ignoreMap":310},[314,674,675],{"class":316,"line":317},[314,676,670],{},[223,678,679],{},[301,680,681],{},"Definitions:",[447,683,684,695],{},[450,685,686],{},[453,687,688,691,693],{},[456,689,690],{},"Definition",[456,692,461],{},[456,694,464],{},[466,696,697,710,723],{},[453,698,699,704,707],{},[471,700,701],{},[230,702,703],{},"NUMBER_OF_SHARDS",[471,705,706],{},"Integer (e.g., 1, 3)",[471,708,709],{},"Number of primary shards for the index",[453,711,712,717,720],{},[471,713,714],{},[230,715,716],{},"NUMBER_OF_REPLICAS",[471,718,719],{},"Integer (e.g., 0, 1)",[471,721,722],{},"Number of replica shards for the index",[453,724,725,730,733],{},[471,726,727],{},[230,728,729],{},"\u003Ccolumn_name> \u003Ctype>",[471,731,732],{},"See Supported Types",[471,734,735],{},"Field mapping (name and type)",[223,737,738],{},[301,739,344],{},[305,741,743],{"className":307,"code":742,"language":309,"meta":310,"style":310},"CREATE COMPONENT TEMPLATE base_settings (\n    NUMBER_OF_SHARDS = 3,\n    NUMBER_OF_REPLICAS = 1,\n    createdAt DATE,\n    updatedAt DATE\n) ;\n",[230,744,745,750,755,760,765,770],{"__ignoreMap":310},[314,746,747],{"class":316,"line":317},[314,748,749],{},"CREATE COMPONENT TEMPLATE base_settings (\n",[314,751,752],{"class":316,"line":357},[314,753,754],{},"    NUMBER_OF_SHARDS = 3,\n",[314,756,757],{"class":316,"line":363},[314,758,759],{},"    NUMBER_OF_REPLICAS = 1,\n",[314,761,762],{"class":316,"line":369},[314,763,764],{},"    createdAt DATE,\n",[314,766,767],{"class":316,"line":375},[314,768,769],{},"    updatedAt DATE\n",[314,771,772],{"class":316,"line":381},[314,773,390],{},[290,775],{},[219,777,265],{"id":778},"create-index-template",[223,780,781],{},"Creates an index template that applies settings and mappings to indices matching a pattern.",[223,783,784],{},[301,785,303],{},[305,787,789],{"className":307,"code":788,"language":309,"meta":310,"style":310},"CREATE INDEX TEMPLATE \u003Ctemplate_name> FOR '\u003Cpattern>' USING '\u003Ccomponent_template>'\n    [WITH (\u003Cdefinition> [, \u003Cdefinition>]*)] ;\n",[230,790,791,796],{"__ignoreMap":310},[314,792,793],{"class":316,"line":317},[314,794,795],{},"CREATE INDEX TEMPLATE \u003Ctemplate_name> FOR '\u003Cpattern>' USING '\u003Ccomponent_template>'\n",[314,797,798],{"class":316,"line":357},[314,799,800],{},"    [WITH (\u003Cdefinition> [, \u003Cdefinition>]*)] ;\n",[243,802,803],{},[246,804,805,808],{},[230,806,807],{},"WITH (...)"," (optional): Additional definitions as in component templates.",[223,810,811],{},[301,812,344],{},[305,814,816],{"className":307,"code":815,"language":309,"meta":310,"style":310},"CREATE INDEX TEMPLATE logs_template FOR 'logs-*' USING 'base_settings'\n    WITH (NUMBER_OF_REPLICAS = 2, level KEYWORD) ;\n",[230,817,818,823],{"__ignoreMap":310},[314,819,820],{"class":316,"line":317},[314,821,822],{},"CREATE INDEX TEMPLATE logs_template FOR 'logs-*' USING 'base_settings'\n",[314,824,825],{"class":316,"line":357},[314,826,827],{},"    WITH (NUMBER_OF_REPLICAS = 2, level KEYWORD) ;\n",[290,829],{},[219,831,270],{"id":832},"reindex",[223,834,835],{},"Copies documents from one index to another with optional transformations.",[223,837,838],{},[301,839,303],{},[305,841,843],{"className":307,"code":842,"language":309,"meta":310,"style":310},"REINDEX \u003Csource_index> INTO \u003Cdest_index> [WITH (\u003Coption> [, \u003Coption>]*)] ;\n",[230,844,845],{"__ignoreMap":310},[314,846,847],{"class":316,"line":317},[314,848,842],{},[223,850,851],{},[301,852,445],{},[447,854,855,865],{},[450,856,857],{},[453,858,859,861,863],{},[456,860,458],{},[456,862,461],{},[456,864,464],{},[466,866,867,886,899,915,928,944,957,970,988],{},[453,868,869,874,883],{},[471,870,871],{},[230,872,873],{},"CONFLICTS",[471,875,876,879,880],{},[230,877,878],{},"ABORT",", ",[230,881,882],{},"PROCEED",[471,884,885],{},"How to handle version conflicts: abort or proceed",[453,887,888,893,896],{},[471,889,890],{},[230,891,892],{},"MAX_DOCS",[471,894,895],{},"Integer (e.g., 1000)",[471,897,898],{},"Maximum number of documents to reindex",[453,900,901,906,912],{},[471,902,903],{},[230,904,905],{},"SLICES",[471,907,908,911],{},[230,909,910],{},"AUTO",", Integer (e.g., 2)",[471,913,914],{},"Number of slices for parallel processing; AUTO selects automatically based on shard count",[453,916,917,922,925],{},[471,918,919],{},[230,920,921],{},"SIZE",[471,923,924],{},"Integer (e.g., 500)",[471,926,927],{},"Batch size for reindexing",[453,929,930,935,941],{},[471,931,932],{},[230,933,934],{},"SOURCE_FIELDS",[471,936,937,938,482],{},"Comma-separated list (e.g., ",[230,939,940],{},"'field1,field2'",[471,942,943],{},"Restrict source fields to copy",[453,945,946,951,954],{},[471,947,948],{},[230,949,950],{},"QUERY",[471,952,953],{},"String (Lucene query syntax)",[471,955,956],{},"Query to filter source documents",[453,958,959,964,967],{},[471,960,961],{},[230,962,963],{},"SCRIPT",[471,965,966],{},"String (Painless script)",[471,968,969],{},"Script to transform documents during reindex",[453,971,972,977,985],{},[471,973,974],{},[230,975,976],{},"WAIT",[471,978,979,879,982],{},[230,980,981],{},"TRUE",[230,983,984],{},"FALSE",[471,986,987],{},"If TRUE, wait for completion; if FALSE, return task ID",[453,989,990,995,1001],{},[471,991,992],{},[230,993,994],{},"SKIP_IF_NO_SOURCE",[471,996,997,879,999],{},[230,998,981],{},[230,1000,984],{},[471,1002,1003],{},"If TRUE, skip if source index does not exist (default FALSE)",[223,1005,1006],{},[301,1007,344],{},[305,1009,1011],{"className":307,"code":1010,"language":309,"meta":310,"style":310},"REINDEX old_products INTO new_products WITH (\n    CONFLICTS = PROCEED,\n    SLICES = AUTO,\n    QUERY = 'status:active',\n    SKIP_IF_NO_SOURCE = TRUE\n) ;\n",[230,1012,1013,1018,1023,1028,1033,1038],{"__ignoreMap":310},[314,1014,1015],{"class":316,"line":317},[314,1016,1017],{},"REINDEX old_products INTO new_products WITH (\n",[314,1019,1020],{"class":316,"line":357},[314,1021,1022],{},"    CONFLICTS = PROCEED,\n",[314,1024,1025],{"class":316,"line":363},[314,1026,1027],{},"    SLICES = AUTO,\n",[314,1029,1030],{"class":316,"line":369},[314,1031,1032],{},"    QUERY = 'status:active',\n",[314,1034,1035],{"class":316,"line":375},[314,1036,1037],{},"    SKIP_IF_NO_SOURCE = TRUE\n",[314,1039,1040],{"class":316,"line":381},[314,1041,390],{},[223,1043,1044,1045,1048],{},"If ",[230,1046,1047],{},"SKIP_IF_NO_SOURCE = TRUE",", the reindex operation will be skipped (no error) if the source index does not exist. This is useful for idempotent migrations.",[290,1050],{},[219,1052,275],{"id":1053},"insert",[223,1055,1056],{},"Inserts a document into an index.",[223,1058,1059],{},[301,1060,303],{},[305,1062,1064],{"className":307,"code":1063,"language":309,"meta":310,"style":310},"INSERT INTO \u003Cindex_name> [(\u003Ccolumn_name> [, \u003Ccolumn_name>]*)]\n    VALUES (\u003Cvalue> [, \u003Cvalue>]*) [WITH \u003Coption> [, \u003Coption>]*] ;\n",[230,1065,1066,1071],{"__ignoreMap":310},[314,1067,1068],{"class":316,"line":317},[314,1069,1070],{},"INSERT INTO \u003Cindex_name> [(\u003Ccolumn_name> [, \u003Ccolumn_name>]*)]\n",[314,1072,1073],{"class":316,"line":357},[314,1074,1075],{},"    VALUES (\u003Cvalue> [, \u003Cvalue>]*) [WITH \u003Coption> [, \u003Coption>]*] ;\n",[223,1077,1078],{},"Options may appear in any order:",[243,1080,1081,1087,1097],{},[246,1082,1083,1086],{},[230,1084,1085],{},"REFRESH",": Immediately refresh the index after insert, making the document searchable.",[246,1088,1089,1092,1093,1096],{},[230,1090,1091],{},"ROUTING '\u003Cvalue>'",": Index the document under this routing value. A read that routes by the same value reaches it; without this the document is routed by its ",[230,1094,1095],{},"_id"," and lands on whichever shard that hashes to.",[246,1098,1099,1102,1103,1105,1106,1109],{},[230,1100,1101],{},"DOCUMENT_ID '\u003Cvalue>'",": Index the document under this ",[230,1104,1095],{},", instead of the value of the ",[230,1107,1108],{},"id"," column.",[223,1111,1112,333,1115,1119,1120,1123,1124,1127],{},[230,1113,1114],{},"\u003Cvalue>",[335,1116,1118],{"href":1117},"#values","Values"," — a literal, a parameter (",[230,1121,1122],{},":name","), an object literal, or an array literal. A ",[230,1125,1126],{},"null"," stores no field at all, leaving the document the same as one whose column list never named it.",[223,1129,1130],{},[301,1131,344],{},[305,1133,1135],{"className":307,"code":1134,"language":309,"meta":310,"style":310},"INSERT INTO products (name, sku, inStock)\n    VALUES ('Widget', 'WDG-001', true) WITH REFRESH ;\n",[230,1136,1137,1142],{"__ignoreMap":310},[314,1138,1139],{"class":316,"line":317},[314,1140,1141],{},"INSERT INTO products (name, sku, inStock)\n",[314,1143,1144],{"class":316,"line":357},[314,1145,1146],{},"    VALUES ('Widget', 'WDG-001', true) WITH REFRESH ;\n",[223,1148,1149,1150,1152],{},"Seeding a row that a reader addresses by a composite ",[230,1151,1095],{}," and reaches with a routed search needs both options, since the statement has no knowledge of how the row will be read:",[305,1154,1156],{"className":307,"code":1155,"language":309,"meta":310,"style":310},"INSERT INTO kinotic_application (id, organizationId, name)\n    VALUES ('atlas-crm', 'kinotic-test', 'Atlas CRM')\n    WITH REFRESH, ROUTING 'kinotic-test', DOCUMENT_ID 'kinotic-test-atlas-crm' ;\n",[230,1157,1158,1163,1168],{"__ignoreMap":310},[314,1159,1160],{"class":316,"line":317},[314,1161,1162],{},"INSERT INTO kinotic_application (id, organizationId, name)\n",[314,1164,1165],{"class":316,"line":357},[314,1166,1167],{},"    VALUES ('atlas-crm', 'kinotic-test', 'Atlas CRM')\n",[314,1169,1170],{"class":316,"line":363},[314,1171,1172],{},"    WITH REFRESH, ROUTING 'kinotic-test', DOCUMENT_ID 'kinotic-test-atlas-crm' ;\n",[1174,1175,1177],"h3",{"id":1176},"inserting-composite-columns","Inserting composite columns",[223,1179,1180,879,1183,879,1186,879,1189,879,1192,1195,1196,1199,1200,1203,1204,1206],{},[230,1181,1182],{},"OBJECT",[230,1184,1185],{},"NESTED",[230,1187,1188],{},"UNION",[230,1190,1191],{},"GEO_POINT",[230,1193,1194],{},"GEO_SHAPE",", and ",[230,1197,1198],{},"JSON"," columns take an object literal — ",[230,1201,1202],{},"{ field: value, ... }"," — as their value. A ",[230,1205,1185],{}," column holds a list, so its value is an array literal of object literals. Object and array literals nest to any depth.",[305,1208,1210],{"className":307,"code":1209,"language":309,"meta":310,"style":310},"CREATE TABLE persons (\n    id      KEYWORD,\n    address OBJECT (street TEXT, city KEYWORD, coords OBJECT (lat DOUBLE, lon DOUBLE)),\n    tags    NESTED (label TEXT, value KEYWORD)\n) ;\n\nINSERT INTO persons (id, address, tags) VALUES (\n    'p-1',\n    { street: '1 Main St', city: 'Springfield', coords: { lat: 30.26, lon: -97.74 } },\n    [ { label: 'Release', value: 'v1' }, { label: 'Area', value: 'sql' } ]\n) WITH REFRESH ;\n",[230,1211,1212,1217,1222,1227,1232,1236,1240,1245,1250,1255,1260],{"__ignoreMap":310},[314,1213,1214],{"class":316,"line":317},[314,1215,1216],{},"CREATE TABLE persons (\n",[314,1218,1219],{"class":316,"line":357},[314,1220,1221],{},"    id      KEYWORD,\n",[314,1223,1224],{"class":316,"line":363},[314,1225,1226],{},"    address OBJECT (street TEXT, city KEYWORD, coords OBJECT (lat DOUBLE, lon DOUBLE)),\n",[314,1228,1229],{"class":316,"line":369},[314,1230,1231],{},"    tags    NESTED (label TEXT, value KEYWORD)\n",[314,1233,1234],{"class":316,"line":375},[314,1235,390],{},[314,1237,1238],{"class":316,"line":381},[314,1239,603],{"emptyLinePlaceholder":602},[314,1241,1242],{"class":316,"line":387},[314,1243,1244],{},"INSERT INTO persons (id, address, tags) VALUES (\n",[314,1246,1247],{"class":316,"line":611},[314,1248,1249],{},"    'p-1',\n",[314,1251,1252],{"class":316,"line":617},[314,1253,1254],{},"    { street: '1 Main St', city: 'Springfield', coords: { lat: 30.26, lon: -97.74 } },\n",[314,1256,1257],{"class":316,"line":623},[314,1258,1259],{},"    [ { label: 'Release', value: 'v1' }, { label: 'Area', value: 'sql' } ]\n",[314,1261,1262],{"class":316,"line":629},[314,1263,1264],{},") WITH REFRESH ;\n",[223,1266,485,1267,1269],{},[230,1268,1188],{}," column is stored as the merged flat object, so its value is an object literal carrying the discriminator plus that variant's fields:",[305,1271,1273],{"className":307,"code":1272,"language":309,"meta":310,"style":310},"INSERT INTO assets (id, item)\n    VALUES ('a-1', { kind: 'Book', title: 'Refactoring', isbn: '978-0134757599' }) ;\n",[230,1274,1275,1280],{"__ignoreMap":310},[314,1276,1277],{"class":316,"line":317},[314,1278,1279],{},"INSERT INTO assets (id, item)\n",[314,1281,1282],{"class":316,"line":357},[314,1283,1284],{},"    VALUES ('a-1', { kind: 'Book', title: 'Refactoring', isbn: '978-0134757599' }) ;\n",[223,1286,1287,1288,1290,1291,1293],{},"Because composite mappings are ",[230,1289,418],{},", a sub-field that is not declared in the ",[230,1292,250],{}," is rejected by Elasticsearch when the statement runs — a mistyped sub-field name fails the migration rather than being stored.",[1174,1295,1297,1298,509],{"id":1296},"the-id-column","The ",[230,1299,1108],{},[223,1301,1302,1303,1305,1306,1308],{},"When the column list includes ",[230,1304,1108],{},", its value is used as the document's unique storage identifier. If the column list omits ",[230,1307,1108],{},", a random storage identifier is auto-generated.",[223,1310,1311,1312,1314,1315,1317],{},"This matters because every find-by-id lookup resolves the document by its ",[230,1313,1095],{},". A row inserted without an ",[230,1316,1108],{}," column cannot be retrieved by its logical identifier later — it will only be discoverable via search.",[223,1319,1320,1321,1323,1324,1326,1327,1329,1330,1332],{},"As a rule: if the target table has a logical ",[230,1322,1108],{}," field, always include the ",[230,1325,1108],{}," column in the INSERT so ",[230,1328,1095],{}," stays in sync with the document's ",[230,1331,1108],{}," value.",[305,1334,1336],{"className":307,"code":1335,"language":309,"meta":310,"style":310},"-- Recommended: id column promoted to _id\nINSERT INTO users (id, email, active)\n    VALUES ('user-001', 'jane@example.com', true)\n    WITH REFRESH ;\n\n-- Avoid when the table has a logical id field: the row will get a random _id\nINSERT INTO users (email, active) VALUES ('jane@example.com', true) ;\n",[230,1337,1338,1343,1348,1353,1358,1362,1367],{"__ignoreMap":310},[314,1339,1340],{"class":316,"line":317},[314,1341,1342],{},"-- Recommended: id column promoted to _id\n",[314,1344,1345],{"class":316,"line":357},[314,1346,1347],{},"INSERT INTO users (id, email, active)\n",[314,1349,1350],{"class":316,"line":363},[314,1351,1352],{},"    VALUES ('user-001', 'jane@example.com', true)\n",[314,1354,1355],{"class":316,"line":369},[314,1356,1357],{},"    WITH REFRESH ;\n",[314,1359,1360],{"class":316,"line":375},[314,1361,603],{"emptyLinePlaceholder":602},[314,1363,1364],{"class":316,"line":381},[314,1365,1366],{},"-- Avoid when the table has a logical id field: the row will get a random _id\n",[314,1368,1369],{"class":316,"line":387},[314,1370,1371],{},"INSERT INTO users (email, active) VALUES ('jane@example.com', true) ;\n",[290,1373],{},[219,1375,280],{"id":1376},"update",[223,1378,1379],{},"Updates documents matching a where clause.",[223,1381,1382],{},[301,1383,303],{},[305,1385,1387],{"className":307,"code":1386,"language":309,"meta":310,"style":310},"UPDATE \u003Cindex_name> SET \u003Cfield> = \u003Cexpression> [, \u003Cfield> = \u003Cexpression>]*\n    WHERE \u003Cwhere_clause> [WITH REFRESH] ;\n",[230,1388,1389,1394],{"__ignoreMap":310},[314,1390,1391],{"class":316,"line":317},[314,1392,1393],{},"UPDATE \u003Cindex_name> SET \u003Cfield> = \u003Cexpression> [, \u003Cfield> = \u003Cexpression>]*\n",[314,1395,1396],{"class":316,"line":357},[314,1397,1398],{},"    WHERE \u003Cwhere_clause> [WITH REFRESH] ;\n",[243,1400,1401,1407],{},[246,1402,1403,1406],{},[230,1404,1405],{},"WITH REFRESH"," (optional): Immediately refresh the index after update.",[246,1408,1409,333,1412,1416,1417,1419,1420,237],{},[230,1410,1411],{},"\u003Cexpression>",[335,1413,1415],{"href":1414},"#expressions","Expressions"," — a value (including an object or array literal), a parameter (",[230,1418,1122],{},"), or a binary expression (e.g., ",[230,1421,1422],{},"age + 1",[223,1424,1425],{},[301,1426,344],{},[305,1428,1430],{"className":307,"code":1429,"language":309,"meta":310,"style":310},"UPDATE products SET inStock = false, updatedAt = '2024-01-15'\n    WHERE sku == 'WDG-001' WITH REFRESH ;\n",[230,1431,1432,1437],{"__ignoreMap":310},[314,1433,1434],{"class":316,"line":317},[314,1435,1436],{},"UPDATE products SET inStock = false, updatedAt = '2024-01-15'\n",[314,1438,1439],{"class":316,"line":357},[314,1440,1441],{},"    WHERE sku == 'WDG-001' WITH REFRESH ;\n",[1174,1443,1445],{"id":1444},"updating-composite-columns","Updating composite columns",[223,1447,1448,1449,1451],{},"A composite column is set from the same object and array literals ",[230,1450,275],{}," uses:",[305,1453,1455],{"className":307,"code":1454,"language":309,"meta":310,"style":310},"UPDATE persons\n   SET address = { street: '99 Elm St', city: 'Shelbyville' },\n       tags    = [ { label: 'Area', value: 'grammar' }, { label: 'Release', value: 'v2' } ]\n WHERE id == 'p-1' WITH REFRESH ;\n",[230,1456,1457,1462,1467,1472],{"__ignoreMap":310},[314,1458,1459],{"class":316,"line":317},[314,1460,1461],{},"UPDATE persons\n",[314,1463,1464],{"class":316,"line":357},[314,1465,1466],{},"   SET address = { street: '99 Elm St', city: 'Shelbyville' },\n",[314,1468,1469],{"class":316,"line":363},[314,1470,1471],{},"       tags    = [ { label: 'Area', value: 'grammar' }, { label: 'Release', value: 'v2' } ]\n",[314,1473,1474],{"class":316,"line":369},[314,1475,1476],{}," WHERE id == 'p-1' WITH REFRESH ;\n",[223,1478,1479,1480,1483],{},"An object literal is ",[301,1481,1482],{},"merged into"," the stored object rather than replacing it, matching the merge Elasticsearch performs for a partial document update. Sub-fields the statement does not mention keep their stored values, so a single sub-field can be changed by naming only that one:",[305,1485,1487],{"className":307,"code":1486,"language":309,"meta":310,"style":310},"-- street and zip keep their stored values; only city changes\nUPDATE persons SET address = { city: 'Shelbyville' } WHERE id == 'p-1' ;\n",[230,1488,1489,1494],{"__ignoreMap":310},[314,1490,1491],{"class":316,"line":317},[314,1492,1493],{},"-- street and zip keep their stored values; only city changes\n",[314,1495,1496],{"class":316,"line":357},[314,1497,1498],{},"UPDATE persons SET address = { city: 'Shelbyville' } WHERE id == 'p-1' ;\n",[223,1500,1501],{},"The merge is recursive, so an object inside an object merges the same way:",[305,1503,1505],{"className":307,"code":1504,"language":309,"meta":310,"style":310},"-- coords.lon is left alone\nUPDATE persons SET address = { coords: { lat: 30.26 } } WHERE id == 'p-1' ;\n",[230,1506,1507,1512],{"__ignoreMap":310},[314,1508,1509],{"class":316,"line":317},[314,1510,1511],{},"-- coords.lon is left alone\n",[314,1513,1514],{"class":316,"line":357},[314,1515,1516],{},"UPDATE persons SET address = { coords: { lat: 30.26 } } WHERE id == 'p-1' ;\n",[223,1518,1519,1520,1522],{},"Everything that is not an object is replaced outright — arrays, including a ",[230,1521,1185],{}," column's list, are never appended to or merged element-wise:",[305,1524,1526],{"className":307,"code":1525,"language":309,"meta":310,"style":310},"-- tags becomes exactly this one element, whatever it held before\nUPDATE articles SET tags = [ { label: 'Area', value: 'grammar' } ] WHERE id == 'a-1' ;\n",[230,1527,1528,1533],{"__ignoreMap":310},[314,1529,1530],{"class":316,"line":317},[314,1531,1532],{},"-- tags becomes exactly this one element, whatever it held before\n",[314,1534,1535],{"class":316,"line":357},[314,1536,1537],{},"UPDATE articles SET tags = [ { label: 'Area', value: 'grammar' } ] WHERE id == 'a-1' ;\n",[223,1539,1540],{},"The stored side decides too: if the column currently holds a scalar, an array, or nothing at all, there is nothing to merge into, so the object is written as though merged into an empty one.",[223,1542,1543,1544,1546],{},"Because omitting a sub-field keeps it, ",[230,1545,1126],{}," is what removes one. Name the column on the left of the assignment and the sub-field inside the literal: the nesting of the literal is what addresses the field, at any depth.",[305,1548,1550],{"className":307,"code":1549,"language":309,"meta":310,"style":310},"-- removes address.street; city and the rest of the address are untouched\nUPDATE persons SET address = { street: null } WHERE id == 'p-1' ;\n\n-- removes address.coords.lat; lon and the rest of coords are untouched\nUPDATE persons SET address = { coords: { lat: null } } WHERE id == 'p-1' ;\n\n-- removes the whole address column\nUPDATE persons SET address = null WHERE id == 'p-1' ;\n",[230,1551,1552,1557,1562,1566,1571,1576,1580,1585],{"__ignoreMap":310},[314,1553,1554],{"class":316,"line":317},[314,1555,1556],{},"-- removes address.street; city and the rest of the address are untouched\n",[314,1558,1559],{"class":316,"line":357},[314,1560,1561],{},"UPDATE persons SET address = { street: null } WHERE id == 'p-1' ;\n",[314,1563,1564],{"class":316,"line":363},[314,1565,603],{"emptyLinePlaceholder":602},[314,1567,1568],{"class":316,"line":369},[314,1569,1570],{},"-- removes address.coords.lat; lon and the rest of coords are untouched\n",[314,1572,1573],{"class":316,"line":375},[314,1574,1575],{},"UPDATE persons SET address = { coords: { lat: null } } WHERE id == 'p-1' ;\n",[314,1577,1578],{"class":316,"line":381},[314,1579,603],{"emptyLinePlaceholder":602},[314,1581,1582],{"class":316,"line":387},[314,1583,1584],{},"-- removes the whole address column\n",[314,1586,1587],{"class":316,"line":611},[314,1588,1589],{},"UPDATE persons SET address = null WHERE id == 'p-1' ;\n",[223,1591,1592],{},"A cleared field is gone rather than stored as an empty value, leaving the document exactly as if it had never carried one. Nothing is stored as null, so a later read gives you the same absent field either way.",[223,1594,1595,1596,1599,1600,1603],{},"A dot-path is not valid on the left of an assignment — ",[230,1597,1598],{},"SET address.street = null"," does not parse, because ",[230,1601,1602],{},"SET"," takes a column name. The literal above is the form that reaches a sub-field.",[290,1605],{},[219,1607,285],{"id":1608},"delete",[223,1610,1611],{},"Deletes documents matching a where clause.",[223,1613,1614],{},[301,1615,303],{},[305,1617,1619],{"className":307,"code":1618,"language":309,"meta":310,"style":310},"DELETE FROM \u003Cindex_name> WHERE \u003Cwhere_clause> [WITH REFRESH] ;\n",[230,1620,1621],{"__ignoreMap":310},[314,1622,1623],{"class":316,"line":317},[314,1624,1618],{},[243,1626,1627],{},[246,1628,1629,1631],{},[230,1630,1405],{}," (optional): Immediately refresh the index after delete.",[223,1633,1634],{},[301,1635,344],{},[305,1637,1639],{"className":307,"code":1638,"language":309,"meta":310,"style":310},"DELETE FROM products WHERE inStock == false WITH REFRESH ;\n",[230,1640,1641],{"__ignoreMap":310},[314,1642,1643],{"class":316,"line":317},[314,1644,1638],{},[290,1646],{},[219,1648,288],{"id":1649},"comments",[305,1651,1653],{"className":307,"code":1652,"language":309,"meta":310,"style":310},"-- This is a comment\n",[230,1654,1655],{"__ignoreMap":310},[314,1656,1657],{"class":316,"line":317},[314,1658,1652],{},[223,1660,1661,1662,1665],{},"Comments start with ",[230,1663,1664],{},"--"," and continue to the end of the line. Comments are ignored by the parser.",[290,1667],{},[219,1669,1671],{"id":1670},"where-clauses","Where Clauses",[223,1673,1674,1675,1677,1678,1680],{},"Where clauses are used in ",[230,1676,280],{}," and ",[230,1679,285],{}," statements.",[223,1682,1683],{},[301,1684,303],{},[305,1686,1688],{"className":307,"code":1687,"language":309,"meta":310,"style":310},"\u003Cfield> \u003Coperator> \u003Cvalue>\n(\u003Cwhere_clause>)\n\u003Cwhere_clause> AND \u003Cwhere_clause>\n\u003Cwhere_clause> OR \u003Cwhere_clause>\n",[230,1689,1690,1695,1700,1705],{"__ignoreMap":310},[314,1691,1692],{"class":316,"line":317},[314,1693,1694],{},"\u003Cfield> \u003Coperator> \u003Cvalue>\n",[314,1696,1697],{"class":316,"line":357},[314,1698,1699],{},"(\u003Cwhere_clause>)\n",[314,1701,1702],{"class":316,"line":363},[314,1703,1704],{},"\u003Cwhere_clause> AND \u003Cwhere_clause>\n",[314,1706,1707],{"class":316,"line":369},[314,1708,1709],{},"\u003Cwhere_clause> OR \u003Cwhere_clause>\n",[223,1711,1712,1715,1716,879,1719,879,1722,879,1725,879,1728,879,1731],{},[301,1713,1714],{},"Operators:"," ",[230,1717,1718],{},"==",[230,1720,1721],{},"!=",[230,1723,1724],{},"\u003C",[230,1726,1727],{},">",[230,1729,1730],{},"\u003C=",[230,1732,1733],{},">=",[223,1735,1736,1739,1740,1742],{},[301,1737,1738],{},"Values:"," String, number, or boolean literal, or parameter (",[230,1741,1122],{},"). Object and array literals cannot be compared.",[223,1744,1745],{},[301,1746,344],{},[305,1748,1750],{"className":307,"code":1749,"language":309,"meta":310,"style":310},"WHERE status == 'archived' AND createdAt \u003C '2023-01-01'\nWHERE (category == 'electronics' OR category == 'appliances') AND price > 100\n",[230,1751,1752,1757],{"__ignoreMap":310},[314,1753,1754],{"class":316,"line":317},[314,1755,1756],{},"WHERE status == 'archived' AND createdAt \u003C '2023-01-01'\n",[314,1758,1759],{"class":316,"line":357},[314,1760,1761],{},"WHERE (category == 'electronics' OR category == 'appliances') AND price > 100\n",[290,1763],{},[219,1765,1118],{"id":1766},"values",[447,1768,1769,1782],{},[450,1770,1771],{},[453,1772,1773,1776,1779],{},[456,1774,1775],{},"Form",[456,1777,1778],{},"Examples",[456,1780,1781],{},"Notes",[466,1783,1784,1800,1822,1838,1850,1866,1890],{},[453,1785,1786,1789,1797],{},[471,1787,1788],{},"String",[471,1790,1791,879,1794],{},[230,1792,1793],{},"'Widget'",[230,1795,1796],{},"'2024-01-15'",[471,1798,1799],{},"Single-quoted. Dates are strings in ISO 8601 form",[453,1801,1802,1805,1819],{},[471,1803,1804],{},"Number",[471,1806,1807,879,1810,879,1813,879,1816],{},[230,1808,1809],{},"12",[230,1811,1812],{},"-3",[230,1814,1815],{},"30.26",[230,1817,1818],{},"-97.74",[471,1820,1821],{},"Whole numbers and decimals, both optionally negative",[453,1823,1824,1827,1835],{},[471,1825,1826],{},"Boolean",[471,1828,1829,879,1832],{},[230,1830,1831],{},"true",[230,1833,1834],{},"false",[471,1836,1837],{},"Lowercase",[453,1839,1840,1843,1847],{},[471,1841,1842],{},"Null",[471,1844,1845],{},[230,1846,1126],{},[471,1848,1849],{},"Lowercase. Means the field has no value: nothing is stored for it, and a stored one is removed",[453,1851,1852,1855,1863],{},[471,1853,1854],{},"Parameter",[471,1856,1857,879,1860],{},[230,1858,1859],{},":orgId",[230,1861,1862],{},":minAge",[471,1864,1865],{},"A value supplied when the statement runs, looked up by the name after the colon",[453,1867,1868,1871,1876],{},[471,1869,1870],{},"Object",[471,1872,1873],{},[230,1874,1875],{},"{ street: '1 Main St', zip: '11111' }",[471,1877,1878,1879,879,1881,879,1883,879,1885,1887,1888,509],{},"A sub-document for an ",[230,1880,1182],{},[230,1882,1188],{},[230,1884,1191],{},[230,1886,1194],{},", or ",[230,1889,1198],{},[453,1891,1892,1895,1903],{},[471,1893,1894],{},"Array",[471,1896,1897,879,1900],{},[230,1898,1899],{},"['ADMIN', 'USER']",[230,1901,1902],{},"[ { label: 'a' } ]",[471,1904,1905,1906,509],{},"A list of any of the forms above; the value form for a ",[230,1907,1185],{},[223,1909,1910,1911,1913,1914,1916,1917,1919],{},"Object and array literals nest to any depth, so an ",[230,1912,1182],{}," holding a ",[230,1915,1185],{}," holding another ",[230,1918,1182],{}," is written as one literal. Field names in an object literal are bare identifiers, or single-quoted strings when the name is not a valid identifier:",[305,1921,1923],{"className":307,"code":1922,"language":309,"meta":310,"style":310},"{ 'content-type': 'application\u002Fjson', charset: 'utf-8' }\n",[230,1924,1925],{"__ignoreMap":310},[314,1926,1927],{"class":316,"line":317},[314,1928,1922],{},[223,1930,1931],{},"A parameter can stand anywhere a value can, including inside an object or array literal, and the same name may be used more than once in a statement:",[305,1933,1935],{"className":307,"code":1934,"language":309,"meta":310,"style":310},"UPDATE persons SET address = { street: :street, city: :city } WHERE id == :id ;\nDELETE FROM events WHERE created \u003C :cutoff OR updated \u003C :cutoff ;\n",[230,1936,1937,1942],{"__ignoreMap":310},[314,1938,1939],{"class":316,"line":317},[314,1940,1941],{},"UPDATE persons SET address = { street: :street, city: :city } WHERE id == :id ;\n",[314,1943,1944],{"class":316,"line":357},[314,1945,1946],{},"DELETE FROM events WHERE created \u003C :cutoff OR updated \u003C :cutoff ;\n",[223,1948,1949,1950,1953],{},"Values are supplied per execution, keyed by parameter name, so two parameters on the same field stay distinct — ",[230,1951,1952],{},"SET price = :newPrice WHERE price == :oldPrice"," resolves each from its own name. A statement that names a parameter with no value supplied fails, naming it.",[223,1955,1956,1957,1960,1961,1964,1965,1960,1968,1971,1972,1975],{},"Object and array literals are accepted wherever a value is written — ",[230,1958,1959],{},"INSERT ... VALUES"," (see ",[335,1962,1177],{"href":1963},"#inserting-composite-columns",") and ",[230,1966,1967],{},"UPDATE ... SET",[335,1969,1445],{"href":1970},"#updating-composite-columns","). ",[230,1973,1974],{},"WHERE"," conditions take scalar values only.",[290,1977],{},[219,1979,338],{"id":1980},"supported-types",[447,1982,1983,1992],{},[450,1984,1985],{},[453,1986,1987,1990],{},[456,1988,1989],{},"Type",[456,1991,464],{},[466,1993,1994,2004,2014,2024,2034,2044,2054,2064,2074,2084,2094,2104,2119,2133,2142,2152,2165,2175,2185,2200,2209,2219,2229,2239,2249,2259,2269,2279,2289],{},[453,1995,1996,2001],{},[471,1997,1998],{},[230,1999,2000],{},"TEXT",[471,2002,2003],{},"Full-text searchable string; analyzed and tokenized",[453,2005,2006,2011],{},[471,2007,2008],{},[230,2009,2010],{},"KEYWORD",[471,2012,2013],{},"Exact-match string; not tokenized",[453,2015,2016,2021],{},[471,2017,2018],{},[230,2019,2020],{},"KEYWORD NOT INDEXED",[471,2022,2023],{},"Exact-match string; stored but not searchable",[453,2025,2026,2031],{},[471,2027,2028],{},[230,2029,2030],{},"INTEGER",[471,2032,2033],{},"32-bit signed integer",[453,2035,2036,2041],{},[471,2037,2038],{},[230,2039,2040],{},"INTEGER NOT INDEXED",[471,2042,2043],{},"32-bit signed integer; stored but not searchable",[453,2045,2046,2051],{},[471,2047,2048],{},[230,2049,2050],{},"LONG",[471,2052,2053],{},"64-bit signed integer",[453,2055,2056,2061],{},[471,2057,2058],{},[230,2059,2060],{},"LONG NOT INDEXED",[471,2062,2063],{},"64-bit signed integer; stored but not searchable",[453,2065,2066,2071],{},[471,2067,2068],{},[230,2069,2070],{},"FLOAT",[471,2072,2073],{},"32-bit floating-point number",[453,2075,2076,2081],{},[471,2077,2078],{},[230,2079,2080],{},"FLOAT NOT INDEXED",[471,2082,2083],{},"32-bit floating-point number; stored but not searchable",[453,2085,2086,2091],{},[471,2087,2088],{},[230,2089,2090],{},"DOUBLE",[471,2092,2093],{},"64-bit floating-point number",[453,2095,2096,2101],{},[471,2097,2098],{},[230,2099,2100],{},"DOUBLE NOT INDEXED",[471,2102,2103],{},"64-bit floating-point number; stored but not searchable",[453,2105,2106,2111],{},[471,2107,2108],{},[230,2109,2110],{},"BOOLEAN",[471,2112,2113,2115,2116,2118],{},[230,2114,1831],{}," \u002F ",[230,2117,1834],{}," value",[453,2120,2121,2126],{},[471,2122,2123],{},[230,2124,2125],{},"BOOLEAN NOT INDEXED",[471,2127,2128,2115,2130,2132],{},[230,2129,1831],{},[230,2131,1834],{}," value; stored but not searchable",[453,2134,2135,2139],{},[471,2136,2137],{},[230,2138,508],{},[471,2140,2141],{},"ISO 8601 date\u002Fdatetime string",[453,2143,2144,2149],{},[471,2145,2146],{},[230,2147,2148],{},"DATE NOT INDEXED",[471,2150,2151],{},"ISO 8601 date\u002Fdatetime string; stored but not searchable",[453,2153,2154,2158],{},[471,2155,2156],{},[230,2157,1198],{},[471,2159,2160,2161,482],{},"Arbitrary JSON object; leaf values indexed as searchable strings (see ",[335,2162,2164],{"href":2163},"#json-type","JSON type",[453,2166,2167,2172],{},[471,2168,2169],{},[230,2170,2171],{},"JSON NOT INDEXED",[471,2173,2174],{},"Arbitrary JSON object; stored as-is without indexing any sub-fields",[453,2176,2177,2182],{},[471,2178,2179],{},[230,2180,2181],{},"BINARY",[471,2183,2184],{},"Base64-encoded binary data; stored but not searchable",[453,2186,2187,2191],{},[471,2188,2189],{},[230,2190,1191],{},[471,2192,2193,2194,879,2197,482],{},"Geographic point (",[230,2195,2196],{},"lat",[230,2198,2199],{},"lon",[453,2201,2202,2206],{},[471,2203,2204],{},[230,2205,1194],{},[471,2207,2208],{},"Geographic shape (polygon, line, etc.)",[453,2210,2211,2216],{},[471,2212,2213],{},[230,2214,2215],{},"UUID",[471,2217,2218],{},"UUID stored as an exact-match string",[453,2220,2221,2226],{},[471,2222,2223],{},[230,2224,2225],{},"UUID NOT INDEXED",[471,2227,2228],{},"UUID stored as an exact-match string; not searchable",[453,2230,2231,2236],{},[471,2232,2233],{},[230,2234,2235],{},"DECIMAL",[471,2237,2238],{},"Decimal number stored as a 64-bit float",[453,2240,2241,2246],{},[471,2242,2243],{},[230,2244,2245],{},"DECIMAL NOT INDEXED",[471,2247,2248],{},"Decimal number stored as a 64-bit float; not searchable",[453,2250,2251,2256],{},[471,2252,2253],{},[230,2254,2255],{},"OBJECT (...)",[471,2257,2258],{},"Embedded object with declared sub-fields; schema is fixed",[453,2260,2261,2266],{},[471,2262,2263],{},[230,2264,2265],{},"OBJECT (...) NOT INDEXED",[471,2267,2268],{},"Embedded object; stored but sub-fields are not searchable",[453,2270,2271,2276],{},[471,2272,2273],{},[230,2274,2275],{},"NESTED (...)",[471,2277,2278],{},"Array of embedded objects; each element is independently queryable",[453,2280,2281,2286],{},[471,2282,2283],{},[230,2284,2285],{},"UNION (...)",[471,2287,2288],{},"One of several named object variants; all variant fields are merged into a single object",[453,2290,2291,2296],{},[471,2292,2293],{},[230,2294,2295],{},"UNION (...) NOT INDEXED",[471,2297,2298],{},"Union field; stored but not searchable",[223,2300,1297,2301,2304],{},[230,2302,2303],{},"NOT INDEXED"," variant of each type stores the value but excludes it from the search index. This reduces storage and indexing overhead for fields that only need to be returned in results, not queried.",[290,2306],{},[219,2308,2310],{"id":2309},"json-type","JSON Type",[223,2312,1297,2313,2315],{},[230,2314,1198],{}," type stores an entire JSON object as a single field. All leaf values within the object — regardless of nesting depth — are indexed and queryable as strings. This approach avoids requiring a fixed schema for nested data, making it well-suited for semi-structured or dynamic payloads.",[223,2317,2318],{},[301,2319,2320],{},"Key behaviors:",[243,2322,2323,2340,2353],{},[246,2324,2325,2328,2329,2332,2333,879,2336,2339],{},[301,2326,2327],{},"Leaf values are indexed by dot-path."," A field defined as ",[230,2330,2331],{},"metadata JSON"," indexes every leaf value under its dot-path — e.g. ",[230,2334,2335],{},"metadata.version",[230,2337,2338],{},"metadata.source.region"," — as an exact-match string.",[246,2341,2342,2345,2346,879,2348,879,2350,2352],{},[301,2343,2344],{},"All comparisons are string-based."," Even numeric or date values stored inside a JSON field are compared as strings. Use ",[230,2347,2000],{},[230,2349,2030],{},[230,2351,2090],{},", etc. for fields that require numeric or range queries.",[246,2354,2355,2358],{},[301,2356,2357],{},"Dynamic nesting is supported."," The sub-field structure does not need to be declared in the schema — any JSON shape can be stored and its leaf values will be indexed automatically.",[223,2360,2361],{},[301,2362,344],{},[305,2364,2366],{"className":307,"code":2365,"language":309,"meta":310,"style":310},"CREATE TABLE events (\n    id      UUID,\n    ts      DATE,\n    payload JSON\n) ;\n",[230,2367,2368,2373,2378,2383,2388],{"__ignoreMap":310},[314,2369,2370],{"class":316,"line":317},[314,2371,2372],{},"CREATE TABLE events (\n",[314,2374,2375],{"class":316,"line":357},[314,2376,2377],{},"    id      UUID,\n",[314,2379,2380],{"class":316,"line":363},[314,2381,2382],{},"    ts      DATE,\n",[314,2384,2385],{"class":316,"line":369},[314,2386,2387],{},"    payload JSON\n",[314,2389,2390],{"class":316,"line":375},[314,2391,390],{},[223,2393,2394,2395,2398,2399,1677,2402,2405,2406,2409,2410,2413,2414,339],{},"A record with ",[230,2396,2397],{},"payload = {\"source\": {\"region\": \"us-east\"}, \"retries\": 3}"," indexes the leaf values ",[230,2400,2401],{},"payload.source.region",[230,2403,2404],{},"payload.retries",". Note that ",[230,2407,2408],{},"retries"," is indexed as the string ",[230,2411,2412],{},"'3'",", not the number ",[230,2415,2416],{},"3",[223,2418,2419,2420,2422,2423,2425,2426,1680],{},"Migration ",[230,2421,1974],{}," clauses accept only simple column names, so dot-path filtering is not available in ",[230,2424,280],{},"\u002F",[230,2427,285],{},[223,2429,2430,2431,2433],{},"For ",[230,2432,2171],{},", the object is stored and returned in query results but none of its sub-fields can be queried.",[290,2435],{},[219,2437,2439],{"id":2438},"composite-types","Composite Types",[223,2441,2442,2443,2445,2446,2449],{},"OBJECT, NESTED, and UNION allow structured sub-documents to be defined inline. All composite types enforce ",[230,2444,418],{}," on their sub-fields — new sub-fields must be added via ",[230,2447,2448],{},"ALTER TABLE",", not inserted ad-hoc.",[223,2451,2452],{},"Composite types are recursive: OBJECT inside NESTED, NESTED inside OBJECT, and other combinations are all valid.",[1174,2454,1182],{"id":2455},"object",[223,2457,2458],{},"Defines a single embedded object. The sub-fields are stored inline with the parent document.",[223,2460,2461],{},[301,2462,303],{},[305,2464,2466],{"className":307,"code":2465,"language":309,"meta":310,"style":310},"\u003Ccolumn_name> OBJECT (\u003Csub_column> \u003Ctype> [, \u003Csub_column> \u003Ctype>]*) [NOT INDEXED]\n",[230,2467,2468],{"__ignoreMap":310},[314,2469,2470],{"class":316,"line":317},[314,2471,2465],{},[243,2473,2474],{},[246,2475,2476,2478],{},[230,2477,2303],{}," (optional): disables the object. The data is stored but cannot be searched or accessed via field paths.",[223,2480,2481],{},[301,2482,344],{},[305,2484,2486],{"className":307,"code":2485,"language":309,"meta":310,"style":310},"CREATE TABLE persons (\n    id KEYWORD,\n    address OBJECT (street TEXT, city KEYWORD, state KEYWORD, zip KEYWORD)\n);\n\n-- Store but do not index the payload object\nCREATE TABLE events (\n    id KEYWORD,\n    payload OBJECT (raw TEXT, size INTEGER) NOT INDEXED\n);\n",[230,2487,2488,2492,2497,2502,2507,2511,2516,2520,2524,2529],{"__ignoreMap":310},[314,2489,2490],{"class":316,"line":317},[314,2491,1216],{},[314,2493,2494],{"class":316,"line":357},[314,2495,2496],{},"    id KEYWORD,\n",[314,2498,2499],{"class":316,"line":363},[314,2500,2501],{},"    address OBJECT (street TEXT, city KEYWORD, state KEYWORD, zip KEYWORD)\n",[314,2503,2504],{"class":316,"line":369},[314,2505,2506],{},");\n",[314,2508,2509],{"class":316,"line":375},[314,2510,603],{"emptyLinePlaceholder":602},[314,2512,2513],{"class":316,"line":381},[314,2514,2515],{},"-- Store but do not index the payload object\n",[314,2517,2518],{"class":316,"line":387},[314,2519,2372],{},[314,2521,2522],{"class":316,"line":611},[314,2523,2496],{},[314,2525,2526],{"class":316,"line":617},[314,2527,2528],{},"    payload OBJECT (raw TEXT, size INTEGER) NOT INDEXED\n",[314,2530,2531],{"class":316,"line":623},[314,2532,2506],{},[1174,2534,1185],{"id":2535},"nested",[223,2537,2538],{},"Defines an array of embedded objects where each element is independently queryable. Use NESTED instead of OBJECT when the field holds a list of items and you need to query across the list without cross-element matching.",[223,2540,2541],{},[301,2542,303],{},[305,2544,2546],{"className":307,"code":2545,"language":309,"meta":310,"style":310},"\u003Ccolumn_name> NESTED (\u003Csub_column> \u003Ctype> [, \u003Csub_column> \u003Ctype>]*)\n",[230,2547,2548],{"__ignoreMap":310},[314,2549,2550],{"class":316,"line":317},[314,2551,2545],{},[223,2553,2554,2555,339],{},"NESTED does not support ",[230,2556,2303],{},[223,2558,2559],{},[301,2560,344],{},[305,2562,2564],{"className":307,"code":2563,"language":309,"meta":310,"style":310},"CREATE TABLE articles (\n    id KEYWORD,\n    tags NESTED (label TEXT, value KEYWORD)\n);\n",[230,2565,2566,2571,2575,2580],{"__ignoreMap":310},[314,2567,2568],{"class":316,"line":317},[314,2569,2570],{},"CREATE TABLE articles (\n",[314,2572,2573],{"class":316,"line":357},[314,2574,2496],{},[314,2576,2577],{"class":316,"line":363},[314,2578,2579],{},"    tags NESTED (label TEXT, value KEYWORD)\n",[314,2581,2582],{"class":316,"line":369},[314,2583,2506],{},[1174,2585,1188],{"id":2586},"union",[223,2588,2589],{},"Defines a field that can hold one of several named object variants. All variant fields are merged into a single flat object. Fields that appear in multiple variants must have the same type.",[223,2591,2592],{},[301,2593,303],{},[305,2595,2597],{"className":307,"code":2596,"language":309,"meta":310,"style":310},"\u003Ccolumn_name> UNION (\n    \u003CVariantName> (\u003Csub_column> \u003Ctype> [, \u003Csub_column> \u003Ctype>]*) [, ...]\n) [NOT INDEXED]\n",[230,2598,2599,2604,2609],{"__ignoreMap":310},[314,2600,2601],{"class":316,"line":317},[314,2602,2603],{},"\u003Ccolumn_name> UNION (\n",[314,2605,2606],{"class":316,"line":357},[314,2607,2608],{},"    \u003CVariantName> (\u003Csub_column> \u003Ctype> [, \u003Csub_column> \u003Ctype>]*) [, ...]\n",[314,2610,2611],{"class":316,"line":363},[314,2612,2613],{},") [NOT INDEXED]\n",[243,2615,2616,2621],{},[246,2617,2618,2620],{},[230,2619,2303],{}," (optional): disables the merged object.",[246,2622,2623,2624,2627],{},"Include a shared discriminator field (e.g. ",[230,2625,2626],{},"kind KEYWORD",") in each variant so application code can identify which variant it received.",[223,2629,2630],{},[301,2631,344],{},[305,2633,2635],{"className":307,"code":2634,"language":309,"meta":310,"style":310},"CREATE TABLE assets (\n    id KEYWORD,\n    item UNION (\n        Book  (kind KEYWORD, title TEXT, isbn KEYWORD),\n        Video (kind KEYWORD, title TEXT, duration INTEGER)\n    )\n);\n",[230,2636,2637,2642,2646,2651,2656,2661,2666],{"__ignoreMap":310},[314,2638,2639],{"class":316,"line":317},[314,2640,2641],{},"CREATE TABLE assets (\n",[314,2643,2644],{"class":316,"line":357},[314,2645,2496],{},[314,2647,2648],{"class":316,"line":363},[314,2649,2650],{},"    item UNION (\n",[314,2652,2653],{"class":316,"line":369},[314,2654,2655],{},"        Book  (kind KEYWORD, title TEXT, isbn KEYWORD),\n",[314,2657,2658],{"class":316,"line":375},[314,2659,2660],{},"        Video (kind KEYWORD, title TEXT, duration INTEGER)\n",[314,2662,2663],{"class":316,"line":381},[314,2664,2665],{},"    )\n",[314,2667,2668],{"class":316,"line":387},[314,2669,2506],{},[223,2671,2672,2673,2676,2677,879,2680,879,2683,1195,2686,339],{},"The resulting ",[230,2674,2675],{},"item"," field is a single object with properties ",[230,2678,2679],{},"kind",[230,2681,2682],{},"title",[230,2684,2685],{},"isbn",[230,2687,2688],{},"duration",[640,2690,2692,2698],{"type":2691},"warning",[223,2693,2694,2697],{},[301,2695,2696],{},"Limitation: shared OBJECT\u002FNESTED\u002FUNION fields across variants."," If two variants declare a field with the same name and the same composite type (OBJECT, NESTED, or UNION), only the first variant's sub-field definitions are used. The second variant's sub-fields are silently dropped. Conflict detection only applies to scalar types — it will not throw if two same-named OBJECT fields have different sub-structures.",[223,2699,2700,2701,2703],{},"To avoid this, ensure that any field shared across variants with a composite type has identical sub-fields in every variant. Scalar shared fields (such as a ",[230,2702,2626],{}," discriminator) are always safe.",[290,2705],{},[219,2707,1415],{"id":2708},"expressions",[223,2710,2711,2712,2714],{},"Expressions appear on the right of an ",[230,2713,1967],{}," assignment.",[243,2716,2717,2746,2753],{},[246,2718,2719,2721,2722,2724,2725,879,2728,879,2731,879,2734,879,2736,879,2738,879,2740,879,2743],{},[301,2720,1738],{}," any form in ",[335,2723,1118],{"href":1117}," — ",[230,2726,2727],{},"'string'",[230,2729,2730],{},"123",[230,2732,2733],{},"12.5",[230,2735,1812],{},[230,2737,1831],{},[230,2739,1834],{},[230,2741,2742],{},"{ ... }",[230,2744,2745],{},"[ ... ]",[246,2747,2748,1715,2751],{},[301,2749,2750],{},"Parameters:",[230,2752,1122],{},[246,2754,2755,1715,2758,879,2761,2764],{},[301,2756,2757],{},"Binary Expressions:",[230,2759,2760],{},"\u003Cfield> + \u003Cvalue>",[230,2762,2763],{},"\u003Cfield> - \u003Cvalue>",", etc.",[223,2766,2767],{},"A binary expression reads the named field from the stored document, so its operands are scalars; object and array literals are only meaningful as a whole value.",[290,2769],{},[219,2771,2773],{"id":2772},"reserved-keywords","Reserved Keywords",[223,2775,2776,2777,879,2779,1195,2781,2783,2784,2787],{},"The literals ",[230,2778,1831],{},[230,2780,1834],{},[230,2782,1126],{}," are lowercase and reserved — they cannot be used as an identifier, though an object literal can carry such a field name as a quoted key (",[230,2785,2786],{},"{ 'null': 1 }","). All other keywords are uppercase:",[223,2789,2790,879,2792,879,2795,879,2798,879,2801,879,2803,879,2805,879,2807,879,2810,879,2813,879,2815,879,2818,879,2821,879,2823,879,2825,879,2827,879,2829,879,2831,879,2834,879,2836,879,2839,879,2842,879,2844,879,2846,879,2849,879,2852,879,2855,879,2857,879,2859,879,2862,879,2864,879,2866,879,2868,879,2870,879,2872,879,2875,879,2877,879,2879,879,2881,879,2884,879,2886,879,2888,879,2890,879,2892,879,2894,879,2896,879,2898,879,2900,879,2902,879,2905,879,2908,879,2911,879,2913,879,2915,879,2917,879,2919,879,2921,879,2923,879,2926,879,2928,879,2931,879,2933,879,2935,879,2938],{},[230,2791,878],{},[230,2793,2794],{},"ADD",[230,2796,2797],{},"ALTER",[230,2799,2800],{},"AND",[230,2802,910],{},[230,2804,2181],{},[230,2806,2110],{},[230,2808,2809],{},"COLUMN",[230,2811,2812],{},"COMPONENT",[230,2814,873],{},[230,2816,2817],{},"CREATE",[230,2819,2820],{},"DATA",[230,2822,475],{},[230,2824,508],{},[230,2826,2235],{},[230,2828,285],{},[230,2830,2090],{},[230,2832,2833],{},"EXISTS",[230,2835,2070],{},[230,2837,2838],{},"FOR",[230,2840,2841],{},"FROM",[230,2843,1191],{},[230,2845,1194],{},[230,2847,2848],{},"IF",[230,2850,2851],{},"INDEX",[230,2853,2854],{},"INDEXED",[230,2856,275],{},[230,2858,2030],{},[230,2860,2861],{},"INTO",[230,2863,1198],{},[230,2865,2010],{},[230,2867,2050],{},[230,2869,892],{},[230,2871,1185],{},[230,2873,2874],{},"NOT",[230,2876,716],{},[230,2878,703],{},[230,2880,1182],{},[230,2882,2883],{},"OR",[230,2885,882],{},[230,2887,950],{},[230,2889,1085],{},[230,2891,270],{},[230,2893,963],{},[230,2895,1602],{},[230,2897,921],{},[230,2899,905],{},[230,2901,934],{},[230,2903,2904],{},"STREAM",[230,2906,2907],{},"TABLE",[230,2909,2910],{},"TEMPLATE",[230,2912,2000],{},[230,2914,502],{},[230,2916,981],{},[230,2918,984],{},[230,2920,1188],{},[230,2922,280],{},[230,2924,2925],{},"USING",[230,2927,2215],{},[230,2929,2930],{},"VALUES",[230,2932,976],{},[230,2934,1974],{},[230,2936,2937],{},"WITH",[230,2939,994],{},[2941,2942,2943],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":310,"searchDepth":357,"depth":357,"links":2945},[2946,2947,2948,2949,2950,2951,2952,2953,2958,2961,2962,2963,2964,2965,2966,2967,2972,2973],{"id":221,"depth":357,"text":25},{"id":240,"depth":357,"text":241},{"id":294,"depth":357,"text":250},{"id":395,"depth":357,"text":255},{"id":660,"depth":357,"text":260},{"id":778,"depth":357,"text":265},{"id":832,"depth":357,"text":270},{"id":1053,"depth":357,"text":275,"children":2954},[2955,2956],{"id":1176,"depth":363,"text":1177},{"id":1296,"depth":363,"text":2957},"The id column",{"id":1376,"depth":357,"text":280,"children":2959},[2960],{"id":1444,"depth":363,"text":1445},{"id":1608,"depth":357,"text":285},{"id":1649,"depth":357,"text":288},{"id":1670,"depth":357,"text":1671},{"id":1766,"depth":357,"text":1118},{"id":1980,"depth":357,"text":338},{"id":2309,"depth":357,"text":2310},{"id":2438,"depth":357,"text":2439,"children":2968},[2969,2970,2971],{"id":2455,"depth":363,"text":1182},{"id":2535,"depth":363,"text":1185},{"id":2586,"depth":363,"text":1188},{"id":2708,"depth":357,"text":1415},{"id":2772,"depth":357,"text":2773},"Complete SQL grammar reference for migration scripts.","md",null,{},{"icon":60},{"title":139,"description":2974},"VMmIJJqPl4juP-PTvQAhZhbdYfJKpT9-LpRqrPywNtg",[2982,2984],{"title":134,"path":135,"stem":136,"description":2983,"icon":137,"children":-1},"Complete reference for all Kinotic decorators.",{"title":148,"path":149,"stem":150,"description":2985,"icon":151,"children":-1},"High-level architecture of the Kinotic OS platform.",1788549867021]