CREATE OR REPLACE FUNCTION ivymy.show_columns_internal( IN tb_name char, IN db_name char DEFAULT NULL, OUT "Field" varchar, OUT "Type" longtext, OUT "Collation" varchar, OUT "Null" varchar, OUT "Key" varchar, OUT "Default" longtext, OUT "Extra" varchar, OUT "Privileges" varchar, OUT "Comment" varchar) RETURNS SETOF record AS $$ BEGIN IF db_name IS NOT NULL AND to_regclass(concat(db_name, '.', tb_name)) IS NULL THEN RAISE EXCEPTION 'Table ''%'' doesn''t exist', concat(db_name, '.', tb_name); END IF;
IF db_name IS NULL AND to_regclass(tb_name) IS NULL THEN RAISE EXCEPTION 'Table ''%'' doesn''t exist', tb_name; END IF;
IF db_name IS NULL THEN RETURN QUERY SELECT COLUMN_NAME, COLUMN_TYPE, COLLATION_NAME, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA, PRIVILEGES, COLUMN_COMMENT FROM mys_information_schema.showcolumns WHERE table_name = tb_name ORDER BY ORDINAL_POSITION; ELSE RETURN QUERY SELECT COLUMN_NAME, COLUMN_TYPE, COLLATION_NAME, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA, PRIVILEGES, COLUMN_COMMENT FROM mys_information_schema.showcolumns WHERE table_name = tb_name AND table_schema = db_name ORDER BY ORDINAL_POSITION; END IF; END $$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ivymy.show_columns_normal( IN tb_name char, IN db_name char DEFAULT NULL, OUT "Field" varchar, OUT "Type" longtext, OUT "Null" varchar, OUT "Key" varchar, OUT "Default" longtext, OUT "Extra" varchar) RETURNS SETOF record AS $$ SELECT field, type, "null", "key", "default", extra FROM ivymy.show_columns_internal(tb_name, db_name); $$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION ivymy.show_columns_full( IN tb_name char, IN db_name char DEFAULT NULL, OUT "Field" varchar, OUT "Type" longtext, OUT "Collation" varchar, OUT "Null" varchar, OUT "Key" varchar, OUT "Default" longtext, OUT "Extra" varchar, OUT "Privileges" varchar, OUT "Comment" varchar) RETURNS SETOF record AS $$ SELECT field, type, "collation", "null", "key", "default", extra, privileges, comment FROM ivymy.show_columns_internal(tb_name, db_name); $$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION ivymy.show_indexes( IN tb_name char, IN db_name char DEFAULT NULL, OUT "Table" varchar, OUT "Non_unique" bigint, OUT "Key_name" varchar, OUT "Seq_in_index" bigint, OUT "Column_name" varchar, OUT "Collation" varchar, OUT "Cardinality" bigint, OUT "Sub_part" bigint, OUT "Packed" varchar, OUT "Null" varchar, OUT "Index_type" varchar, OUT "Comment" varchar, OUT "Index_comment" varchar) RETURNS SETOF record AS $$ BEGIN IF db_name IS NOT NULL AND to_regclass(concat(db_name, '.', tb_name)) IS NULL THEN RAISE EXCEPTION 'Table ''%'' doesn''t exist', concat(db_name, '.', tb_name); END IF;
IF db_name IS NULL AND to_regclass(tb_name) IS NULL THEN RAISE EXCEPTION 'Table ''%'' doesn''t exist', tb_name; END IF;
IF db_name IS NULL THEN RETURN QUERY SELECT TABLE_NAME, NON_UNIQUE, INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, "COLLATION", CARDINALITY, SUB_PART, PACKED, NULLABLE, INDEX_TYPE, COMMENT, INDEX_COMMENT FROM mys_information_schema.showstatistics WHERE table_name = tb_name; ELSE RETURN QUERY SELECT TABLE_NAME, NON_UNIQUE, INDEX_NAME, SEQ_IN_INDEX, COLUMN_NAME, "COLLATION", CARDINALITY, SUB_PART, PACKED, NULLABLE, INDEX_TYPE, COMMENT, INDEX_COMMENT FROM mys_information_schema.showstatistics WHERE table_name = tb_name AND index_schema = db_name; END IF; END $$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ivymy.show_table_status( IN db_name char DEFAULT NULL, OUT "Name" varchar, OUT "Engine" varchar, OUT "Version" uint8, OUT "Row_format" varchar, OUT "Rows" uint8, OUT "Avg_row_length" uint8, OUT "Data_length" uint8, OUT "Max_data_length" uint8, OUT "Index_length" uint8, OUT "Data_free" uint8, OUT "Auto_increment" uint8, OUT "Create_time" datetime, OUT "Update_time" datetime, OUT "Check_time" datetime, OUT "Collation" varchar, OUT "Checksum" uint8, OUT "Create_options" varchar, OUT "Comment" varchar) RETURNS SETOF record AS $$ BEGIN IF db_name IS NOT NULL AND to_regnamespace(db_name) IS NULL THEN RAISE EXCEPTION 'Unknown database ''%''', db_name; END IF;
IF db_name IS NULL THEN RETURN QUERY SELECT "TABLE_NAME", "ENGINE", "VERSION", "ROW_FORMAT", "TABLE_ROWS", "AVG_ROW_LENGTH", "DATA_LENGTH", "MAX_DATA_LENGTH", "INDEX_LENGTH", "DATA_FREE", "AUTO_INCREMENT", "CREATE_TIME", "UPDATE_TIME", "CHECK_TIME", "TABLE_COLLATION", "CHECKSUM", "CREATE_OPTIONS", "TABLE_COMMENT" FROM mys_information_schema.showtables; ELSE RETURN QUERY SELECT "TABLE_NAME", "ENGINE", "VERSION", "ROW_FORMAT", "TABLE_ROWS", "AVG_ROW_LENGTH", "DATA_LENGTH", "MAX_DATA_LENGTH", "INDEX_LENGTH", "DATA_FREE", "AUTO_INCREMENT", "CREATE_TIME", "UPDATE_TIME", "CHECK_TIME", "TABLE_COLLATION", "CHECKSUM", "CREATE_OPTIONS", "TABLE_COMMENT" FROM mys_information_schema.showtables WHERE table_schema = db_name; END IF; END $$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ivymy.show_triggers( IN db_name char DEFAULT NULL, OUT "Trigger" varchar, OUT "Event" varchar, OUT "Table" varchar, OUT "Statement" longtext, OUT "Timing" varchar, OUT "Created" datetime(2), OUT "sql_mode" varchar, OUT "Definer" varchar, OUT "character_set_client" varchar, OUT "collation_connection" varchar, OUT "Database Collation" varchar) RETURNS SETOF record AS $$ BEGIN IF db_name IS NOT NULL AND to_regnamespace(db_name) IS NULL THEN RAISE EXCEPTION 'Unknown database ''%''', db_name; END IF;
IF db_name IS NULL THEN RETURN QUERY SELECT "TRIGGER_NAME", "EVENT_MANIPULATION", "EVENT_OBJECT_TABLE", "ACTION_STATEMENT", "ACTION_TIMING", "CREATED", "SQL_MODE", "DEFINER", "CHARACTER_SET_CLIENT", "COLLATION_CONNECTION", "DATABASE_COLLATION" FROM mys_information_schema.triggers; ELSE RETURN QUERY SELECT "TRIGGER_NAME", "EVENT_MANIPULATION", "EVENT_OBJECT_TABLE", "ACTION_STATEMENT", "ACTION_TIMING", "CREATED", "SQL_MODE", "DEFINER", "CHARACTER_SET_CLIENT", "COLLATION_CONNECTION", "DATABASE_COLLATION" FROM mys_information_schema.triggers WHERE trigger_schema = db_name; END IF; END $$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ivymy.show_databases(OUT "Database" varchar) RETURNS SETOF varchar AS $$ SELECT "SCHEMA_NAME" FROM mys_information_schema.schemata; $$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION ivymy.show_processlist( OUT "Id" varchar, OUT "User" varchar, OUT "Host" varchar, OUT "db" varchar, OUT "Command" varchar, OUT "Time" varchar, OUT "State" varchar, OUT "Info" varchar) RETURNS SETOF record AS $$ SELECT "ID", "USER","HOST", "DB", "COMMAND", "TIME", "STATE", "INFO" FROM mys_information_schema.processlist; $$ LANGUAGE SQL;
CREATE OR REPLACE FUNCTION ivymy.show_tables( IN db_name char DEFAULT current_schema()) RETURNS SETOF record AS $$ BEGIN IF db_name IS NOT NULL AND to_regnamespace(db_name) IS NULL THEN RAISE EXCEPTION 'Unknown database ''%''', db_name; END IF;
RETURN QUERY SELECT "TABLE_NAME", "TABLE_TYPE" FROM mys_information_schema.tables WHERE table_schema = db_name; END $$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ivymy.show_create_views( IN view_name char, IN db_name char DEFAULT current_schema(), OUT "View" varchar, OUT "Create View" varchar, OUT "character_set_client" varchar, OUT "collation_connection" varchar) RETURNS SETOF record AS $$ DECLARE rkind char; BEGIN IF to_regclass(concat(db_name, '.', view_name)) IS NULL AND to_regclass(view_name) IS NULL THEN RAISE EXCEPTION 'Table ''%'' doesn''t exist', concat(db_name, '.', view_name); END IF;
SELECT relkind INTO rkind FROM pg_class WHERE relnamespace = to_regnamespace(db_name)::oid AND relname = view_name;
IF rkind != 'v' THEN RAISE EXCEPTION '''%'' is not VIEW', concat(db_name, '.', view_name); END IF;
RETURN QUERY SELECT v.TABLE_NAME AS "View", CASE WHEN c.relpersistence = 't' THEN concat('CREATE TEMP VIEW ', v.TABLE_NAME, ' AS', v.VIEW_DEFINITION) ELSE concat('CREATE VIEW ', v.TABLE_NAME, ' AS', v.VIEW_DEFINITION) END AS "Create View", v.CHARACTER_SET_CLIENT AS character_set_client, v.COLLATION_CONNECTION AS collation_connection FROM mys_information_schema.views v JOIN pg_catalog.pg_namespace n ON v.TABLE_SCHEMA = n.nspname JOIN pg_catalog.pg_class c ON v.TABLE_NAME = c.relname AND c.relnamespace = n.oid WHERE v.TABLE_SCHEMA = db_name AND v.TABLE_NAME = view_name; END $$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION ivymy.show_create_table( IN tb_name char, IN db_name char DEFAULT current_schema(), OUT "Table" varchar, OUT "Create Table" varchar) RETURNS SETOF record AS $$ DECLARE reloid Oid; BEGIN IF to_regclass(concat(db_name, '.', tb_name)) IS NULL AND to_regclass(tb_name) IS NULL THEN RAISE EXCEPTION 'Table ''%'' doesn''t exist', concat(db_name, '.', tb_name); END IF;
IF to_regclass(concat(db_name, '.', tb_name)) IS NOT NULL THEN reloid := to_regclass(concat(db_name, '.', tb_name))::oid; ELSE reloid := to_regclass(tb_name)::oid; END IF;
RETURN QUERY SELECT tb_name::varchar as "Table", ivymy.mys_show_create_table(reloid)::varchar as "Create Table"; END $$ LANGUAGE plpgsql;
|