# orql
A toy SQL parser for a subset of the
[Oracle dialect](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/).
# motivation
The motivation for parser is to parse Oracle SQL statements into as an
Abstract Syntax Tree while allowing the complete reconstruction of the
orignally parsed source code. Therefore, the parser tries to preserve and
expose token location as well as comments.
At the same time, the challenge is to not pay additional costs when not being
interested in token location information and/or comments.
# example
```rust
let sql = "select * from dual";
let stmts = parser::parse(sql).expect("bad sql!");
for stmt in stmts {
println!("{:#?}", stmt);
}
```
Advanced examples demo'ing access to locations and comments can be found in
the rustdoc of the individual, public modules.
# status
- [Literals](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Literals.html)
- [x] Text literals
- [x] Numbers
- [ ] Datetimes
- [ ] Intervals
- [ ] DbLink identifiers
- [Data Types](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Data-Types.html)
- [Operators](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Operators.html)
- [x] [Arithmetic](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Arithmetic-Operators.html)
- [ ] [`COLLATE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COLLATE-Operator.html)
- [x] [Concatenation](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Concatenation-Operator.html)
- [ ] [Hierarchical](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Hierarchical-Query-Operators.html)
- [x] [Set operators](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Set-Operators.html)
- [ ] [Multiset](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Multiset-Operators.html)
- [Expressions](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Expressions.html)
- [x] [`simple_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Simple-Expressions.html)
- [ ] [`compound_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Compound-Expressions.html)
- [ ] `PRIOR ...`
- [ ] `COLLATE ...`
- [ ] [`av_meas_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/analytic-view-measure-expressions.html)
- [x] [`case_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CASE-Expressions.html)
- [ ] [`cursor_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CURSOR-Expressions.html)
- [ ] [`datetime_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Datetime-Expressions.html)
- [x] [`function_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Function-Expressions.html#GUID-F8C7ED67-A4EC-479C-975F-12F1F4B8CBA0)
- [ ] [`interval_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Interval-Expressions.html)
- [ ] [`JSON_object_access_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON-Object-Access-Expressions.html)
- [ ] [`model_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Model-Expressions.html)
- [ ] [`object_access_expresion`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Object-Access-Expressions.html)
- [x] [`scalar_subquery_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Scalar-Subquery-Expressions.html)
- [ ] [`type_constructor_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Type-Constructor-Expressions.html)
- [x] [`placeholder_expression`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Placeholder-Expressions.html)
- [ ]`INDICATOR ...`
- [Conditions](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Conditions.html)
- [x] [`comparison_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Comparison-Conditions.html)
- [x] [`floating_point_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Floating-Point-Conditions.html)
- [x] [`logical_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Logical-Conditions.html)
- [ ] [`model_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Model-Conditions.html)
- [ ] [`multiset_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Multiset-Conditions.html)
- [x] [`pattern_matching_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Pattern-matching-Conditions.html)
- [x] `LIKE`
- [x] `REGEXP_LIKE`
- [x] [`null_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Null-Conditions.html)
- [ ] [`XML_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XML-Conditions.html)
- [ ] [`JSON_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SQL-JSON-Conditions.html)
- [x] [`compound_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Compound-Conditions.html)
- [x] [`exists_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXISTS-Condition.html)
- [x] [`in_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/IN-Condition.html)
- [x] [`between_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BETWEEN-Condition.html)
- [ ] [`is_of_type_condition`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/IS-OF-type-Condition.html)
- [Functions](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Functions.html)
- [x] Named argument syntax, e.g. `f(arg0 => 1, arg1 => 2)`
- only for generic, user-defined functions
- [x] Wildcard arguments
- only in function calls with explicit support for it, e.g. `count`
- [x] [Analytic](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Analytic-Functions.html) and [Aggregate functions](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Aggregate-Functions.html)
- [x] "duplicate treatmeant", e.g. `DISTINCT`, `UNIQUE`, `ALL` keywords before the first argument
- [x] [`WITHIN GROUP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LISTAGG.html#GUID-B6E50D8E-F467-425B-9436-F7F8BF38D466)
- [x] [`OVER` clause](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Analytic-Functions.html#GUID-527832F7-63C0-4445-8C16-307FA5084056)
- [ ] [`KEEP FIRST | LAST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FIRST.html)
- Built-in functions (`*` marks functions with dedicated / extended syntax clauses)
- [x] [`ABS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ABS.html)
- [x] [`ACOS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ACOS.html)
- [x] [`ADD_MONTHS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ADD_MONTHS.html)
- [x] [`ANY_VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ANY_VALUE.html)
- [ ] [`APPROX_COUNT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_COUNT.html)*
- [ ] [`APPROX_COUNT_DISTINCT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_COUNT_DISTINCT.html)
- [ ] [`APPROX_COUNT_DISTINCT_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_COUNT_DISTINCT_AGG.html)
- [ ] [`APPROX_COUNT_DISTINCT_DETAIL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_COUNT_DISTINCT_DETAIL.html)
- [ ] [`APPROX_MEDIAN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_MEDIAN.html)*
- [ ] [`APPROX_PERCENTILE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_PERCENTILE.html)*
- [ ] [`APPROX_PERCENTILE_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_PERCENTILE_AGG.html)
- [ ] [`APPROX_PERCENTILE_DETAIL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_PERCENTILE_DETAIL.html)*
- [ ] [`APPROX_RANK`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_RANK.html)*
- [ ] [`APPROX_SUM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/APPROX_SUM.html)*
- [x] [`ASCII`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ASCII.html)
- [x] [`ASCIISTR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ASCIISTR.html)
- [x] [`ASIN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ASIN.html)
- [x] [`ATAN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ATAN.html)
- [x] [`ATAN2`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ATAN2.html)
- [x] [`AVG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/AVG.html)*
- [ ] [`BFILENAME`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BFILENAME.html)
- [x] [`BIN_TO_NUM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BIN_TO_NUM.html)
- [x] [`BITAND`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BITAND.html)
- [x] [`BIT_AND_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BIT_AND_AGG.html)
- [x] [`BITMAP_BIT_POSITION`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BITMAP_BIT_POSITION.html)
- [x] [`BITMAP_BUCKET_NUMBER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BITMAP_BUCKET_NUMBER.html)
- [x] [`BITMAP_CONSTRUCT_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BITMAP_CONSTRUCT_AGG.html)
- [x] [`BITMAP_COUNT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BITMAP_COUNT.html)
- [x] [`BITMAP_OR_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BITMAP_OR_AGG.html)
- [x] [`BIT_OR_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BIT_OR_AGG.html)
- [x] [`BIT_XOR_AGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/BIT_XOR_AGG.html)
- [x] [`CARDINALITY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CARDINALITY.html)
- [ ] [`CAST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CAST.html)*
- [x] [`CEIL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CEIL.html)
- [x] [`CHARTOROWID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CHARTOROWID.html)
- [x] [`checksum`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/checksum.html)*
- [x] [`CHR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CHR.html)*
- [ ] [`CLUSTER_DETAILS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CLUSTER_DETAILS.html)*
- [ ] [`CLUSTER_DISTANCE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CLUSTER_DISTANCE.html)*
- [ ] [`CLUSTER_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CLUSTER_ID.html)*
- [ ] [`CLUSTER_PROBABILITY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CLUSTER_PROBABILITY.html)*
- [ ] [`CLUSTER_SET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CLUSTER_SET.html)*
- [x] [`COALESCE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COALESCE.html)
- [x] [`COLLATION`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COLLATION.html)
- [ ] [`COLLECT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COLLECT.html)*
- [x] [`COMPOSE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COMPOSE.html)
- [ ] [`CON_DBID_TO_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CON_DBID_TO_ID.html)
- [ ] [`CON_GUID_TO_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CON_GUID_TO_ID.html)
- [ ] [`con_id_to_con_name`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/con_id_to_con_name.html)
- [ ] [`con_id_to_dbid`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/con_id_to_dbid.html)
- [ ] [`con_id_to_guid`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/con_id_to_guid.html)
- [ ] [`con_id_to_uid`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/con_id_to_uid.html)
- [ ] [`CON_NAME_TO_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CON_NAME_TO_ID.html)
- [ ] [`CON_UID_TO_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CON_UID_TO_ID.html)
- [x] [`CONCAT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CONCAT.html)
- [x] [`CONVERT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CONVERT.html)
- [x] [`CORR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CORR.html)*
- [x] [`CORR_A`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CORR_A.html)
- [x] [`COS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COS.html)
- [x] [`COSH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COSH.html)
- [x] [`COUNT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COUNT.html)*
- [x] [`COVAR_POP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COVAR_POP.html)*
- [x] [`COVAR_SAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/COVAR_SAMP.html)*
- [ ] [`CUBE_TABLE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CUBE_TABLE.html)
- [ ] [`CUME_DIST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CUME_DIST.html)*
- [ ] ~~[`CURRENT_DATE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CURRENT_DATE.html)~~
- [x] [`CURRENT_TIMESTAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CURRENT_TIMESTAMP.html)
- [ ] [`CV`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/CV.html)
- [ ] [`DATAOBJ_TO_MAT_PARTITION`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DATAOBJ_TO_MAT_PARTITION.html)
- [ ] [`DATAOBJ_TO_PARTITION`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DATAOBJ_TO_PARTITION.html)
- [ ] ~~[`DBTIMEZONE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DBTIMEZONE.html)~~
- [x] [`DECODE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DECODE.html)
- [ ] [`DECOMPOSE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DECOMPOSE.html)
- [ ] [`DENSE_RANK`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DENSE_RANK.html)*
- [ ] [`DEPTH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DEPTH.html)
- [ ] [`DEREF`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DEREF.html)
- [ ] [`DUMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DUMP.html)
- [ ] [`EMPTY_BLOB-EMPTY_CLOB`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EMPTY_BLOB-EMPTY_CLOB.html)
- [ ] [`EXISTSNODE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXISTSNODE.html)
- [x] [`EXP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXP.html)
- [x] [`EXTRACT-datetime`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXTRACT-datetime.html)*
- [ ] [`EXTRACT-XML`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXTRACT-XML.html)
- [ ] [`EXTRACTVALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/EXTRACTVALUE.html)
- [ ] [`FEATURE_COMPARE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FEATURE_COMPARE.html)*
- [ ] [`FEATURE_DETAILS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FEATURE_DETAILS.html)*
- [ ] [`FEATURE_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FEATURE_ID.html)*
- [ ] [`FEATURE_SET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FEATURE_SET.html)
- [ ] [`FEATURE_VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FEATURE_VALUE.html)*
- [ ] [`FIRST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FIRST.html)*
- [ ] [`FIRST_VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FIRST_VALUE.html)*
- [x] [`FLOOR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FLOOR.html)
- [ ] [`FROM_TZ`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/FROM_TZ.html)
- [x] [`GREATEST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/GREATEST.html)
- [ ] [`GROUP_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/GROUP_ID.html)
- [ ] [`GROUPING`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/GROUPING.html)
- [ ] [`GROUPING_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/GROUPING_ID.html)
- [ ] [`HEXTORAW`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/HEXTORAW.html)
- [ ] [`INITCAP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/INITCAP.html)
- [ ] [`INSTR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/INSTR.html)
- [ ] ~~[`ITERATION_NUMBER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ITERATION_NUMBER.html)~~
- [ ] [`JSON_ARRAY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_ARRAY.html)*
- [ ] [`JSON_ARRAYAGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_ARRAYAGG.html)*
- [ ] [`JSON_DATAGUIDE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_DATAGUIDE.html)
- [ ] [`JSON_MERGEPATCH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_MERGEPATCH.html)*
- [ ] [`JSON_OBJECT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_OBJECT.html)*
- [ ] [`JSON_OBJECTAGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_OBJECTAGG.html)*
- [ ] [`JSON_QUERY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_QUERY.html)*
- [ ] [`json_scalar`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/json_scalar.html)*
- [ ] [`JSON_SERIALIZE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_SERIALIZE.html)*
- [ ] [`JSON_TABLE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_TABLE.html)*
- [ ] [`JSON_TRANSFORM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_TRANSFORM.html)
- [ ] [`JSON_VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/JSON_VALUE.html)*
- [ ] [`json-type-constructor`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/json-type-constructor.html)
- [ ] [`KURTOSIS_POP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/KURTOSIS_POP.html)
- [ ] [`KURTOSIS_SAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/KURTOSIS_SAMP.html)
- [x] [`LAG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LAG.html)*
- [ ] [`LAST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LAST.html)*
- [x] [`LAST_DAY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LAST_DAY.html)
- [x] [`LAST_VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LAST_VALUE.html)*
- [x] [`LEAD`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LEAD.html)*
- [x] [`LEAST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LEAST.html)
- [ ] [`LENGTH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LENGTH.html)
- [x] [`LISTAGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LISTAGG.html)*
- [x] [`LN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LN.html)
- [ ] [`LNNVL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LNNVL.html)*
- [x] [`LOCALTIMESTAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LOCALTIMESTAMP.html)
- [x] [`LOG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LOG.html)
- [x] [`LOWER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LOWER.html)
- [ ] [`LPAD`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LPAD.html)
- [ ] [`LTRIM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/LTRIM.html)
- [ ] [`MAKE_REF`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MAKE_REF.html)
- [x] [`MAX`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MAX.html)*
- [x] [`MEDIAN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MEDIAN.html)*
- [x] [`MIN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MIN.html)*
- [x] [`MOD`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MOD.html)
- [ ] [`MONTHS_BETWEEN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MONTHS_BETWEEN.html)
- [ ] [`NANVL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NANVL.html)
- [ ] [`NCHR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NCHR.html)
- [ ] [`NEW_TIME`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NEW_TIME.html)
- [ ] [`NEXT_DAY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NEXT_DAY.html)
- [ ] [`NLS_CHARSET_DECL_LEN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_CHARSET_DECL_LEN.html)
- [ ] [`NLS_CHARSET_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_CHARSET_ID.html)
- [ ] [`NLS_CHARSET_NAME`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_CHARSET_NAME.html)
- [ ] [`NLS_COLLATION_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_COLLATION_ID.html)
- [ ] [`NLS_COLLATION_NAME`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_COLLATION_NAME.html)
- [ ] [`NLS_INITCAP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_INITCAP.html)
- [ ] [`NLS_LOWER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_LOWER.html)
- [ ] [`NLS_UPPER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLS_UPPER.html)
- [ ] [`NLSSORT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NLSSORT.html)
- [x] [`NTH_VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NTH_VALUE.html)*
- [ ] [`NTILE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NTILE.html)*
- [ ] [`NULLIF`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NULLIF.html)
- [ ] [`NUMTODSINTERVAL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NUMTODSINTERVAL.html)
- [ ] [`NUMTOYMINTERVAL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NUMTOYMINTERVAL.html)
- [ ] [`NVL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NVL.html)
- [ ] [`NVL2`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/NVL2.html)
- [ ] [`ORA_DM_PARTITION_NAME`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_DM_PARTITION_NAME.html)*
- [ ] [`ORA_DST_AFFECTED`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_DST_AFFECTED.html)
- [ ] [`ORA_DST_CONVERT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_DST_CONVERT.html)
- [ ] [`ORA_DST_ERROR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_DST_ERROR.html)
- [ ] [`ORA_HASH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_HASH.html)
- [ ] ~~[`ORA_INVOKING_USER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_INVOKING_USER.html)~~
- [ ] ~~[`ORA_INVOKING_USERID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ORA_INVOKING_USERID.html)~~
- [ ] [`PATH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PATH.html)
- [ ] [`PERCENT_RANK`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PERCENT_RANK.html)*
- [ ] [`PERCENTILE_CONT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PERCENTILE_CONT.html)*
- [ ] [`PERCENTILE_DISC`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PERCENTILE_DISC.html)*
- [ ] [`POWER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/POWER.html)
- [ ] [`POWERMULTISET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/POWERMULTISET.html)
- [ ] [`POWERMULTISET_BY_CARDINALITY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/POWERMULTISET_BY_CARDINALITY.html)
- [ ] [`PREDICTION`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREDICTION.html)*
- [ ] [`PREDICTION_BOUNDS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREDICTION_BOUNDS.html)*
- [ ] [`PREDICTION_COST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREDICTION_COST.html)*
- [ ] [`PREDICTION_DETAILS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREDICTION_DETAILS.html)*
- [ ] [`PREDICTION_PROBABILITY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREDICTION_PROBABILITY.html)*
- [ ] [`PREDICTION_SET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREDICTION_SET.html)*
- [ ] [`PRESENTNNV`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PRESENTNNV.html)
- [ ] [`PRESENTV`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PRESENTV.html)
- [ ] [`PREVIOUS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/PREVIOUS.html)
- [x] [`RANK`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RANK.html)*
- [ ] [`RATIO_TO_REPORT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RATIO_TO_REPORT.html)*
- [ ] [`RAWTOHEX`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RAWTOHEX.html)
- [ ] [`RAWTONHEX`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RAWTONHEX.html)
- [ ] [`REF`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REF.html)
- [ ] [`REFTOHEX`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REFTOHEX.html)
- [ ] [`REGEXP_COUNT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REGEXP_COUNT.html)
- [ ] [`REGEXP_INSTR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REGEXP_INSTR.html)
- [ ] [`REGEXP_REPLACE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REGEXP_REPLACE.html)
- [ ] [`REGEXP_SUBSTR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REGEXP_SUBSTR.html)
- [ ] [`REGR_-Linear-Regression-Functions`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REGR_-Linear-Regression-Functions.html)*
- [ ] [`REMAINDER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REMAINDER.html)
- [ ] [`REPLACE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/REPLACE.html)
- [ ] [`ROUND-date`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROUND-date.html)
- [ ] [`ROUND-number`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROUND-number.html)
- [ ] [`ROUND_TIES_TO_EVEN-number`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROUND_TIES_TO_EVEN-number.html)
- [ ] [`ROW_NUMBER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROW_NUMBER.html)*
- [ ] [`ROWIDTOCHAR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROWIDTOCHAR.html)
- [ ] [`ROWIDTONCHAR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/ROWIDTONCHAR.html)
- [ ] [`RPAD`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RPAD.html)
- [ ] [`RTRIM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/RTRIM.html)
- [ ] [`SCN_TO_TIMESTAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SCN_TO_TIMESTAMP.html)
- [ ] ~~[`SESSIONTIMEZONE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SESSIONTIMEZONE.html)~~
- [ ] [`SET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SET.html)
- [ ] [`SIGN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SIGN.html)
- [ ] [`SIN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SIN.html)
- [ ] [`SINH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SINH.html)
- [ ] [`SKEWNESS_POP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SKEWNESS_POP.html)*
- [ ] [`SKEWNESS_SAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SKEWNESS_SAMP.html)*
- [ ] [`SOUNDEX`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SOUNDEX.html)
- [ ] [`SQRT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SQRT.html)
- [ ] [`STANDARD_HASH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STANDARD_HASH.html)
- [ ] [`STATS_BINOMIAL_TEST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_BINOMIAL_TEST.html)
- [ ] [`STATS_CROSSTAB`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_CROSSTAB.html)
- [ ] [`STATS_F_TEST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_F_TEST.html)
- [ ] [`STATS_KS_TEST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_KS_TEST.html)
- [ ] [`STATS_MODE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_MODE.html)
- [ ] [`STATS_MW_TEST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_MW_TEST.html)
- [ ] [`STATS_ONE_WAY_ANOVA`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_ONE_WAY_ANOVA.html)
- [ ] [`STATS_T_TEST_`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_T_TEST_.html)
- [ ] [`STATS_WSR_TEST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STATS_WSR_TEST.html)
- [x] [`STDDEV`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STDDEV.html)
- [x] [`STDDEV_POP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STDDEV_POP.html)
- [x] [`STDDEV_SAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/STDDEV_SAMP.html)
- [ ] [`SUBSTR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SUBSTR.html)
- [x] [`SUM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SUM.html)
- [ ] [`SYS_CONNECT_BY_PATH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_CONNECT_BY_PATH.html)
- [ ] [`SYS_CONTEXT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_CONTEXT.html)
- [ ] [`SYS_DBURIGEN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_DBURIGEN.html)
- [ ] [`SYS_EXTRACT_UTC`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_EXTRACT_UTC.html)
- [ ] [`SYS_GUID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_GUID.html)
- [ ] [`SYS_OP_ZONE_ID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_OP_ZONE_ID.html)
- [ ] [`SYS_TYPEID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_TYPEID.html)
- [ ] [`SYS_XMLAGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_XMLAGG.html)
- [ ] [`SYS_XMLGEN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYS_XMLGEN.html)
- [ ] ~~[`SYSDATE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYSDATE.html)~~
- [ ] ~~[`SYSTIMESTAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SYSTIMESTAMP.html)~~
- [ ] [`TAN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TAN.html)
- [ ] [`TANH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TANH.html)
- [ ] [`TIMESTAMP_TO_SCN`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TIMESTAMP_TO_SCN.html)
- [ ] [`TO_APPROX_COUNT_DISTINCT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_APPROX_COUNT_DISTINCT.html)
- [ ] [`TO_APPROX_PERCENTILE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_APPROX_PERCENTILE.html)
- [ ] [`TO_BINARY_DOUBLE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_BINARY_DOUBLE.html)*
- [ ] [`TO_BINARY_FLOAT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_BINARY_FLOAT.html)*
- [ ] [`TO_BLOB-bfile`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_BLOB-bfile.html)
- [ ] [`TO_BLOB-raw`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_BLOB-raw.html)
- [ ] [`TO_CHAR-bfile-blob`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_CHAR-bfile-blob.html)
- [ ] [`TO_CHAR-character`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_CHAR-character.html)
- [ ] [`TO_CHAR-datetime`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_CHAR-datetime.html)
- [ ] [`TO_CHAR-number`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_CHAR-number.html)
- [ ] [`TO_CLOB-bfile-blob`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_CLOB-bfile-blob.html)
- [ ] [`TO_CLOB-character`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_CLOB-character.html)
- [ ] [`TO_DATE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_DATE.html)*
- [ ] [`TO_DSINTERVAL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_DSINTERVAL.html)*
- [ ] [`TO_LOB`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_LOB.html)
- [ ] [`TO_MULTI_BYTE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_MULTI_BYTE.html)
- [ ] [`TO_NCHAR-character`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_NCHAR-character.html)
- [ ] [`TO_NCHAR-datetime`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_NCHAR-datetime.html)
- [ ] [`TO_NCHAR-number`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_NCHAR-number.html)
- [ ] [`TO_NCLOB`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_NCLOB.html)
- [ ] [`TO_NUMBER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_NUMBER.html)*
- [ ] [`TO_SINGLE_BYTE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_SINGLE_BYTE.html)
- [ ] [`TO_TIMESTAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_TIMESTAMP.html)*
- [ ] [`TO_TIMESTAMP_TZ`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_TIMESTAMP_TZ.html)*
- [ ] [`TO_UTC_TIMESTAMP_TZ`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_UTC_TIMESTAMP_TZ.html)
- [ ] [`TO_YMINTERVAL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TO_YMINTERVAL.html)*
- [x] [`TRANSLATE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRANSLATE.html)
- [x] [`TRANSLATE-USING`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRANSLATE-USING.html)
- [ ] [`TREAT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TREAT.html)*
- [ ] [`TRIM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRIM.html)*
- [ ] [`TRUNC-date`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRUNC-date.html)
- [ ] [`TRUNC-number`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TRUNC-number.html)
- [ ] [`TZ_OFFSET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/TZ_OFFSET.html)*
- [ ] ~~[`UID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/UID.html)~~
- [x] [`UNISTR`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/UNISTR.html)
- [x] [`UPPER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/UPPER.html)
- [ ] ~~[`USER`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/USER.html)~~
- [ ] [`USERENV`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/USERENV.html)
- [ ] [`VALIDATE_CONVERSION`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/VALIDATE_CONVERSION.html)*
- [ ] [`VALUE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/VALUE.html)
- [x] [`VAR_POP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/VAR_POP.html)
- [x] [`VAR_SAMP`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/VAR_SAMP.html)
- [x] [`VARIANCE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/VARIANCE.html)
- [x] [`VSIZE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/VSIZE.html)
- [x] [`WIDTH_BUCKET`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/WIDTH_BUCKET.html)
- [ ] [`XMLAGG`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLAGG.html)*
- [ ] [`XMLCAST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLCAST.html)*
- [ ] [`XMLCDATA`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLCDATA.html)
- [ ] [`XMLCOLATTVAL`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLCOLATTVAL.html)*
- [ ] [`XMLCOMMENT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLCOMMENT.html)
- [ ] [`XMLCONCAT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLCONCAT.html)
- [ ] [`XMLDIFF`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLDIFF.html)
- [ ] [`XMLELEMENT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLELEMENT.html)*
- [ ] [`XMLEXISTS`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLEXISTS.html)*
- [ ] [`XMLFOREST`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLFOREST.html)*
- [ ] [`XMLISVALID`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLISVALID.html)
- [ ] [`XMLPARSE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLPARSE.html)*
- [ ] [`XMLPATCH`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLPATCH.html)
- [ ] [`XMLPI`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLPI.html)*
- [ ] [`XMLQUERY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLQUERY.html)*
- [ ] [`XMLSEQUENCE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLSEQUENCE.html)
- [ ] [`XMLSERIALIZE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLSERIALIZE.html)*
- [ ] [`XMLTABLE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLTABLE.html)*
- [ ] [`XMLTRANSFORM`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/XMLTRANSFORM.html)
- Statements
- [ ] [`SELECT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SELECT.html) — mostly covered
- [x] [Optimizer hints](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Comments.html#GUID-D316D545-89E2-4D54-977F-FC97815CD62E)
- merely the raw comment
- unconditionally, even when parsing without comments
- [ ] [`CONNECT_BY`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/Hierarchical-Queries.html)
- [ ] [`model_clause`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__I2161264)
- [x] [`window_clause`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__GUID-911420AB-72C0-42DC-8D84-8C87171996ED)
- [ ] [`MERGE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/MERGE.html)
- [ ] [`UPDATE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/UPDATE.html)
- [ ] [`INSERT`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/INSERT.html)
- [ ] [`DELETE`](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/DELETE.html)
# not supported syntax
SQL syntax noted next is not supported by design:
## multiple ON clauses
Example:
```sql
select *
from (select 1 as alpha, 'alpha' as name from dual) a
left join (select 1 as beta, 'beta' as name from dual) b
join (select 1 as gamma, 'gamma' as name from dual) c
on 1=1 -- causes `b` and `c` to be joined first ...
on 1=1 -- ... on then this gets evaluated over of the previous inner join with `a`
;
```
Explanation:
https://www.sqlservercentral.com/forums/topic/multiple-on-clauses-in-one-join
# references / related projects
* [Oracle's SQL Language Reference](https://docs.oracle.com/en/database/oracle/oracle-database/21/sqlrf/)
* [SQL 2016 Syntax Reference](https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html)
* [datafusion-sqlparser-rs](https://github.com/apache/datafusion-sqlparser-rs)
— A mature and complete SQL parser covering the full ANSI/ISO SQL Standard
with support for database product specific extensions. Its exposed AST is
general purpose — a union of all supported dialect specific features. Since
`sqlparser`'s AST doesn't contain nodes for every token in the parsed SQL,
it's difficult to reconstruct the originally parsed SQL with regards to
possible comments and indentation.