Skip to content

Instantly share code, notes, and snippets.

@lsgalves
Last active May 11, 2022 15:42
Show Gist options
  • Save lsgalves/1b8f88f5ea8031bb49c272b5f9740a94 to your computer and use it in GitHub Desktop.
Save lsgalves/1b8f88f5ea8031bb49c272b5f9740a94 to your computer and use it in GitHub Desktop.
Firebird Cheat Sheet

Firebird Cheat Sheet

Firebird Tracing presentation

List open transactions to connected database

SELECT * FROM MON$TRANSACTIONS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION;

Detach all connections to connected database

DELETE FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION;

View IO stats from instance

SELECT MON$PAGE_READS, MON$PAGE_WRITES, MON$PAGE_FETCHES, MON$PAGE_MARKS
FROM MON$IO_STATS WHERE MON$STAT_GROUP = 0;

Change table name

UPDATE RDB$RELATIONS SET RDB$RELATION_NAME='NEW TABLE NAME'
WHERE RDB$RELATION_NAME='OLD TABLE NAME';

UPDATE RDB$RELATION_FIELDS SET RDB$RELATION_NAME='NEW TABLE NAME'
WHERE RDB$RELATION_NAME='OLD TABLE NAME' AND RDB$SYSTEM_FLAG=0;

List tables

SELECT RDB$RELATION_NAME FROM RDB$RELATIONS
WHERE RDB$SYSTEM_FLAG=0 AND RDB$VIEW_BRL IS NULL;

List table fields

SELECT RDB$FIELD_NAME AS FIELD
FROM RDB$RELATIONS JOIN RDB$RELATION_FIELDS
ON (RDB$RELATION_FIELDS.RDB$RELATION_NAME = RDB$RELATIONS.RDB$RELATION_NAME)
WHERE RDB$RELATIONS.RDB$RELATION_NAME = 'TABLE NAME';

Cancelling all active queries for the specified connection

DELETE FROM MON$STATEMENTS WHERE MON$ATTACHMENT_ID = <ID>;

Display all active queries, excluding those running in your connection

SELECT
  ATT.MON$USER,
  ATT.MON$REMOTE_ADDRESS,
  STMT.MON$SQL_TEXT,
  STMT.MON$TIMESTAMP
FROM MON$ATTACHMENTS ATT
JOIN MON$STATEMENTS STMT ON ATT.MON$ATTACHMENT_ID = STMT.MON$ATTACHMENT_ID
WHERE ATT.MON$ATTACHMENT_ID <> CURRENT_CONNECTION
AND STMT.MON$STATE = 1;

Get the call stack for all connections except your own

WITH RECURSIVE
  HEAD AS (
    SELECT
      CALL.MON$STATEMENT_ID, CALL.MON$CALL_ID,
      CALL.MON$OBJECT_NAME, CALL.MON$OBJECT_TYPE
    FROM MON$CALL_STACK CALL
    WHERE CALL.MON$CALLER_ID IS NULL
    UNION ALL
    SELECT
      CALL.MON$STATEMENT_ID, CALL.MON$CALL_ID,
      CALL.MON$OBJECT_NAME, CALL.MON$OBJECT_TYPE
    FROM MON$CALL_STACK CALL
      JOIN HEAD ON CALL.MON$CALLER_ID = HEAD.MON$CALL_ID
  )
SELECT MON$ATTACHMENT_ID, MON$OBJECT_NAME, MON$OBJECT_TYPE
FROM HEAD
  JOIN MON$STATEMENTS STMT ON STMT.MON$STATEMENT_ID = HEAD.MON$STATEMENT_ID
WHERE STMT.MON$ATTACHMENT_ID <> CURRENT_CONNECTION;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment