← All examples

example JDBCSQL

options
	jdbc_quote_char = "" 
	always_reload = true 
	#jdbc_default_string = "jdbc:postgresql://localhost:5432/postgres?user=postgres&password=password"
	#docker run --rm --name cql-fun -p 5432:5432 -e POSTGRES_PASSWORD=password -d postgres 
	#to try postgres, be sure to replace the jdbcURL for the load command directly below
	
#create some example data in a local temporary sql database. (close delay keeps H2 database alive across connections)
command load = exec_jdbc "jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1" { 
"DROP TABLE IF EXISTS Employee CASCADE;
 DROP TABLE IF EXISTS Department CASCADE;
 DROP TABLE IF EXISTS ExportedEmployee CASCADE;
 DROP TABLE IF EXISTS ExportedDepartment CASCADE;
 DROP TABLE IF EXISTS ExportedTransEmployee CASCADE;
 DROP TABLE IF EXISTS ExportedTransDepartment CASCADE;" 

#multiple statements can be used, but many SQL engines (such as H2, CQL's internal engine) will only print the output of the first statement, and some require ?allowMultiQueries=true in the jdbc string 

"CREATE TABLE Employee(
 id INT PRIMARY KEY,
 name VARCHAR(255),
 manager INT, 
 worksIn INT)"

"CREATE TABLE Department(
 id INT PRIMARY KEY,
 name VARCHAR(255),
 secretary INT)"
 
"INSERT INTO Employee VALUES 
 (101, 'Alan', 103, 10), 
 (102, 'Camille', 102, 2), 
 (103, 'Andrey', 103, 10)"

"INSERT INTO Department VALUES
 (10, 'Applied Math', 101),
 (2, 'Pure Math', 102)"

"ALTER TABLE Employee ADD CONSTRAINT e1
 FOREIGN KEY (manager) REFERENCES Employee (id)"

"ALTER TABLE Employee ADD CONSTRAINT e2 
 FOREIGN KEY (worksIn) REFERENCES Department (id)"

"ALTER TABLE Department ADD CONSTRAINT d1
 FOREIGN KEY (secretary) REFERENCES Employee (id)"

# options always_reload = true #true forces pragmas to not be cached between runs (i.e., always run)
}  
 
# When the JDBC class name and string are left blank, CQL uses the value of the option
#    jdbc_default_string.  These can be set globally by placing,
#   at the beginning of the file, for example:
#   
#  options
#   
#   jdbc_default_string = "jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1"
#
#look at the example data
command view0 = exec_jdbc "" {  #see note above!!!
"SELECT * FROM Department"
"SELECT * FROM Employee"
}

####################################################

schema S = literal : sql {
	entities
		Employee 
		Department
  	attributes
  		id : Employee -> Varchar
  		id : Department -> Varchar
  		first last manager worksIn : Employee -> Varchar
     	age	: Employee -> Integer
     	name secretary : Department -> Varchar
 }

#import an instance by providing queries for each entity
instance J = import_jdbc ""  : sql {
 #use name as first name
  #use null as last name
  #use id as age	
	Employee -> "SELECT id, manager, worksIn, name AS first, 'lname' as last, id AS age FROM Employee"
	Department -> "SELECT id, secretary, name FROM Department"

	options
		#aql by default prepends the entity to each imported ID, to get uniqueness across entities.
		#to import the IDs verbatim, set the option below to false
		prepend_entity_on_ids = false
}


#export the instance to SQL
command store1 = export_jdbc_instance J ""  "Exported"
{ options start_ids_at = 100 }

#view exported SQL instance
command view1 = exec_jdbc ""  { 
	"SELECT * FROM ExportedEmployee"
	"SELECT * FROM ExportedDepartment"
}



##########
#direct method to land sql data

schema S_direct2 = import_jdbc_all "" {
 options allow_sql_import_all_unsafe=true
}

schema S_direct = literal : sql {
	entities
		Employee 
		Department
  	attributes
		manager  name : Employee -> Other
		worksIn   : Employee -> Other
		secretary : Department -> Other
  		name 	  : Department -> Other
 }

instance I = import_jdbc_direct "" "ROW_NUMBER() OVER ()" : S_direct 
instance J2 = import_jdbc_direct "" "ROW_NUMBER() OVER ()" : S_direct2 
##############################
#
#execute command line actions as follows
#pragma cmdline1 = exec_cmdline  { 
#"ls -ltr"
#"echo hi"
#}
#
#execute actions as follows
#pragma js1 = exec_js  { 
#"javax.swing.JOptionPane.showMessageDialog(null, \"hello1\")"
#"javax.swing.JOptionPane.showMessageDialog(null, \"hello2\")"
#}

