All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.debezium.relational.Table Maven / Gradle / Ivy

/*
 * Copyright Debezium Authors.
 *
 * Licensed under the Apache Software License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0
 */
package io.debezium.relational;

import java.util.Collections;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

import io.debezium.annotation.Immutable;

/**
 * An immutable definition of a table.
 */
@Immutable
public interface Table {
    /**
     * Obtain an table definition editor that can be used to define a table.
     *
     * @return the editor; never null
     */
    static TableEditor editor() {
        return new TableEditorImpl();
    }

    /**
     * Get the identifier for this table.
     * @return the identifier; never null
     */
    TableId id();

    /**
     * The list of column names that make up the primary key for this table.
     *
     * @return the immutable list of column names that make up the primary key; never null but possibly empty
     */
    List primaryKeyColumnNames();

    /**
     * Get the columns that make up the primary key for this table.
     * @return the immutable list of columns that make up the primary key; never null but possibly empty
     */
    default List primaryKeyColumns() {
        List pkColumns = primaryKeyColumnNames()
                .stream()
                .map(this::columnWithName)
                .collect(Collectors.toList());

        return Collections.unmodifiableList(pkColumns);
    }

    /**
     * Utility to obtain a copy of a list of the columns that satisfy the specified predicate.
     * @param predicate the filter predicate; may not be null
     * @return the list of columns that satisfy the predicate; never null but possibly empty
     */
    default List filterColumns(Predicate predicate) {
        return columns()
                .stream()
                .filter(predicate)
                .collect(Collectors.toList());
    }

    /**
     * The list of column names that make up this table.
     * 

* Note: If feasible, call {@link #columns()} instead, e.g. if just interested in the number of columns. * * @return the immutable list of column names ; never null but possibly empty */ List retrieveColumnNames(); /** * Get the definitions for the columns in this table, in the same order in which the table defines them. * * @return the immutable and ordered list of definitions; never null */ List columns(); /** * Get the definition for the column in this table with the supplied name. The case of the supplied name does not matter. * * @param name the case-insensitive name of the column * @return the column definition, or null if there is no column with the given name */ Column columnWithName(String name); /** * Get the database-specific name of the default character set used by columns in this table. * * @return the database-specific character set name used by default in columns of this table, or {@code null} if there is no * such default character set name defined on the table */ String defaultCharsetName(); /** * Determine if the named column is part of the primary key. * * @param columnName the name of the column * @return {@code true} if a column exists in this table and it is part of the primary key, or {@code false} otherwise */ default boolean isPrimaryKeyColumn(String columnName) { Column column = columnWithName(columnName); return column == null ? false : primaryKeyColumnNames().contains(column.name()); } /** * Determine if the named column is auto-incremented. * * @param columnName the name of the column * @return {@code true} if a column exists in this table and it is auto-incremented, or {@code false} otherwise */ default boolean isAutoIncremented(String columnName) { Column column = columnWithName(columnName); return column == null ? false : column.isAutoIncremented(); } /** * Determine if the values in the named column is generated by the database. * * @param columnName the name of the column * @return {@code true} if a column exists in this table and its values are generated, or {@code false} otherwise */ default boolean isGenerated(String columnName) { Column column = columnWithName(columnName); return column == null ? false : column.isGenerated(); } /** * Determine if the values in the named column is optional. * * @param columnName the name of the column * @return {@code true} if a column exists in this table and is optional, or {@code false} otherwise */ default boolean isOptional(String columnName) { Column column = columnWithName(columnName); return column == null ? false : column.isOptional(); } /** * Obtain an editor that contains the same information as this table definition. * * @return the editor; never null */ TableEditor edit(); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy