You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Rewrite shared fragment to look like function calls:
@attribute(cql:shared_fragment)
CREATE PROCEDURE ShapeDeclaration()
BEGIN
SELECT
NULL_TEXT text_column,
NULL_INT int_column,
TRUE bool_column
WHERE FALSE;
END
@attribute(cql:shared_fragment)
CREATE PROCEDURE RowAdder()
BEGIN
WITH source(*) LIKE ShapeDeclaration,
rows_added(*) AS (
SELECT * FROM source
UNION ALL
SELECT * FROM my_table_with_matching_columns
)
SELECT * FROM rows_added;
END
@attribute(cql:shared_fragment)
CREATE PROCEDURE ColumnAdder()
BEGIN
WITH source(*) LIKE ShapeDeclaration,
columns_added(*) AS (
SELECT source.*, other_table.other_column
FROM source
INNER JOIN other_table ON source.id = other_table.id
)
SELECT * FROM columns_added;
END
CREATE PROCEDURE FinalQuery()
BEGIN
WITH shape(*) AS (CALL ShapeDeclaration()),
with_threads(*) AS (CALL RowAdder()) USING shape AS source),
with_extra_column(*) AS (CALL ColumnAdder() USING with_threads AS source)
SELECT * FROM with_extra_column;
END
To something like this:
interface ShapeDeclaration {
text_column: text,
int_column: int,
bool_column: bool,
}
proc RowAdder(source: ShapeDeclaration)
{
select * from source
union all
select * from my_table_with_matching_columns;
}
proc ColumnAdder(source: ShapeDeclaration)
{
select source.*, other_table.other_column
from source
inner join other_table on source.id = other_table.id
}
proc FinalQuery()
{
let base: ShapeDeclaration = {};
let with_rows = RowAdder(base);
let with_extra_columns = ColumnAdder(with_rows);
select * from with_extra_columns;
}
We're introducing the notion of object interface (aka CQL shape) that represent a shared fragment result and those object can be composed.
sproc FinalQuery() implementation looks much more simpler in the second example.
Share fragment feature is a great feature that allow sproc composability but at the same the syntax to call them look confusing and congested:
...
WITH shape(*) AS (CALL ShapeDeclaration()),
with_threads(*) AS (CALL RowAdder()) USING shape AS source),
with_extra_column(*) AS (CALL ColumnAdder() USING with_threads AS source)
...
The text was updated successfully, but these errors were encountered:
Rewrite shared fragment to look like function calls:
To something like this:
We're introducing the notion of object interface (aka CQL shape) that represent a shared fragment result and those object can be composed.
sproc
FinalQuery()
implementation looks much more simpler in the second example.Share fragment feature is a great feature that allow sproc composability but at the same the syntax to call them look confusing and congested:
The text was updated successfully, but these errors were encountered: