Files
documentdb/pg_documentdb/sql/udfs/metadata/empty_data_table--latest.sql
Zinan Ren 4e093b2c9d Merged PR 1545484: [OSS] Porting udfs into documentdb - part 2
### Does this PR have any customer impact?
No
### Type (Feature, Refactoring, Bugfix, DevOps, Testing, Perf, etc)
Refactoring
### Does it involve schema level changes? (Table, Column, Index, UDF, etc level changes)
Yes
### Are you introducing any new config? If yes, do you have tests with and without them being set?
No
### Release Note (Refer [Template](../docs/release_notes/pgmongo_template.md))

### Description

Porting udfs into documentdb

----
#### AI description  (iteration 1)
#### PR Classification
Code cleanup and feature enhancement.

#### PR Summary
This pull request continues the porting of UDFs into DocumentDB, updating and including various SQL files for better functionality and organization.
- Updated `documentdb--0.24-0.sql` to include new UDFs and operators, replacing old function references.
- Added new UDFs for query, projection, geospatial, aggregation, metadata, schema management, index management, CRUD commands, user management, schema validation, telemetry, TTL, vector search, extension version, diagnostic, and RBAC metadata.
- Removed outdated function definitions and replaced them with updated SQL includes.
2025-01-15 07:48:41 +00:00

29 lines
1.3 KiB
PL/PgSQL

/*
* This function returns rows from an empty table that mimics a mongo data table
* w.r.t. the data types of the columns.
*
* We need this to enable scenarios that require us to return an the equvalent of a
empty collection when the collection does not exists.
*
* The planner hook for __API_SCHEMA__.collection('db', 'collName') will call this function
* when the desired collection is not found.
*
* We could have made a similar change in the __API_SCHEMA__.collection() function itself,
* but having a different function provides better debuggability, i.e., the EXPLAIN will
* show "Function Scan on empty_data_table collection" instead of "Function Scan on collection".
* The latter could happen for other reasons.
*/
DROP FUNCTION IF EXISTS __API_SCHEMA_V2__.empty_data_table;
CREATE OR REPLACE FUNCTION __API_SCHEMA_INTERNAL_V2__.empty_data_table(
OUT shard_key_value bigint,
OUT object_id __CORE_SCHEMA_V2__.bson,
OUT document __CORE_SCHEMA_V2__.bson,
OUT creation_time timestamptz)
RETURNS SETOF record
AS $fn$
BEGIN
RETURN QUERY EXECUTE format($$SELECT 0::bigint, null::__CORE_SCHEMA_V2__.bson, null::__CORE_SCHEMA_V2__.bson, null::timestamptz WHERE false$$);
END;
$fn$ LANGUAGE plpgsql;
COMMENT ON FUNCTION __API_SCHEMA_INTERNAL_V2__.empty_data_table()
IS 'mimics a data collection with 0 rows';