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

de.ec.sql.Select Maven / Gradle / Ivy

There is a newer version: 1.2
Show newest version
package de.ec.sql;

import java.util.ArrayList;
import java.util.List;

import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Accessors;

@NoArgsConstructor
@Setter(AccessLevel.PROTECTED)
@Accessors(fluent = true)
public class Select implements QueryPart, BeforeFrom {

	private final List columns = new ArrayList<>();
	private boolean distinct = false;
	private boolean all = false;
	private BeforeSelect builder;
	private String sql;

	public Select(final String... columns) {
		columns(columns);
	}

	protected Select(final BeforeSelect builder) {
		this.builder = builder;
	}

	public Select distinct() {
		distinct = true;
		all = false;
		return this;
	}

	public Select all() {
		distinct = false;
		all = true;
		return this;
	}

	public Select column(final String column) {
		columns.add(column);
		return this;
	}

	public Select columns(final String... columns) {
		if (columns != null)
			for (final String column : columns)
				this.columns.add(column);
		return this;
	}

	@Override
	public String string(final QueryOptions options) {
		final StringJoiner strings = new StringJoiner();

		if (builder != null) {
			strings.add(builder.string(options));
			strings.add(options.newLine());
		}

		if (sql != null) {
			strings.add(sql);
		} else {
			strings.add(options.padCased("SELECT"));

			if (distinct) {
				strings.add(" ");
				strings.add(options.cased("DISTINCT"));
			} else if (all) {
				strings.add(" ");
				strings.add(options.cased("ALL"));
			}

			if (columns.isEmpty()) {
				strings.add(" *");
			} else {
				final StringJoiner columnsStrings = new StringJoiner();
				for (final String column : columns)
					columnsStrings.add(QueryUtils.splitName(options, column)
							.string(options));
				strings.add(" ");
				strings.add(columnsStrings.toString(", "));
			}
		}

		return strings.toString();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy