or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

advanced-objects.mdconfiguration.mdconstraints-relationships.mddatabase-implementations.mddatabase-management.mdindex.mdschema-discovery.mdtable-analysis.md
tile.json

tessl/maven-org-jooq--jooq-meta

Database metadata abstraction library for jOOQ's code generation system providing unified access to schema information across multiple database vendors

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.jooq/jooq-meta@3.20.x

To install, run

npx @tessl/cli install tessl/maven-org-jooq--jooq-meta@3.20.0

index.mddocs/

jOOQ-meta

jOOQ-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.

Package Information

  • Package Name: jooq-meta
  • Package Type: maven
  • Group ID: org.jooq
  • Artifact ID: jooq-meta
  • Language: Java
  • Installation: Add Maven dependency with coordinates org.jooq:jooq-meta:3.20.3

Core Imports

import 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;

Basic Usage

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();

Architecture

jOOQ-meta is built around several key architectural components:

  • Database Interface: Central abstraction for all metadata operations providing unified access across different database vendors
  • Definition Hierarchy: Type-safe object model representing all database objects (tables, columns, constraints, etc.) with consistent API
  • Vendor-Specific Implementations: Optimized database drivers for 15+ database systems (PostgreSQL, MySQL, Oracle, etc.)
  • Configuration System: Flexible XML-based configuration supporting include/exclude patterns, type mapping, and synthetic objects
  • Type Resolution: Sophisticated system for mapping database types to Java types with customization support
  • Relationship Management: Comprehensive constraint and foreign key relationship tracking and navigation

Capabilities

Database Connection and Management

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();

Database Management

Schema Structure Discovery

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);

Schema Discovery

Table and Column Analysis

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();

Table Analysis

Constraint and Relationship Management

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();

Constraints and Relationships

User-Defined Types and Advanced Objects

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);

Advanced Database Objects

Configuration and Customization

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);

Configuration

Multi-Database Support

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 { }

Database Implementations

Types

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);
}