instance I

Department
IDSECRETARYNAMECQL_ROW_ID
0102Pure Math1
1101Applied Math2
Employee
IDMANAGERNAMEWORKSINCQL_ROW_ID
2103Alan101
3102Camille22
4103Andrey103


instance J

Department
IDIDSECRETARYNAME
02102Pure Math
110101Applied Math
Employee
IDIDMANAGERWORKSINNAMELAST
210110310Alanlname
31021022Camillelname
410310310Andreylname


instance J2

INFORMATION_SCHEMA.CONSTANTS
IDCONSTANT_CATALOGCONSTANT_SCHEMACONSTANT_NAMEVALUE_DEFINITIONDATA_TYPECHARACTER_MAXIMUM_LENGTHCHARACTER_OCTET_LENGTHCHARACTER_SET_CATALOGCHARACTER_SET_SCHEMACHARACTER_SET_NAMECOLLATION_CATALOGCOLLATION_SCHEMACOLLATION_NAMENUMERIC_PRECISIONNUMERIC_PRECISION_RADIXNUMERIC_SCALEDATETIME_PRECISIONINTERVAL_TYPEINTERVAL_PRECISIONMAXIMUM_CARDINALITYDTD_IDENTIFIERDECLARED_DATA_TYPEDECLARED_NUMERIC_PRECISIONDECLARED_NUMERIC_SCALEGEOMETRY_TYPEGEOMETRY_SRIDREMARKSCQL_ROW_ID
INFORMATION_SCHEMA.ENUM_VALUES
IDOBJECT_CATALOGOBJECT_SCHEMAOBJECT_NAMEOBJECT_TYPEENUM_IDENTIFIERVALUE_NAMEVALUE_ORDINALCQL_ROW_ID
INFORMATION_SCHEMA.INDEXES
IDINDEX_CATALOGINDEX_SCHEMAINDEX_NAMETABLE_CATALOGTABLE_SCHEMATABLE_NAMEINDEX_TYPE_NAMENULLS_DISTINCTIS_GENERATEDREMARKSINDEX_CLASSCQL_ROW_ID
0DB1PUBLICPRIMARY_KEY_7DB1PUBLICEMPLOYEEPRIMARY KEYtrueorg.h2.mvstore.db.MVDelegateIndex1
1DB1PUBLICE1_INDEX_7DB1PUBLICEMPLOYEEINDEXtrueorg.h2.mvstore.db.MVSecondaryIndex2
2DB1PUBLICE2_INDEX_7DB1PUBLICEMPLOYEEINDEXtrueorg.h2.mvstore.db.MVSecondaryIndex3
3DB1PUBLICPRIMARY_KEY_4DB1PUBLICDEPARTMENTPRIMARY KEYtrueorg.h2.mvstore.db.MVDelegateIndex4
4DB1PUBLICD1_INDEX_4DB1PUBLICDEPARTMENTINDEXtrueorg.h2.mvstore.db.MVSecondaryIndex5
INFORMATION_SCHEMA.INDEX_COLUMNS
IDINDEX_CATALOGINDEX_SCHEMAINDEX_NAMETABLE_CATALOGTABLE_SCHEMATABLE_NAMECOLUMN_NAMEORDINAL_POSITIONORDERING_SPECIFICATIONNULL_ORDERINGIS_UNIQUECQL_ROW_ID
5DB1PUBLICPRIMARY_KEY_7DB1PUBLICEMPLOYEEID1ASCtrue1
6DB1PUBLICE1_INDEX_7DB1PUBLICEMPLOYEEMANAGER1ASCFIRSTfalse2
7DB1PUBLICE2_INDEX_7DB1PUBLICEMPLOYEEWORKSIN1ASCFIRSTfalse3
8DB1PUBLICPRIMARY_KEY_4DB1PUBLICDEPARTMENTID1ASCtrue4
9DB1PUBLICD1_INDEX_4DB1PUBLICDEPARTMENTSECRETARY1ASCFIRSTfalse5
INFORMATION_SCHEMA.INFORMATION_SCHEMA_CATALOG_NAME
IDCATALOG_NAMECQL_ROW_ID
10DB11
INFORMATION_SCHEMA.IN_DOUBT
IDTRANSACTION_NAMETRANSACTION_STATECQL_ROW_ID
INFORMATION_SCHEMA.LOCKS
IDTABLE_SCHEMATABLE_NAMESESSION_IDLOCK_TYPECQL_ROW_ID
INFORMATION_SCHEMA.QUERY_STATISTICS
IDSQL_STATEMENTEXECUTION_COUNTMIN_EXECUTION_TIMEMAX_EXECUTION_TIMECUMULATIVE_EXECUTION_TIMEAVERAGE_EXECUTION_TIMESTD_DEV_EXECUTION_TIMEMIN_ROW_COUNTMAX_ROW_COUNTCUMULATIVE_ROW_COUNTAVERAGE_ROW_COUNTSTD_DEV_ROW_COUNTCQL_ROW_ID
INFORMATION_SCHEMA.RIGHTS
IDGRANTEEGRANTEETYPEGRANTEDROLERIGHTSTABLE_SCHEMATABLE_NAMECQL_ROW_ID
INFORMATION_SCHEMA.ROLES
IDROLE_NAMEREMARKSCQL_ROW_ID
11PUBLIC1
INFORMATION_SCHEMA.SESSIONS
IDSESSION_IDUSER_NAMESERVERCLIENT_ADDRCLIENT_INFOSESSION_STARTISOLATION_LEVELEXECUTING_STATEMENTEXECUTING_STATEMENT_STARTCONTAINS_UNCOMMITTEDSESSION_STATEBLOCKER_IDSLEEP_SINCECQL_ROW_ID
12102026-06-20T17:23:19.129761088ZREAD COMMITTEDSELECT SESSION_ID, USER_NAME, SERVER, CLIENT_ADDR, CLIENT_INFO, SESSION_START, ISOLATION_LEVEL, EXECUTING_STATEMENT, EXECUTING_STATEMENT_START, CONTAINS_UNCOMMITTED, SESSION_STATE, BLOCKER_ID, SLEEP_SINCE, ROW_NUMBER() OVER () AS CQL_ROW_ID FROM INFORMATION_SCHEMA.SESSIONS, (SELECT '0' AS CQL_ZERO) AS CQL_ZERO2026-06-20T17:23:19.164510024ZfalseRUNNING1
INFORMATION_SCHEMA.SESSION_STATE
IDSTATE_KEYSTATE_COMMANDCQL_ROW_ID
13SCHEMASET SCHEMA "PUBLIC"1
INFORMATION_SCHEMA.SETTINGS
IDSETTING_NAMESETTING_VALUECQL_ROW_ID
14DB_CLOSE_DELAY-11
15CREATE_BUILD2322
16info.BUILD_ID2323
17info.VERSION_MAJOR24
18info.VERSION_MINOR35
19info.VERSION2.3.232 (2024-08-11)6
20property.java.runtime.version21.0.11+10-LTS7
21property.java.vm.nameOpenJDK 64-Bit Server VM8
22property.java.vendorEclipse Adoptium9
23property.os.nameLinux10
24property.os.archamd6411
25property.os.version6.17.0-1018-azure12
26property.sun.os.patch.level13
27property.file.separator/14
28property.path.separator:15
29property.line.separator 16
30property.user.country17
31property.user.languageen18
32property.user.variant19
33property.file.encodingUTF-820
34DEFAULT_NULL_ORDERINGLOW21
35EXCLUSIVEFALSE22
36MODEREGULAR23
37QUERY_TIMEOUT024
38TIME ZONEUTC25
39TRUNCATE_LARGE_LENGTHFALSE26
40VARIABLE_BINARYFALSE27
41OLD_INFORMATION_SCHEMAFALSE28
42RETENTION_TIME029
43WRITE_DELAY030
44ANALYZE_AUTO200031
45ANALYZE_SAMPLE1000032
46AUTO_COMPACT_FILL_RATE9033
47CASE_INSENSITIVE_IDENTIFIERSfalse34
48COMPRESSfalse35
49DATABASE_TO_LOWERfalse36
50DATABASE_TO_UPPERtrue37
51DEFAULT_CONNECTIONfalse38
52DEFAULT_ESCAPE\39
53DEFAULT_TABLE_ENGINE40
54DEFRAG_ALWAYSfalse41
55DROP_RESTRICTtrue42
56ESTIMATED_FUNCTION_TABLE_ROWS100043
57IGNORE_CATALOGSfalse44
58LOB_TIMEOUT30000045
59MAX_COMPACT_TIME20046
60MAX_QUERY_TIMEOUT047
61MV_STOREtrue48
62OPTIMIZE_DISTINCTtrue49
63OPTIMIZE_EVALUATABLE_SUBQUERIEStrue50
64OPTIMIZE_INSERT_FROM_SELECTtrue51
65OPTIMIZE_IN_LISTtrue52
66OPTIMIZE_IN_SELECTtrue53
67OPTIMIZE_ORtrue54
68OPTIMIZE_SIMPLE_SINGLE_ROW_SUBQUERIEStrue55
69OPTIMIZE_TWO_EQUALStrue56
70QUERY_CACHE_SIZE857
71RECOMPILE_ALWAYSfalse58
72REUSE_SPACEtrue59
73SHARE_LINKED_CONNECTIONStrue60
74ZERO_BASED_ENUMSfalse61
75info.UPDATE_FAILURE_PERCENT0.00%62
76info.LEAF_RATIO063
INFORMATION_SCHEMA.SYNONYMS
IDSYNONYM_CATALOGSYNONYM_SCHEMASYNONYM_NAMESYNONYM_FORSYNONYM_FOR_SCHEMATYPE_NAMESTATUSREMARKSCQL_ROW_ID
INFORMATION_SCHEMA.USERS
IDUSER_NAMEIS_ADMINREMARKSCQL_ROW_ID
77true1
PUBLIC.DEPARTMENT
IDIDNAMESECRETARYCQL_ROW_ID
782Pure Math1021
7910Applied Math1012
PUBLIC.EMPLOYEE
IDIDNAMEMANAGERWORKSINCQL_ROW_ID
80101Alan103101
81102Camille10222
82103Andrey103103
PUBLIC.EXPORTEDDEPARTMENT
IDIDNAMESECRETARYCQL_ROW_ID
8310Applied Math1011
842Pure Math1022
PUBLIC.EXPORTEDEMPLOYEE
IDIDLASTMANAGERNAMEWORKSINCQL_ROW_ID
85103lname103Andrey101
86102lname102Camille22
87101lname103Alan103


