The partiql command-line tool.
moonx moonrockz/partiql --help
moonx moonrockz/partiql version
moonx moonrockz/partiql format query.sql # print PartiQL laid out at width 80
moonx moonrockz/partiql format --width 100 q.sql # another line width
moonx moonrockz/partiql format --compact q.sql # one line per statement
moonx moonrockz/partiql format --write *.sql # rewrite files in place
moonx moonrockz/partiql format -e 'select a from t'
cat query.sql | moonx moonrockz/partiql format # read stdin
moonx moonrockz/partiql check *.sql # report every parse error
moonx moonrockz/partiql parse -e 'select a from t' # print the syntax tree
moonx moonrockz/partiql query -e 'select value x * 2 from <<1, 2>> as x'
moonx moonrockz/partiql query --data t=rows.ion -e 'select a from t where b > 1'
moonx moonrockz/partiql query --env env.ion query.sql
cat rows.ion | moonx moonrockz/partiql query --data t=- query.sql# rows.ion contains two top-level structs, not a list.
printf '{a: 1}\n{a: 2}\n' > rows.ion
partiql query --data t=rows.ion -e 'SELECT VALUE r.a FROM t AS r'
# $bag::[1, 2]
partiql query --data t=rows.ion --each t -e 't.a'
# 1, then 2 as separate top-level results
partiql query --data t=rows.ion --output-format binary -e 't' > result.10n
cat result.10n | partiql query --data t=- -e 't'printf '$ion_schema_2_0 schema_header::{} type::{name: row, type: struct} schema_footer::{}' > rows.isl
partiql query --data t=rows.ion --data-schema t=rows.isl --schema-type row -e 't'printf '[{"a":1},{"a":2}]' > rows.json
partiql query --input-format json --data t=rows.json --output-format json \
-e 'CAST((SELECT VALUE r.a FROM t AS r) AS LIST)'
cat rows.json | partiql query --input-format json --data t=- \
--each t --output-format json --compact -e 't.a'import {
"moonrockz/partiql/cli",
}import { "moonrockz/expect" } for "test"test "embedded CLI query" {
let result = @cli.run(["query", "--compact", "-e", "1 + 2"])
@expect.expect((result.status, result.stdout, result.stderr)).to_equal((0, "3\n", ""))
}test "embedded CLI usage error" {
let result = @cli.run(["format", "--width", "invalid", "-e", "select 1"])
@expect.expect(result.status).to_equal(2)
}printf '%s\n' '--- {name: first}' '--- {name: second}' > manifest.yaml
partiql query --input-format yaml --data t=manifest.yaml \
-e 'SELECT VALUE r.name FROM t AS r'
cat manifest.yaml | partiql query --input-format yaml --data t=- --each t \
--output-format json --compact -e 't.name'
printf '%s\n' 'n: 4' | partiql query --input-format yaml --env - -e 'n + 1'test "iterate YAML documents including empty streams" {
@expect.expect_all(soft => {
for (source, expected) in [
("--- {name: first}\n--- {name: second}", "\"first\"\n\"second\"\n"),
("", ""),
("---", "null\n"),
] {
let io = { ..@cli.Io::unavailable(), read_stdin: () => source }
let result = @cli.run([
"query", "--input-format", "yaml", "--data", "t=-", "--each", "t",
"--output-format", "json", "--compact", "-e", "CASE WHEN t IS NULL THEN NULL ELSE t.name END",
], io~)
soft.expect(result.status).to_equal(0)
soft.expect(result.stdout).to_equal(expected)
}
})
}