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,15 @@
delete from sqlpage_files
where path = $path and $confirm = 'yes'
returning
'redirect' as component,
sqlpage.link(
'index.sql',
json_build_object('deleted', $path)
) as link;
select 'alert' as component,
'Delete ' || $path || ' ?' as title,
'Are you sure you want to delete ' || $path || '?' as description,
'warning' as color,
sqlpage.link('delete.sql', json_build_object('path', $path, 'confirm', 'yes')) as link,
'Delete' as link_text;
@@ -0,0 +1,23 @@
select 'shell' as component,
'js/code-editor.js' as javascript;
select
'form' as component,
COALESCE('Editing ' || $path, 'New page') as title,
'insert_file.sql' as action;
select
'path' as name,
'text' as type,
'Name' as label,
$path as value,
'test.sql' as placeholder;
select
'textarea' as type,
'contents' as name,
'code-editor' as id,
'Contents' as label,
(select contents from sqlpage_files where path = $path) as value,
'SELECT ''text'' as component,
''Hello, world!'' as contents;' as placeholder;
@@ -0,0 +1,29 @@
select
'list' as component,
'Website files' as title;
select
path as title,
path as link,
sqlpage.link ('edit.sql', json_build_object ('path', path)) as edit_link,
sqlpage.link ('delete.sql', json_build_object ('path', path)) as delete_link
from
sqlpage_files;
select
'Create new file' as title,
'edit.sql' as link,
'file-plus' as icon,
'green' as color;
select 'list' as component,
'Database tables' as title;
select
table_name as title,
sqlpage.link ('view_table.sql', json_build_object('table_name', table_name)) as link
from
information_schema.tables
where
table_schema = 'public'
and table_type = 'BASE TABLE';
@@ -0,0 +1,10 @@
insert into sqlpage_files (path, contents)
values (:path, :contents::bytea)
on conflict (path)
do update set contents = excluded.contents
returning
'redirect' as component,
sqlpage.link(
'index.sql',
json_build_object('inserted', :path)
) as link;
@@ -0,0 +1,34 @@
const cdn = "https://cdn.jsdelivr.net/npm/monaco-editor@0.50.0/";
function on_monaco_load() {
// Create an editor div, display it after the '#code-editor' textarea, hide the textarea, and create a Monaco editor in the div with the contents of the textarea
// When the form is submitted, set the value of the textarea to the value of the Monaco editor
const textarea = document.getElementById("code-editor");
const editorDiv = document.createElement("div");
editorDiv.style.width = "100%";
editorDiv.style.height = "700px";
textarea.parentNode.insertBefore(editorDiv, textarea.nextSibling);
const monacoConfig = {
value: textarea.value,
language: "sql",
};
self.MonacoEnvironment = {
baseUrl: `${cdn}min/`,
};
const editor = monaco.editor.create(editorDiv, monacoConfig);
textarea.style.display = "none";
const form = textarea.form;
form.addEventListener("submit", () => {
textarea.value = editor.getValue();
});
}
function set_require_config() {
require.config({ paths: { vs: `${cdn}min/vs` } });
require(["vs/editor/editor.main"], on_monaco_load);
}
const loader_script = document.createElement("script");
loader_script.src = `${cdn}min/vs/loader.js`;
loader_script.onload = set_require_config;
document.head.appendChild(loader_script);
@@ -0,0 +1,15 @@
select 'title' as component, $table_name as contents;
select 'table' as component, true as search, true as sort;
select 'dynamic' as component, t as properties
from table_contents($table_name) t
LIMIT 1000;
select 'alert' as component,
CASE
WHEN COUNT(*) = 0 THEN 'The table is empty.'
WHEN COUNT(*) > 1000 THEN 'Only the first 1000 rows are shown.'
END as description,
'info' as color
from table_contents($table_name)
HAVING NOT COUNT(*) BETWEEN 1 AND 1000;