# README
Command line datly executor
./datly -h
DSQL (datly SQL)
The general structure for DSQL
SELECT mainViewAlias.* [EXCEPT COLUMN]
[, secondViewAlias.* ]
[, NviewAlias.* ]
FROM (
SELECT
ID [ColumnConfig],
...,
other_column
FROM table1
) mainViewAlias [ViewConfig],
[
JOIN (
SELECT OTHER_ID,
...,
other_column
FROM table2
) secondViewAlias [ViewConfig] ON mainViewAlias.ID = secondViewAlias.OTHER_ID
]
Where
- RouteConfig is JSON representation of Route settings i.e {"URI":"app1/view1/{Id}"}
- OutputConfig is JSON representation of Output settings i.e {"Style":"Comprehensive"}
- ColumnConfig is JSON representation of Column settings i.e {"DataType":"bool"}
- ViewConfig is JSON representation of View settings i.e {"Cache":{"Ref":"aerospike"}}
See e2e testcase for more examples
One to many
rule.sql
SELECT
dept.*
employee.*
FROM DEPARMENT dept
JOIN EMP employee ON dept.ID = employee.DEPT_ID
datly -N=dept -X=rule.sql
One to one relation
rule.sql
SELECT
dept.*
employee.*,
organization.*
FROM DEPARMENT dept
JOIN EMP employee ON dept.ID = employee.DEPT_ID
JOIN ORG organization ON organization.ID = demp.ORG_ID AND 1=1
datly -N=dept -X=rule.sql
Excluding output column
rule.sql
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID,
organization.*
FROM DEPARMENT dept
JOIN EMP employee ON dept.ID = employee.DEPT_ID
JOIN ORG organization ON organization.ID = demp.ORG_ID AND 1=1
datly -N=dept -X=rule.sql
View SQL
rule.sql
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID,
organization.*
FROM (SELECT * FROM DEPARMENT t) dept
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee ON dept.ID = employee.DEPT_ID
JOIN ORG organization ON organization.ID = demp.ORG_ID AND 1=1
datly -N=dept -X=rule.sql
View SQL with velty template and query parameters
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID,
organization.*
FROM (SELECT * FROM DEPARMENT t) dept
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee ON dept.ID = employee.DEPT_ID
JOIN ORG organization ON organization.ID = demp.ORG_ID AND 1=1
WHERE 1=1
#if ($Has.Id)
AND ID = $Id
#end
View SQL with query parameters
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID,
organization.*
FROM (SELECT * FROM DEPARMENT t) dept
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee ON dept.ID = employee.DEPT_ID
JOIN ORG organization ON organization.ID = demp.ORG_ID AND 1=1
WHERE ID = $Id
View SQL column type codec
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID,
organization.*
FROM (SELECT * FROM DEPARMENT t) dept
JOIN (SELECT ID, NAME, DEPT_ID,
(CASE WHEN COLUMN_X = 1 THEN
'x1,x2'
WHEN COLUMN_X = 2 THEN
'x3,x4'
END) AS SLICE /* {"Codec":{"Ref":"AsStrings"}, "DataType": "string"} */
FROM EMP t) employee ON dept.ID = employee.DEPT_ID
JOIN ORG organization ON organization.ID = demp.ORG_ID AND 1=1
WHERE ID = $Id
Supported conversion Codecs
- AsStrings: converts coma separated value into []string
Setting matching URI
/* {"URI":"dept/"} */
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID
FROM (SELECT * FROM DEPARMENT t) dept
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee
ON dept.ID = employee.DEPT_ID
Setting data caching
/* {"URI":"dept/",
"Cache":{
"Name": "fs"
"Location": "/tmp/cache/${view.Name}",
"TimeToLiveMs": 360000
}
} */
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID
FROM (SELECT * FROM DEPARMENT t) dept /* {"Cache":{"Ref":"fs"}} */
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee /* {"Cache":{"Ref":"fsgit p"}} */
ON dept.ID = employee.DEPT_ID
/* {"URI":"dept/",
"Cache":{
"Name": "aerospike",
"Provider": "aerospike://127.0.0.1:3000/test",
"Location": "${view.Name}",
"TimeToLiveMs": 360000
}
} */
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID
FROM (SELECT * FROM DEPARMENT t) dept /* {"Cache":{"Ref":"aerospike"}} */
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee /* {"Cache":{"Ref":"aerospike"}} */
ON dept.ID = employee.DEPT_ID
Setting selector
SELECT
dept.* EXCEPT ORG_ID
employee.* EXCEPT DEPT_ID
FROM (SELECT * FROM DEPARMENT t) dept /* {"Selector":{"Limit": 40, "Constraints"{"Criteria": false}}} */
JOIN (SELECT ID, NAME, DEPT_ID FROM EMP t) employee /* {"Selector":{"Limit": 80, "Constraints"{"Criteria": false, "Limit": false, "Offset": false}}} */
ON dept.ID = employee.DEPT_ID
Persisting routes/config to the local folder
Use -w=location switch
datly -N=dept -T=DEPT -w=my_project