001/*
002 * The MIT License
003 *
004 * Copyright (c) 2012, Ninja Squad
005 *
006 * Permission is hereby granted, free of charge, to any person obtaining a copy
007 * of this software and associated documentation files (the "Software"), to deal
008 * in the Software without restriction, including without limitation the rights
009 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
010 * copies of the Software, and to permit persons to whom the Software is
011 * furnished to do so, subject to the following conditions:
012 *
013 * The above copyright notice and this permission notice shall be included in
014 * all copies or substantial portions of the Software.
015 *
016 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
017 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
018 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
019 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
020 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
021 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
022 * THE SOFTWARE.
023 */
024
025package com.ninja_squad.dbsetup;
026
027import java.util.List;
028
029import javax.annotation.Nonnull;
030
031import com.ninja_squad.dbsetup.operation.CompositeOperation;
032import com.ninja_squad.dbsetup.operation.DeleteAll;
033import com.ninja_squad.dbsetup.operation.Insert;
034import com.ninja_squad.dbsetup.operation.Operation;
035import com.ninja_squad.dbsetup.operation.SqlOperation;
036import com.ninja_squad.dbsetup.operation.Truncate;
037
038/**
039 * A static factory class for operations. Static import of this class can help make the code more readable.
040 * @author JB Nizet
041 */
042public final class Operations {
043    private Operations() {
044    }
045
046    /**
047     * Creates a <code>delete from table</code> operation.
048     * @param table the table to delete all from
049     * @see DeleteAll
050     */
051    public static DeleteAll deleteAllFrom(@Nonnull String table) {
052        return DeleteAll.from(table);
053    }
054
055    /**
056     * Creates a sequence of <code>delete from table</code> operations.
057     * @param tables the tables to delete all from
058     * @see DeleteAll
059     */
060    public static Operation deleteAllFrom(@Nonnull String... tables) {
061        return DeleteAll.from(tables);
062    }
063
064    /**
065     * Creates a sequence of <code>delete from ...</code> operations.
066     * @param tables the tables to delete all from
067     * @see DeleteAll
068     */
069    public static Operation deleteAllFrom(@Nonnull List<String> tables) {
070        return DeleteAll.from(tables);
071    }
072
073    /**
074     * Creates a <code>truncate table ...</code> operation.
075     * @param table the table to truncate
076     * @see Truncate
077     */
078    public static Truncate truncate(@Nonnull String table) {
079        return Truncate.table(table);
080    }
081
082    /**
083     * Creates a sequence of <code>truncate table ...</code> operations.
084     * @param tables the tables to truncate
085     * @see Truncate
086     */
087    public static Operation truncate(@Nonnull String... tables) {
088        return Truncate.tables(tables);
089    }
090
091    /**
092     * Creates a sequence of <code>truncate table ...</code> operations.
093     * @param tables the tables to truncate
094     * @see Truncate
095     */
096    public static Operation truncate(@Nonnull List<String> tables) {
097        return Truncate.tables(tables);
098    }
099
100    /**
101     * Creates a SQL operation.
102     * @param sqlStatement the SQL statement to execute (using {@link java.sql.Statement#executeUpdate(String)})
103     * @see SqlOperation
104     */
105    public static SqlOperation sql(@Nonnull String sqlStatement) {
106        return SqlOperation.of(sqlStatement);
107    }
108
109    /**
110     * Creates a sequence of SQL operations.
111     * @param sqlStatements the SQL statements to execute (using {@link java.sql.Statement#executeUpdate(String)})
112     * @see SqlOperation
113     */
114    public static Operation sql(@Nonnull String... sqlStatements) {
115        return SqlOperation.of(sqlStatements);
116    }
117
118    /**
119     * Creates a sequence of SQL operations.
120     * @param sqlStatements the SQL statements to execute (using {@link java.sql.Statement#executeUpdate(String)})
121     * @see SqlOperation
122     */
123    public static Operation sql(@Nonnull List<String> sqlStatements) {
124        return SqlOperation.of(sqlStatements);
125    }
126
127    /**
128     * Creates a builder for a sequence of insert operations.
129     * @param table the table to insert into
130     * @see Insert
131     */
132    public static Insert.Builder insertInto(@Nonnull String table) {
133        return Insert.into(table);
134    }
135
136    /**
137     * Creates a sequence of operations.
138     * @param operations the operations to put in a sequence
139     * @see CompositeOperation
140     */
141    public static Operation sequenceOf(@Nonnull Operation... operations) {
142        return CompositeOperation.sequenceOf(operations);
143    }
144
145    /**
146     * Creates a sequence of operations.
147     * @param operations the operations to put in a sequence
148     * @see CompositeOperation
149     */
150    public static Operation sequenceOf(@Nonnull List<? extends Operation> operations) {
151        return CompositeOperation.sequenceOf(operations);
152    }
153}