Author note: This example is not yet implemented and showcases where we're envisioning the syntax of the SQL to go
-- LSD has two fundamental pieces of syntax, -- identifiers and blocks. Blocks define the values -- that correspond with a given identifier. A block -- can be used to refer to a value as shown below some_number<|
123|
some_string<|
"foo"|
some_atom<|
wowza|
some_css_selector<|
body h1|
-- Using identifiers can be helpful for aliasing CSS math_topic<|
a#search-math|
adv_search<|
a[href="/search/advanced"]|
search_button<|
button.button.is-medium|
article_container<|
p.list-title span|
pdf_link<|
a:nth-child(1)|
next_page_button<|
a.pagination-next|
-- A block can also be used to define a query -- result that gets assigned to an identifier first_page_results<|
FROM
https://arxiv.org|> CLICK ON
math_topic|> CLICK ON
adv_search|> CLICK ON
search_button|> SELECT
pdf_link|> GROUP BY
article_container|
-- An identifier can derive from another one like -- starting from first_page_results second_page_results<|
FROM
first_page_results|> CLICK ON
next_page_button|> SELECT
pdf_link|> GROUP BY
article_container|
-- A block starting with a <|> is a short hand for a -- function. Similar to how python class methods -- implicitly have self as a first argument to a -- function, functions in LSD implicitly take on the -- context of the SQL block leading up to its -- invocation as a first argument dive_into_arxiv<|>
starting_page<|
FROM
starting_page|> CLICK ON
next_page_button|> SELECT
pdf_link|> GROUP BY
article_container|> WHEN EXISTS
next_page_buttonTHEN
dive_into_arxivELSE SELECT
pdf_link|
-- To provide additional arguments just separate -- identifiers with spaces function_with_arg<|>
starting_page text_to_type<|
FROM
starting_page|> ENTER INTO
input#search-bar text_to_type|> CLICK ON
button#search|
-- Without establishing a block, this is presumed -- to be the result of interestFROM
second_page_results|>
dive_into_arxiv second_page_results