diff --git a/README.md b/README.md
index 691f10d9..71d7ec1e 100644
--- a/README.md
+++ b/README.md
@@ -55,6 +55,25 @@ Raise a [GH issue](https://github.com/questdb/documentation/issues/new/choose) o
## Syntax
+### Railroad diagrams
+
+Our SQL syntax diagrams are created using Railroad.
+
+To create a diagram, use the [Railroad online editor](https://www.bottlecaps.de/rr/ui) to see it rendered.
+
+Once you're happy with it, copy the Railroad syntax and add it to the `static/images/docs/diagrams/.railroad` file.
+
+Next, run the `scripts/railroad.py` script to generate the SVG image.
+
+During its final output, a markdown image with the appropriate syntax is printed.
+
+Copy this syntax and paste it into the markdown file where you want the diagram to appear.
+
+The script requires:
+
+* Java (to run the `rr.war` file)
+* Python (to execute the `railroad.py` script)
+
### Math Expressions
Use LaTeX-style math between `$` for inline or `$$` for block equations:
diff --git a/rr.war b/rr.war
new file mode 100644
index 00000000..f8ea760a
Binary files /dev/null and b/rr.war differ
diff --git a/scripts/railroad.py b/scripts/railroad.py
new file mode 100644
index 00000000..b4733ec0
--- /dev/null
+++ b/scripts/railroad.py
@@ -0,0 +1,217 @@
+import os
+import subprocess
+import re
+from pathlib import Path
+
+PROJECT_ROOT = Path(os.getcwd())
+RR_WAR_PATH = PROJECT_ROOT / "rr.war"
+INPUT_FILE = PROJECT_ROOT / "static/images/docs/diagrams/.railroad"
+OUTPUT_DIR = PROJECT_ROOT / "static/images/docs/diagrams"
+
+print(f"Current working directory: {PROJECT_ROOT}")
+print(f"RR.war path: {RR_WAR_PATH}")
+print(f"Checking if input file exists: {INPUT_FILE.exists()}")
+print(f"Checking if output dir exists: {OUTPUT_DIR.exists()}")
+print(f"Checking if rr.war exists: {RR_WAR_PATH.exists()}")
+
+# Custom CSS style to inject
+CUSTOM_STYLE = '''
+
+'''
+
+def extract_diagrams(file_path):
+ """Extract diagram definitions from the input file."""
+ diagrams = {}
+ current_name = None
+ current_definition = []
+
+ print(f"Reading from file: {file_path}")
+ with open(file_path, 'r') as f:
+ previous_line = ""
+ for line in f:
+ line = line.rstrip()
+
+ if not line or line.startswith('#'):
+ previous_line = ""
+ continue
+
+ if '::=' in line:
+ if previous_line and not previous_line.startswith('-'):
+ if current_name and current_definition:
+ diagrams[current_name] = '\n'.join(current_definition)
+
+ current_name = previous_line.strip()
+ current_definition = [f"{current_name} {line.strip()}"]
+ print(f"Found diagram: {current_name}")
+
+ elif current_name and line:
+ current_definition.append(line)
+
+ previous_line = line
+
+ if current_name and current_definition:
+ diagrams[current_name] = '\n'.join(current_definition)
+
+ print(f"\nFound {len(diagrams)} diagrams: {sorted(diagrams.keys())}")
+
+ if diagrams:
+ first_key = sorted(diagrams.keys())[0]
+ print(f"\nFirst diagram '{first_key}' content:")
+ print(diagrams[first_key])
+
+ return diagrams
+
+def generate_svg(name, definition, temp_dir):
+ """Generate SVG for a single diagram definition."""
+ temp_grammar = temp_dir / f"{name}.grammar"
+ temp_grammar.write_text(definition)
+ print(f"Created temporary grammar file: {temp_grammar}")
+
+ output_path = OUTPUT_DIR / f"{name}.svg"
+ command = [
+ "java", "-jar", str(RR_WAR_PATH),
+ "-suppressebnf",
+ f"-out:{output_path}",
+ str(temp_grammar)
+ ]
+ print(f"Executing command: {' '.join(command)}")
+
+ result = subprocess.run(command, capture_output=True, text=True)
+ if result.returncode != 0:
+ print(f"Error output: {result.stderr}")
+ raise Exception(f"Failed to generate SVG: {result.stderr}")
+
+ print(f"Generated SVG at: {output_path}")
+ return output_path
+
+def inject_custom_style(svg_path):
+ """Extract SVG content, normalize it, and inject custom CSS style."""
+ with open(svg_path, 'r') as f:
+ content = f.read()
+
+ svg_match = re.search(r'', content, re.DOTALL)
+ if not svg_match:
+ print(f"Warning: No diagram SVG found in {svg_path}")
+ return
+
+ width_match = re.search(r'width="([^"]*)"', svg_match.group(0))
+ height_match = re.search(r'height="([^"]*)"', svg_match.group(0))
+
+ if not width_match or not height_match:
+ print(f"Warning: Missing width or height in {svg_path}")
+ return
+
+ # Create the new SVG with proper opening tag and our style
+ new_svg = f'''"
+
+ with open(svg_path, 'w') as f:
+ f.write(final_svg)
+
+def main():
+ temp_dir = PROJECT_ROOT / "temp_grammar"
+ temp_dir.mkdir(exist_ok=True)
+ print(f"Created temp directory: {temp_dir}")
+
+ markdown_syntax_list = []
+
+ try:
+ diagrams = extract_diagrams(INPUT_FILE)
+
+ for name, definition in diagrams.items():
+ print(f"\nProcessing diagram: {name}")
+
+ output_path = OUTPUT_DIR / f"{name}.svg"
+ if output_path.exists():
+ print(f"Skipping existing diagram: {name}")
+ continue
+
+ try:
+ svg_path = generate_svg(name, definition, temp_dir)
+
+ inject_custom_style(svg_path)
+
+ print(f"Successfully generated: {name}.svg")
+
+ markdown_syntax_list.append(f"![Diagram for {name}](/images/docs/diagrams/{name}.svg)")
+
+ except Exception as e:
+ print(f"Error processing {name}: {str(e)}")
+
+ finally:
+ print("\nCleaning up...")
+ for file in temp_dir.glob("*.grammar"):
+ print(f"Removing temporary file: {file}")
+ file.unlink()
+ temp_dir.rmdir()
+ print("Cleanup complete")
+
+ if markdown_syntax_list:
+ print("\nCopy the image syntax below and paste it into your markdown file:")
+ for syntax in markdown_syntax_list:
+ print(syntax)
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/src/internals/ssr.template.js b/src/internals/ssr.template.js
index c0d04d37..8bc83fa9 100644
--- a/src/internals/ssr.template.js
+++ b/src/internals/ssr.template.js
@@ -10,11 +10,11 @@ module.exports = ({ customFields, favicon, organizationName, url }) => `
-
-
-
-
-
+
+
+
+
+
<%~ it.headTags %>
<% it.metaAttributes.forEach((metaAttribute) => { %>
<%~ metaAttribute %>
diff --git a/static/images/docs/diagrams/.railroad b/static/images/docs/diagrams/.railroad
index bd7d32f0..8bb2c781 100644
--- a/static/images/docs/diagrams/.railroad
+++ b/static/images/docs/diagrams/.railroad
@@ -1,7 +1,8 @@
-# this file contains the grammar used to generate railroad diagrams.
-# they are used to visualize QuestDB syntax in documentation.
-# to learn how to create or edit these diagrams, please see this (private!) document:
-# https://questdb.slab.com/posts/how-to-do-railroad-diagrams-he6wsuc0
+# Add new syntax to this file to generate railroad diagrams
+# Run `scripts/railroad.py`.
+# Link using `![Diagram](/images/docs/diagrams/.railroad/diagramName.svg)`
+# Will take file name from first line
+# Then syntax from following lines
alterUser
::= 'ALTER' 'USER' userName ( 'ENABLE' | 'DISABLE' | 'WITH' ('NO' 'PASSWORD' | 'PASSWORD' password )
@@ -255,7 +256,7 @@ addIndex
dropIndex
::= 'ALTER' 'TABLE' tableName 'ALTER' 'COLUMN' columnName 'DROP' 'INDEX'
-(no)cachColumn
+noCacheColumn
::= 'ALTER' 'TABLE' tableName 'ALTER' 'COLUMN' columnName ( 'NOCACHE' | 'CACHE' )
dropColumn
diff --git a/static/images/docs/diagrams/InnerLeftJoin.svg b/static/images/docs/diagrams/InnerLeftJoin.svg
index 7318e4bf..75cf443c 100644
--- a/static/images/docs/diagrams/InnerLeftJoin.svg
+++ b/static/images/docs/diagrams/InnerLeftJoin.svg
@@ -1,79 +1,82 @@
-
\ No newline at end of file
diff --git a/static/images/docs/diagrams/aAsofLtSpliceJoin.svg b/static/images/docs/diagrams/aAsofLtSpliceJoin.svg
new file mode 100644
index 00000000..e2da6f38
--- /dev/null
+++ b/static/images/docs/diagrams/aAsofLtSpliceJoin.svg
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+ ASOF
+
+
+ LT
+
+
+ SPLICE
+
+
+ JOIN
+
+
+ table
+
+ (
+
+
+ sub-query
+
+ )
+
+
+ ON
+
+
+ column
+
+ =
+
+
+ anotherColumn
+
+ AND
+
+
+ (
+
+
+ column
+
+ ,
+
+
+ )
+
+
+ crossJoin
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/addColumn.svg b/static/images/docs/diagrams/addColumn.svg
new file mode 100644
index 00000000..d8ecbd0d
--- /dev/null
+++ b/static/images/docs/diagrams/addColumn.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+ ADD
+
+
+ COLUMN
+
+
+ columnName
+
+
+ typeDef
+
+ ,
+
+
+ OWNED
+
+
+ BY
+
+
+ ownerName
+
+
+ alterColumnType
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/addIndex.svg b/static/images/docs/diagrams/addIndex.svg
new file mode 100644
index 00000000..229c7998
--- /dev/null
+++ b/static/images/docs/diagrams/addIndex.svg
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+ ALTER
+
+
+ COLUMN
+
+
+ columnName
+
+ ADD
+
+
+ INDEX
+
+
+ dropIndex
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/assignServiceAccount.svg b/static/images/docs/diagrams/assignServiceAccount.svg
new file mode 100644
index 00000000..708011d3
--- /dev/null
+++ b/static/images/docs/diagrams/assignServiceAccount.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+ ASSIGN
+
+
+ SERVICE
+
+
+ ACCOUNT
+
+
+ serviceAccount
+
+ TO
+
+
+ userOrGroup
+
+ ,
+
+
+ unassignServiceAccount
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/attachPartition.svg b/static/images/docs/diagrams/attachPartition.svg
new file mode 100644
index 00000000..7f461f4c
--- /dev/null
+++ b/static/images/docs/diagrams/attachPartition.svg
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+ ALTER
+
+
+ TABLE
+
+
+ tableName
+
+ ATTACH
+
+
+ PARTITION
+
+
+ LIST
+
+
+ partitionName
+
+ ,
+
+
+ detachPartition
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/booleanWhere.svg b/static/images/docs/diagrams/booleanWhere.svg
new file mode 100644
index 00000000..57b4f9cb
--- /dev/null
+++ b/static/images/docs/diagrams/booleanWhere.svg
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ NOT
+
+
+ columnName
+
+
+ timestampExact
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/complexWhere.svg b/static/images/docs/diagrams/complexWhere.svg
new file mode 100644
index 00000000..c1eafc0a
--- /dev/null
+++ b/static/images/docs/diagrams/complexWhere.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ (
+
+
+ AND
+
+
+ OR
+
+
+ NOT
+
+
+ boolean
+
+ )
+
+
+ booleanWhere
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/createTableDef.svg b/static/images/docs/diagrams/createTableDef.svg
new file mode 100644
index 00000000..c8c009ff
--- /dev/null
+++ b/static/images/docs/diagrams/createTableDef.svg
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+ CREATE
+
+
+ TABLE
+
+
+ IF
+
+
+ NOT
+
+
+ EXISTS
+
+
+ tableName
+
+ (
+
+
+ columnName
+
+
+ typeDef
+
+ ,
+
+
+ )
+
+
+ AS
+
+
+ (
+
+
+ selectSql
+
+ )
+
+
+ ,
+
+
+ castDef
+
+ ,
+
+
+ indexDef
+
+ timestamp
+
+
+ (
+
+
+ columnRef
+
+ )
+
+
+ PARTITION
+
+
+ BY
+
+
+ NONE
+
+
+ BYPASS
+
+
+ WAL
+
+
+ YEAR
+
+
+ MONTH
+
+
+ DAY
+
+
+ HOUR
+
+
+ BYPASS
+
+
+ WAL
+
+
+ WITH
+
+
+ tableParameter
+
+
+ tableTargetVolumeDef
+
+ OWNED
+
+
+ BY
+
+
+ ownerName
+
+
+ createTableLike
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/createTableTimestamp.svg b/static/images/docs/diagrams/createTableTimestamp.svg
new file mode 100644
index 00000000..930f3b35
--- /dev/null
+++ b/static/images/docs/diagrams/createTableTimestamp.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+ CREATE
+
+
+ someCreateTableStatement
+
+ timestamp
+
+
+ (
+
+
+ columnName
+
+ )
+
+
+ createTableWithCommitParams
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/createTableWithCommitParams.svg b/static/images/docs/diagrams/createTableWithCommitParams.svg
new file mode 100644
index 00000000..a002591a
--- /dev/null
+++ b/static/images/docs/diagrams/createTableWithCommitParams.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+ WITH
+
+
+ maxUncommittedRows
+
+
+ =
+
+
+ rowCount
+
+ ,
+
+
+ commitLag
+
+
+ =
+
+
+ n
+
+ us
+
+
+ s
+
+
+ m
+
+
+ h
+
+
+ d
+
+
+ createTableWithMaxRowParams
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/createTableWithMaxRowParams.svg b/static/images/docs/diagrams/createTableWithMaxRowParams.svg
new file mode 100644
index 00000000..4fece1e5
--- /dev/null
+++ b/static/images/docs/diagrams/createTableWithMaxRowParams.svg
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+ WITH
+
+
+ maxUncommittedRows
+
+
+ =
+
+
+ rowCount
+
+
+ dynamicTimestamp
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/detachPartition.svg b/static/images/docs/diagrams/detachPartition.svg
new file mode 100644
index 00000000..435c3192
--- /dev/null
+++ b/static/images/docs/diagrams/detachPartition.svg
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+ ALTER
+
+
+ TABLE
+
+
+ tableName
+
+ DETACH
+
+
+ PARTITION
+
+
+ LIST
+
+
+ partitionName
+
+ ,
+
+
+ WHERE
+
+
+ timestampColumn
+
+ =
+
+
+ >
+
+
+ <
+
+
+ >=
+
+
+ <=
+
+
+ '
+
+
+ timestamp
+
+ '
+
+
+ IN
+
+
+ (
+
+
+ timestamp
+
+ ,
+
+
+ )
+
+
+ squashPartitions
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/dropColumn.svg b/static/images/docs/diagrams/dropColumn.svg
new file mode 100644
index 00000000..f4c124b8
--- /dev/null
+++ b/static/images/docs/diagrams/dropColumn.svg
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+ DROP
+
+
+ COLUMN
+
+
+ columnName
+
+ ,
+
+
+ :
+
+
+ addColumn
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/dropIndex.svg b/static/images/docs/diagrams/dropIndex.svg
new file mode 100644
index 00000000..4729b196
--- /dev/null
+++ b/static/images/docs/diagrams/dropIndex.svg
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+ ALTER
+
+
+ TABLE
+
+
+ tableName
+
+ ALTER
+
+
+ COLUMN
+
+
+ columnName
+
+ DROP
+
+
+ INDEX
+
+
+ no
+
+
+ cachColumn
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/dropPartition.svg b/static/images/docs/diagrams/dropPartition.svg
new file mode 100644
index 00000000..e5eb0e8b
--- /dev/null
+++ b/static/images/docs/diagrams/dropPartition.svg
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+ DROP
+
+
+ PARTITION
+
+
+ LIST
+
+
+ partitionName
+
+ ,
+
+
+ removeUser
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/exactStringOrSymbolSearch.svg b/static/images/docs/diagrams/exactStringOrSymbolSearch.svg
new file mode 100644
index 00000000..95b60cdb
--- /dev/null
+++ b/static/images/docs/diagrams/exactStringOrSymbolSearch.svg
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ column
+
+ =
+
+
+ '
+
+
+ string
+
+ '
+
+
+ regexMatch
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/fromTo.svg b/static/images/docs/diagrams/fromTo.svg
new file mode 100644
index 00000000..d456a661
--- /dev/null
+++ b/static/images/docs/diagrams/fromTo.svg
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+ someSampleBySelectQuery...
+
+ FROM
+
+
+ lowerBound
+
+ TO
+
+
+ upperBound
+
+ TO
+
+
+ upperBound
+
+
+ alignToCalTimeZone
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/grantAssume.svg b/static/images/docs/diagrams/grantAssume.svg
new file mode 100644
index 00000000..b6a97b06
--- /dev/null
+++ b/static/images/docs/diagrams/grantAssume.svg
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+ GRANT
+
+
+ ASSUME
+
+
+ SERVICE
+
+
+ ACCOUNT
+
+
+ serviceAccount
+
+ TO
+
+
+ entityName
+
+ WITH
+
+
+ GRANT
+
+
+ OPTION
+
+
+ revokeAssume
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/influxLineProtocolOverTCP.svg b/static/images/docs/diagrams/influxLineProtocolOverTCP.svg
new file mode 100644
index 00000000..3e0eab89
--- /dev/null
+++ b/static/images/docs/diagrams/influxLineProtocolOverTCP.svg
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+ user_1
+
+
+ user_2
+
+ ...
+
+
+ TCP requests
+
+
+ network_IO_thread
+
+ write_queue
+
+
+ worker_1
+
+ write
+
+
+ table_1
+
+
+ table_2
+
+ ...
+
+
+ worker_2
+
+ write
+
+
+ table_3
+
+
+ table_4
+
+ ...
+
+
+ influxLineProtocolOverTCPLoadRebalance
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/influxLineProtocolOverTCPLoadRebalance.svg b/static/images/docs/diagrams/influxLineProtocolOverTCPLoadRebalance.svg
new file mode 100644
index 00000000..3e160448
--- /dev/null
+++ b/static/images/docs/diagrams/influxLineProtocolOverTCPLoadRebalance.svg
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+ Launch_Load_Balancing_Job
+
+ IF
+
+
+ load_ratio
+
+ >
+
+
+ max.load.ratio
+
+
+ Rebalance_Load
+
+ n.updates.per.load.balance
+
+
+ <
+
+
+ updates_since_last_rebalance
+
+ maintenance.job.interval
+
+
+ <
+
+
+ time_since_last_rebalance
+
+ IF
+
+
+ joinOverview
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/insertCommitLagInto.svg b/static/images/docs/diagrams/insertCommitLagInto.svg
new file mode 100644
index 00000000..e5df00ba
--- /dev/null
+++ b/static/images/docs/diagrams/insertCommitLagInto.svg
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+ INSERT
+
+
+ batch
+
+
+ batchCount
+
+ commitLag
+
+
+ n
+
+ us
+
+
+ s
+
+
+ m
+
+
+ h
+
+
+ d
+
+
+ INTO
+
+
+ tableName
+
+ (
+
+
+ columnName
+
+ ,
+
+
+ )
+
+
+ VALUES
+
+
+ (
+
+
+ value
+
+ ,
+
+
+ )
+
+
+ ,
+
+
+ SELECT
+
+
+ queryDef
+
+
+ mainQuery
+
+ ;
+
+
+ withAsInsertCommitLag
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/insertInto.svg b/static/images/docs/diagrams/insertInto.svg
new file mode 100644
index 00000000..a97e2764
--- /dev/null
+++ b/static/images/docs/diagrams/insertInto.svg
@@ -0,0 +1,90 @@
+
+
+
+
+
+
+
+
+ INSERT
+
+
+ batch
+
+
+ batchCount
+
+ INTO
+
+
+ tableName
+
+ (
+
+
+ columnName
+
+ ,
+
+
+ )
+
+
+ VALUES
+
+
+ (
+
+
+ value
+
+ ,
+
+
+ )
+
+
+ ,
+
+
+ SELECT
+
+
+ queryDef
+
+
+ mainQuery
+
+ ;
+
+
+ withAsInsert
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/latestBy.svg b/static/images/docs/diagrams/latestBy.svg
new file mode 100644
index 00000000..44b13f72
--- /dev/null
+++ b/static/images/docs/diagrams/latestBy.svg
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+
+ SELECT
+
+
+ columnName
+
+ ,
+
+
+ FROM
+
+
+ tableName
+
+ LATEST
+
+
+ ON
+
+
+ (
+
+
+ columnName
+
+ )
+
+
+ PARTITION
+
+
+ BY
+
+
+ columnName
+
+ ,
+
+
+ latestByDeprecated
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/listMatch.svg b/static/images/docs/diagrams/listMatch.svg
new file mode 100644
index 00000000..32c94050
--- /dev/null
+++ b/static/images/docs/diagrams/listMatch.svg
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ NOT
+
+
+ columnName
+
+ in
+
+
+ (
+
+
+ string
+
+ ,
+
+
+ )
+
+
+ whereNumericValue
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/noCacheColumn.svg b/static/images/docs/diagrams/noCacheColumn.svg
new file mode 100644
index 00000000..05145f27
--- /dev/null
+++ b/static/images/docs/diagrams/noCacheColumn.svg
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+ ALTER
+
+
+ TABLE
+
+
+ tableName
+
+ ALTER
+
+
+ COLUMN
+
+
+ columnName
+
+ NOCACHE
+
+
+ CACHE
+
+
+ dropColumn
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/regexMatch.svg b/static/images/docs/diagrams/regexMatch.svg
new file mode 100644
index 00000000..50534d65
--- /dev/null
+++ b/static/images/docs/diagrams/regexMatch.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ ~=
+
+
+ (
+
+
+ column
+
+ ;
+
+
+ regex
+
+ )
+
+
+ listMatch
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/reindexTable.svg b/static/images/docs/diagrams/reindexTable.svg
new file mode 100644
index 00000000..fed55116
--- /dev/null
+++ b/static/images/docs/diagrams/reindexTable.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ REINDEX
+
+
+ TABLE
+
+
+ tableName
+
+ COLUMN
+
+
+ columnName
+
+ PARTITION
+
+
+ partitionName
+
+ LOCK
+
+
+ EXCLUSIVE
+
+
+ renameColumn
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/renameColumn.svg b/static/images/docs/diagrams/renameColumn.svg
new file mode 100644
index 00000000..602ff26b
--- /dev/null
+++ b/static/images/docs/diagrams/renameColumn.svg
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+ RENAME
+
+
+ COLUMN
+
+
+ columnName
+
+ TO
+
+
+ newColumnName
+
+
+ attachPartition
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/resumeWal.svg b/static/images/docs/diagrams/resumeWal.svg
new file mode 100644
index 00000000..0e2fa5c2
--- /dev/null
+++ b/static/images/docs/diagrams/resumeWal.svg
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+ RESUME
+
+
+ WAL
+
+
+ FROM
+
+
+ TRANSACTION
+
+
+ TXN
+
+
+ sequencerTxn
+
+
+ setType
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/revokeAssume.svg b/static/images/docs/diagrams/revokeAssume.svg
new file mode 100644
index 00000000..460390e7
--- /dev/null
+++ b/static/images/docs/diagrams/revokeAssume.svg
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+ REVOKE
+
+
+ ASSUME
+
+
+ SERVICE
+
+
+ ACCOUNT
+
+
+ serviceAccount
+
+ FROM
+
+
+ entityName
+
+
+ groupBy
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/setParam.svg b/static/images/docs/diagrams/setParam.svg
new file mode 100644
index 00000000..e12e7a60
--- /dev/null
+++ b/static/images/docs/diagrams/setParam.svg
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+
+
+ SET
+
+
+ PARAM
+
+
+ maxUncommittedRows
+
+
+ =
+
+
+ n
+
+
+ setParamCommitLag
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/setParamCommitLag.svg b/static/images/docs/diagrams/setParamCommitLag.svg
new file mode 100644
index 00000000..a1d9358f
--- /dev/null
+++ b/static/images/docs/diagrams/setParamCommitLag.svg
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+ SET
+
+
+ PARAM
+
+
+ maxUncommittedRows
+
+
+ =
+
+
+ n
+
+ commitLag
+
+
+ =
+
+
+ n
+
+ us
+
+
+ s
+
+
+ m
+
+
+ h
+
+
+ d
+
+
+ vacuumTable
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/squashPartitions.svg b/static/images/docs/diagrams/squashPartitions.svg
new file mode 100644
index 00000000..966f8b8f
--- /dev/null
+++ b/static/images/docs/diagrams/squashPartitions.svg
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+ SQUASH
+
+
+ PARTITIONS
+
+
+ tableName
+
+ ;
+
+
+ setParam
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/timestampExact.svg b/static/images/docs/diagrams/timestampExact.svg
new file mode 100644
index 00000000..4d0155ac
--- /dev/null
+++ b/static/images/docs/diagrams/timestampExact.svg
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ column
+
+ =
+
+
+ timestamp
+
+
+ timestampPartial
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/timestampExplicitRange.svg b/static/images/docs/diagrams/timestampExplicitRange.svg
new file mode 100644
index 00000000..174f9090
--- /dev/null
+++ b/static/images/docs/diagrams/timestampExplicitRange.svg
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ timestamp
+
+ IN
+
+
+ (
+
+
+ lower_bound
+
+ ,
+
+
+ upper_bound
+
+ )
+
+
+ unionExceptIntersect
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/timestampInSearch.svg b/static/images/docs/diagrams/timestampInSearch.svg
new file mode 100644
index 00000000..0d6eb84a
--- /dev/null
+++ b/static/images/docs/diagrams/timestampInSearch.svg
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ timestampColumn
+
+ IN
+
+
+ (
+
+
+ 'timestamp1'
+
+
+ ;
+
+
+ 'timestamp2'
+
+
+ )
+
+
+ exactStringOrSymbolSearch
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/timestampIntervalSearch.svg b/static/images/docs/diagrams/timestampIntervalSearch.svg
new file mode 100644
index 00000000..9d0d3287
--- /dev/null
+++ b/static/images/docs/diagrams/timestampIntervalSearch.svg
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ timestampColumn
+
+ IN
+
+
+ '
+
+
+ timestamp
+
+ ;
+
+
+ multiplier
+
+
+ s
+
+
+ m
+
+
+ h
+
+
+ d
+
+
+ M
+
+
+ y
+
+ ;
+
+
+ occurrence
+
+
+ s
+
+
+ m
+
+
+ h
+
+
+ d
+
+
+ M
+
+
+ y
+
+ ;
+
+
+ repetition
+
+ '
+
+
+ timestampInSearch
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/timestampPartial.svg b/static/images/docs/diagrams/timestampPartial.svg
new file mode 100644
index 00000000..668d3f55
--- /dev/null
+++ b/static/images/docs/diagrams/timestampPartial.svg
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ timestampColumn
+
+ IN
+
+
+ yyyy
+
+
+ yyyy-MM
+
+
+ YYYY-MM-dd
+
+
+ yyyy-MM-ddThh
+
+
+ yyyy-MM-ddThh:mm
+
+
+ yyyy-MM-ddThh:mm:ss
+
+
+ timestampExplicitRange
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/timestampSearch.svg b/static/images/docs/diagrams/timestampSearch.svg
new file mode 100644
index 00000000..89537ba0
--- /dev/null
+++ b/static/images/docs/diagrams/timestampSearch.svg
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ timestampColumn
+
+ =
+
+
+ >
+
+
+ <
+
+
+ >=
+
+
+ <=
+
+
+ '
+
+
+ timestamp
+
+ '
+
+
+ timestampIntervalSearch
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/typeDef.svg b/static/images/docs/diagrams/typeDef.svg
new file mode 100644
index 00000000..08baa030
--- /dev/null
+++ b/static/images/docs/diagrams/typeDef.svg
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+ boolean
+
+
+ byte
+
+
+ short
+
+
+ char
+
+
+ int
+
+
+ float
+
+
+ symbol
+
+
+ CAPACITY
+
+
+ distinctValueEstimate
+
+ CACHE
+
+
+ NOCACHE
+
+
+ inlineIndexDef
+
+ varchar
+
+
+ string
+
+
+ long
+
+
+ date
+
+
+ timestamp
+
+
+ double
+
+
+ binary
+
+
+ long256
+
+
+ geohash(<size>)
+
+
+ indexDef
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/unassignServiceAccount.svg b/static/images/docs/diagrams/unassignServiceAccount.svg
new file mode 100644
index 00000000..b14805d2
--- /dev/null
+++ b/static/images/docs/diagrams/unassignServiceAccount.svg
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+ UNASSIGN
+
+
+ SERVICE
+
+
+ ACCOUNT
+
+
+ serviceAccount
+
+ FROM
+
+
+ userOrGroup
+
+ ,
+
+
+ assumeServiceAccount
+
+
+
\ No newline at end of file
diff --git a/static/images/docs/diagrams/whereEqDoubleProximityPrecision.svg b/static/images/docs/diagrams/whereEqDoubleProximityPrecision.svg
new file mode 100644
index 00000000..3875b1e8
--- /dev/null
+++ b/static/images/docs/diagrams/whereEqDoubleProximityPrecision.svg
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+ WHERE
+
+
+ eq
+
+
+ (
+
+
+ column
+
+ ,
+
+
+ value
+
+ ,
+
+
+ precision
+
+ )
+
+
+ complexWhere
+
+
+
\ No newline at end of file