diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-07 04:48:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-07 04:48:35 +0000 |
commit | 207df6fc406e81bfeebdff7f404bd242ff3f099f (patch) | |
tree | a1a796b056909dd0a04ffec163db9363a8757808 /src/third-party/prqlc-c/prqlc.hpp | |
parent | Releasing progress-linux version 0.11.2-1~progress7.99u1. (diff) | |
download | lnav-207df6fc406e81bfeebdff7f404bd242ff3f099f.tar.xz lnav-207df6fc406e81bfeebdff7f404bd242ff3f099f.zip |
Merging upstream version 0.12.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/third-party/prqlc-c/prqlc.hpp | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/src/third-party/prqlc-c/prqlc.hpp b/src/third-party/prqlc-c/prqlc.hpp new file mode 100644 index 0000000..e07e90d --- /dev/null +++ b/src/third-party/prqlc-c/prqlc.hpp @@ -0,0 +1,158 @@ +/* + * PRQL is a modern language for transforming data — a simple, powerful, + * pipelined SQL replacement + * + * License: Apache-2.0 + * Website: https://prql-lang.org/ + */ + +/* This file is autogenerated. Do not modify this file manually. */ + +#include <cstdarg> +#include <cstdint> +#include <cstdlib> +#include <new> +#include <ostream> +#define FFI_SCOPE "PRQL" + +namespace prqlc { + +/// Compile message kind. Currently only Error is implemented. +enum class MessageKind { + Error, + Warning, + Lint, +}; + +/// Identifier of a location in source. +/// Contains offsets in terms of chars. +struct Span { + size_t start; + size_t end; +}; + +/// Location within a source file. +struct SourceLocation { + size_t start_line; + size_t start_col; + size_t end_line; + size_t end_col; +}; + +/// Compile result message. +/// +/// Calling code is responsible for freeing all memory allocated +/// for fields as well as strings. +struct Message { + /// Message kind. Currently only Error is implemented. + MessageKind kind; + /// Machine-readable identifier of the error + const char* const* code; + /// Plain text of the error + const char* reason; + /// A list of suggestions of how to fix the error + const char* const* hint; + /// Character offset of error origin within a source file + const Span* span; + /// Annotated code, containing cause and hints. + const char* const* display; + /// Line and column number of error origin within a source file + const SourceLocation* location; +}; + +/// Result of compilation. +struct CompileResult { + const char* output; + const Message* messages; + size_t messages_len; +}; + +/// Compilation options +struct Options { + /// Pass generated SQL string trough a formatter that splits it + /// into multiple lines and prettifies indentation and spacing. + /// + /// Defaults to true. + bool format; + /// Target and dialect to compile to. + /// + /// Defaults to `sql.any`, which uses `target` argument from the query + /// header to determine the SQL dialect. + const char* target; + /// Emits the compiler signature as a comment after generated SQL + /// + /// Defaults to true. + bool signature_comment; +}; + +extern "C" +{ +/// Compile a PRQL string into a SQL string. +/// +/// This is a wrapper for: `prql_to_pl`, `pl_to_rq` and `rq_to_sql` without +/// converting to JSON between each of the functions. +/// +/// See `Options` struct for available compilation options. +/// +/// # Safety +/// +/// This function assumes zero-terminated input strings. +/// Calling code is responsible for freeing memory allocated for `CompileResult` +/// by calling `result_destroy`. +CompileResult compile(const char* prql_query, const Options* options); + +/// Build PL AST from a PRQL string. PL in documented in the +/// [prqlc Rust crate](https://docs.rs/prqlc/latest/prqlc/ir/pl). +/// +/// Takes PRQL source buffer and writes PL serialized as JSON to `out` buffer. +/// +/// Returns 0 on success and a negative number -1 on failure. +/// +/// # Safety +/// +/// This function assumes zero-terminated input strings. +/// Calling code is responsible for freeing memory allocated for `CompileResult` +/// by calling `result_destroy`. +CompileResult prql_to_pl(const char* prql_query); + +/// Finds variable references, validates functions calls, determines frames and +/// converts PL to RQ. PL and RQ are documented in the [prqlc Rust +/// crate](https://docs.rs/prqlc/latest/prqlc/ast). +/// +/// Takes PL serialized as JSON buffer and writes RQ serialized as JSON to `out` +/// buffer. +/// +/// Returns 0 on success and a negative number -1 on failure. +/// +/// # Safety +/// +/// This function assumes zero-terminated input strings. +/// Calling code is responsible for freeing memory allocated for `CompileResult` +/// by calling `result_destroy`. +CompileResult pl_to_rq(const char* pl_json); + +/// Convert RQ AST into an SQL string. RQ is documented in the +/// [prqlc Rust crate](https://docs.rs/prqlc/latest/prqlc/ir/rq). +/// +/// Takes RQ serialized as JSON buffer and writes SQL source to `out` buffer. +/// +/// Returns 0 on success and a negative number -1 on failure. +/// +/// # Safety +/// +/// This function assumes zero-terminated input strings. +/// Calling code is responsible for freeing memory allocated for `CompileResult` +/// by calling `result_destroy`. +CompileResult rq_to_sql(const char* rq_json, const Options* options); + +/// Destroy a `CompileResult` once you are done with it. +/// +/// # Safety +/// +/// This function expects to be called exactly once after the call of any the +/// functions that return `CompileResult`. No fields should be freed manually. +void result_destroy(CompileResult res); + +} // extern "C" + +} // namespace prqlc |