
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 extends SchemaElement> stream) {
SchemaBuilder outer = AbstractSchemaBuilder.this;
Iterator extends SchemaElement> 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 extends IndexElement> elements) {
sql = sql.keyword("primary key")
.add('(')
.autoSpaceOff();
Iterator extends IndexElement> 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