buildSessionPgViewsViewSQL builds the catalog-scoped pg_catalog.pg_views compat view (same cross-catalog-leak rationale as buildSessionPgTablesViewSQL). Sources duckdb_views() filtered to current_database(); the compat views themselves live in memory.main and are excluded by name so a memory-catalog
()
| 584 | WHEN {dt} = 'BOOLEAN[]' THEN 1000::UINTEGER |
| 585 | WHEN {dt} = 'FLOAT[]' OR {dt} = 'DOUBLE[]' THEN 1022::UINTEGER |
| 586 | WHEN {dt} = 'REAL[]' THEN 1021::UINTEGER |
| 587 | WHEN {dt} = 'DATE[]' THEN 1182::UINTEGER |
| 588 | WHEN {dt} = 'TIMESTAMP[]' THEN 1115::UINTEGER |
| 589 | WHEN {dt} LIKE 'NUMERIC%[]' OR {dt} LIKE 'DECIMAL%[]' THEN 1231::UINTEGER |
| 590 | WHEN {dt} = 'UUID[]' THEN 2951::UINTEGER |
| 591 | WHEN {dt} = 'INTERVAL[]' THEN 1187::UINTEGER |
| 592 | WHEN {dt} = 'BLOB[]' OR {dt} = 'BYTEA[]' THEN 1001::UINTEGER |
| 593 | WHEN {dt} LIKE 'STRUCT%' THEN 2249::UINTEGER |
| 594 | ELSE {fallback}::UINTEGER |
| 595 | END` |
| 596 | return strings.NewReplacer("{dt}", dataTypeExpr, "{fallback}", fallbackExpr).Replace(template) |
| 597 | } |
| 598 | |
| 599 | func buildSessionPgAttributeViewSQL() string { |
| 600 | nativeTypeOID := pgTypeOIDCaseSQL("UPPER(dc.data_type)", "a.atttypid") |
| 601 | return fmt.Sprintf(` |
| 602 | CREATE OR REPLACE VIEW main.pg_attribute AS |
| 603 | SELECT |
| 604 | a.attrelid::UINTEGER AS attrelid, |
| 605 | a.attname, |
| 606 | %s AS atttypid, |
| 607 | a.attstattarget, |
no test coverage detected