diff --git a/registry/sqlx-data.json b/registry/sqlx-data.json index 5decdd7e..42ec98a2 100644 --- a/registry/sqlx-data.json +++ b/registry/sqlx-data.json @@ -165,6 +165,24 @@ }, "query": "\n UPDATE categories\n SET extension_count = extension_count + 1\n WHERE id = $1\n " }, + "2311356229c28ad26b36970d326746d7579d46139ff61ec5b6d077bc900f3a36": { + "describe": { + "columns": [ + { + "name": "result", + "ordinal": 0, + "type_info": "Json" + } + ], + "nullable": [ + null + ], + "parameters": { + "Left": [] + } + }, + "query": "\n SELECT\n json_build_object(\n 'name', tp.name,\n 'description', latest_tpvs.description,\n 'documentation_link', latest_tpvs.documentation_link,\n 'repository_link', latest_tpvs.repository_link,\n 'version', latest_tpvs.version,\n 'postgres_versions', (\n SELECT json_agg(pg.major)\n FROM v1.trunk_project_postgres_support tpps\n JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id\n WHERE tpps.trunk_project_version_id = latest_tpvs.id\n ),\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tp.name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = latest_tpvs.id\n )\n ) AS result\n FROM\n v1.trunk_project tp\n JOIN (\n SELECT tpv.*\n FROM v1.trunk_project_versions tpv\n JOIN (\n SELECT trunk_project_name, MAX(string_to_array(version, '.')::int[]) as max_version\n FROM v1.trunk_project_versions\n GROUP BY trunk_project_name\n ) sub_tpv\n ON tpv.trunk_project_name = sub_tpv.trunk_project_name\n AND string_to_array(tpv.version, '.')::int[] = sub_tpv.max_version\n ) latest_tpvs\n ON tp.name = latest_tpvs.trunk_project_name\n ORDER BY tp.name" + }, "246a9f7369555b2fbedcc5db3ac5a84ce5c889b227095a07e420b7b0b4a3ea3b": { "describe": { "columns": [], @@ -228,6 +246,27 @@ }, "query": "SELECT *\n FROM extension_owners\n WHERE\n extension_id = $1" }, + "27587110b412c39be602676f5fbe6f51872ec9fa31e2eec1e216e21ddd7a6fcc": { + "describe": { + "columns": [ + { + "name": "result", + "ordinal": 0, + "type_info": "Json" + } + ], + "nullable": [ + null + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + } + }, + "query": "SELECT json_build_object(\n 'name', tpv.trunk_project_name,\n 'description', tpv.description,\n 'version', tpv.version,\n 'documentation_link', tpv.documentation_link,\n 'repository_link', tpv.repository_link,\n 'postgres_versions', (\n SELECT json_agg(pg.major)\n FROM v1.trunk_project_postgres_support tpps\n JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id\n WHERE tpps.trunk_project_version_id = tpv.id\n ),\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tpv.trunk_project_name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = tpv.id\n )\n ) AS result\n FROM\n v1.trunk_project_versions tpv\n WHERE\n tpv.trunk_project_name = $1\n AND tpv.version = $2" + }, "2898d7f3b57a07860872d2675506faf25583f041b6862d77a3e6fab1dc54d847": { "describe": { "columns": [ @@ -522,6 +561,26 @@ }, "query": "SELECT user_name\n FROM api_tokens\n WHERE\n token = $1" }, + "4792b54a631ca09d4c0c76ed57f2526d202f263eec221cc503386eac8642a572": { + "describe": { + "columns": [ + { + "name": "result", + "ordinal": 0, + "type_info": "Json" + } + ], + "nullable": [ + null + ], + "parameters": { + "Left": [ + "Text" + ] + } + }, + "query": "SELECT\n json_build_object(\n 'name', tpv.trunk_project_name,\n 'description', tpv.description,\n 'documentation_link', tpv.documentation_link,\n 'repository_link', tpv.repository_link,\n 'version', tpv.version,\n 'postgres_versions', (\n SELECT json_agg(pg.major)\n FROM v1.trunk_project_postgres_support tpps\n JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id\n WHERE tpps.trunk_project_version_id = tpv.id\n ),\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tpv.trunk_project_name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = tpv.id\n )\n ) AS result\n FROM\n v1.trunk_project_versions tpv\n JOIN v1.extension_versions ev ON ev.trunk_project_version_id = tpv.id\n JOIN (\n SELECT extension_name, MAX(string_to_array(version, '.')::int[]) as max_version\n FROM v1.extension_versions\n WHERE extension_name = $1\n GROUP BY extension_name\n ) sub_ev ON ev.extension_name = sub_ev.extension_name AND string_to_array(ev.version, '.')::int[] = sub_ev.max_version\n " + }, "49a41631cfe21efe58022e6e4026e6f3d388d8bb12ac478dbf30addab78d430e": { "describe": { "columns": [ @@ -980,24 +1039,6 @@ }, "query": "\n INSERT INTO api_tokens(user_id, user_name, token, created_at)\n VALUES ($1, $2, $3, (now() at time zone 'utc'))\n " }, - "825b6399dd7d3709f5538fce33b71fce462db236e77c7767bdbd1acf69223032": { - "describe": { - "columns": [ - { - "name": "result", - "ordinal": 0, - "type_info": "Json" - } - ], - "nullable": [ - null - ], - "parameters": { - "Left": [] - } - }, - "query": "\n SELECT\n json_build_object(\n 'name', tp.name,\n 'description', latest_tpvs.description,\n 'documentation_link', latest_tpvs.documentation_link,\n 'repository_link', latest_tpvs.repository_link,\n 'version', latest_tpvs.version,\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tp.name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = latest_tpvs.id\n )\n ) AS result\n FROM\n v1.trunk_project tp\n JOIN (\n SELECT tpv.*\n FROM v1.trunk_project_versions tpv\n JOIN (\n SELECT trunk_project_name, MAX(string_to_array(version, '.')::int[]) as max_version\n FROM v1.trunk_project_versions\n GROUP BY trunk_project_name\n ) sub_tpv\n ON tpv.trunk_project_name = sub_tpv.trunk_project_name\n AND string_to_array(tpv.version, '.')::int[] = sub_tpv.max_version\n ) latest_tpvs\n ON tp.name = latest_tpvs.trunk_project_name\n ORDER BY tp.name" - }, "8937136b4deb49610728a789a022f48c42064d13df598b8c38a90662443f02ae": { "describe": { "columns": [], @@ -1247,26 +1288,6 @@ }, "query": "SELECT * FROM versions WHERE extension_id = $1 AND num = $2" }, - "b0e7d9787b9eb5b025d3b237f65acb13cc551a7ef0f2ffae7ed06b73525f4b52": { - "describe": { - "columns": [ - { - "name": "result", - "ordinal": 0, - "type_info": "Json" - } - ], - "nullable": [ - null - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT\n json_build_object(\n 'name', tpv.trunk_project_name,\n 'description', tpv.description,\n 'version', tpv.version,\n 'documentation_link', tpv.documentation_link,\n 'repository_link', tpv.repository_link,\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tpv.trunk_project_name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = tpv.id\n )\n ) AS result\n FROM\n v1.trunk_project_versions tpv\n WHERE\n tpv.trunk_project_name = $1" - }, "bd184a09a0f45acc606a45ef90e0e41c500128881c1284374823f53c978b527d": { "describe": { "columns": [], @@ -1393,26 +1414,6 @@ }, "query": "SELECT * FROM extension_detail_vw" }, - "c8876d5fd044e2a447196117983326ec258304fb0892c016e24e4c78de651e33": { - "describe": { - "columns": [ - { - "name": "result", - "ordinal": 0, - "type_info": "Json" - } - ], - "nullable": [ - null - ], - "parameters": { - "Left": [ - "Text" - ] - } - }, - "query": "SELECT\n json_build_object(\n 'name', tpv.trunk_project_name,\n 'description', tpv.description,\n 'documentation_link', tpv.documentation_link,\n 'repository_link', tpv.repository_link,\n 'version', tpv.version,\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tpv.trunk_project_name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = tpv.id\n )\n ) AS result\n FROM\n v1.trunk_project_versions tpv\n JOIN v1.extension_versions ev ON ev.trunk_project_version_id = tpv.id\n JOIN (\n SELECT extension_name, MAX(string_to_array(version, '.')::int[]) as max_version\n FROM v1.extension_versions\n WHERE extension_name = $1\n GROUP BY extension_name\n ) sub_ev ON ev.extension_name = sub_ev.extension_name AND string_to_array(ev.version, '.')::int[] = sub_ev.max_version\n " - }, "e41ccd0b4b07c1761d78d4de2efdba33979114f1b055db3261af653afca8be56": { "describe": { "columns": [], @@ -1432,7 +1433,7 @@ }, "query": "\n INSERT INTO versions(extension_id, num, created_at, yanked, license, published_by, extension_name, system_dependencies, libraries)\n VALUES ($1, $2, (now() at time zone 'utc'), $3, $4, $5, $6, $7::jsonb, $8::jsonb)\n " }, - "e905022dcb31c2a862579c02b53c7b2e17ad34584eb711eb6d149bbcf4760e26": { + "eee7c90c015003f5ec23f630582431b12a62216b7a4e07b11b1725b6d6231ae7": { "describe": { "columns": [ { @@ -1446,12 +1447,11 @@ ], "parameters": { "Left": [ - "Text", "Text" ] } }, - "query": "SELECT json_build_object(\n 'name', tpv.trunk_project_name,\n 'description', tpv.description,\n 'version', tpv.version,\n 'documentation_link', tpv.documentation_link,\n 'repository_link', tpv.repository_link,\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tpv.trunk_project_name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = tpv.id\n )\n ) AS result\n FROM\n v1.trunk_project_versions tpv\n WHERE\n tpv.trunk_project_name = $1\n AND tpv.version = $2" + "query": "SELECT\n json_build_object(\n 'name', tpv.trunk_project_name,\n 'description', tpv.description,\n 'version', tpv.version,\n 'documentation_link', tpv.documentation_link,\n 'repository_link', tpv.repository_link,\n 'postgres_versions', (\n SELECT json_agg(pg.major)\n FROM v1.trunk_project_postgres_support tpps\n JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id\n WHERE tpps.trunk_project_version_id = tpv.id\n ),\n 'extensions', (\n SELECT json_agg(json_build_object(\n 'extension_name', ev.extension_name,\n 'version', ev.version,\n 'trunk_project_name', tpv.trunk_project_name,\n 'dependencies_extension_names', (\n SELECT json_agg(ed.depends_on_extension_name)\n FROM v1.extension_dependency ed\n WHERE ed.extension_version_id = ev.id\n ),\n 'loadable_libraries', (\n SELECT json_agg(json_build_object(\n 'library_name', ell.library_name,\n 'requires_restart', ell.requires_restart,\n 'priority', ell.priority\n ))\n FROM v1.extensions_loadable_libraries ell\n WHERE ell.extension_version_id = ev.id\n ),\n 'configurations', (\n SELECT json_agg(json_build_object(\n 'name', ec.configuration_name,\n 'is_required', ec.is_required,\n 'default', ec.recommended_default_value\n ))\n FROM v1.extension_configurations ec\n WHERE ec.extension_version_id = ev.id\n )\n ))\n FROM v1.extension_versions ev\n WHERE ev.trunk_project_version_id = tpv.id\n )\n ) AS result\n FROM\n v1.trunk_project_versions tpv\n WHERE\n tpv.trunk_project_name = $1" }, "f29a9769c67e94ef0eb534c3ea009496dc13426c6d46f545ada1f9ebc9def26b": { "describe": { diff --git a/registry/src/routes/extensions.rs b/registry/src/routes/extensions.rs index 3bf85381..ab57b701 100644 --- a/registry/src/routes/extensions.rs +++ b/registry/src/routes/extensions.rs @@ -336,6 +336,8 @@ async fn insert_into_v1( documentation_link: new_extension.documentation, repository_link: new_extension.repository.unwrap_or_default(), version: new_extension.vers.to_string(), + // TODO: state in Trunk.toml the supported versions + postgres_versions: None, extensions: extension_views, }; diff --git a/registry/src/v1/repository.rs b/registry/src/v1/repository.rs index 5f56dc6b..e440d979 100644 --- a/registry/src/v1/repository.rs +++ b/registry/src/v1/repository.rs @@ -12,6 +12,7 @@ pub struct TrunkProjectView { pub documentation_link: Option, pub repository_link: String, pub version: String, + pub postgres_versions: Option>, pub extensions: Vec, } @@ -35,6 +36,12 @@ impl Registry { 'documentation_link', latest_tpvs.documentation_link, 'repository_link', latest_tpvs.repository_link, 'version', latest_tpvs.version, + 'postgres_versions', ( + SELECT json_agg(pg.major) + FROM v1.trunk_project_postgres_support tpps + JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id + WHERE tpps.trunk_project_version_id = latest_tpvs.id + ), 'extensions', ( SELECT json_agg(json_build_object( 'extension_name', ev.extension_name, @@ -104,6 +111,12 @@ impl Registry { 'documentation_link', tpv.documentation_link, 'repository_link', tpv.repository_link, 'version', tpv.version, + 'postgres_versions', ( + SELECT json_agg(pg.major) + FROM v1.trunk_project_postgres_support tpps + JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id + WHERE tpps.trunk_project_version_id = tpv.id + ), 'extensions', ( SELECT json_agg(json_build_object( 'extension_name', ev.extension_name, @@ -168,6 +181,12 @@ impl Registry { 'version', tpv.version, 'documentation_link', tpv.documentation_link, 'repository_link', tpv.repository_link, + 'postgres_versions', ( + SELECT json_agg(pg.major) + FROM v1.trunk_project_postgres_support tpps + JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id + WHERE tpps.trunk_project_version_id = tpv.id + ), 'extensions', ( SELECT json_agg(json_build_object( 'extension_name', ev.extension_name, @@ -229,6 +248,12 @@ impl Registry { 'version', tpv.version, 'documentation_link', tpv.documentation_link, 'repository_link', tpv.repository_link, + 'postgres_versions', ( + SELECT json_agg(pg.major) + FROM v1.trunk_project_postgres_support tpps + JOIN v1.postgres_version pg ON tpps.postgres_version_id = pg.id + WHERE tpps.trunk_project_version_id = tpv.id + ), 'extensions', ( SELECT json_agg(json_build_object( 'extension_name', ev.extension_name,