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`