Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
import java.util.Set;
import java.util.StringTokenizer;

import org.hibernate.internal.util.StringHelper;
import static java.lang.Character.isJavaIdentifierStart;
import static org.hibernate.internal.util.StringHelper.WHITESPACE;

/**
* Performs formatting of basic SQL statements (DML + query).
Expand Down Expand Up @@ -37,7 +38,6 @@ private static class FormatProcess {
boolean afterByOrSetOrFromOrSelect;
int afterOn;
boolean afterBetween;
boolean afterExtract;
boolean afterInsert;
int inFunction;
int parensSinceSelect;
Expand All @@ -58,7 +58,7 @@ public FormatProcess(String sql) {

tokens = new StringTokenizer(
sql,
"()+*/-=<>'`\"[]," + StringHelper.WHITESPACE,
"()+*/-=<>'`\"[]," + WHITESPACE,
true
);
}
Expand Down Expand Up @@ -105,13 +105,22 @@ public String perform() {
closeParen();
break;

case "for":
forUpdate();
break;

case "select":
select();
break;
case "merge":
case "insert":
case "update":
if ( "for".equals( lastToken ) ) {
out();
break;
}
// else fall through
case "insert":
case "delete":
case "merge":
updateOrInsertOrDelete();
break;

Expand All @@ -127,11 +136,6 @@ public String perform() {
afterBetween = true;
misc();
break;
case "trim":
case "extract":
afterExtract = true;
misc();
break;

//TODO: detect when 'left', 'right' are function names
case "left":
Expand Down Expand Up @@ -201,6 +205,19 @@ public String perform() {
return result.toString();
}

private void forUpdate() {
if ( inFunction==0 ) {
decrementIndent();
newline();
out();
incrementIndent();
newline();
}
else {
misc();
}
}

private void or() {
logical();
}
Expand All @@ -216,12 +233,11 @@ private void and() {
}

private void from() {
if ( afterExtract ) {
misc();
afterExtract = false;
if ( inFunction == 0 ) {
endNewClause();
}
else {
endNewClause();
misc();
}
}

Expand Down Expand Up @@ -480,17 +496,18 @@ private void decrementIndent() {
}

private static boolean isFunctionName(String tok) {
if ( tok == null || tok.length() == 0 ) {
if ( tok == null || tok.isEmpty() ) {
return false;
}

final char begin = tok.charAt( 0 );
final boolean isIdentifier = Character.isJavaIdentifierStart( begin ) || '"' == begin;
return isIdentifier && !NON_FUNCTION_NAMES.contains( tok );
else {
final char begin = tok.charAt( 0 );
final boolean isIdentifier = isJavaIdentifierStart( begin ) || '"' == begin;
return isIdentifier && !NON_FUNCTION_NAMES.contains( tok );
}
}

private static boolean isWhitespace(String token) {
return StringHelper.WHITESPACE.contains( token );
return WHITESPACE.contains( token );
}

private void newline() {
Expand All @@ -500,15 +517,15 @@ private void newline() {
}

private void appendUntilToken(String stopToken) {
final StringBuilder sb = new StringBuilder( this.token );
final StringBuilder quoted = new StringBuilder( this.token );
String t;
do {
t = tokens.nextToken();
sb.append( t );
quoted.append( t );
}
while ( !stopToken.equals( t ) && tokens.hasMoreTokens() );
this.token = sb.toString();
lcToken = token;
this.token = quoted.toString();
lcToken = this.token;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
package org.hibernate.engine.jdbc.internal;

import org.hibernate.engine.jdbc.env.spi.AnsiSqlKeywords;
import org.hibernate.internal.util.StringHelper;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import java.util.StringTokenizer;

import static org.hibernate.internal.util.StringHelper.WHITESPACE;
import static org.hibernate.internal.util.StringHelper.isEmpty;

/**
Expand All @@ -25,7 +25,7 @@ public final class HighlightingFormatter implements Formatter {
private static final Set<String> KEYWORDS_LOWERCASED = new HashSet<>( new AnsiSqlKeywords().sql2003() );
static {
// additional keywords not reserved by ANSI SQL 2003
KEYWORDS_LOWERCASED.addAll( Arrays.asList( "key", "sequence", "cascade", "increment", "boolean", "offset", "next", "returning" ) );
KEYWORDS_LOWERCASED.addAll( Arrays.asList( "key", "sequence", "cascade", "increment", "boolean", "offset", "first", "next", "returning" ) );
}

public static final Formatter INSTANCE =
Expand All @@ -34,7 +34,7 @@ public final class HighlightingFormatter implements Formatter {
"36", // cyan
"32"
);
private static final String SYMBOLS_AND_WS = "=><!+-*/()',.|&`\"?" + StringHelper.WHITESPACE;
private static final String SYMBOLS_AND_WS = "=><!+-*/()',.|&`\"?" + WHITESPACE;

private static String escape(String code) {
return "\u001b[" + code + "m";
Expand Down