/* * Copyright 2017 LinkedIn Corp. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * */ package azkaban.db; import java.sql.SQLException; import org.apache.commons.dbutils.ResultSetHandler; /** * This interface is to define Base Data Access Object contract for Azkaban. All azkaban * DB related operations must be performed upon this interface. AZ DB operators all leverages * QueryRunner interface. * * @see org.apache.commons.dbutils.QueryRunner */ public interface DatabaseOperator { /** * Executes the given Azkaban related SELECT SQL operations. * * @param sqlQuery The SQL query statement to execute. * @param resultHandler The handler used to create the result object * @param params Initialize the PreparedStatement's IN parameters * @param <T> The type of object that the qeury handler returns * @return The object returned by the handler. * @throws SQLException */ <T> T query(String sqlQuery, ResultSetHandler<T> resultHandler, Object...params) throws SQLException; /** * Provide a way to allow users define custom SQL operations without relying on fixed * SQL interface. The common use case is to group a sequence of SQL operations without * commit every time. * * @param operations A sequence of DB operations * @param <T> The type of object that the operations returns. Note that T could be null * @return T The object returned by the SQL statement, expected by the caller * @throws SQLException */ <T> T transaction(SQLTransaction<T> operations) throws SQLException; /** * Executes the given AZ related INSERT, UPDATE, or DELETE SQL statement. * * @param updateClause sql statements to execute * @param params Initialize the PreparedStatement's IN parameters * @return The number of rows updated. * @throws SQLException */ int update(String updateClause, Object...params) throws SQLException; }