Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.xdev.jadoth.sqlengine.internal.QueryPart Maven / Gradle / Ivy
package com.xdev.jadoth.sqlengine.internal;
import static com.xdev.jadoth.sqlengine.SQL.LANG._AS_;
import static com.xdev.jadoth.sqlengine.SQL.Punctuation.t;
import java.io.Serializable;
import com.xdev.jadoth.lang.Copyable;
import com.xdev.jadoth.sqlengine.SQL.Punctuation;
import com.xdev.jadoth.sqlengine.dbms.DbmsDMLAssembler;
import com.xdev.jadoth.sqlengine.types.TableQuery;
public abstract class QueryPart implements Serializable , Copyable
{
private static final long serialVersionUID = -6899616612478028117L ;
public static final int defaultQueryStringBuilderLength = 1024 ;
public static final int defaultClauseStringBuilderLength = 512 ;
public static final int defaultExpressionStringBuilderLength = 256 ;
public static final int SINGLELINE = getBitFlag();
public static final int PACKED = getBitFlag();
public static final int UNQUALIFIED = getBitFlag();
public static final int OMITALIAS = getBitFlag();
public static final int MINIINDENT = getBitFlag();
public static final int ASEXPRESSION = getBitFlag();
public static final int QUALIFY_BY_TABLE = getBitFlag();
public static final int ESCAPE_QUOTES = getBitFlag();
public static final int ESCAPE_DBL_QUOTES = getBitFlag();
public static final int DELIMIT_TABLE_IDENTIFIERS = getBitFlag();
public static final int DELIMIT_COLUMN_IDENTIFIERS = getBitFlag();
public static final int DELIMIT_ALIASES = getBitFlag();
public static final int FLAGS_TAKEN = initFlagsTaken();
private static int initFlagsTaken ()
{
return SINGLELINE | PACKED | UNQUALIFIED | OMITALIAS | MINIINDENT | ASEXPRESSION | QUALIFY_BY_TABLE
| ESCAPE_QUOTES | ESCAPE_DBL_QUOTES | DELIMIT_TABLE_IDENTIFIERS | DELIMIT_COLUMN_IDENTIFIERS | DELIMIT_ALIASES
;
}
private static int currentShiftIndex = 0 ;
private static int getBitFlag () {
return 1 << currentShiftIndex++;
}
public static final boolean isSingleLine (final int flags) {
return (flags & SINGLELINE) != 0 ;
}
public static final boolean isPacked (final int flags) {
return (flags & PACKED) != 0 ;
}
public static final boolean isUnqualified (final int flags) {
return (flags & UNQUALIFIED) != 0 ;
}
public static final boolean isOmitAlias (final int flags) {
return (flags & OMITALIAS) != 0 ;
}
public static final boolean isMiniIndent (final int flags) {
return (flags & MINIINDENT) != 0 ;
}
public static final boolean isAsExpression (final int flags) {
return (flags & ASEXPRESSION) != 0 ;
}
public static final boolean isQualifyByTable (final int flags) {
return (flags & QUALIFY_BY_TABLE) != 0 ;
}
public static final boolean isEscapeQuotes (final int flags) {
return (flags & ESCAPE_QUOTES) != 0 ;
}
public static final boolean isEscapeDoubleQuotes (final int flags) {
return (flags & ESCAPE_DBL_QUOTES) != 0 ;
}
public static final boolean isDelimitTableIdentifiers (final int flags) {
return (flags & DELIMIT_TABLE_IDENTIFIERS) != 0 ;
}
public static final boolean isDelimitColumnIdentifiers (final int flags) {
return (flags & DELIMIT_COLUMN_IDENTIFIERS) != 0 ;
}
public static final boolean isDelimitAliases (final int flags) {
return (flags & DELIMIT_ALIASES) != 0 ;
}
public static final void printFlags (final int flags) {
System.out.println(flagsToString(flags));
}
public static final String flagsToString (final int flags)
{
final StringBuilder sb = new StringBuilder(32 );
final String bits = Integer.toBinaryString(flags);
final int bitsLength = bits.length();
int zeroCount = sb.capacity();
while (zeroCount --> bitsLength) {
sb.append('0' );
}
sb.append(bits);
return sb.toString();
}
public static final int setSingleLine (final int flags, final boolean singleLine) {
return singleLine ?flags | SINGLELINE :flags &~SINGLELINE;
}
public static final int setPacked (final int flags, final boolean packed) {
return packed ?flags | PACKED :flags &~PACKED;
}
public static final int setQualified (final int flags, final boolean qualified) {
return qualified ?flags | UNQUALIFIED :flags &~UNQUALIFIED;
}
public static final int setUseAlias (final int flags, final boolean useAlias) {
return useAlias ?flags | OMITALIAS :flags &~OMITALIAS;
}
public static final int setMiniIndent (final int flags, final boolean miniIndent) {
return miniIndent ?flags | MINIINDENT :flags &~MINIINDENT;
}
public static final int setAsExpression (final int flags, final boolean asExpression) {
return asExpression ?flags | ASEXPRESSION :flags &~ASEXPRESSION;
}
public static final int setQualifyByTable (final int flags, final boolean qualifyByTable) {
return qualifyByTable ?flags | QUALIFY_BY_TABLE :flags &~QUALIFY_BY_TABLE;
}
public static final int setEscapeQuotes (final int flags, final boolean escapeQuotes) {
return escapeQuotes ?flags | ESCAPE_QUOTES :flags &~ESCAPE_QUOTES;
}
public static final int setEscapeDoubleQuotes (final int flags, final boolean escapeDoubleQuotes) {
return escapeDoubleQuotes ?flags | ESCAPE_DBL_QUOTES :flags &~ESCAPE_DBL_QUOTES;
}
public static final int setDelimitTableIdentifiers (final int flags, final boolean delimitTableIdentifiers) {
return delimitTableIdentifiers ?flags | DELIMIT_TABLE_IDENTIFIERS :flags &~DELIMIT_TABLE_IDENTIFIERS;
}
public static final int setDelimitColumnIdentifiers (final int flags, final boolean delimitColumnIdentifiers) {
return delimitColumnIdentifiers ?flags | DELIMIT_COLUMN_IDENTIFIERS :flags &~DELIMIT_COLUMN_IDENTIFIERS;
}
public static final int setDelimitAliases (final int flags, final boolean delimitAliases) {
return delimitAliases ?flags | DELIMIT_ALIASES :flags &~DELIMIT_ALIASES;
}
public static final int bitSingleLine (final boolean singleLine) {
return singleLine ?SINGLELINE :0 ;
}
public static final int bitPacked (final boolean packed) {
return packed ?PACKED :0 ;
}
public static final int bitQualified (final boolean qualified) {
return qualified ?UNQUALIFIED :0 ;
}
public static final int bitOmitAlias (final boolean omitAlias) {
return omitAlias ?OMITALIAS :0 ;
}
public static final int bitMiniIndent (final boolean miniIndent) {
return miniIndent ?MINIINDENT :0 ;
}
public static final int bitAsExpression (final boolean asExpression) {
return asExpression ?ASEXPRESSION :0 ;
}
public static final int bitQualifyByTable (final boolean qualifyByTable) {
return qualifyByTable ?QUALIFY_BY_TABLE :0 ;
}
public static final int EscapeQuotes (final boolean escapeQuotes) {
return escapeQuotes ?ESCAPE_QUOTES :0 ;
}
public static final int bitEscapeDoubleQuotes (final boolean escapeDoubleQuotes) {
return escapeDoubleQuotes ?ESCAPE_DBL_QUOTES :0 ;
}
public static final int bitDelimitTableIdentifiers (final boolean delimitTableIdentifiers) {
return delimitTableIdentifiers ?DELIMIT_TABLE_IDENTIFIERS :0 ;
}
public static final int bitDelimitColumnIdentifiers (final boolean delimitColumnIdentifiers) {
return delimitColumnIdentifiers ?DELIMIT_COLUMN_IDENTIFIERS :0 ;
}
public static final int bitDelimitAliases (final boolean delimitAliases) {
return delimitAliases ?DELIMIT_ALIASES :0 ;
}
public static final StringBuilder indent (final StringBuilder sb, int indentLevel, final boolean singleLine)
{
if (singleLine) return sb;
while (indentLevel-->0 ){
sb.append(t);
}
return sb;
}
public static String assembleQuery (
final TableQuery query,
final DbmsDMLAssembler dmlAssembler,
final int indentLevel,
final boolean packed,
final boolean singleLine,
final boolean asExpression
)
{
return assembleObject(
query,
dmlAssembler,
new StringBuilder(defaultQueryStringBuilderLength),
indentLevel,
bitPacked(packed) | bitSingleLine(singleLine) | bitAsExpression(asExpression)
).toString();
}
public static StringBuilder assembleObject (
final Object object,
final DbmsDMLAssembler dmlAssembler,
final StringBuilder sb,
final int indentLevel,
final int flags
)
{
if (object instanceof QueryPart){
return ((QueryPart)object).assemble(dmlAssembler, sb, indentLevel, flags);
}
return dmlAssembler.assembleObject(object, sb, indentLevel, flags);
}
protected static StringBuilder assembleAlias (final StringBuilder sb, final String alias, final boolean useAlias)
{
if (useAlias && alias != null ){
sb.append(_AS_).append(alias);
}
return sb;
}
public static final String concatSqlExpressions (
final DbmsDMLAssembler dmlAssembler,
StringBuilder sb,
final int indentLevel,
final int flags,
final String concatenator,
final SqlExpression... parts
)
{
if (sb == null ){
sb = new StringBuilder(QueryPart.defaultExpressionStringBuilderLength);
}
boolean notEmtpy = false ;
for (int i = 0 ; i < parts.length ; i++) {
if (parts[i] == null ) {
continue ;
}
if (notEmtpy) {
sb.append(concatenator);
}
else {
notEmtpy = true ;
}
assembleObject(parts[i], dmlAssembler, sb, indentLevel, flags);
}
return sb.toString();
}
public static final String function (
final DbmsDMLAssembler dmlAssembler, final String name, final int flags, final Object... params
)
{
final StringBuilder sb = new StringBuilder(50 );
sb.append(name);
sb.append(Punctuation.par);
sb.append(list(dmlAssembler, flags, params));
sb.append(Punctuation.rap);
return sb.toString();
}
public static final String list (final DbmsDMLAssembler dmlAssembler, final int flags, final Object... parts) {
return concat(dmlAssembler, Punctuation.comma_, flags, parts);
}
public static final String concat (
final DbmsDMLAssembler dmlAssembler, final String concatenator, final int flags, final Object... parts
)
{
final StringBuilder sb = new StringBuilder(128 );
final int lastIndex = parts.length-1 ;
for (int i = 0 ; i <= lastIndex ; i++) {
if (parts[i] == null ) {
continue ;
}
if (sb.length() > 0 ) {
sb.append(concatenator);
}
assembleObject(parts[i], dmlAssembler, sb, 0 , flags);
}
return sb.toString();
}
protected abstract StringBuilder assemble (
DbmsDMLAssembler dmlAssembler, StringBuilder sb, int indentLevel, int flags
) ;
public String keyword ()
{
return null ;
}
}