Database metadata abstraction library for jOOQ's code generation system providing unified access to schema information across multiple database vendors
npx @tessl/cli install tessl/maven-org-jooq--jooq-meta@3.20.0jOOQ-meta is a comprehensive database metadata abstraction library that provides unified access to schema information across 15+ database vendors. It serves as the foundation for jOOQ's code generation system, offering a complete API for analyzing and extracting metadata from relational databases including tables, columns, constraints, relationships, user-defined types, and stored procedures.
org.jooq:jooq-meta:3.20.3import org.jooq.meta.Database;
import org.jooq.meta.Databases;
import org.jooq.meta.Definition;
import org.jooq.meta.TableDefinition;
import org.jooq.meta.ColumnDefinition;
import org.jooq.meta.SchemaDefinition;
import org.jooq.meta.CatalogDefinition;
import org.jooq.meta.Relations;For database-specific implementations:
import org.jooq.meta.postgres.PostgresDatabase;
import org.jooq.meta.mysql.MySQLDatabase;
import org.jooq.meta.h2.H2Database;import org.jooq.meta.Database;
import org.jooq.meta.Databases;
import org.jooq.meta.SchemaDefinition;
import org.jooq.meta.TableDefinition;
import org.jooq.meta.ColumnDefinition;
import org.jooq.SQLDialect;
import java.sql.Connection;
import java.sql.DriverManager;
// Create database connection
Connection connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/mydb", "user", "password");
// Create database metadata abstraction
Database database = Databases.database(SQLDialect.POSTGRES);
database.setConnection(connection);
// Explore schema structure
List<SchemaDefinition> schemas = database.getSchemata();
for (SchemaDefinition schema : schemas) {
System.out.println("Schema: " + schema.getName());
List<TableDefinition> tables = database.getTables(schema);
for (TableDefinition table : tables) {
System.out.println(" Table: " + table.getName());
List<ColumnDefinition> columns = table.getColumns();
for (ColumnDefinition column : columns) {
System.out.println(" Column: " + column.getName() +
" (" + column.getType().getType() + ")");
}
}
}
// Clean up
database.close();jOOQ-meta is built around several key architectural components:
Core database abstraction and connection management providing the entry point for all metadata operations.
static Database database(SQLDialect dialect);
static Class<? extends Database> databaseClass(SQLDialect dialect);
void setConnection(Connection connection);
Connection getConnection();
SQLDialect getDialect();
void setDialect(SQLDialect dialect);
DSLContext create();
void close();Complete schema exploration including catalogs, schemas, tables, and columns with comprehensive metadata extraction.
List<CatalogDefinition> getCatalogs();
List<SchemaDefinition> getSchemata();
List<TableDefinition> getTables(SchemaDefinition schema);
TableDefinition getTable(SchemaDefinition schema, String name);Detailed table structure analysis including columns, data types, nullability, defaults, and special properties.
List<ColumnDefinition> getColumns();
ColumnDefinition getColumn(String name);
DataTypeDefinition getType();
boolean isIdentity();
boolean isNullable();
String getDefaultValue();Complete constraint discovery and relationship navigation including primary keys, foreign keys, unique constraints, and check constraints.
UniqueKeyDefinition getPrimaryKey();
List<UniqueKeyDefinition> getUniqueKeys();
List<ForeignKeyDefinition> getForeignKeys();
List<CheckConstraintDefinition> getCheckConstraints();
Relations getRelations();Support for complex database objects including user-defined types, enums, domains, arrays, and stored procedures.
List<UDTDefinition> getUDTs(SchemaDefinition schema);
List<EnumDefinition> getEnums(SchemaDefinition schema);
List<DomainDefinition> getDomains(SchemaDefinition schema);
List<RoutineDefinition> getRoutines(SchemaDefinition schema);
List<SequenceDefinition> getSequences(SchemaDefinition schema);Flexible configuration system supporting include/exclude patterns, forced types, synthetic objects, and advanced customization options.
void setIncludes(String[] includes);
void setExcludes(String[] excludes);
void setConfiguredForcedTypes(List<ForcedType> forcedTypes);
void setConfiguredSyntheticObjects(SyntheticObjectsType syntheticObjects);Vendor-specific implementations optimized for different database systems with consistent API across all supported databases.
class PostgresDatabase extends AbstractDatabase { }
class MySQLDatabase extends AbstractDatabase { }
class H2Database extends AbstractDatabase { }
class SQLiteDatabase extends AbstractDatabase { }interface Database extends AutoCloseable {
List<CatalogDefinition> getCatalogs();
CatalogDefinition getCatalog(String name);
List<SchemaDefinition> getSchemata();
List<SchemaDefinition> getSchemata(CatalogDefinition catalog);
SchemaDefinition getSchema(String name);
List<TableDefinition> getTables();
List<TableDefinition> getTables(SchemaDefinition schema);
TableDefinition getTable(SchemaDefinition schema, String name);
TableDefinition getTable(SchemaDefinition schema, String name, boolean ignoreCase);
Relations getRelations();
List<SequenceDefinition> getSequences(SchemaDefinition schema);
List<UDTDefinition> getUDTs(SchemaDefinition schema);
List<RoutineDefinition> getRoutines(SchemaDefinition schema);
List<EnumDefinition> getEnums(SchemaDefinition schema);
List<DomainDefinition> getDomains(SchemaDefinition schema);
Connection getConnection();
void setConnection(Connection connection);
SQLDialect getDialect();
void setDialect(SQLDialect dialect);
DSLContext create();
void close();
}
interface Definition {
String getName();
String getInputName();
String getOutputName();
String getComment();
String getQualifiedName();
Database getDatabase();
SchemaDefinition getSchema();
CatalogDefinition getCatalog();
}
interface TableDefinition extends Definition {
List<ColumnDefinition> getColumns();
ColumnDefinition getColumn(String name);
UniqueKeyDefinition getPrimaryKey();
List<UniqueKeyDefinition> getUniqueKeys();
List<ForeignKeyDefinition> getForeignKeys();
boolean isView();
boolean isMaterializedView();
}
interface ColumnDefinition extends TypedElementDefinition<TableDefinition> {
TableDefinition getContainer();
DataTypeDefinition getType();
boolean isIdentity();
boolean isNullable();
boolean isHidden();
String getDefaultValue();
int getPosition();
}
interface SchemaDefinition extends Definition {
CatalogDefinition getCatalog();
List<TableDefinition> getTables();
List<SequenceDefinition> getSequences();
List<UDTDefinition> getUDTs();
List<RoutineDefinition> getRoutines();
}
interface CatalogDefinition extends Definition {
List<SchemaDefinition> getSchemata();
}
interface Relations {
UniqueKeyDefinition getPrimaryKey(TableDefinition table);
List<ForeignKeyDefinition> getForeignKeys(TableDefinition table);
List<ForeignKeyDefinition> getExportedKeys(TableDefinition table);
}
class Databases {
static Database database(SQLDialect dialect);
static Class<? extends Database> databaseClass(SQLDialect dialect);
}