chore: import upstream snapshot with attribution
CI / compile_and_lint (push) Failing after 0s
CI / docker_build (linux/amd64, -linux-amd64-duckdb, duckdb) (push) Failing after 0s
CI / docker_build (linux/arm64, -linux-arm64, minimal) (push) Failing after 2s
CI / docker_build (linux/arm64, -linux-arm64-duckdb, duckdb) (push) Failing after 1s
CI / docker_build (linux/amd64, minimal) (push) Failing after 1s
CI / test (, sqlite, sqlite::memory:) (push) Has been skipped
CI / test (mssql, mssql, mssql://root:Password123!@127.0.0.1/sqlpage) (push) Has been skipped
CI / test (mysql, mysql, mysql://root:Password123!@127.0.0.1/sqlpage) (push) Has been skipped
CI / test (oracle, oracle, Driver=Oracle 21 ODBC driver;Dbq=//127.0.0.1:1521/FREEPDB1;Uid=root;Pwd=Password123!) (push) Has been skipped
CI / test (postgres, odbc, Driver=PostgreSQL Unicode;Server=127.0.0.1;Port=5432;Database=sqlpage;UID=root;PWD=Password123!, true) (push) Has been skipped
CI / test (postgres, postgres, postgres://root:Password123!@127.0.0.1/sqlpage) (push) Has been skipped
CI / playwright (push) Has been skipped
CI / docker_build (linux/arm/v7, -linux-arm-v7, minimal) (push) Failing after 0s
CI / hurl_examples (push) Failing after 8s
deploy website / deploy_official_site (push) Failing after 1s
CI / hurl (${{ matrix.example }}) (push) Has been skipped
CI / docker_push (duckdb) (push) Has been cancelled
CI / docker_push (minimal) (push) Has been cancelled
CI / windows_test (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 12:31:57 +08:00
commit d718c5a372
986 changed files with 74597 additions and 0 deletions
@@ -0,0 +1,6 @@
-- this test is skipped on MSSQL and postgres because their json_object function has a different syntax
select 'columns' as component;
select
JSON_OBJECT('description', 'It works !') as item,
JSON_OBJECT('description', 'It works !') as item
;
@@ -0,0 +1,129 @@
select 'dynamic' as component,'{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"dynamic","properties":
{"component":"text", "contents": "It works ! (but it shouldn''t)"}
}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
' as properties;
@@ -0,0 +1 @@
select 'yes' as "It works !";
@@ -0,0 +1,2 @@
-- "<!DOCTYPE html><body>It works !</body>" in base64
select 'download' as component, 'data:text/html;base64,PCFET0NUWVBFIGh0bWw+PGJvZHk+SXQgd29ya3MgITwvYm9keT4K' as data_url;
@@ -0,0 +1,2 @@
-- "<!DOCTYPE html><body>It works !</body>" percent encoded
select 'download' as component, 'data:text/html,%3C!DOCTYPE%20html%3E%3Cbody%3EIt%20works%20!%3C%2Fbody%3E' as data_url;
@@ -0,0 +1,8 @@
-- Checks that we can have a page with a single dynamic component containing multiple children
select 'dynamic' as component,
'[
{"component":"dynamic", "properties": [
{"component":"text"},
{"contents":"It works !", "bold":true}
]}
]' as properties;
@@ -0,0 +1,6 @@
-- Checks that we can have a page with a single dynamic component containing multiple children
select 'dynamic' as component,
'{"component":"text"}' as properties,
'{"contents":"Hello, ", "bold":true}' as properties,
'{"component":"text"}' as properties,
'{"contents":"It works !", "bold":true}' as properties;
@@ -0,0 +1,2 @@
select 'dynamic' as component,
sqlpage.run_sql('tests/sql_test_files/component_rendering/dynamic_shell.sql') as properties;
@@ -0,0 +1,7 @@
-- Checks that we can have a page with a single dynamic component containing multiple children
select 'dynamic' as component,
'[
{"component":"shell", "title":"It works !"},
{"component":"text"},
{"contents":"Yes it does !", "bold":true}
]' as properties;
@@ -0,0 +1,8 @@
-- Checks that we can have a page with a single dynamic component containing multiple children
select 'dynamic' as component,
'[
{"component":"text"},
{"contents":"Hello, ", "bold":true},
{"component":"text"},
{"contents":"It works !", "bold":true}
]' as properties;
@@ -0,0 +1,5 @@
select 'text' as component;
select 'hello world' as contents;
select 'cookie' as component,
'username' as name,
'John Doe' as value;
@@ -0,0 +1,2 @@
-- https://github.com/sqlpage/SQLPage/issues/788
copy this_table_does_not_exist (csv) from 'recon_csv_file_input' DELIMITER '*' CSV;
@@ -0,0 +1,2 @@
select 'dynamic' as component,
'{ "this object": "has a forbidden comma" , }' as properties; -- this is invalid JSON, and should cause an error
@@ -0,0 +1,4 @@
select 'shell' as component,
lower(sqlpage.url_encode(lower('HELLO'))) as title;
-- this is invalid, because the sqlpage pseudo-function is sandwiched between two native SQL functions.
-- It can't be executed neither before nor after the query is executed.
@@ -0,0 +1,2 @@
select 'shell' as component, 'hello' as title;
select 'shell' as component, 'world' as title;
@@ -0,0 +1 @@
select 'dynamic' as component; -- missing "properties" column
@@ -0,0 +1,4 @@
select 'debug' as component,
sqlpage.run_sql(
'tests/sql_test_files/component_rendering/error_too_many_nested_inclusions.sql'
) as contents;
@@ -0,0 +1,4 @@
select sqlpage.fetch('{
"url": "https://example.com",
"invalid_field": "should fail"
}')
@@ -0,0 +1,6 @@
select 'log' as component,
'Hello, World!' as message,
'info' as level;
select 'text' as component,
'It works !' as contents;
@@ -0,0 +1,6 @@
-- https://github.com/sqlpage/SQLPage/discussions/600
select 'table' as component, 'Link' AS markdown; -- uppercase Link
select '[It works !](https://example.com)
[comment]: <> (This is a comment. If this is visible, there is an error in markdown rendering)' as link; -- lowercase "link".
-- If the markdown is not rendered, the page will contain the string "error" and trigger a test failure.
@@ -0,0 +1,2 @@
select 'dynamic' as component,
sqlpage.run_sql('tests/sql_test_files/component_rendering/simple.sql') as properties;
@@ -0,0 +1,14 @@
select
'dynamic' as component,
sqlpage.run_sql (
'tests/components/display_text.sql',
CONCAT ('{"html":"', html, '"}') -- UNSAFE. Don't do that with untrusted data. We do it here because we can't use json_object (the syntax is not the same in all supported databases)
) as properties
from
(
select
'It ' as html
union all
select
'works !'
) t1;
@@ -0,0 +1,4 @@
set html = 'It ';
select 'dynamic' as component, sqlpage.run_sql('tests/components/display_text.sql') as properties;
set html = 'works !';
select 'dynamic' as component, sqlpage.run_sql('tests/components/display_text.sql') as properties;
@@ -0,0 +1,3 @@
select 'shell' as component,
'/' as search_target,
'It works !' as search_value;
@@ -0,0 +1,2 @@
select 'shell' as component, 'Hello world !' AS title;
select 'text' as component, 'It works !' AS contents;
@@ -0,0 +1,4 @@
-- Doesnt work on mssql because it does not support "create temporary table"
create temporary table temp_t(x text);
insert into temp_t(x) values ('It works !');
select 'dynamic' as component, sqlpage.run_sql('tests/sql_test_files/select_temp_t.sql') AS properties;
@@ -0,0 +1,2 @@
select 'text' as component,
'### It works !' AS contents_md;
@@ -0,0 +1,2 @@
select 'text' as component,
'<span>It works !</span>' AS unsafe_contents_md;
@@ -0,0 +1,2 @@
select 'shell-empty' as component;
select 'text' as component, '<!DOCTYPE html><html><head><title>My page</title></head><body><h1>It works !</h1></body></html>' as html;