Files
dbgate/plugins/dbgate-plugin-firebird/src/backend/sql/primaryKeys.js
2025-05-27 18:49:31 +02:00

29 lines
1.1 KiB
JavaScript

module.exports = `
SELECT
TRIM(rc.RDB$RELATION_NAME) AS "pureName",
TRIM(rc.RDB$CONSTRAINT_NAME) AS "constraintName",
TRIM(iseg.RDB$FIELD_NAME) AS "columnName",
CAST(NULL AS VARCHAR(63)) AS "refColumnName",
FALSE AS "isIncludedColumn",
CASE COALESCE(idx.RDB$INDEX_TYPE, 0) -- Treat NULL as 0 (ascending)
WHEN 1 THEN TRUE -- Assuming 1 means DESCENDING for regular (non-expression) indexes
ELSE FALSE -- Assuming 0 (or NULL) means ASCENDING for regular indexes
END AS "isDescending"
FROM
RDB$RELATION_CONSTRAINTS rc
JOIN
RDB$RELATIONS rel ON rc.RDB$RELATION_NAME = rel.RDB$RELATION_NAME
JOIN
RDB$INDICES idx ON rc.RDB$INDEX_NAME = idx.RDB$INDEX_NAME
JOIN
RDB$INDEX_SEGMENTS iseg ON idx.RDB$INDEX_NAME = iseg.RDB$INDEX_NAME
WHERE
rc.RDB$CONSTRAINT_TYPE = 'PRIMARY KEY'
AND COALESCE(rel.RDB$SYSTEM_FLAG, 0) = 0 -- Typically, you only want user-defined tables
AND ('tables:' || TRIM(rc.RDB$RELATION_NAME)) =OBJECT_ID_CONDITION
ORDER BY
"pureName",
"constraintName",
iseg.RDB$FIELD_POSITION;
`;