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

br.com.objectos.db.AbstractSchemaBuilder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2014-2015 Objectos, Fábrica de Software LTDA.
 *
 * 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 br.com.objectos.db;

import java.util.Iterator;
import java.util.stream.Stream;

/**
 * @author [email protected] (Marcio Endo)
 */
public abstract class AbstractSchemaBuilder extends AbstractQueryBuilder implements SchemaBuilder {

  protected AbstractSchemaBuilder(SqlBuilder sql) {
    super(sql);
  }

  @Override
  public SchemaBuilder accept(SchemaElement element) {
    return element.acceptSchemaElement(this);
  }

  @Override
  public SchemaBuilder addColumn(String name) {
    sql = sql.keyword("add column").identifier(name);
    return this;
  }

  @Override
  public SchemaBuilder alterTable(String name) {
    sql = sql.keyword("alter table").identifier(name);
    return this;
  }

  @Override
  public SchemaBuilder autoIncrement() {
    sql = sql.keyword("auto_increment");
    return this;
  }

  @Override
  public SchemaBuilder charset(String name) {
    sql = sql.keyword("default character set").add(name);
    return this;
  }

  @Override
  public SchemaBuilder charType(int length) {
    sql = sql.keyword("char").add('(').add(Integer.toString(length)).add(')');
    return this;
  }

  @Override
  public SchemaBuilder createDatabase(String name) {
    sql = sql.keyword("create database").identifier(name);
    return this;
  }

  @Override
  public SchemaBuilder createDatabaseIfNotExists(String name) {
    sql = sql.keyword("create database if not exists").identifier(name);
    return this;
  }

  @Override
  public SchemaBuilder createTable(String name) {
    sql = sql.keyword("create table").identifier(name).add('(').autoSpaceOnNext();
    return this;
  }

  @Override
  public SchemaBuilder datetime() {
    sql = sql.keyword("datetime");
    return this;
  }

  @Override
  public SchemaBuilder defaultCurrentTimestamp() {
    sql = sql.keyword("default").keyword("current_timestamp");
    return this;
  }

  @Override
  public SchemaBuilder dropColumn(String name) {
    sql = sql.keyword("drop column").identifier(name);
    return this;
  }

  @Override
  public SchemaBuilder endCreateTable() {
    sql = sql.autoSpaceOff().add(')').autoSpaceOn();
    return this;
  }

  @Override
  public SchemaBuilder identifier(String name) {
    sql = sql.identifier(name);
    return this;
  }

  @Override
  public SchemaBuilder intType() {
    sql = sql.keyword("int");
    return this;
  }

  @Override
  public SchemaBuilder mediumint() {
    sql = sql.keyword("mediumint");
    return this;
  }

  @Override
  public SchemaBuilder nullable(boolean nullable) {
    if (!nullable) {
      sql = sql.keyword("not null");
    }
    return this;
  }

  @Override
  public SchemaBuilderOn on(char separator) {
    return new SchemaBuilderOn() {
      @Override
      public SchemaBuilder join(Stream stream) {
        SchemaBuilder outer = AbstractSchemaBuilder.this;
        Iterator iterator = stream.filter(SchemaElement::shouldAcceptSchemaElement).iterator();

        if (iterator.hasNext()) {
          SchemaElement element = iterator.next();
          outer = element.acceptSchemaElement(outer);
          while (iterator.hasNext()) {
            sql = sql.autoSpaceOff().add(separator).autoSpaceOnNext();
            element = iterator.next();
            outer = element.acceptSchemaElement(outer);
          }
        }

        return AbstractSchemaBuilder.this;
      }
    };
  }

  @Override
  public SchemaBuilder onUpdateCurrentTimestamp() {
    sql = sql.keyword("on update").keyword("current_timestamp");
    return this;
  }

  @Override
  public SchemaBuilder primaryKey(Iterable elements) {
    sql = sql.keyword("primary key")
        .add('(')
        .autoSpaceOff();

    Iterator iterator = elements.iterator();
    if (iterator.hasNext()) {
      IndexElement element = iterator.next();
      element.acceptIndexElement(this);
      while (iterator.hasNext()) {
        sql = sql.add(',');
        element = iterator.next();
        element.acceptIndexElement(this);
      }
    }

    sql = sql.add(')').autoSpaceOn();
    return this;
  }

  @Override
  public SchemaBuilder smallint() {
    sql = sql.keyword("smallint");
    return this;
  }

  @Override
  public SchemaBuilder timestamp() {
    sql = sql.keyword("timestamp");
    return this;
  }

  @Override
  public SchemaBuilder tinyint() {
    sql = sql.keyword("tinyint");
    return this;
  }

  @Override
  public SchemaBuilder unsigned(boolean unsigned) {
    if (unsigned) {
      sql = sql.keyword("unsigned");
    }
    return this;
  }

  @Override
  public SchemaBuilder varchar(int length) {
    sql = sql
        .keyword("varchar")
        .autoSpaceOff()
        .add('(').add(Integer.toString(length)).add(')')
        .autoSpaceOn();
    return this;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy