// Path: library/src/main/java/org/mariotaku/sqliteqb/library/Constraint.java
// public class Constraint implements SQLLang {
//     private final String name;
//     private final String type;
//     private final SQLQuery constraint;
// 
//     public Constraint(String name, String type, SQLQuery constraint) {
//         this.name = name;
//         this.type = type;
//         this.constraint = constraint;
//     }
// 
//     @Override
//     public String getSQL() {
//         final StringBuilder sb = new StringBuilder();
//         if (name != null) {
//             sb.append("CONSTRAINT ");
//             sb.append(name);
//             sb.append(" ");
//         }
//         sb.append(type);
//         sb.append(" ");
//         sb.append(constraint.getSQL());
//         return sb.toString();
//     }
// 
//     public static Constraint unique(String name, Columns columns, OnConflict onConflict) {
//         return new Constraint(name, "UNIQUE", new ColumnConflictConstaint(columns, onConflict));
//     }
// 
//     public static Constraint unique(Columns columns, OnConflict onConflict) {
//         return unique(null, columns, onConflict);
//     }
// 
//     private static final class ColumnConflictConstaint implements SQLQuery {
// 
//         private final Columns columns;
//         private final OnConflict onConflict;
// 
//         public ColumnConflictConstaint(Columns columns, OnConflict onConflict) {
//             this.columns = columns;
//             this.onConflict = onConflict;
//         }
// 
//         @Override
//         public String getSQL() {
//             final StringBuilder sb = new StringBuilder();
//             sb.append("(");
//             sb.append(columns.getSQL());
//             sb.append(") ");
//             sb.append("ON CONFLICT ");
//             sb.append(onConflict.getAction());
//             return sb.toString();
//         }
//     }
// 
// }
// 
// Path: library/src/main/java/org/mariotaku/sqliteqb/library/NewColumn.java
// public class NewColumn implements SQLLang {
// 
//     private final String name;
//     private final String type;
// 
//     public NewColumn(final String name, final String type) {
//         this.name = name;
//         this.type = type;
//     }
// 
//     public static NewColumn[] createNewColumns(final String[] colNames, final String[] colTypes) {
//         if (colNames == null || colTypes == null || colNames.length != colTypes.length)
//             throw new IllegalArgumentException("length of columns and types not match.");
//         final NewColumn[] newColumns = new NewColumn[colNames.length];
//         for (int i = 0, j = colNames.length; i < j; i++) {
//             newColumns[i] = new NewColumn(colNames[i], colTypes[i]);
//         }
//         return newColumns;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getSQL() {
//         if (name == null || type == null)
//             throw new NullPointerException("name and type must not be null!");
//         return name + " " + type;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
// }
// 
// Path: library/src/main/java/org/mariotaku/sqliteqb/library/SQLQuery.java
// public interface SQLQuery extends SQLLang {
// }
// 
// Path: library/src/main/java/org/mariotaku/sqliteqb/library/Utils.java
// public class Utils {
// 
//     public static String toString(final Object[] array, final char token, final boolean includeSpace) {
//         final StringBuilder builder = new StringBuilder();
//         final int length = array.length;
//         for (int i = 0; i < length; i++) {
//             final String string = objectToString(array[i]);
//             if (string != null) {
//                 if (i > 0) {
//                     builder.append(includeSpace ? token + " " : token);
//                 }
//                 builder.append(string);
//             }
//         }
//         return builder.toString();
//     }
// 
//     public static String toStringForSQL(final int size) {
//         final StringBuilder builder = new StringBuilder();
//         for (int i = 0; i < size; i++) {
//             if (i > 0) {
//                 builder.append(',');
//             }
//             builder.append('?');
//         }
//         return builder.toString();
//     }
// 
//     private static String objectToString(Object o) {
//         if (o instanceof SQLLang)
//             return ((SQLLang) o).getSQL();
//         return o != null ? o.toString() : null;
//     }
// 
//     public static String[] toStringArray(Object[] array) {
//         final String[] strings = new String[array.length];
//         final int length = array.length;
//         for (int i = 0; i < length; i++) {
//             strings[i] = objectToString(array[i]);
//         }
//         return strings;
//     }
// }


