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

org.hibernate.tool.schema.extract.spi.ExtractionContext Maven / Gradle / Ivy

There is a newer version: 5.6.15.Final
Show newest version
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
 * See the lgpl.txt file in the root directory or .
 */
package org.hibernate.tool.schema.extract.spi;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.hibernate.Incubating;
import org.hibernate.boot.model.naming.Identifier;
import org.hibernate.boot.model.relational.QualifiedSequenceName;
import org.hibernate.boot.model.relational.QualifiedTableName;
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
import org.hibernate.service.ServiceRegistry;

/**
 * Defines a context for performing extraction including providing access to information about ongoing extraction as
 * well as to delegates needed in performing extraction.
 *
 * @author Steve Ebersole
 * @author Gail Badner
 */
@Incubating
public interface ExtractionContext {
	ServiceRegistry getServiceRegistry();
	JdbcEnvironment getJdbcEnvironment();
	SqlStringGenerationContext getSqlStringGenerationContext();
	Connection getJdbcConnection();
	DatabaseMetaData getJdbcDatabaseMetaData();

	@Incubating
	default  T getQueryResults(
			String queryString,
			Object[] positionalParameters,
			ResultSetProcessor resultSetProcessor) throws SQLException {
		try (PreparedStatement statement = getJdbcConnection().prepareStatement( queryString )) {
			if ( positionalParameters != null ) {
				for ( int i = 0 ; i < positionalParameters.length ; i++ ) {
					statement.setObject( i + 1, positionalParameters[i] );
				}
			}
			try (ResultSet resultSet = statement.executeQuery()) {
				return resultSetProcessor.process( resultSet );
			}
		}
	}

	Identifier getDefaultCatalog();
	Identifier getDefaultSchema();

	@Incubating
	interface ResultSetProcessor {
		T process(ResultSet resultSet) throws SQLException;
	}

	/**
	 * In conjunction with {@link #getDatabaseObjectAccess()} provides access to
	 * information about known database objects to the extractor.
	 */
	@Incubating
	interface DatabaseObjectAccess {
		TableInformation locateTableInformation(QualifiedTableName tableName);
		SequenceInformation locateSequenceInformation(QualifiedSequenceName sequenceName);
	}

	DatabaseObjectAccess getDatabaseObjectAccess();

	void cleanup();

	abstract class EmptyExtractionContext implements ExtractionContext {
		@Override
		public ServiceRegistry getServiceRegistry() {
			return null;
		}

		@Override
		public JdbcEnvironment getJdbcEnvironment() {
			return null;
		}

		@Override
		public SqlStringGenerationContext getSqlStringGenerationContext() {
			return null;
		}

		@Override
		public Connection getJdbcConnection() {
			return null;
		}

		@Override
		public DatabaseMetaData getJdbcDatabaseMetaData() {
			return null;
		}

		@Override
		public Identifier getDefaultCatalog() {
			return null;
		}

		@Override
		public Identifier getDefaultSchema() {
			return null;
		}

		@Override
		public DatabaseObjectAccess getDatabaseObjectAccess() {
			return null;
		}

		@Override
		public void cleanup() {

		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy