SELECT /* Tables */
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS `Id`,
TABLE_CATALOG AS `Catalog`,
TABLE_SCHEMA AS `Schema`,
TABLE_NAME AS `Name`
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_SCHEMA=schema()
SELECT /* Table columns */
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME, '.', COLUMN_NAME) AS `Id`,
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS `ParentId`,
COLUMN_NAME AS `Name`,
ORDINAL_POSITION AS `Ordinal`,
CASE IS_NULLABLE WHEN 'YES' THEN 1 ELSE 0 END AS `IsNullable`,
IF(LEFT(COLUMN_TYPE,10) = 'tinyint(1)', 'bool',
IF (LEFT(COLUMN_TYPE,10) = 'binary(16)' OR LEFT(COLUMN_TYPE,8) = 'char(36)', 'guid',
IF (INSTR(COLUMN_TYPE, 'unsigned') = 0, DATA_TYPE,
CONCAT('u', DATA_TYPE)))) AS `TypeName`,
IF (CHARACTER_MAXIMUM_LENGTH > 2147483647, 2147483647, CHARACTER_MAXIMUM_LENGTH) AS `MaxLength`,
NUMERIC_PRECISION AS `Precision`,
0 AS `DateTimePrecision`,
NUMERIC_SCALE AS `Scale`,
NULL AS `CollationCatalog`,
NULL AS `CollationSchema`,
COLLATION_NAME AS `CollationName`,
NULL AS `CharacterSetCatalog`,
NULL AS `CharacterSetSchema`,
CHARACTER_SET_NAME AS `CharacterSetName`,
0 AS `IsMultiSet`,
CASE WHEN EXTRA LIKE '%auto%' THEN 1 ELSE 0 END AS `IsIdentity`,
CASE WHEN EXTRA LIKE '%auto%' THEN 1 ELSE 0 END AS `IsStoreGenerated`,
IF (COLUMN_TYPE = 'tinyint(1)', -128, COLUMN_DEFAULT) AS `Default`
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=schema()
SELECT /* Views */
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS `Id`,
TABLE_CATALOG AS`CatalogName`,
TABLE_SCHEMA AS `SchemaName`,
TABLE_NAME AS `Name`,
VIEW_DEFINITION AS `ViewDefinition`,
CASE IS_UPDATABLE WHEN 'YES' THEN 1 ELSE 0 END AS `IsUpdatable`
FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA=schema()
SELECT /* View columns */
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME, '.', COLUMN_NAME) AS `Id`,
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS `ParentId`,
COLUMN_NAME AS `Name`,
ORDINAL_POSITION AS `Ordinal`,
CASE IS_NULLABLE WHEN 'YES' THEN 1 ELSE 0 END AS `IsNullable`,
IF(LEFT(COLUMN_TYPE,10) = 'tinyint(1)', 'bool',
IF (LEFT(COLUMN_TYPE,10) = 'binary(16)' OR LEFT(COLUMN_TYPE,8) = 'char(36)', 'guid',
IF (INSTR(COLUMN_TYPE, 'unsigned') = 0, DATA_TYPE,
CONCAT('u', DATA_TYPE)))) AS `TypeName`,
IF (CHARACTER_MAXIMUM_LENGTH > 2147483647, 2147483647, CHARACTER_MAXIMUM_LENGTH) AS `MaxLength`,
NUMERIC_PRECISION AS `Precision`,
0 AS `DateTimePrecision`,
NUMERIC_SCALE AS `Scale`,
NULL AS `CollationCatalog`,
NULL AS `CollationSchema`,
COLLATION_NAME AS `CollationName`,
NULL AS `CharacterSetCatalog`,
NULL AS `CharacterSetSchema`,
CHARACTER_SET_NAME AS `CharacterSetName`,
0 AS `IsMultiSet`,
CASE WHEN EXTRA LIKE '%auto%' THEN 1 ELSE 0 END AS `IsIdentity`,
CASE WHEN EXTRA LIKE '%auto%' THEN 1 ELSE 0 END AS `IsStoreGenerated`,
COLUMN_DEFAULT AS `Default`
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=schema()
SELECT /* Functions */
CONCAT(ROUTINE_SCHEMA, '.', SPECIFIC_NAME) AS `Id`,
ROUTINE_CATALOG AS `CatalogName`,
ROUTINE_SCHEMA AS `SchemaName`,
ROUTINE_NAME AS `Name`,
SUBSTRING_INDEX(DTD_IDENTIFIER, '(', 1) AS `ReturnTypeName`,
NULL AS `ReturnMaxLength`,
NULL AS `ReturnPrecision`,
0 AS `ReturnDateTimePrecision`,
NULL AS `ReturnScale`,
NULL AS `ReturnCollationCatalog`,
NULL AS `ReturnCollationSchema`,
NULL AS `ReturnCollationName`,
NULL AS `ReturnCharacterSetCatalog`,
NULL AS `ReturnCharacterSetSchema`,
NULL AS `ReturnCharacterSetName`,
NULL AS `ReturnIsMultiSet`,
NULL AS `IsAggregate`,
NULL AS `IsBuiltIn`,
NULL AS `IsNiladic`
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='FUNCTION'
AND ROUTINE_SCHEMA=schema()
SELECT /* Procedures */
CONCAT(ROUTINE_SCHEMA, '.', SPECIFIC_NAME) AS `Id`,
ROUTINE_CATALOG AS `CatalogName`,
ROUTINE_SCHEMA AS `SchemaName`,
ROUTINE_NAME AS `Name`
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE='PROCEDURE'
AND ROUTINE_SCHEMA=schema()
SELECT /* Function parameters */
NULL AS `Id`,
NULL AS `ParentId`,
NULL AS `Name`,
NULL AS `Ordinal`,
NULL AS `TypeName`,
NULL AS `MaxLength`,
NULL AS `Precision`,
NULL AS `DateTimePrecision`,
NULL AS `Scale`,
NULL AS `CollatioCatalog`,
NULL AS `CollationSchema`,
NULL AS `CollationName`,
NULL AS `CharacterSetCatalog`,
NULL AS `CharacterSetSchema`,
NULL AS `CharacterSetName`,
NULL AS `IsMultiSet`,
NULL AS `Mode`,
NULL AS `Default`
SELECT /* Procedure parameters */
NULL AS `Id`,
NULL AS `ParentId`,
NULL AS `Name`,
NULL AS `Ordinal`,
NULL AS `TypeName`,
NULL AS `MaxLength`,
NULL AS `Precision`,
NULL AS `DateTimePrecision`,
NULL AS `Scale`,
NULL AS `CollatioCatalog`,
NULL AS `CollationSchema`,
NULL AS `CollationName`,
NULL AS `CharacterSetCatalog`,
NULL AS `CharacterSetSchema`,
NULL AS `CharacterSetName`,
NULL AS `IsMultiSet`,
NULL AS `Mode`,
NULL AS `Default`
SELECT /* Constraints */
CONCAT(CONSTRAINT_SCHEMA, '.', TABLE_NAME, '.', CONSTRAINT_NAME) AS `Id`,
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME) AS `ParentId`,
CONSTRAINT_NAME AS `Name`,
CONSTRAINT_TYPE AS `ConstraintType`,
0 AS `IsDeferrable`,
0 AS `IsInitiallyDeferred`
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE != 'CHECK' AND TABLE_SCHEMA=schema()
SELECT /* Check constraints */
NULL AS `Id`,
NULL AS `Expression`
SELECT /* Constraint columns */
CONCAT(CONSTRAINT_SCHEMA, '.', TABLE_NAME, '.', CONSTRAINT_NAME) AS `ConstraintId`,
CONCAT(TABLE_SCHEMA, '.', TABLE_NAME, '.', COLUMN_NAME) AS `ColumnId`
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=schema()
SELECT
CONCAT(CONSTRAINT_SCHEMA, '.', TABLE_NAME, '.', CONSTRAINT_NAME) AS `Id`,
UPDATE_RULE AS `UpdateRule`,
DELETE_RULE AS `DeleteRule`
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
SELECT
CONCAT(FC.CONSTRAINT_SCHEMA, '.', FC.CONSTRAINT_NAME, '.', FC.ORDINAL_POSITION) AS `Id`,
CONCAT(PC.TABLE_SCHEMA, '.', PC.TABLE_NAME, '.', PC.COLUMN_NAME) AS `ToColumnId`,
CONCAT(FC.TABLE_SCHEMA, '.', FC.TABLE_NAME, '.', FC.COLUMN_NAME) AS `FromColumnId`,
CONCAT(FC.CONSTRAINT_SCHEMA, '.', FC.TABLE_NAME, '.', FC.CONSTRAINT_NAME) AS `ConstraintId`,
FC.ORDINAL_POSITION AS `Ordinal`
FROM
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS RC
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS PC /* PRIMARY KEY COLS*/
ON RC.UNIQUE_CONSTRAINT_SCHEMA = PC.CONSTRAINT_SCHEMA
AND RC.UNIQUE_CONSTRAINT_NAME = PC.CONSTRAINT_NAME
AND RC.REFERENCED_TABLE_NAME = PC.TABLE_NAME
INNER JOIN
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS FC /* FOREIGN KEY COLS*/
ON RC.CONSTRAINT_SCHEMA = FC.CONSTRAINT_SCHEMA
AND RC.CONSTRAINT_NAME = FC.CONSTRAINT_NAME
AND RC.TABLE_NAME = FC.TABLE_NAME
AND PC.ORDINAL_POSITION = FC.ORDINAL_POSITION
SELECT /* View constraints */
NULL AS `Id`,
NULL AS `ParentId`,
NULL AS `Name`,
NULL AS `ConstraintType`,
NULL AS `Expression`,
NULL AS `UpdateRule`,
NULL AS `DeleteRule`
SELECT /* View constraint columns */
NULL AS `ConstraintId`,
NULL AS `ColumnId`
SELECT /* View foreign keys */
NULL AS `Id`,
NULL AS `ToColumnId`,
NULL AS `FromColumnId`,
NULL AS `ConstraintId`,
0 AS `Ordinal`