command load

START
DROP TABLE IF EXISTS Employee CASCADE;
 DROP TABLE IF EXISTS Department CASCADE;
 DROP TABLE IF EXISTS ExportedEmployee CASCADE;
 DROP TABLE IF EXISTS ExportedDepartment CASCADE;
 DROP TABLE IF EXISTS ExportedTransEmployee CASCADE;
 DROP TABLE IF EXISTS ExportedTransDepartment CASCADE;

Updated 0 rows.
END

START
CREATE TABLE Employee(
 id INT PRIMARY KEY,
 name VARCHAR(255),
 manager INT, 
 worksIn INT)

Updated 0 rows.
END

START
CREATE TABLE Department(
 id INT PRIMARY KEY,
 name VARCHAR(255),
 secretary INT)

Updated 0 rows.
END

START
INSERT INTO Employee VALUES 
 (101, 'Alan', 103, 10), 
 (102, 'Camille', 102, 2), 
 (103, 'Andrey', 103, 10)

Updated 3 rows.
END

START
INSERT INTO Department VALUES
 (10, 'Applied Math', 101),
 (2, 'Pure Math', 102)

Updated 2 rows.
END

START
ALTER TABLE Employee ADD CONSTRAINT e1
 FOREIGN KEY (manager) REFERENCES Employee (id)

Updated 0 rows.
END

START
ALTER TABLE Employee ADD CONSTRAINT e2 
 FOREIGN KEY (worksIn) REFERENCES Department (id)

Updated 0 rows.
END

START
ALTER TABLE Department ADD CONSTRAINT d1
 FOREIGN KEY (secretary) REFERENCES Employee (id)

Updated 0 rows.
END

command store1

Exported 5 rows.

command view0

START
SELECT * FROM Department

ID 2,  NAME Pure Math,  SECRETARY 102
ID 10,  NAME Applied Math,  SECRETARY 101
END

START
SELECT * FROM Employee

ID 101,  NAME Alan,  MANAGER 103,  WORKSIN 10
ID 102,  NAME Camille,  MANAGER 102,  WORKSIN 2
ID 103,  NAME Andrey,  MANAGER 103,  WORKSIN 10
END

command view1

START
SELECT * FROM ExportedEmployee

ID 103,  LAST lname,  MANAGER 103,  NAME Andrey,  WORKSIN 10
ID 102,  LAST lname,  MANAGER 102,  NAME Camille,  WORKSIN 2
ID 101,  LAST lname,  MANAGER 103,  NAME Alan,  WORKSIN 10
END

START
SELECT * FROM ExportedDepartment

ID 10,  NAME Applied Math,  SECRETARY 101
ID 2,  NAME Pure Math,  SECRETARY 102
END