import org.mariotaku.sqliteqb.library.Constraint;
import org.mariotaku.sqliteqb.library.NewColumn;
import org.mariotaku.sqliteqb.library.SQLQuery;
import org.mariotaku.sqliteqb.library.Utils;
        this.table = table;
    }

    void setTemporary(final boolean temporary) {
        this.temporary = temporary;
    }

    public static final class Builder implements IBuilder<SQLCreateTableQuery> {

        private final SQLCreateTableQuery query = new SQLCreateTableQuery();

        private boolean buildCalled;

        public Builder as(final SQLSelectQuery selectStmt) {
            checkNotBuilt();
            query.setAs(selectStmt);
            return this;
        }

        @Override
        public SQLCreateTableQuery build() {
            buildCalled = true;
            return query;
        }

        @Override
        public String buildSQL() {
            return build().getSQL();
        }

// Path: library/src/main/java/org/mariotaku/sqliteqb/library/Constraint.java
// public class Constraint implements SQLLang {
//     private final String name;
//     private final String type;
//     private final SQLQuery constraint;
// 
//     public Constraint(String name, String type, SQLQuery constraint) {
//         this.name = name;
//         this.type = type;
//         this.constraint = constraint;
//     }
// 
//     @Override
//     public String getSQL() {
//         final StringBuilder sb = new StringBuilder();
//         if (name != null) {
//             sb.append("CONSTRAINT ");
//             sb.append(name);
//             sb.append(" ");
//         }
//         sb.append(type);
//         sb.append(" ");
//         sb.append(constraint.getSQL());
//         return sb.toString();
//     }
// 
//     public static Constraint unique(String name, Columns columns, OnConflict onConflict) {
//         return new Constraint(name, "UNIQUE", new ColumnConflictConstaint(columns, onConflict));
//     }
// 
//     public static Constraint unique(Columns columns, OnConflict onConflict) {
//         return unique(null, columns, onConflict);
//     }
// 
//     private static final class ColumnConflictConstaint implements SQLQuery {
// 
//         private final Columns columns;
//         private final OnConflict onConflict;
// 
//         public ColumnConflictConstaint(Columns columns, OnConflict onConflict) {
//             this.columns = columns;
//             this.onConflict = onConflict;
//         }
// 
//         @Override
//         public String getSQL() {
//             final StringBuilder sb = new StringBuilder();
//             sb.append("(");
//             sb.append(columns.getSQL());
//             sb.append(") ");
//             sb.append("ON CONFLICT ");
//             sb.append(onConflict.getAction());
//             return sb.toString();
//         }
//     }
// 
// }
// 
// Path: library/src/main/java/org/mariotaku/sqliteqb/library/NewColumn.java
// public class NewColumn implements SQLLang {
// 
//     private final String name;
//     private final String type;
// 
//     public NewColumn(final String name, final String type) {
//         this.name = name;
//         this.type = type;
//     }
// 
//     public static NewColumn[] createNewColumns(final String[] colNames, final String[] colTypes) {
//         if (colNames == null || colTypes == null || colNames.length != colTypes.length)
//             throw new IllegalArgumentException("length of columns and types not match.");
//         final NewColumn[] newColumns = new NewColumn[colNames.length];
//         for (int i = 0, j = colNames.length; i < j; i++) {
//             newColumns[i] = new NewColumn(colNames[i], colTypes[i]);
//         }
//         return newColumns;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     @Override
//     public String getSQL() {
//         if (name == null || type == null)
//             throw new NullPointerException("name and type must not be null!");
//         return name + " " + type;
//     }
// 
//     public String getType() {
//         return type;
//     }
// 
// }
// 
// Path: library/src/main/java/org/mariotaku/sqliteqb/library/SQLQuery.java
// public interface SQLQuery extends SQLLang {
// }
// 
// Path: library/src/main/java/org/mariotaku/sqliteqb/library/Utils.java
// public class Utils {
// 
//     public static String toString(final Object[] array, final char token, final boolean includeSpace) {
//         final StringBuilder builder = new StringBuilder();
//         final int length = array.length;
//         for (int i = 0; i < length; i++) {
//             final String string = objectToString(array[i]);
//             if (string != null) {
//                 if (i > 0) {
//                     builder.append(includeSpace ? token + " " : token);
//                 }
//                 builder.append(string);
//             }
//         }
//         return builder.toString();
//     }
// 
//     public static String toStringForSQL(final int size) {
//         final StringBuilder builder = new StringBuilder();
//         for (int i = 0; i < size; i++) {
//             if (i > 0) {
//                 builder.append(',');
//             }
//             builder.append('?');
//         }
//         return builder.toString();
//     }
// 
//     private static String objectToString(Object o) {
//         if (o instanceof SQLLang)
//             return ((SQLLang) o).getSQL();
//         return o != null ? o.toString() : null;
//     }
// 
//     public static String[] toStringArray(Object[] array) {
//         final String[] strings = new String[array.length];
//         final int length = array.length;
//         for (int i = 0; i < length; i++) {
//             strings[i] = objectToString(array[i]);
//         }
//         return strings;
//     }
// }


// Path: library/src/main/java/org/mariotaku/sqliteqb/library/query/SQLCreateTableQuery.java
import org.mariotaku.sqliteqb.library.Constraint;
import org.mariotaku.sqliteqb.library.NewColumn;
import org.mariotaku.sqliteqb.library.SQLQuery;
import org.mariotaku.sqliteqb.library.Utils;

        this.table = table;
    }

    void setTemporary(final boolean temporary) {
        this.temporary = temporary;
    }

    public static final class Builder implements IBuilder<SQLCreateTableQuery> {

        private final SQLCreateTableQuery query = new SQLCreateTableQuery();

        private boolean buildCalled;

        public Builder as(final SQLSelectQuery selectStmt) {
            checkNotBuilt();
            query.setAs(selectStmt);
            return this;
        }

        @Override
        public SQLCreateTableQuery build() {
            buildCalled = true;
            return query;
        }

        @Override
        public String buildSQL() {
            return build().getSQL();
        }

        public Builder columns(final NewColumn... newColumns) {