From b680178886f4acc106d5955c540eee5b02c5ae52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 3 Apr 2010 11:54:25 +0000 Subject: [PATCH 0001/1968] Initial import. From 2c8df0dca12660f33bf0e39512ec7aa2e1d4626b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 3 Apr 2010 11:55:54 +0000 Subject: [PATCH 0002/1968] added initial contents --- pom.xml | 51 +++ .../java/com/mysema/codegen/CodeWriter.java | 82 ++++ .../java/com/mysema/codegen/Evaluator.java | 23 + .../com/mysema/codegen/EvaluatorFactory.java | 159 +++++++ .../java/com/mysema/codegen/JavaWriter.java | 420 ++++++++++++++++++ .../com/mysema/codegen/SimpleCompiler.java | 121 +++++ .../mysema/codegen/StringJavaFileObject.java | 38 ++ src/main/java/com/mysema/codegen/Symbols.java | 47 ++ .../com/mysema/codegen/JavaWriterTest.java | 61 +++ 9 files changed, 1002 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/com/mysema/codegen/CodeWriter.java create mode 100644 src/main/java/com/mysema/codegen/Evaluator.java create mode 100644 src/main/java/com/mysema/codegen/EvaluatorFactory.java create mode 100644 src/main/java/com/mysema/codegen/JavaWriter.java create mode 100644 src/main/java/com/mysema/codegen/SimpleCompiler.java create mode 100644 src/main/java/com/mysema/codegen/StringJavaFileObject.java create mode 100644 src/main/java/com/mysema/codegen/Symbols.java create mode 100644 src/test/java/com/mysema/codegen/JavaWriterTest.java diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000..47f2e10c31 --- /dev/null +++ b/pom.xml @@ -0,0 +1,51 @@ + + + + 4.0.0 + com.mysema.codegen + codegen + 0.1.0 + Codegen + Code generation and compilation for Java + + com.mysema.home + mysema-source + 0.2.0 + + jar + + 2010 + + + + net.sourceforge.collections + collections-generic + 4.01 + + + com.mysema.commons + mysema-commons-lang + 0.1.7 + + + commons-lang + commons-lang + 2.4 + + + + + junit + junit + 4.4 + test + + + javax.servlet + servlet-api + + + + + + diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java new file mode 100644 index 0000000000..2781f9acab --- /dev/null +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.util.Collection; + +import org.apache.commons.collections15.Transformer; + +/** + * @author tiwe + * + */ +public interface CodeWriter extends Appendable{ + + CodeWriter annotation(Annotation annotation) throws IOException; + + CodeWriter annotation(Class annotation) throws IOException; + + CodeWriter beginClass(String simpleName) throws IOException; + + CodeWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException; + + CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; + + CodeWriter beginConstructor(String... params) throws IOException; + + CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; + + CodeWriter beginLine(String... segments) throws IOException; + + CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; + + CodeWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException; + + CodeWriter beginStaticMethod(String type, String name, Collection params, Transformer transformer) throws IOException; + + CodeWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException; + + CodeWriter end() throws IOException; + + CodeWriter field(String type, String name) throws IOException; + + CodeWriter imports(Class... imports) throws IOException; + + CodeWriter imports(Package... imports) throws IOException; + + CodeWriter javadoc(String... lines) throws IOException; + + String join(String prefix, String suffix, Iterable args); + + String join(String prefix, String suffix, String... args); + + CodeWriter line(String... segments) throws IOException; + + CodeWriter nl() throws IOException; + + CodeWriter packageDecl(String packageName) throws IOException; + + CodeWriter privateField(String type, String name) throws IOException; + + CodeWriter privateStaticFinal(String type, String name, String value) throws IOException; + + CodeWriter protectedField(String type, String name) throws IOException; + + CodeWriter publicField(String type, String name) throws IOException; + + CodeWriter publicFinal(String type, String name) throws IOException; + + CodeWriter publicFinal(String type, String name, String value) throws IOException; + + CodeWriter publicStaticFinal(String type, String name, String value) throws IOException; + + CodeWriter staticimports(Class... imports) throws IOException; + + CodeWriter suppressWarnings(String type) throws IOException; + +} \ No newline at end of file diff --git a/src/main/java/com/mysema/codegen/Evaluator.java b/src/main/java/com/mysema/codegen/Evaluator.java new file mode 100644 index 0000000000..8c942e8d2b --- /dev/null +++ b/src/main/java/com/mysema/codegen/Evaluator.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +/** + * Evaluator defines an interface for returning a value as a result of + * evaluating an expression using the given argument array + * + * @author tiwe + * + */ +public interface Evaluator { + + /** + * @param args + * @return + */ + T evaluate(Object... args); + +} diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java new file mode 100644 index 0000000000..18bb65cc0b --- /dev/null +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.tools.JavaCompiler; +import javax.tools.SimpleJavaFileObject; +import javax.tools.JavaCompiler.CompilationTask; + + +/** + * EvaluatorFactory is a factory implementation for creating Evaluator instances + * + * @author tiwe + * + */ +public class EvaluatorFactory { + + private final File classDir; + + private final ClassLoader loader; + + private final String classpath; + + private final JavaCompiler compiler; + + private final List compilationOptions; + + public EvaluatorFactory(JavaCompiler compiler, File classDir, + URLClassLoader parent) { + try { + this.compiler = compiler; + this.classDir = classDir; + if (!classDir.exists()){ + if (!classDir.mkdirs()){ + throw new IllegalArgumentException( + classDir.getAbsolutePath() + " could not be created"); + } + } + this.classpath = SimpleCompiler.getClassPath(parent); + this.loader = new URLClassLoader(new URL[] { classDir.toURI().toURL() }, parent); + this.compilationOptions = Arrays.asList( + "-classpath", classpath, + "-d", classDir.getAbsolutePath(), + "-g:none"); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + + private void compile(String source, Class projectionType, + String[] names, Class[] types, String id) throws IOException, + UnsupportedEncodingException { + // create source + StringWriter writer = new StringWriter(); + JavaWriter javaw = new JavaWriter(writer); + javaw.beginClass(id, null); + String[] params = new String[names.length]; + for (int i = 0; i < params.length; i++) { + params[i] = toName(types[i]) + " " + names[i]; + } + + javaw.beginStaticMethod(toName(projectionType), "eval", params); + javaw.line("return ", source, ";"); + javaw.end(); + javaw.end(); + + // compile + try { + SimpleJavaFileObject javaFileObject = new StringJavaFileObject(id, writer.toString()); + Writer out = new StringWriter(); + + CompilationTask task = compiler.getTask(out, null, null, + compilationOptions, null, Collections.singletonList(javaFileObject)); + if (!task.call().booleanValue()) { + throw new RuntimeException("Compilation of " + source + " failed.\n" + out.toString()); + } + } catch (URISyntaxException e) { + throw new IOException(e); + } + + } + + protected String toId(String source, Class returnType, Class... types) { + StringBuilder b = new StringBuilder("Q"); + b.append("_").append(source.hashCode()); + b.append("_").append(returnType.getName().hashCode()); + for (Class type : types) { + b.append("_").append(type.getName().hashCode()); + } + return b.toString().replace('-', '0'); + } + + protected String toName(Class cl) { + if (cl.isArray()) { + return toName(cl.getComponentType()) + "[]"; + } else if (cl.getPackage() == null || cl.getPackage().getName().equals("java.lang")) { + return cl.getSimpleName(); + } else { + return cl.getName().replace('$', '.'); + } + } + + public Evaluator createEvaluator(String source, + Class projectionType, String[] names, Class[] types) { + + try { + String id = toId(source, projectionType, types); + if (!new File(classDir, id + ".class").exists()) { + compile(source, projectionType, names, types, id); + } + + Class clazz = loader.loadClass(id); + final Method method = clazz.getMethod("eval", types); + return new Evaluator() { + @SuppressWarnings("unchecked") + @Override + public T evaluate(Object... args) { + try { + return (T) method.invoke(null, args); + } catch (IllegalAccessException e) { + throw new IllegalArgumentException(e); + } catch (InvocationTargetException e) { + throw new IllegalArgumentException(e); + } + } + }; + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } catch (SecurityException e) { + throw new RuntimeException(e); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + + } + +} diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java new file mode 100644 index 0000000000..c38516b8e8 --- /dev/null +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import static com.mysema.codegen.Symbols.ASSIGN; +import static com.mysema.codegen.Symbols.COMMA; +import static com.mysema.codegen.Symbols.DOT; +import static com.mysema.codegen.Symbols.NEWLINE; +import static com.mysema.codegen.Symbols.QUOTE; +import static com.mysema.codegen.Symbols.SEMICOLON; +import static com.mysema.codegen.Symbols.SPACE; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.collections15.Transformer; +import org.apache.commons.lang.StringEscapeUtils; + +import com.mysema.commons.lang.Assert; + +/** + * @author tiwe + * + */ +public final class JavaWriter implements Appendable, CodeWriter{ + + private static final String EXTENDS = " extends "; + + private static final String IMPLEMENTS = " implements "; + + private static final String IMPORT = "import "; + + private static final String IMPORT_STATIC = "import static "; + + private static final String PACKAGE = "package "; + + private static final String PRIVATE = "private "; + + private static final String PRIVATE_STATIC_FINAL = "private static final "; + + private static final String PROTECTED = "protected "; + + private static final String PUBLIC = "public "; + + private static final String PUBLIC_CLASS = "public class "; + + private static final String PUBLIC_FINAL = "public final "; + + private static final String PUBLIC_INTERFACE = "public interface "; + + private static final String PUBLIC_STATIC = "public static "; + + private static final String PUBLIC_STATIC_FINAL = "public static final "; + + private final Appendable appendable; + + private final Set> importedClasses = new HashSet>(); + + private final Set importedPackages = new HashSet(); + + private String indent = ""; + + private String type; + + public JavaWriter(Appendable appendable){ + this.appendable = Assert.notNull(appendable,"appendable"); + importedPackages.add(Object.class.getPackage()); + } + + @Override + public JavaWriter annotation(Annotation annotation) throws IOException { + append(indent).append("@").appendType(annotation.annotationType()).append("("); + boolean first = true; + for (Method method : annotation.annotationType().getDeclaredMethods()){ + if (!first){ + append(COMMA); + } + append(method.getName()+"="); + try { + Object value = method.invoke(annotation); + annotationConstant(value); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e); + } + first = false; + } + return append(")").nl(); + } + + + @Override + public JavaWriter annotation(Class annotation) throws IOException{ + return append(indent).append("@").appendType(annotation).nl(); + } + + @SuppressWarnings("unchecked") + private void annotationConstant(Object value) throws IOException{ + if (value instanceof Class){ + appendType((Class)value).append(".class"); + }else if (value instanceof Number){ + append(value.toString()); + }else if (value instanceof Enum){ + Enum enumValue = (Enum)value; + append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + }else if (value instanceof String){ + append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); + }else{ + throw new IllegalArgumentException("Unsupported annotation value : " + value); + } + } + + + @Override + public JavaWriter append(char c) throws IOException { + appendable.append(c); + return this; + } + + @Override + public JavaWriter append(CharSequence csq) throws IOException { + appendable.append(csq); + return this; + } + + @Override + public JavaWriter append(CharSequence csq, int start, int end) throws IOException { + appendable.append(csq, start, end); + return this; + } + + private JavaWriter appendType(Class type) throws IOException{ + if (importedClasses.contains(type) || importedPackages.contains(type.getPackage())){ + append(type.getSimpleName()); + }else{ + append(type.getName()); + } + return this; + } + + public JavaWriter beginClass(String simpleName) throws IOException{ + return beginClass(simpleName, null); + } + + @Override + public JavaWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException{ + nl().append(indent + PUBLIC_CLASS + simpleName); + if (superClass != null){ + append(EXTENDS + superClass); + } + if (interfaces.length > 0){ + append(IMPLEMENTS).join(COMMA, interfaces); + } + append(" {").nl().nl(); + goIn(); + + type = simpleName; + if (type.contains("<")){ + type = type.substring(0, type.indexOf('<')); + } + return this; + } + + @Override + public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { + append(indent + PUBLIC + type).params(parameters, transformer).append(" {").nl(); + return goIn(); + } + + @Override + public JavaWriter beginConstructor(String... parameters) throws IOException{ + append(indent + PUBLIC + type).params(parameters).append(" {").nl(); + return goIn(); + } + + @Override + public JavaWriter beginInterface(String simpleName, String... interfaces) throws IOException { + nl().append(indent + PUBLIC_INTERFACE + simpleName); + if (interfaces.length > 0){ + append(EXTENDS).join(COMMA, interfaces); + } + append(" {").nl().nl(); + goIn(); + + type = simpleName; + if (type.contains("<")){ + type = type.substring(0, type.indexOf('<')); + } + return this; + + } + + @Override + public JavaWriter beginLine(String... segments) throws IOException { + append(indent); + for (String segment : segments){ + append(segment); + } + return this; + } + + private JavaWriter beginMethod(String returnType, String modifiers, String methodName, String... args) throws IOException{ + append(indent + modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); + return goIn(); + } + + @Override + public JavaWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + return beginMethod(returnType, PUBLIC, methodName, transform(parameters, transformer)); + } + + @Override + public JavaWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException{ + return beginMethod(returnType, PUBLIC, methodName, args); + } + + @Override + public JavaWriter beginStaticMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + return beginMethod(returnType, PUBLIC_STATIC, methodName, transform(parameters, transformer)); + } + + @Override + public JavaWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException{ + return beginMethod(returnType, PUBLIC_STATIC, methodName, args); + } + + @Override + public JavaWriter end() throws IOException{ + goOut(); + return line("}").nl(); + } + + @Override + public JavaWriter field(String type, String name) throws IOException { + return stmt(type + SPACE + name).nl(); + } + + private JavaWriter goIn(){ + indent += " "; + return this; + } + + private JavaWriter goOut(){ + if (indent.length() >= 4){ + indent = indent.substring(0, indent.length() - 4); + } + return this; + } + + @Override + public JavaWriter imports(Class... imports) throws IOException{ + for (Class cl : imports){ + importedClasses.add(cl); + line(IMPORT + cl.getName() + SEMICOLON); + } + return this; + } + + @Override + public JavaWriter imports(Package... imports) throws IOException { + for (Package p : imports){ + importedPackages.add(p); + line(IMPORT + p.getName() + ".*;"); + } + return this; + } + + @Override + public JavaWriter javadoc(String... lines) throws IOException { + line("/**"); + for (String line : lines){ + line(" * " + line); + } + return line(" */"); + } + + private JavaWriter join(String sep, String... args) throws IOException{ + for (int i = 0; i < args.length; i++){ + if (i > 0){ + append(sep); + } + append(args[i]); + } + return this; + } + + @Override + public String join(String prefix, String suffix, Iterable args) { + StringBuilder builder = new StringBuilder(); + boolean first = true; + for (String arg : args){ + if (!first){ + builder.append(COMMA); + } + builder.append(prefix).append(arg).append(suffix); + first = false; + } + return builder.toString(); + } + + + @Override + public String join(String prefix, String suffix, String... args) { + return join(prefix, suffix, Arrays.asList(args)); + } + + @Override + public JavaWriter line(String... segments) throws IOException{ + append(indent); + for (String segment : segments){ + append(segment); + } + return nl(); + } + + @Override + public JavaWriter nl() throws IOException { + return append(NEWLINE); + } + + @Override + public JavaWriter packageDecl(String packageName) throws IOException{ + return line(PACKAGE + packageName + SEMICOLON).nl(); + } + + private JavaWriter params(Collection parameters, Transformer transformer) throws IOException{ + append("("); + boolean first = true; + for (T param : parameters){ + if (!first){ + append(COMMA); + } + append(transformer.transform(param)); + first = false; + } + append(")"); + return this; + } + + private JavaWriter params(String... params) throws IOException{ + append("("); + join(COMMA, params); + append(")"); + return this; + } + + @Override + public JavaWriter privateField(String type, String name) throws IOException { + return stmt(PRIVATE + type + SPACE + name).nl(); + } + + @Override + public JavaWriter privateStaticFinal(String type, String name, String value) throws IOException { + return stmt(PRIVATE_STATIC_FINAL + type + SPACE + name + ASSIGN + value).nl(); + } + + @Override + public JavaWriter protectedField(String type, String name) throws IOException { + return stmt(PROTECTED + type + SPACE + name).nl(); + } + + @Override + public JavaWriter publicField(String type, String name) throws IOException { + return stmt(PUBLIC + type + SPACE + name).nl(); + } + + @Override + public JavaWriter publicFinal(String type, String name) throws IOException { + return stmt(PUBLIC_FINAL + type + SPACE + name).nl(); + } + + @Override + public JavaWriter publicFinal(String type, String name, String value) throws IOException { + return stmt(PUBLIC_FINAL + type + SPACE + name + ASSIGN + value).nl(); + } + + @Override + public JavaWriter publicStaticFinal(String type, String name, String value) throws IOException { + return stmt(PUBLIC_STATIC_FINAL + type + SPACE + name + ASSIGN + value).nl(); + } + + @Override + public JavaWriter staticimports(Class... imports) throws IOException{ + for (Class cl : imports){ + line(IMPORT_STATIC + cl.getName() + ".*;"); + } + return this; + } + + private JavaWriter stmt(String stmt) throws IOException{ + return line(stmt + SEMICOLON); + } + + @Override + public JavaWriter suppressWarnings(String type) throws IOException{ + return line("@SuppressWarnings(\"" + type +"\")"); + } + + private String[] transform(Collection parameters, Transformer transformer){ + String[] rv = new String[parameters.size()]; + int i = 0; + for (T value : parameters){ + rv[i++] = transformer.transform(value); + } + return rv; + } + +} diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java new file mode 100644 index 0000000000..01a9c7118f --- /dev/null +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.io.Writer; +import java.net.URL; +import java.net.URLClassLoader; +import java.net.URLDecoder; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +import javax.lang.model.SourceVersion; +import javax.tools.DiagnosticListener; +import javax.tools.JavaCompiler; +import javax.tools.JavaFileManager; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.ToolProvider; + +/** + * @author tiwe + * + */ +public class SimpleCompiler implements JavaCompiler{ + + private final ClassLoader classLoader; + + private String classPath; + + private final JavaCompiler compiler; + + public static String getClassPath(URLClassLoader classLoader) { + try{ + StringBuilder path = new StringBuilder(); + for (URL url : ((URLClassLoader)classLoader).getURLs()){ + if (path.length() > 0){ + path.append(File.pathSeparator); + } + String decodedPath = URLDecoder.decode(url.getPath(),"UTF-8"); + path.append(new File(decodedPath).getAbsolutePath()); + } + return path.toString(); + }catch(UnsupportedEncodingException e){ + throw new RuntimeException(e); + } + } + + public SimpleCompiler(){ + this(ToolProvider.getSystemJavaCompiler(), Thread.currentThread().getContextClassLoader()); + } + + public SimpleCompiler(JavaCompiler compiler, ClassLoader classLoader){ + this.compiler = compiler; + this.classLoader = classLoader; + } + + private String getClasspath(){ + if (classPath == null){ + if (classLoader instanceof URLClassLoader){ + classPath = getClassPath((URLClassLoader)classLoader); + }else{ + throw new IllegalArgumentException("Unsupported ClassLoader " + classLoader); + } + } + return classPath; + } + + @Override + public Set getSourceVersions() { + return compiler.getSourceVersions(); + } + + @Override + public StandardJavaFileManager getStandardFileManager( + DiagnosticListener diagnosticListener, + Locale locale, Charset charset) { + return compiler.getStandardFileManager(diagnosticListener, locale, charset); + } + + @Override + public CompilationTask getTask(Writer out, JavaFileManager fileManager, + DiagnosticListener diagnosticListener, + Iterable options, Iterable classes, + Iterable compilationUnits) { + return compiler.getTask(out, fileManager, diagnosticListener, options, classes, compilationUnits); + } + + @Override + public int isSupportedOption(String option) { + return compiler.isSupportedOption(option); + } + + @Override + public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) { + for (String a : arguments){ + if (a.equals("-classpath")){ + return compiler.run(in, out, err, arguments); + } + } + + // no classpath given + List args = new ArrayList(arguments.length + 2); + args.add("-classpath"); + args.add(getClasspath()); + for (String arg : arguments){ + args.add(arg); + } + return compiler.run(in, out, err, args.toArray(new String[args.size()])); + } + +} diff --git a/src/main/java/com/mysema/codegen/StringJavaFileObject.java b/src/main/java/com/mysema/codegen/StringJavaFileObject.java new file mode 100644 index 0000000000..d152bdba37 --- /dev/null +++ b/src/main/java/com/mysema/codegen/StringJavaFileObject.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +import javax.tools.SimpleJavaFileObject; + +/** + * @author tiwe + * + */ +public class StringJavaFileObject extends SimpleJavaFileObject { + + private final String contents; + + public StringJavaFileObject(String className, String contents) throws URISyntaxException{ + super(new URI(className), Kind.SOURCE); + this.contents = contents; + } + + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { + return contents; + } + + @Override + public boolean isNameCompatible(String simpleName, Kind kind) { + return kind.equals(getKind()) && + (simpleName.equals(toUri().getPath()) || toUri().getPath().endsWith("/" + simpleName)); + } + +} diff --git a/src/main/java/com/mysema/codegen/Symbols.java b/src/main/java/com/mysema/codegen/Symbols.java new file mode 100644 index 0000000000..d297ae3c72 --- /dev/null +++ b/src/main/java/com/mysema/codegen/Symbols.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +/** + * @author tiwe + * + */ +public final class Symbols { + + public static final String ASSIGN = " = "; + + public static final String COMMA = ", "; + + public static final String DOT = "."; + + public static final String DOT_CLASS = ".class"; + + public static final String EMPTY = ""; + + public static final String NEW = "new "; + + public static final String NEWLINE = "\n"; + + public static final String QUOTE = "\""; + + public static final String RETURN = "return "; + + public static final String SEMICOLON = ";"; + + public static final String SERIAL = "serial"; + + public static final String SPACE = " "; + + public static final String STAR = "*"; + + public static final String SUPER = "super"; + + public static final String THIS = "this"; + + public static final String UNCHECKED = "unchecked"; + + private Symbols(){} +} diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java new file mode 100644 index 0000000000..a1b91ddd02 --- /dev/null +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -0,0 +1,61 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; + +import org.junit.Test; + +public class JavaWriterTest { + + @Test + public void testBasic() throws IOException { + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class, Test.class); + writer.beginClass("JavaWriterTest"); + writer.annotation(Test.class); + writer.beginPublicMethod("void", "test"); + writer.line("// TODO"); + writer.end(); + writer.end(); + System.out.println(w); + } + + @Test + public void testFields() throws IOException{ + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.beginClass("FieldTests"); + // private + writer.privateField("String", "privateField"); + writer.privateStaticFinal("String", "privateStaticFinal", "\"val\""); + // protected + writer.protectedField("String","protectedField"); + // field + writer.field("String","field"); + // public + writer.publicField("String","publicField"); + writer.publicStaticFinal("String", "publicStaticFinal", "\"val\""); + writer.end(); + System.out.println(w); + } + + @Test + public void testMethods() throws IOException{ + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.beginClass("MethodTests"); + // private + + // protected + + // method + + // public + + writer.end(); + System.out.println(w); + } + +} From d2059b0a19b66a36036e79a731b97218a0ac3363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 3 Apr 2010 11:58:47 +0000 Subject: [PATCH 0003/1968] updated version to 0.1.0-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 47f2e10c31..3626cbff20 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.0 + 0.1.0-SNAPSHOT Codegen Code generation and compilation for Java From 379e56d6591e57ff05ab952320ae9b4220f6c4dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 4 Apr 2010 16:39:41 +0000 Subject: [PATCH 0004/1968] improved tests for JavaWriter --- pom.xml | 16 ++++--- .../java/com/mysema/codegen/JavaWriter.java | 16 ++++--- src/test/java/com/mysema/codegen/Entity.java | 5 ++ .../com/mysema/codegen/JavaWriterTest.java | 47 +++++++++++++++++-- src/test/resources/testAnnotations | 13 +++++ src/test/resources/testBasic | 14 ++++++ src/test/resources/testFields | 16 +++++++ src/test/resources/testJavadoc | 12 +++++ src/test/resources/testMethods | 3 ++ 9 files changed, 126 insertions(+), 16 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/Entity.java create mode 100644 src/test/resources/testAnnotations create mode 100644 src/test/resources/testBasic create mode 100644 src/test/resources/testFields create mode 100644 src/test/resources/testJavadoc create mode 100644 src/test/resources/testMethods diff --git a/pom.xml b/pom.xml index 3626cbff20..07c33c4b38 100644 --- a/pom.xml +++ b/pom.xml @@ -21,12 +21,7 @@ net.sourceforge.collections collections-generic 4.01 - - - com.mysema.commons - mysema-commons-lang - 0.1.7 - + commons-lang commons-lang @@ -45,7 +40,14 @@ servlet-api - + + + org.apache.commons + commons-io + 1.3.2 + test + + diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index c38516b8e8..11b3d04053 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -25,8 +25,6 @@ import org.apache.commons.collections15.Transformer; import org.apache.commons.lang.StringEscapeUtils; -import com.mysema.commons.lang.Assert; - /** * @author tiwe * @@ -72,8 +70,11 @@ public final class JavaWriter implements Appendable, CodeWriter{ private String type; public JavaWriter(Appendable appendable){ - this.appendable = Assert.notNull(appendable,"appendable"); - importedPackages.add(Object.class.getPackage()); + if (appendable == null){ + throw new IllegalArgumentException("appendable is null"); + } + this.appendable = appendable; + this.importedPackages.add(Object.class.getPackage()); } @Override @@ -156,7 +157,7 @@ public JavaWriter beginClass(String simpleName) throws IOException{ @Override public JavaWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException{ - nl().append(indent + PUBLIC_CLASS + simpleName); + append(indent + PUBLIC_CLASS + simpleName); if (superClass != null){ append(EXTENDS + superClass); } @@ -187,7 +188,7 @@ public JavaWriter beginConstructor(String... parameters) throws IOException{ @Override public JavaWriter beginInterface(String simpleName, String... interfaces) throws IOException { - nl().append(indent + PUBLIC_INTERFACE + simpleName); + append(indent + PUBLIC_INTERFACE + simpleName); if (interfaces.length > 0){ append(EXTENDS).join(COMMA, interfaces); } @@ -265,6 +266,7 @@ public JavaWriter imports(Class... imports) throws IOException{ importedClasses.add(cl); line(IMPORT + cl.getName() + SEMICOLON); } + nl(); return this; } @@ -274,6 +276,7 @@ public JavaWriter imports(Package... imports) throws IOException { importedPackages.add(p); line(IMPORT + p.getName() + ".*;"); } + nl(); return this; } @@ -332,6 +335,7 @@ public JavaWriter nl() throws IOException { @Override public JavaWriter packageDecl(String packageName) throws IOException{ + importedPackages.add(Package.getPackage(packageName)); return line(PACKAGE + packageName + SEMICOLON).nl(); } diff --git a/src/test/java/com/mysema/codegen/Entity.java b/src/test/java/com/mysema/codegen/Entity.java new file mode 100644 index 0000000000..9dccc635d0 --- /dev/null +++ b/src/test/java/com/mysema/codegen/Entity.java @@ -0,0 +1,5 @@ +package com.mysema.codegen; + +public @interface Entity { + +} diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index a1b91ddd02..65814554ae 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -1,12 +1,21 @@ package com.mysema.codegen; +import static org.junit.Assert.assertEquals; + import java.io.IOException; import java.io.StringWriter; +import org.apache.commons.io.IOUtils; import org.junit.Test; public class JavaWriterTest { + private static void match(String resource, String text) throws IOException{ + String expected = IOUtils.toString(JavaWriterTest.class.getResourceAsStream(resource),"UTF-8").replace("\r\n", "\n").trim(); + String actual = text.trim(); + assertEquals(expected, actual); + } + @Test public void testBasic() throws IOException { StringWriter w = new StringWriter(); @@ -19,7 +28,37 @@ public void testBasic() throws IOException { writer.line("// TODO"); writer.end(); writer.end(); - System.out.println(w); + + match("/testBasic", w.toString()); + } + + @Test + public void testJavadoc() throws IOException{ + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class, Test.class); + writer.javadoc("JavaWriterTest is a test class"); + writer.beginClass("JavaWriterTest"); + writer.end(); + + match("/testJavadoc", w.toString()); + } + + @Test + public void testAnnotations() throws IOException{ + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class); + writer.annotation(Entity.class); + writer.beginClass("JavaWriterTest"); + writer.annotation(Test.class); + writer.beginPublicMethod("void", "test"); + writer.end(); + writer.end(); + + match("/testAnnotations", w.toString()); } @Test @@ -38,7 +77,8 @@ public void testFields() throws IOException{ writer.publicField("String","publicField"); writer.publicStaticFinal("String", "publicStaticFinal", "\"val\""); writer.end(); - System.out.println(w); + + match("/testFields", w.toString()); } @Test @@ -55,7 +95,8 @@ public void testMethods() throws IOException{ // public writer.end(); - System.out.println(w); + + match("/testMethods", w.toString()); } } diff --git a/src/test/resources/testAnnotations b/src/test/resources/testAnnotations new file mode 100644 index 0000000000..cba34cce46 --- /dev/null +++ b/src/test/resources/testAnnotations @@ -0,0 +1,13 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; + +@Entity +public class JavaWriterTest { + + @org.junit.Test + public void test() { + } + +} \ No newline at end of file diff --git a/src/test/resources/testBasic b/src/test/resources/testBasic new file mode 100644 index 0000000000..1439d78629 --- /dev/null +++ b/src/test/resources/testBasic @@ -0,0 +1,14 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; +import org.junit.Test; + +public class JavaWriterTest { + + @Test + public void test() { + // TODO + } + +} \ No newline at end of file diff --git a/src/test/resources/testFields b/src/test/resources/testFields new file mode 100644 index 0000000000..de6a0bea44 --- /dev/null +++ b/src/test/resources/testFields @@ -0,0 +1,16 @@ + +public class FieldTests { + + private String privateField; + + private static final String privateStaticFinal = "val"; + + protected String protectedField; + + String field; + + public String publicField; + + public static final String publicStaticFinal = "val"; + +} \ No newline at end of file diff --git a/src/test/resources/testJavadoc b/src/test/resources/testJavadoc new file mode 100644 index 0000000000..cf45bb2ae8 --- /dev/null +++ b/src/test/resources/testJavadoc @@ -0,0 +1,12 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; +import org.junit.Test; + +/** + * JavaWriterTest is a test class + */ +public class JavaWriterTest { + +} \ No newline at end of file diff --git a/src/test/resources/testMethods b/src/test/resources/testMethods new file mode 100644 index 0000000000..cd947a8e67 --- /dev/null +++ b/src/test/resources/testMethods @@ -0,0 +1,3 @@ +public class MethodTests { + +} From c5d792d5c89257f50fa7f2f6b7391e0a9081c198 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 7 Apr 2010 18:35:35 +0000 Subject: [PATCH 0005/1968] modified EvaluatorFactory to manage classes in-memory --- .../java/com/mysema/codegen/ClassUtils.java | 32 ++++ .../java/com/mysema/codegen/CodeWriter.java | 4 - .../com/mysema/codegen/EvaluatorFactory.java | 111 +++++------- .../java/com/mysema/codegen/JavaWriter.java | 74 +++----- .../com/mysema/codegen/LocationAndKind.java | 54 ++++++ .../com/mysema/codegen/MemClassLoader.java | 112 ++++++++++++ .../com/mysema/codegen/MemFileManager.java | 161 ++++++++++++++++++ .../mysema/codegen/MemFileSystemRegistry.java | 61 +++++++ .../com/mysema/codegen/MemJavaFileObject.java | 69 ++++++++ .../mysema/codegen/MemSourceFileObject.java | 62 +++++++ .../com/mysema/codegen/SimpleCompiler.java | 12 +- .../mysema/codegen/StringJavaFileObject.java | 38 ----- .../com/mysema/codegen/ClassUtilsTest.java | 22 +++ src/test/java/com/mysema/codegen/Entity.java | 5 + .../mysema/codegen/EvaluatorFactoryTest.java | 71 ++++++++ .../com/mysema/codegen/JavaWriterTest.java | 5 + 16 files changed, 734 insertions(+), 159 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/ClassUtils.java create mode 100644 src/main/java/com/mysema/codegen/LocationAndKind.java create mode 100644 src/main/java/com/mysema/codegen/MemClassLoader.java create mode 100644 src/main/java/com/mysema/codegen/MemFileManager.java create mode 100644 src/main/java/com/mysema/codegen/MemFileSystemRegistry.java create mode 100644 src/main/java/com/mysema/codegen/MemJavaFileObject.java create mode 100644 src/main/java/com/mysema/codegen/MemSourceFileObject.java delete mode 100644 src/main/java/com/mysema/codegen/StringJavaFileObject.java create mode 100644 src/test/java/com/mysema/codegen/ClassUtilsTest.java create mode 100644 src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/ClassUtils.java new file mode 100644 index 0000000000..15a726ac12 --- /dev/null +++ b/src/main/java/com/mysema/codegen/ClassUtils.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.util.Collections; +import java.util.Set; + +/** + * @author tiwe + * + */ +public final class ClassUtils { + + public static String getName(Class cl){ + return getName(cl, Collections.singleton(Object.class.getPackage()), Collections.>emptySet()); + } + + public static String getName(Class cl, Set packages, Set> classes) { + if (cl.isArray()) { + return getName(cl.getComponentType(), packages, classes) + "[]"; + } else if (cl.getPackage() == null || packages.contains(cl.getPackage()) || classes.contains(cl)) { + return cl.getSimpleName().replace('$', '.'); + } else { + return cl.getName().replace('$', '.'); + } + } + + private ClassUtils(){} +} diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 2781f9acab..c2ea2eb3bd 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -51,10 +51,6 @@ public interface CodeWriter extends Appendable{ CodeWriter javadoc(String... lines) throws IOException; - String join(String prefix, String suffix, Iterable args); - - String join(String prefix, String suffix, String... args); - CodeWriter line(String... segments) throws IOException; CodeWriter nl() throws IOException; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 18bb65cc0b..d68d575fa5 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -5,16 +5,12 @@ */ package com.mysema.codegen; -import java.io.File; import java.io.IOException; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.net.URL; import java.net.URLClassLoader; import java.util.Arrays; import java.util.Collections; @@ -22,6 +18,8 @@ import javax.tools.JavaCompiler; import javax.tools.SimpleJavaFileObject; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; import javax.tools.JavaCompiler.CompilationTask; @@ -33,36 +31,26 @@ */ public class EvaluatorFactory { - private final File classDir; - - private final ClassLoader loader; - + private final MemFileManager fileManager; + private final String classpath; + private final List compilationOptions; + private final JavaCompiler compiler; - private final List compilationOptions; + private final ClassLoader loader; - public EvaluatorFactory(JavaCompiler compiler, File classDir, - URLClassLoader parent) { - try { - this.compiler = compiler; - this.classDir = classDir; - if (!classDir.exists()){ - if (!classDir.mkdirs()){ - throw new IllegalArgumentException( - classDir.getAbsolutePath() + " could not be created"); - } - } - this.classpath = SimpleCompiler.getClassPath(parent); - this.loader = new URLClassLoader(new URL[] { classDir.toURI().toURL() }, parent); - this.compilationOptions = Arrays.asList( - "-classpath", classpath, - "-d", classDir.getAbsolutePath(), - "-g:none"); - } catch (MalformedURLException e) { - throw new RuntimeException(e); - } + public EvaluatorFactory(URLClassLoader parent){ + this(parent, ToolProvider.getSystemJavaCompiler()); + } + + public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { + this.fileManager = new MemFileManager(compiler.getStandardFileManager(null, null, null)); + this.compiler = compiler; + this.classpath = SimpleCompiler.getClassPath(parent); + this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); + this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } private void compile(String source, Class projectionType, @@ -74,48 +62,29 @@ private void compile(String source, Class projectionType, javaw.beginClass(id, null); String[] params = new String[names.length]; for (int i = 0; i < params.length; i++) { - params[i] = toName(types[i]) + " " + names[i]; + params[i] = ClassUtils.getName(types[i]) + " " + names[i]; } - javaw.beginStaticMethod(toName(projectionType), "eval", params); + javaw.beginStaticMethod(ClassUtils.getName(projectionType), "eval", params); javaw.line("return ", source, ";"); javaw.end(); javaw.end(); // compile - try { - SimpleJavaFileObject javaFileObject = new StringJavaFileObject(id, writer.toString()); - Writer out = new StringWriter(); - - CompilationTask task = compiler.getTask(out, null, null, - compilationOptions, null, Collections.singletonList(javaFileObject)); - if (!task.call().booleanValue()) { - throw new RuntimeException("Compilation of " + source + " failed.\n" + out.toString()); - } - } catch (URISyntaxException e) { - throw new IOException(e); - } - - } - - protected String toId(String source, Class returnType, Class... types) { - StringBuilder b = new StringBuilder("Q"); - b.append("_").append(source.hashCode()); - b.append("_").append(returnType.getName().hashCode()); - for (Class type : types) { - b.append("_").append(type.getName().hashCode()); + SimpleJavaFileObject javaFileObject = new MemSourceFileObject(id, writer.toString()); + Writer out = new StringWriter(); + + CompilationTask task = compiler.getTask( + out, + fileManager, + null, + compilationOptions, + null, + Collections.singletonList(javaFileObject)); + if (!task.call().booleanValue()) { + throw new RuntimeException("Compilation of " + source + " failed.\n" + out.toString()); } - return b.toString().replace('-', '0'); - } - protected String toName(Class cl) { - if (cl.isArray()) { - return toName(cl.getComponentType()) + "[]"; - } else if (cl.getPackage() == null || cl.getPackage().getName().equals("java.lang")) { - return cl.getSimpleName(); - } else { - return cl.getName().replace('$', '.'); - } } public Evaluator createEvaluator(String source, @@ -123,11 +92,15 @@ public Evaluator createEvaluator(String source, try { String id = toId(source, projectionType, types); - if (!new File(classDir, id + ".class").exists()) { + Class clazz; + try{ + clazz = loader.loadClass(id); + }catch(ClassNotFoundException e){ compile(source, projectionType, names, types, id); + // reload + clazz = loader.loadClass(id); } - Class clazz = loader.loadClass(id); final Method method = clazz.getMethod("eval", types); return new Evaluator() { @SuppressWarnings("unchecked") @@ -156,4 +129,14 @@ public T evaluate(Object... args) { } + protected String toId(String source, Class returnType, Class... types) { + StringBuilder b = new StringBuilder("Q"); + b.append("_").append(source.hashCode()); + b.append("_").append(returnType.getName().hashCode()); + for (Class type : types) { + b.append("_").append(type.getName().hashCode()); + } + return b.toString().replace('-', '0'); + } + } diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 11b3d04053..68c886bef3 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -17,13 +17,13 @@ import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; import org.apache.commons.collections15.Transformer; import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang.StringUtils; /** * @author tiwe @@ -162,7 +162,8 @@ public JavaWriter beginClass(String simpleName, String superClass, String... int append(EXTENDS + superClass); } if (interfaces.length > 0){ - append(IMPLEMENTS).join(COMMA, interfaces); + append(IMPLEMENTS);//.join(COMMA, interfaces); + append(StringUtils.join(interfaces, COMMA)); } append(" {").nl().nl(); goIn(); @@ -190,7 +191,8 @@ public JavaWriter beginConstructor(String... parameters) throws IOException{ public JavaWriter beginInterface(String simpleName, String... interfaces) throws IOException { append(indent + PUBLIC_INTERFACE + simpleName); if (interfaces.length > 0){ - append(EXTENDS).join(COMMA, interfaces); + append(EXTENDS); + append(StringUtils.join(interfaces, COMMA)); } append(" {").nl().nl(); goIn(); @@ -212,29 +214,29 @@ public JavaWriter beginLine(String... segments) throws IOException { return this; } - private JavaWriter beginMethod(String returnType, String modifiers, String methodName, String... args) throws IOException{ + private JavaWriter beginMethod(String modifiers, String returnType, String methodName, String... args) throws IOException{ append(indent + modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); return goIn(); } @Override public JavaWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { - return beginMethod(returnType, PUBLIC, methodName, transform(parameters, transformer)); + return beginMethod(PUBLIC, returnType, methodName, transform(parameters, transformer)); } @Override public JavaWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException{ - return beginMethod(returnType, PUBLIC, methodName, args); + return beginMethod(PUBLIC, returnType, methodName, args); } @Override public JavaWriter beginStaticMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { - return beginMethod(returnType, PUBLIC_STATIC, methodName, transform(parameters, transformer)); + return beginMethod(PUBLIC_STATIC, returnType, methodName, transform(parameters, transformer)); } @Override public JavaWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException{ - return beginMethod(returnType, PUBLIC_STATIC, methodName, args); + return beginMethod(PUBLIC_STATIC, returnType, methodName, args); } @Override @@ -289,36 +291,6 @@ public JavaWriter javadoc(String... lines) throws IOException { return line(" */"); } - private JavaWriter join(String sep, String... args) throws IOException{ - for (int i = 0; i < args.length; i++){ - if (i > 0){ - append(sep); - } - append(args[i]); - } - return this; - } - - @Override - public String join(String prefix, String suffix, Iterable args) { - StringBuilder builder = new StringBuilder(); - boolean first = true; - for (String arg : args){ - if (!first){ - builder.append(COMMA); - } - builder.append(prefix).append(arg).append(suffix); - first = false; - } - return builder.toString(); - } - - - @Override - public String join(String prefix, String suffix, String... args) { - return join(prefix, suffix, Arrays.asList(args)); - } - @Override public JavaWriter line(String... segments) throws IOException{ append(indent); @@ -355,46 +327,54 @@ private JavaWriter params(Collection parameters, Transformer tr private JavaWriter params(String... params) throws IOException{ append("("); - join(COMMA, params); + append(StringUtils.join(params, COMMA)); append(")"); return this; } @Override public JavaWriter privateField(String type, String name) throws IOException { - return stmt(PRIVATE + type + SPACE + name).nl(); + return field(PRIVATE, type, name); } @Override public JavaWriter privateStaticFinal(String type, String name, String value) throws IOException { - return stmt(PRIVATE_STATIC_FINAL + type + SPACE + name + ASSIGN + value).nl(); + return field(PRIVATE_STATIC_FINAL, type, name, value); } @Override public JavaWriter protectedField(String type, String name) throws IOException { - return stmt(PROTECTED + type + SPACE + name).nl(); + return field(PROTECTED, type, name); } @Override public JavaWriter publicField(String type, String name) throws IOException { - return stmt(PUBLIC + type + SPACE + name).nl(); + return field(PUBLIC, type, name); } @Override public JavaWriter publicFinal(String type, String name) throws IOException { - return stmt(PUBLIC_FINAL + type + SPACE + name).nl(); + return field(PUBLIC_FINAL, type, name); } @Override public JavaWriter publicFinal(String type, String name, String value) throws IOException { - return stmt(PUBLIC_FINAL + type + SPACE + name + ASSIGN + value).nl(); + return field(PUBLIC_FINAL, type, name, value); } @Override public JavaWriter publicStaticFinal(String type, String name, String value) throws IOException { - return stmt(PUBLIC_STATIC_FINAL + type + SPACE + name + ASSIGN + value).nl(); + return field(PUBLIC_STATIC_FINAL, type, name, value); } - + + private JavaWriter field(String modifier, String type, String name) throws IOException{ + return stmt(modifier + type + SPACE + name).nl(); + } + + private JavaWriter field(String modifier, String type, String name, String value) throws IOException{ + return stmt(modifier + type + SPACE + name + ASSIGN + value).nl(); + } + @Override public JavaWriter staticimports(Class... imports) throws IOException{ for (Class cl : imports){ diff --git a/src/main/java/com/mysema/codegen/LocationAndKind.java b/src/main/java/com/mysema/codegen/LocationAndKind.java new file mode 100644 index 0000000000..41327cf408 --- /dev/null +++ b/src/main/java/com/mysema/codegen/LocationAndKind.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * + * base on code from https://hickory.dev.java.net/ + * + */ + +package com.mysema.codegen; + +import javax.tools.JavaFileManager.Location; +import javax.tools.JavaFileObject.Kind; + +/** + * @author tiwe + * + */ +public class LocationAndKind { + + private final Kind kind; + + private final Location location; + + public LocationAndKind(Location location, Kind kind) { + this.location = location; + this.kind = kind; + } + + @Override + public boolean equals(Object obj) { + if (obj == this){ + return true; + }else if (obj instanceof LocationAndKind){ + LocationAndKind other = (LocationAndKind)obj; + return location.equals(other.location) && kind.equals(other.kind); + }else{ + return false; + } + } + + @Override + public int hashCode() { + return kind.hashCode() * 31 + location.hashCode(); + } + + @Override + public String toString() { + return kind.toString() + "@" + location.toString(); + } + + + + + +} diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java new file mode 100644 index 0000000000..29895f8441 --- /dev/null +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * + * base on code from https://hickory.dev.java.net/ + * + */ + +package com.mysema.codegen; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.Map; + +import javax.tools.JavaFileObject; +import javax.tools.StandardLocation; +import javax.tools.JavaFileObject.Kind; + + +/** + * @author tiwe + * + */ +public final class MemClassLoader extends ClassLoader { + + private static final LocationAndKind CLASS_KEY = new LocationAndKind(StandardLocation.CLASS_OUTPUT,Kind.CLASS); + + private static final LocationAndKind OTHER_KEY = new LocationAndKind(StandardLocation.CLASS_OUTPUT,Kind.OTHER); + + private static final LocationAndKind SOURCE_KEY = new LocationAndKind(StandardLocation.CLASS_OUTPUT,Kind.SOURCE); + + private final Map> memFileSystem; + + public MemClassLoader(Map> ramFileSystem) { + this.memFileSystem = ramFileSystem; + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + JavaFileObject jfo = memFileSystem.get(CLASS_KEY).get(name); + if (jfo != null) { + byte[] bytes = ((MemJavaFileObject)jfo).getByteArray(); + return defineClass(name, bytes, 0, bytes.length); + }else{ + return super.findClass(name); + } + } + + @Override + protected URL findResource(String name) { + URL retValue = super.findResource(name); + if(retValue != null) { + return retValue; + } else { + JavaFileObject jfo = getFileObject(name); + if(jfo != null) { + try { + return jfo.toUri().toURL(); + } catch (MalformedURLException ex) { + return null; + } + } else { + return null; + } + } + } + + private JavaFileObject getFileObject(String name) { + LocationAndKind key; + if(name.endsWith(Kind.CLASS.extension)) { + name = name.replace(".","/") + Kind.CLASS.extension; + key = CLASS_KEY; + } else if(name.endsWith(Kind.SOURCE.extension)) { + name = name.replace(".","/") + Kind.SOURCE.extension; + key = SOURCE_KEY; + }else{ + key = OTHER_KEY; + } + if(memFileSystem.containsKey(key)) { + return memFileSystem.get(key).get(name); + }else{ + return null; + } + } + + @Override + public InputStream getResourceAsStream(String name) { + JavaFileObject jfo = getFileObject(name); + if (jfo != null) { + byte[] bytes = ((MemJavaFileObject)jfo).getByteArray(); + return new ByteArrayInputStream(bytes); + }else{ + return null; + } + } + + @Override + public Enumeration getResources(String name) throws IOException { + List retValue; + retValue = Collections.list(super.getResources(name)); + JavaFileObject jfo = getFileObject(name); + if (jfo != null){ + retValue.add(jfo.toUri().toURL()); + } + return Collections.enumeration(retValue); + } +} diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java new file mode 100644 index 0000000000..72967760a8 --- /dev/null +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * + * base on code from https://hickory.dev.java.net/ + * + */ + +package com.mysema.codegen; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.tools.FileObject; +import javax.tools.ForwardingJavaFileManager; +import javax.tools.JavaFileManager; +import javax.tools.JavaFileObject; +import javax.tools.StandardJavaFileManager; +import javax.tools.StandardLocation; +import javax.tools.JavaFileObject.Kind; + + + +/** + * @author tiwe + * + */ +public class MemFileManager extends ForwardingJavaFileManager { + + private final ClassLoader classLoader; + + private final Map> ramFileSystem; + + private final String urlPrefix; + + public MemFileManager(StandardJavaFileManager sjfm) { + super(sjfm); + ramFileSystem = new HashMap>(); + Map classLoaderContent = new HashMap(); + ramFileSystem.put(new LocationAndKind(StandardLocation.CLASS_OUTPUT, Kind.CLASS),classLoaderContent); + classLoader = new MemClassLoader(ramFileSystem); + urlPrefix = MemFileSystemRegistry.DEFAULT.getUrlPrefix(this); + } + + @Override + public ClassLoader getClassLoader(JavaFileManager.Location location) { + return classLoader; + } + + @Override + public FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException { + String name = null; + if("".equals(packageName)) { + name = relativeName; + } else { + name = packageName.replace('.','/') + "/" + relativeName; + } + LocationAndKind key = new LocationAndKind(location, Kind.OTHER); + if(ramFileSystem.containsKey(key)) { + JavaFileObject jfo = ramFileSystem.get(key).get(name); + if(jfo != null) { + return jfo; + } + } + JavaFileObject jfo = new MemJavaFileObject(urlPrefix, name, Kind.OTHER); + register(key,jfo); + return jfo; + } + + @Override + public JavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind) throws IOException { + throw new UnsupportedOperationException(); + } + + @Override + public JavaFileObject getJavaFileForOutput(Location location, + String name, Kind kind, FileObject sibling) + throws IOException { + JavaFileObject javaFileObject = null; + LocationAndKind key = new LocationAndKind(location,kind); + + if(ramFileSystem.containsKey(key)) { + javaFileObject = ramFileSystem.get(key).get(name); + if(javaFileObject != null) { + return javaFileObject; + } + } + if(kind == Kind.SOURCE) { + javaFileObject = new MemSourceFileObject(name); + } else { + javaFileObject = new MemJavaFileObject(urlPrefix, name, kind); + } + register(key,javaFileObject); + return javaFileObject; + } + + @Override + public String inferBinaryName(Location loc, JavaFileObject javaFileObject) { + String result; + if (loc == StandardLocation.CLASS_PATH && javaFileObject instanceof MemJavaFileObject) { + result = javaFileObject.getName(); + } else { + result = super.inferBinaryName(loc, javaFileObject); + } + return result; + } + + @Override + public boolean isSameFile(FileObject a, FileObject b) { + return a.equals(b); + } + + @Override + public Iterable list(Location location, String pkg, + Set kinds, boolean recurse) throws IOException { + + List result = new ArrayList(); + for(JavaFileObject f : super.list(location, pkg, kinds, recurse)) { + result.add(f); + } + if(location == StandardLocation.CLASS_PATH) { + location = StandardLocation.CLASS_OUTPUT; + } + + for(Kind kind : kinds) { + LocationAndKind key = new LocationAndKind(location,kind); + if(ramFileSystem.containsKey(key)) { + Map locatedFiles = ramFileSystem.get(key); + for(String name : locatedFiles.keySet()) { + String packageName = ""; + if (name.indexOf('.') > -1){ + packageName = name.substring(0,name.lastIndexOf('.')); + } + if(recurse ? packageName.startsWith(pkg) : packageName.equals(pkg)) { + JavaFileObject candidate = locatedFiles.get(name); + if(kinds.contains(candidate.getKind())) { + result.add(candidate); + } + } + } + } + } + return result; + } + + private void register(LocationAndKind key, JavaFileObject javaFileObject) { + if(!ramFileSystem.containsKey(key)) { + ramFileSystem.put(key, new HashMap()); + } + ramFileSystem.get(key).put(javaFileObject.getName(), javaFileObject); + } + +} diff --git a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java new file mode 100644 index 0000000000..0a62977f63 --- /dev/null +++ b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * + * base on code from https://hickory.dev.java.net/ + * + */ + +package com.mysema.codegen; + +import java.lang.ref.WeakReference; +import java.net.URL; +import java.util.Map; +import java.util.WeakHashMap; +import javax.tools.JavaFileManager; + +/** + * @author tiwe + * + */ +public class MemFileSystemRegistry { + + public static final MemFileSystemRegistry DEFAULT = new MemFileSystemRegistry(); + + private final Map jfm2prefix = new WeakHashMap(); + + private Map> prefix2jfm = new WeakHashMap>(); + + private final String protocolName; + + private int sequence = 0; + + private MemFileSystemRegistry() { + String pkgName = MemFileSystemRegistry.class.getPackage().getName(); + protocolName = pkgName.substring(pkgName.lastIndexOf(".") + 1); + String pkgs = System.getProperty("java.protocol.handler.pkgs"); + String parentPackage = pkgName.substring(0,pkgName.lastIndexOf(".")); + pkgs = pkgs == null ? parentPackage : pkgs + "|" + parentPackage; + System.setProperty("java.protocol.handler.pkgs",pkgs); + } + + public JavaFileManager getFileSystem(URL url) { + String prefix = url.getProtocol() + "://" + url.getHost() + "/"; + if(prefix2jfm.containsKey(prefix)) { + return prefix2jfm.get(prefix).get(); + } else { + return null; + } + } + + public String getUrlPrefix(JavaFileManager jfm) { + if(jfm2prefix.containsKey(jfm)) { + return jfm2prefix.get(jfm); + } else { + String result = protocolName + "://jfm" + (sequence++) + "/"; + jfm2prefix.put(jfm,result); + prefix2jfm.put(result, new WeakReference(jfm)); + return result; + } + } + +} diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java new file mode 100644 index 0000000000..aa101b72ab --- /dev/null +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * + * base on code from https://hickory.dev.java.net/ + * + */ + +package com.mysema.codegen; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; + +import javax.tools.SimpleJavaFileObject; + +/** + * @author tiwe + * + */ +public class MemJavaFileObject extends SimpleJavaFileObject { + + private ByteArrayOutputStream baos; + + private final String name; + + public MemJavaFileObject(String urlPrefix, String name, Kind kind) { + super(URI.create(urlPrefix + name + kind.extension), kind); + this.name = name; + } + + @Override + public CharSequence getCharContent(boolean ignoreEncodingErrors) + throws IOException, IllegalStateException, UnsupportedOperationException { + if(baos == null){ + throw new FileNotFoundException(name); + } + return new String(baos.toByteArray()); + } + + @Override + public String getName() { + return name; + } + + public byte[] getByteArray(){ + return baos.toByteArray(); + } + + @Override + public InputStream openInputStream() throws IOException, IllegalStateException, UnsupportedOperationException { + if(baos != null){ + throw new FileNotFoundException(name); + } + return new ByteArrayInputStream(baos.toByteArray()); + } + + @Override + public OutputStream openOutputStream() throws IOException, IllegalStateException, UnsupportedOperationException { + if (baos == null){ + baos = new ByteArrayOutputStream(); + } + return baos; + } + +} diff --git a/src/main/java/com/mysema/codegen/MemSourceFileObject.java b/src/main/java/com/mysema/codegen/MemSourceFileObject.java new file mode 100644 index 0000000000..41960b4102 --- /dev/null +++ b/src/main/java/com/mysema/codegen/MemSourceFileObject.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * + * base on code from https://hickory.dev.java.net/ + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.Writer; +import java.net.URI; + +import javax.tools.JavaFileObject; +import javax.tools.SimpleJavaFileObject; + +/** + * @author tiwe + * + */ +public class MemSourceFileObject extends SimpleJavaFileObject { + + private static URI toUri(String fqname) { + return URI.create(fqname.replace(".","/") + ".java"); + } + + private final StringBuilder contents; + + public MemSourceFileObject(String fullName) { + super(toUri(fullName),JavaFileObject.Kind.SOURCE); + contents = new StringBuilder(1000); + } + + public MemSourceFileObject(String fullName, String content) { + this(fullName); + contents.append(content); + } + + public CharSequence getCharContent(boolean ignoreEncodingErrors) { + return contents; + } + + public Writer openWriter() { + return new Writer() { + @Override + public Writer append(CharSequence csq) throws IOException { + contents.append(csq); + return this; + } + + @Override + public void close(){} + + @Override + public void flush() {} + + @Override + public void write(char[] cbuf, int off, int len) throws IOException { + contents.append(cbuf,off,len); + } + }; + } +} diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index 01a9c7118f..e4b3b0828a 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -33,12 +33,6 @@ */ public class SimpleCompiler implements JavaCompiler{ - private final ClassLoader classLoader; - - private String classPath; - - private final JavaCompiler compiler; - public static String getClassPath(URLClassLoader classLoader) { try{ StringBuilder path = new StringBuilder(); @@ -55,6 +49,12 @@ public static String getClassPath(URLClassLoader classLoader) { } } + private final ClassLoader classLoader; + + private String classPath; + + private final JavaCompiler compiler; + public SimpleCompiler(){ this(ToolProvider.getSystemJavaCompiler(), Thread.currentThread().getContextClassLoader()); } diff --git a/src/main/java/com/mysema/codegen/StringJavaFileObject.java b/src/main/java/com/mysema/codegen/StringJavaFileObject.java deleted file mode 100644 index d152bdba37..0000000000 --- a/src/main/java/com/mysema/codegen/StringJavaFileObject.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * - */ -package com.mysema.codegen; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import javax.tools.SimpleJavaFileObject; - -/** - * @author tiwe - * - */ -public class StringJavaFileObject extends SimpleJavaFileObject { - - private final String contents; - - public StringJavaFileObject(String className, String contents) throws URISyntaxException{ - super(new URI(className), Kind.SOURCE); - this.contents = contents; - } - - @Override - public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { - return contents; - } - - @Override - public boolean isNameCompatible(String simpleName, Kind kind) { - return kind.equals(getKind()) && - (simpleName.equals(toUri().getPath()) || toUri().getPath().endsWith("/" + simpleName)); - } - -} diff --git a/src/test/java/com/mysema/codegen/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/ClassUtilsTest.java new file mode 100644 index 0000000000..e9f5832bee --- /dev/null +++ b/src/test/java/com/mysema/codegen/ClassUtilsTest.java @@ -0,0 +1,22 @@ +package com.mysema.codegen; + +import static org.junit.Assert.assertEquals; + +import java.util.Locale; + +import org.junit.Test; + +public class ClassUtilsTest { + + @Test + public void testGetName() { + assertEquals("Object", ClassUtils.getName(Object.class)); + assertEquals("Object[]", ClassUtils.getName(Object[].class)); + assertEquals("int", ClassUtils.getName(int.class)); + assertEquals("int[]", ClassUtils.getName(int[].class)); + assertEquals("void", ClassUtils.getName(void.class)); + assertEquals("java.util.Locale", ClassUtils.getName(Locale.class)); + assertEquals("java.util.Locale[]", ClassUtils.getName(Locale[].class)); + } + +} diff --git a/src/test/java/com/mysema/codegen/Entity.java b/src/test/java/com/mysema/codegen/Entity.java index 9dccc635d0..bc2f452c07 100644 --- a/src/test/java/com/mysema/codegen/Entity.java +++ b/src/test/java/com/mysema/codegen/Entity.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; public @interface Entity { diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java new file mode 100644 index 0000000000..e7eb5f0756 --- /dev/null +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.List; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + + +public class EvaluatorFactoryTest { + + private EvaluatorFactory factory; + + private List names = Arrays.asList("a","b"); + + private List> ints = Arrays.>asList(int.class, int.class); + + private List> strings = Arrays.>asList(String.class, String.class); + + private List> string_int = Arrays.>asList(String.class, int.class); + + @Before + public void setUp() throws IOException{ + factory = new EvaluatorFactory((URLClassLoader) getClass().getClassLoader()); + } + + @Test + public void testSimple(){ + for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")){ + test(expr, boolean.class, names, strings, Arrays.asList("a","b")); + } + + for (String expr : Arrays.asList("a != b", "a < b", "a > b", "a <= b", "a >= b")){ + test(expr, boolean.class, names, ints, Arrays.asList(0,1)); + } + } + + @Test + public void testResults(){ + // String + String + test("a + b", String.class, names, strings, Arrays.asList("Hello ", "World"), "Hello World"); + + // String + int + test("a.substring(b)", String.class, names, string_int, Arrays.asList("Hello World", 6), "World"); + + // int + int + test("a + b", int.class, names, ints, Arrays.asList(1,2), 3); + } + + private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ + Assert.assertEquals(expectedResult, test(source, projectionType, names, types, args)); + } + + private Object test(String source, Class projectionType, List names, List> types, List args) { + Evaluator evaluator = factory.createEvaluator( + source, + projectionType, + names.toArray(new String[names.size()]), + types.toArray(new Class[types.size()])); + return evaluator.evaluate(args.toArray()); + } + +} diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 65814554ae..eeeb1a4431 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static org.junit.Assert.assertEquals; From e762202f597fea8df535e49167fc205a138f7c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 08:26:08 +0000 Subject: [PATCH 0006/1968] fixes based on Sonar reports --- src/main/java/com/mysema/codegen/MemFileManager.java | 5 +++-- src/main/java/com/mysema/codegen/MemJavaFileObject.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java index 72967760a8..6ad5adb54d 100644 --- a/src/main/java/com/mysema/codegen/MemFileManager.java +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -134,13 +134,14 @@ public Iterable list(Location location, String pkg, LocationAndKind key = new LocationAndKind(location,kind); if(ramFileSystem.containsKey(key)) { Map locatedFiles = ramFileSystem.get(key); - for(String name : locatedFiles.keySet()) { + for (Map.Entry entry : locatedFiles.entrySet()){ + String name = entry.getKey(); String packageName = ""; if (name.indexOf('.') > -1){ packageName = name.substring(0,name.lastIndexOf('.')); } if(recurse ? packageName.startsWith(pkg) : packageName.equals(pkg)) { - JavaFileObject candidate = locatedFiles.get(name); + JavaFileObject candidate = entry.getValue(); if(kinds.contains(candidate.getKind())) { result.add(candidate); } diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index aa101b72ab..a61f859930 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -52,7 +52,7 @@ public byte[] getByteArray(){ @Override public InputStream openInputStream() throws IOException, IllegalStateException, UnsupportedOperationException { - if(baos != null){ + if(baos == null){ throw new FileNotFoundException(name); } return new ByteArrayInputStream(baos.toByteArray()); From cb2e6175421a458be8d91b0424baf41cdf6a381e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 08:33:20 +0000 Subject: [PATCH 0007/1968] fixes based on Sonar reports --- src/main/java/com/mysema/codegen/EvaluatorFactory.java | 3 +-- src/main/java/com/mysema/codegen/MemFileSystemRegistry.java | 6 +++--- src/main/java/com/mysema/codegen/MemJavaFileObject.java | 6 +++--- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index d68d575fa5..3146798139 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -54,8 +54,7 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { } private void compile(String source, Class projectionType, - String[] names, Class[] types, String id) throws IOException, - UnsupportedEncodingException { + String[] names, Class[] types, String id) throws IOException { // create source StringWriter writer = new StringWriter(); JavaWriter javaw = new JavaWriter(writer); diff --git a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java index 0a62977f63..1a079805c5 100644 --- a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java +++ b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java @@ -17,7 +17,7 @@ * @author tiwe * */ -public class MemFileSystemRegistry { +public final class MemFileSystemRegistry { public static final MemFileSystemRegistry DEFAULT = new MemFileSystemRegistry(); @@ -31,9 +31,9 @@ public class MemFileSystemRegistry { private MemFileSystemRegistry() { String pkgName = MemFileSystemRegistry.class.getPackage().getName(); - protocolName = pkgName.substring(pkgName.lastIndexOf(".") + 1); + protocolName = pkgName.substring(pkgName.lastIndexOf('.') + 1); String pkgs = System.getProperty("java.protocol.handler.pkgs"); - String parentPackage = pkgName.substring(0,pkgName.lastIndexOf(".")); + String parentPackage = pkgName.substring(0,pkgName.lastIndexOf('.')); pkgs = pkgs == null ? parentPackage : pkgs + "|" + parentPackage; System.setProperty("java.protocol.handler.pkgs",pkgs); } diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index a61f859930..510c6794e1 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -34,7 +34,7 @@ public MemJavaFileObject(String urlPrefix, String name, Kind kind) { @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) - throws IOException, IllegalStateException, UnsupportedOperationException { + throws IOException, UnsupportedOperationException { if(baos == null){ throw new FileNotFoundException(name); } @@ -51,7 +51,7 @@ public byte[] getByteArray(){ } @Override - public InputStream openInputStream() throws IOException, IllegalStateException, UnsupportedOperationException { + public InputStream openInputStream() throws IOException, UnsupportedOperationException { if(baos == null){ throw new FileNotFoundException(name); } @@ -59,7 +59,7 @@ public InputStream openInputStream() throws IOException, IllegalStateException, } @Override - public OutputStream openOutputStream() throws IOException, IllegalStateException, UnsupportedOperationException { + public OutputStream openOutputStream() throws IOException, UnsupportedOperationException { if (baos == null){ baos = new ByteArrayOutputStream(); } From 3aeb109a4d9cec106d00e30076b882cf1435d3ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 08:38:07 +0000 Subject: [PATCH 0008/1968] replaced raw exception types --- .../com/mysema/codegen/CodegenException.java | 18 ++++++++++++++++++ .../com/mysema/codegen/EvaluatorFactory.java | 12 ++++++------ .../java/com/mysema/codegen/JavaWriter.java | 6 +++--- .../com/mysema/codegen/SimpleCompiler.java | 2 +- 4 files changed, 28 insertions(+), 10 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/CodegenException.java diff --git a/src/main/java/com/mysema/codegen/CodegenException.java b/src/main/java/com/mysema/codegen/CodegenException.java new file mode 100644 index 0000000000..531b35b305 --- /dev/null +++ b/src/main/java/com/mysema/codegen/CodegenException.java @@ -0,0 +1,18 @@ +package com.mysema.codegen; + +public class CodegenException extends RuntimeException{ + + private static final long serialVersionUID = -8704782349669898467L; + + public CodegenException(String msg){ + super(msg); + } + + public CodegenException(String msg, Throwable t){ + super(msg, t); + } + + public CodegenException(Throwable t){ + super(t); + } +} diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 3146798139..9f43be8f35 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -81,7 +81,7 @@ private void compile(String source, Class projectionType, null, Collections.singletonList(javaFileObject)); if (!task.call().booleanValue()) { - throw new RuntimeException("Compilation of " + source + " failed.\n" + out.toString()); + throw new CodegenException("Compilation of " + source + " failed.\n" + out.toString()); } } @@ -115,15 +115,15 @@ public T evaluate(Object... args) { } }; } catch (ClassNotFoundException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } catch (SecurityException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } catch (NoSuchMethodException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } catch (IOException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } } diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 68c886bef3..2b4b44553c 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -90,11 +90,11 @@ public JavaWriter annotation(Annotation annotation) throws IOException { Object value = method.invoke(annotation); annotationConstant(value); } catch (IllegalArgumentException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } catch (IllegalAccessException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } catch (InvocationTargetException e) { - throw new RuntimeException(e); + throw new CodegenException(e); } first = false; } diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index e4b3b0828a..ee4b188ca8 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -45,7 +45,7 @@ public static String getClassPath(URLClassLoader classLoader) { } return path.toString(); }catch(UnsupportedEncodingException e){ - throw new RuntimeException(e); + throw new CodegenException(e); } } From 699ecf87f6c36a7ecf834ed03ac8df35188e5f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:11:33 +0000 Subject: [PATCH 0009/1968] added test for projecting paths of custom types added parent classLoader for MemClassLoader --- .../com/mysema/codegen/EvaluatorFactory.java | 2 +- .../com/mysema/codegen/MemClassLoader.java | 3 ++- .../com/mysema/codegen/MemFileManager.java | 4 ++-- .../mysema/codegen/EvaluatorFactoryTest.java | 23 +++++++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 9f43be8f35..0a6d784a9f 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -46,7 +46,7 @@ public EvaluatorFactory(URLClassLoader parent){ } public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { - this.fileManager = new MemFileManager(compiler.getStandardFileManager(null, null, null)); + this.fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); this.compiler = compiler; this.classpath = SimpleCompiler.getClassPath(parent); this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index 29895f8441..af163599cb 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -36,7 +36,8 @@ public final class MemClassLoader extends ClassLoader { private final Map> memFileSystem; - public MemClassLoader(Map> ramFileSystem) { + public MemClassLoader(ClassLoader parent, Map> ramFileSystem) { + super(parent); this.memFileSystem = ramFileSystem; } diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java index 6ad5adb54d..33cfe0703d 100644 --- a/src/main/java/com/mysema/codegen/MemFileManager.java +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -36,12 +36,12 @@ public class MemFileManager extends ForwardingJavaFileManager { private final String urlPrefix; - public MemFileManager(StandardJavaFileManager sjfm) { + public MemFileManager(ClassLoader parent, StandardJavaFileManager sjfm) { super(sjfm); ramFileSystem = new HashMap>(); Map classLoaderContent = new HashMap(); ramFileSystem.put(new LocationAndKind(StandardLocation.CLASS_OUTPUT, Kind.CLASS),classLoaderContent); - classLoader = new MemClassLoader(ramFileSystem); + classLoader = new MemClassLoader(parent, ramFileSystem); urlPrefix = MemFileSystemRegistry.DEFAULT.getUrlPrefix(this); } diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index e7eb5f0756..e8882bd0e0 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.net.URLClassLoader; import java.util.Arrays; +import java.util.Collections; import java.util.List; import org.junit.Assert; @@ -17,6 +18,20 @@ public class EvaluatorFactoryTest { + public static class TestEntity { + + private final String name; + + public TestEntity(String name){ + this.name = name; + } + + public String getName() { + return name; + } + + } + private EvaluatorFactory factory; private List names = Arrays.asList("a","b"); @@ -55,6 +70,14 @@ public void testResults(){ test("a + b", int.class, names, ints, Arrays.asList(1,2), 3); } + @Test + public void testCustomType(){ + test("a.getName()", String.class, + Collections.singletonList("a"), Collections.singletonList(TestEntity.class), + Arrays.asList(new TestEntity("Hello World")), "Hello World"); + + } + private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ Assert.assertEquals(expectedResult, test(source, projectionType, names, types, args)); } From 18d31e7b00669ad8fbfffdda102a03173c11139f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:12:49 +0000 Subject: [PATCH 0010/1968] added javadocs --- src/main/java/com/mysema/codegen/CodegenException.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/mysema/codegen/CodegenException.java b/src/main/java/com/mysema/codegen/CodegenException.java index 531b35b305..7056fd57fb 100644 --- a/src/main/java/com/mysema/codegen/CodegenException.java +++ b/src/main/java/com/mysema/codegen/CodegenException.java @@ -1,5 +1,14 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; +/** + * @author tiwe + * + */ public class CodegenException extends RuntimeException{ private static final long serialVersionUID = -8704782349669898467L; From 43661a9a9498ef570ad04e24a9d6cb49df29eba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:15:54 +0000 Subject: [PATCH 0011/1968] updated version to 0.1.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 07c33c4b38..76674a34d4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.0-SNAPSHOT + 0.1.1 Codegen Code generation and compilation for Java From 5a8cdfb1f25a6dd6c8c9f59d54352e235fd8547d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:18:34 +0000 Subject: [PATCH 0012/1968] updated version to 0.1.1-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 76674a34d4..60c8cdaf14 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.1 + 0.1.1-SNAPSHOT Codegen Code generation and compilation for Java From adc8e37f3cdae9a4b725cb7fe17d7818a4c558f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:25:12 +0000 Subject: [PATCH 0013/1968] added javadocs --- src/main/java/com/mysema/codegen/EvaluatorFactory.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 0a6d784a9f..a6547a1132 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -86,6 +86,16 @@ private void compile(String source, Class projectionType, } + /** + * Create a new Evaluator instance + * + * @param projection type + * @param source expression in Java source code form + * @param projectionType type of the source expression + * @param names names of the arguments + * @param types types of the arguments + * @return + */ public Evaluator createEvaluator(String source, Class projectionType, String[] names, Class[] types) { From ff78ce913ddda9138304da91c45b9f9fc6f7a749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Apr 2010 20:35:45 +0000 Subject: [PATCH 0014/1968] improved replace usage --- src/main/java/com/mysema/codegen/MemClassLoader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index af163599cb..e52dec5fa4 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -74,10 +74,10 @@ protected URL findResource(String name) { private JavaFileObject getFileObject(String name) { LocationAndKind key; if(name.endsWith(Kind.CLASS.extension)) { - name = name.replace(".","/") + Kind.CLASS.extension; + name = name.replace('.','/') + Kind.CLASS.extension; key = CLASS_KEY; } else if(name.endsWith(Kind.SOURCE.extension)) { - name = name.replace(".","/") + Kind.SOURCE.extension; + name = name.replace('.','/') + Kind.SOURCE.extension; key = SOURCE_KEY; }else{ key = OTHER_KEY; From 2418c4a9b369320484c1b9bfb8dd6864c66ab2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Apr 2010 08:19:01 +0000 Subject: [PATCH 0015/1968] fixed Redundant Throws --- src/main/java/com/mysema/codegen/MemJavaFileObject.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index 510c6794e1..549592453b 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -33,8 +33,7 @@ public MemJavaFileObject(String urlPrefix, String name, Kind kind) { } @Override - public CharSequence getCharContent(boolean ignoreEncodingErrors) - throws IOException, UnsupportedOperationException { + public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { if(baos == null){ throw new FileNotFoundException(name); } @@ -51,7 +50,7 @@ public byte[] getByteArray(){ } @Override - public InputStream openInputStream() throws IOException, UnsupportedOperationException { + public InputStream openInputStream() throws IOException { if(baos == null){ throw new FileNotFoundException(name); } @@ -59,7 +58,7 @@ public InputStream openInputStream() throws IOException, UnsupportedOperationExc } @Override - public OutputStream openOutputStream() throws IOException, UnsupportedOperationException { + public OutputStream openOutputStream() throws IOException { if (baos == null){ baos = new ByteArrayOutputStream(); } From 4c284540c4fb003432f23700203a7677292013ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 11 Apr 2010 08:40:47 +0000 Subject: [PATCH 0016/1968] extended Evaluator signature --- src/main/java/com/mysema/codegen/Evaluator.java | 5 +++++ src/main/java/com/mysema/codegen/EvaluatorFactory.java | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/Evaluator.java b/src/main/java/com/mysema/codegen/Evaluator.java index 8c942e8d2b..03c67e4a7e 100644 --- a/src/main/java/com/mysema/codegen/Evaluator.java +++ b/src/main/java/com/mysema/codegen/Evaluator.java @@ -19,5 +19,10 @@ public interface Evaluator { * @return */ T evaluate(Object... args); + + /** + * @return + */ + Class getType(); } diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index a6547a1132..48b2d2945a 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -97,7 +97,7 @@ private void compile(String source, Class projectionType, * @return */ public Evaluator createEvaluator(String source, - Class projectionType, String[] names, Class[] types) { + final Class projectionType, String[] names, Class[] types) { try { String id = toId(source, projectionType, types); @@ -123,6 +123,11 @@ public T evaluate(Object... args) { throw new IllegalArgumentException(e); } } + + @Override + public Class getType() { + return projectionType; + } }; } catch (ClassNotFoundException e) { throw new CodegenException(e); From d43c95d623148e1367eb6e31ceb34167a86b9eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 15 Apr 2010 17:32:58 +0000 Subject: [PATCH 0017/1968] added support for constants in Evaluator --- .../java/com/mysema/codegen/ClassUtils.java | 14 +++++++ .../com/mysema/codegen/EvaluatorFactory.java | 42 +++++++++++++++---- .../mysema/codegen/EvaluatorFactoryTest.java | 29 +++++++++---- 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/ClassUtils.java index 15a726ac12..08744dbfb2 100644 --- a/src/main/java/com/mysema/codegen/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/ClassUtils.java @@ -5,7 +5,9 @@ */ package com.mysema.codegen; +import java.util.Collection; import java.util.Collections; +import java.util.List; import java.util.Set; /** @@ -27,6 +29,18 @@ public static String getName(Class cl, Set packages, Set> c return cl.getName().replace('$', '.'); } } + + public static Class normalize(Class clazz){ + if (List.class.isAssignableFrom(clazz)){ + return List.class; + }else if (Set.class.isAssignableFrom(clazz)){ + return Set.class; + }else if (Collection.class.isAssignableFrom(clazz)){ + return Collection.class; + }else{ + return clazz; + } + } private ClassUtils(){} } diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 48b2d2945a..a3130d5da4 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -9,12 +9,14 @@ import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; +import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URLClassLoader; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; import javax.tools.JavaCompiler; import javax.tools.SimpleJavaFileObject; @@ -54,7 +56,7 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { } private void compile(String source, Class projectionType, - String[] names, Class[] types, String id) throws IOException { + String[] names, Class[] types, String id, Map constants) throws IOException { // create source StringWriter writer = new StringWriter(); JavaWriter javaw = new JavaWriter(writer); @@ -63,8 +65,17 @@ private void compile(String source, Class projectionType, for (int i = 0; i < params.length; i++) { params[i] = ClassUtils.getName(types[i]) + " " + names[i]; } + + for (Map.Entry entry : constants.entrySet()){ + String className = ClassUtils.getName(ClassUtils.normalize(entry.getValue().getClass())); + javaw.publicField(className, entry.getKey()); + } - javaw.beginStaticMethod(ClassUtils.getName(projectionType), "eval", params); + if (constants.isEmpty()){ + javaw.beginStaticMethod(ClassUtils.getName(projectionType), "eval", params); + }else{ + javaw.beginPublicMethod(ClassUtils.getName(projectionType), "eval", params); + } javaw.line("return ", source, ";"); javaw.end(); javaw.end(); @@ -94,10 +105,14 @@ private void compile(String source, Class projectionType, * @param projectionType type of the source expression * @param names names of the arguments * @param types types of the arguments + * @param constants * @return */ - public Evaluator createEvaluator(String source, - final Class projectionType, String[] names, Class[] types) { + public Evaluator createEvaluator( + String source, + final Class projectionType, + String[] names, Class[] types, + Map constants) { try { String id = toId(source, projectionType, types); @@ -105,10 +120,17 @@ public Evaluator createEvaluator(String source, try{ clazz = loader.loadClass(id); }catch(ClassNotFoundException e){ - compile(source, projectionType, names, types, id); + compile(source, projectionType, names, types, id, constants); // reload clazz = loader.loadClass(id); } + + final Object object = !constants.isEmpty() ? clazz.newInstance() : null; + + for (Map.Entry entry : constants.entrySet()){ + Field field = clazz.getField(entry.getKey()); + field.set(object, entry.getValue()); + } final Method method = clazz.getMethod("eval", types); return new Evaluator() { @@ -116,7 +138,7 @@ public Evaluator createEvaluator(String source, @Override public T evaluate(Object... args) { try { - return (T) method.invoke(null, args); + return (T) method.invoke(object, args); } catch (IllegalAccessException e) { throw new IllegalArgumentException(e); } catch (InvocationTargetException e) { @@ -135,14 +157,20 @@ public Class getType() { throw new CodegenException(e); } catch (NoSuchMethodException e) { throw new CodegenException(e); + } catch (NoSuchFieldException e) { + throw new CodegenException(e); } catch (UnsupportedEncodingException e) { throw new CodegenException(e); } catch (IOException e) { throw new CodegenException(e); + } catch (InstantiationException e) { + throw new CodegenException(e); + } catch (IllegalAccessException e) { + throw new CodegenException(e); } } - + protected String toId(String source, Class returnType, Class... types) { StringBuilder b = new StringBuilder("Q"); b.append("_").append(source.hashCode()); diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index e8882bd0e0..b71a5298b1 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -5,11 +5,15 @@ */ package com.mysema.codegen; +import static org.junit.Assert.*; + import java.io.IOException; import java.net.URLClassLoader; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Assert; import org.junit.Before; @@ -50,11 +54,11 @@ public void setUp() throws IOException{ @Test public void testSimple(){ for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")){ - test(expr, boolean.class, names, strings, Arrays.asList("a","b")); + evaluate(expr, boolean.class, names, strings, Arrays.asList("a","b"), Collections.emptyMap()); } for (String expr : Arrays.asList("a != b", "a < b", "a > b", "a <= b", "a >= b")){ - test(expr, boolean.class, names, ints, Arrays.asList(0,1)); + evaluate(expr, boolean.class, names, ints, Arrays.asList(0,1), Collections.emptyMap()); } } @@ -70,24 +74,35 @@ public void testResults(){ test("a + b", int.class, names, ints, Arrays.asList(1,2), 3); } + @Test + public void testWithConstants(){ + Map constants = new HashMap(); + constants.put("x", "Hello World"); + List> types = Arrays.>asList(String.class); + List names = Arrays.asList("a"); + assertEquals(Boolean.TRUE, evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello World"), constants)); + assertEquals(Boolean.FALSE, evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello"), constants)); + } + @Test public void testCustomType(){ test("a.getName()", String.class, - Collections.singletonList("a"), Collections.singletonList(TestEntity.class), + Collections.singletonList("a"), Collections.>singletonList(TestEntity.class), Arrays.asList(new TestEntity("Hello World")), "Hello World"); } - private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ - Assert.assertEquals(expectedResult, test(source, projectionType, names, types, args)); + private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ + Assert.assertEquals(expectedResult, evaluate(source, projectionType, names, types, args, Collections.emptyMap())); } - private Object test(String source, Class projectionType, List names, List> types, List args) { + private Object evaluate(String source, Class projectionType, List names, List> types, List args, Map constants) { Evaluator evaluator = factory.createEvaluator( source, projectionType, names.toArray(new String[names.size()]), - types.toArray(new Class[types.size()])); + types.toArray(new Class[types.size()]), + constants); return evaluator.evaluate(args.toArray()); } From 27592ee5fff8d89465f6d462e3d882f57656cb4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 24 Apr 2010 06:59:08 +0000 Subject: [PATCH 0018/1968] updated version to 0.1.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 60c8cdaf14..48d3318030 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.1-SNAPSHOT + 0.1.2 Codegen Code generation and compilation for Java From 9646d321a4858901f8c5c6d396056ca5cefa485f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 24 Apr 2010 07:00:35 +0000 Subject: [PATCH 0019/1968] updated version to 0.1.2-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 48d3318030..d45bafea91 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.2 + 0.1.2-SNAPSHOT Codegen Code generation and compilation for Java From 72ebde8fb387377e167bde8fa5e81f51198047ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:08:30 +0000 Subject: [PATCH 0020/1968] added test for SimpleCompiler --- .../mysema/codegen/SimpleCompilerTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/test/java/com/mysema/codegen/SimpleCompilerTest.java diff --git a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java new file mode 100644 index 0000000000..6fd3a3e220 --- /dev/null +++ b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java @@ -0,0 +1,30 @@ +package com.mysema.codegen; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.tools.JavaCompiler; + +import junit.framework.Assert; + +import org.junit.Test; + +public class SimpleCompilerTest { + + @Test + public void testRun() { + new File("target/out").mkdir(); + JavaCompiler compiler = new SimpleCompiler(); + System.out.println(compiler.getClass().getName()); + List options = new ArrayList(3); + options.add("-s"); + options.add("target/out"); + options.add("src/test/java/com/mysema/codegen/SimpleCompilerTest.java"); + int compilationResult = compiler.run(null, null, null, options.toArray(new String[options.size()])); + if(compilationResult != 0){ + Assert.fail("Compilation Failed"); + } + } + +} From 670afe178bc5786c8ca590ad197e2b0fe536361f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:20:05 +0000 Subject: [PATCH 0021/1968] improved tests --- .../java/com/mysema/codegen/JavaWriter.java | 12 +++--- .../com/mysema/codegen/JavaWriterTest.java | 43 +++++++++++++++++++ src/test/resources/testAnnotations2 | 13 ++++++ src/test/resources/testInterface | 9 ++++ 4 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/testAnnotations2 create mode 100644 src/test/resources/testInterface diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 2b4b44553c..e11aea5a7e 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -81,13 +81,15 @@ public JavaWriter(Appendable appendable){ public JavaWriter annotation(Annotation annotation) throws IOException { append(indent).append("@").appendType(annotation.annotationType()).append("("); boolean first = true; - for (Method method : annotation.annotationType().getDeclaredMethods()){ - if (!first){ - append(COMMA); - } - append(method.getName()+"="); + for (Method method : annotation.annotationType().getDeclaredMethods()){ try { Object value = method.invoke(annotation); + if (value == null){ + continue; + }else if (!first){ + append(COMMA); + } + append(method.getName()+"="); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index eeeb1a4431..16fb4a5e6a 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -9,6 +9,7 @@ import java.io.IOException; import java.io.StringWriter; +import java.lang.annotation.Annotation; import org.apache.commons.io.IOUtils; import org.junit.Test; @@ -37,6 +38,18 @@ public void testBasic() throws IOException { match("/testBasic", w.toString()); } + @Test + public void testInterface() throws IOException{ + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class, Test.class); + writer.beginInterface("JavaWriterTest"); + writer.end(); + + match("/testInterface", w.toString()); + } + @Test public void testJavadoc() throws IOException{ StringWriter w = new StringWriter(); @@ -66,6 +79,36 @@ public void testAnnotations() throws IOException{ match("/testAnnotations", w.toString()); } + @Test + public void testAnnotations2() throws IOException{ + StringWriter w = new StringWriter(); + CodeWriter writer = new JavaWriter(w); + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); + writer.annotation(Entity.class); + writer.beginClass("JavaWriterTest"); + writer.annotation(new Test(){ + @Override + public Class expected() { + // TODO Auto-generated method stub + return null; + } + @Override + public long timeout() { + + return 0; + } + @Override + public Class annotationType() { + return Test.class; + }}); + writer.beginPublicMethod("void", "test"); + writer.end(); + writer.end(); + + match("/testAnnotations2", w.toString()); + } + @Test public void testFields() throws IOException{ StringWriter w = new StringWriter(); diff --git a/src/test/resources/testAnnotations2 b/src/test/resources/testAnnotations2 new file mode 100644 index 0000000000..1e5ecc7856 --- /dev/null +++ b/src/test/resources/testAnnotations2 @@ -0,0 +1,13 @@ +package com.mysema.codegen; + +import java.io.*; +import java.io.*; + +@Entity +public class JavaWriterTest { + + @org.junit.Test(timeout=0) + public void test() { + } + +} \ No newline at end of file diff --git a/src/test/resources/testInterface b/src/test/resources/testInterface new file mode 100644 index 0000000000..3785a05ed0 --- /dev/null +++ b/src/test/resources/testInterface @@ -0,0 +1,9 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; +import org.junit.Test; + +public interface JavaWriterTest { + +} \ No newline at end of file From 80442b26a94ea1e6967b007c71fbb971579124dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:26:45 +0000 Subject: [PATCH 0022/1968] added comments --- src/main/java/com/mysema/codegen/CodeWriter.java | 2 ++ src/main/java/com/mysema/codegen/JavaWriter.java | 2 ++ src/main/java/com/mysema/codegen/LocationAndKind.java | 2 ++ src/main/java/com/mysema/codegen/MemClassLoader.java | 2 ++ src/main/java/com/mysema/codegen/MemFileManager.java | 2 ++ src/main/java/com/mysema/codegen/MemJavaFileObject.java | 2 ++ src/main/java/com/mysema/codegen/MemSourceFileObject.java | 2 ++ src/main/java/com/mysema/codegen/SimpleCompiler.java | 3 +++ src/main/java/com/mysema/codegen/Symbols.java | 2 ++ 9 files changed, 19 insertions(+) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index c2ea2eb3bd..ad0f7a0f18 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -12,6 +12,8 @@ import org.apache.commons.collections15.Transformer; /** + * CodeWriter defines an interface for serializing Java source code + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index e11aea5a7e..eab97219a1 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -26,6 +26,8 @@ import org.apache.commons.lang.StringUtils; /** + * JavaWriter is the default implementation of the CodeWriter interface + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/LocationAndKind.java b/src/main/java/com/mysema/codegen/LocationAndKind.java index 41327cf408..779e8a6207 100644 --- a/src/main/java/com/mysema/codegen/LocationAndKind.java +++ b/src/main/java/com/mysema/codegen/LocationAndKind.java @@ -11,6 +11,8 @@ import javax.tools.JavaFileObject.Kind; /** + * LocationAndKind defines a pair of Location and Kind + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index e52dec5fa4..130d11f6a3 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -23,6 +23,8 @@ /** + * MemClassLoader is a mmemory based implementation of the ClassLoader interface + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java index 33cfe0703d..a7174f404f 100644 --- a/src/main/java/com/mysema/codegen/MemFileManager.java +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -25,6 +25,8 @@ /** + * MemFileManager is a memory based implementation of the JavaFileManager interface + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index 549592453b..adcdaff468 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -18,6 +18,8 @@ import javax.tools.SimpleJavaFileObject; /** + * MemJavaFileObject defines an in memory compiled Java file + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/MemSourceFileObject.java b/src/main/java/com/mysema/codegen/MemSourceFileObject.java index 41960b4102..90283341dc 100644 --- a/src/main/java/com/mysema/codegen/MemSourceFileObject.java +++ b/src/main/java/com/mysema/codegen/MemSourceFileObject.java @@ -14,6 +14,8 @@ import javax.tools.SimpleJavaFileObject; /** + * MemSourceFileObject defines a in-memory Java source file object + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index ee4b188ca8..251eb07f9d 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -28,6 +28,9 @@ import javax.tools.ToolProvider; /** + * SimpleCompiler provides a convenience wrapper of the JavaCompiler interface with automatic + * classpath generation + * * @author tiwe * */ diff --git a/src/main/java/com/mysema/codegen/Symbols.java b/src/main/java/com/mysema/codegen/Symbols.java index d297ae3c72..d6c9371db6 100644 --- a/src/main/java/com/mysema/codegen/Symbols.java +++ b/src/main/java/com/mysema/codegen/Symbols.java @@ -6,6 +6,8 @@ package com.mysema.codegen; /** + * Defines general String constants + * * @author tiwe * */ From 6e93720a48d380f57196137cf897a0a6d4464e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:32:23 +0000 Subject: [PATCH 0023/1968] added tests --- .../codegen/MemSourceFileObjectTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java diff --git a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java new file mode 100644 index 0000000000..f8574aa9fb --- /dev/null +++ b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java @@ -0,0 +1,24 @@ +package com.mysema.codegen; + +import static org.junit.Assert.*; + +import java.io.IOException; + +import org.junit.Test; + +public class MemSourceFileObjectTest { + + @Test + public void test(){ + MemSourceFileObject obj = new MemSourceFileObject("Test", "Hello World"); + assertEquals("Hello World", obj.getCharContent(true).toString()); + } + + @Test + public void testOpenWriter() throws IOException { + MemSourceFileObject obj = new MemSourceFileObject("Test"); + obj.openWriter().write("Hello World"); + assertEquals("Hello World", obj.getCharContent(true).toString()); + } + +} From a8062d593062c15d22375a454aa80e515fe0fe9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:37:27 +0000 Subject: [PATCH 0024/1968] added test --- .../mysema/codegen/MemJavaFileObjectTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java diff --git a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java new file mode 100644 index 0000000000..4421134fbf --- /dev/null +++ b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java @@ -0,0 +1,24 @@ +package com.mysema.codegen; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.Writer; + +import javax.tools.JavaFileObject.Kind; + +import org.junit.Test; + +public class MemJavaFileObjectTest { + + @Test + public void testOpenOutputStream() throws IOException { + MemJavaFileObject obj = new MemJavaFileObject("mem","Test",Kind.SOURCE); + Writer writer = obj.openWriter(); + writer.write("Hello World"); + writer.flush(); + writer.close(); + assertEquals("Hello World", obj.getCharContent(true).toString()); + } + +} From 3f0ee609793d3c878e5634501f5b55d467f317e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:41:04 +0000 Subject: [PATCH 0025/1968] --- src/main/java/com/mysema/codegen/MemSourceFileObject.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/mysema/codegen/MemSourceFileObject.java b/src/main/java/com/mysema/codegen/MemSourceFileObject.java index 90283341dc..a1486f72a6 100644 --- a/src/main/java/com/mysema/codegen/MemSourceFileObject.java +++ b/src/main/java/com/mysema/codegen/MemSourceFileObject.java @@ -37,10 +37,12 @@ public MemSourceFileObject(String fullName, String content) { contents.append(content); } + @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) { return contents; } + @Override public Writer openWriter() { return new Writer() { @Override From 60192e3ba191c7cfbc975f543d2257f5747dbc6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:44:22 +0000 Subject: [PATCH 0026/1968] --- src/main/java/com/mysema/codegen/CodeWriter.java | 2 +- src/main/java/com/mysema/codegen/JavaWriter.java | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index ad0f7a0f18..25b8f0284d 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -33,7 +33,7 @@ public interface CodeWriter extends Appendable{ CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; - CodeWriter beginLine(String... segments) throws IOException; +// CodeWriter beginLine(String... segments) throws IOException; CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index eab97219a1..362ae2e5f5 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -209,14 +209,14 @@ public JavaWriter beginInterface(String simpleName, String... interfaces) throws } - @Override - public JavaWriter beginLine(String... segments) throws IOException { - append(indent); - for (String segment : segments){ - append(segment); - } - return this; - } +// @Override +// public JavaWriter beginLine(String... segments) throws IOException { +// append(indent); +// for (String segment : segments){ +// append(segment); +// } +// return this; +// } private JavaWriter beginMethod(String modifiers, String returnType, String methodName, String... args) throws IOException{ append(indent + modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); From 29054a66fabd0a69b822189479e1aa5dd8c6b4e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:48:24 +0000 Subject: [PATCH 0027/1968] added javadoc stubs --- .../java/com/mysema/codegen/CodeWriter.java | 168 +++++++++++++++++- 1 file changed, 166 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 25b8f0284d..24efd66952 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -19,62 +19,226 @@ */ public interface CodeWriter extends Appendable{ + /** + * @param annotation + * @return + * @throws IOException + */ CodeWriter annotation(Annotation annotation) throws IOException; + /** + * @param annotation + * @return + * @throws IOException + */ CodeWriter annotation(Class annotation) throws IOException; + /** + * @param simpleName + * @return + * @throws IOException + */ CodeWriter beginClass(String simpleName) throws IOException; + /** + * @param simpleName + * @param superClass + * @param interfaces + * @return + * @throws IOException + */ CodeWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException; + /** + * @param + * @param params + * @param transformer + * @return + * @throws IOException + */ CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; + /** + * @param params + * @return + * @throws IOException + */ CodeWriter beginConstructor(String... params) throws IOException; + /** + * @param simpleName + * @param interfaces + * @return + * @throws IOException + */ CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; -// CodeWriter beginLine(String... segments) throws IOException; - + /** + * @param + * @param returnType + * @param methodName + * @param parameters + * @param transformer + * @return + * @throws IOException + */ CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; + /** + * @param returnType + * @param methodName + * @param args + * @return + * @throws IOException + */ CodeWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException; + /** + * @param + * @param type + * @param name + * @param params + * @param transformer + * @return + * @throws IOException + */ CodeWriter beginStaticMethod(String type, String name, Collection params, Transformer transformer) throws IOException; + /** + * @param returnType + * @param methodName + * @param args + * @return + * @throws IOException + */ CodeWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException; + /** + * @return + * @throws IOException + */ CodeWriter end() throws IOException; + /** + * @param type + * @param name + * @return + * @throws IOException + */ CodeWriter field(String type, String name) throws IOException; + /** + * @param imports + * @return + * @throws IOException + */ CodeWriter imports(Class... imports) throws IOException; + /** + * @param imports + * @return + * @throws IOException + */ CodeWriter imports(Package... imports) throws IOException; + /** + * @param lines + * @return + * @throws IOException + */ CodeWriter javadoc(String... lines) throws IOException; + /** + * @param segments + * @return + * @throws IOException + */ CodeWriter line(String... segments) throws IOException; + /** + * @return + * @throws IOException + */ CodeWriter nl() throws IOException; + /** + * @param packageName + * @return + * @throws IOException + */ CodeWriter packageDecl(String packageName) throws IOException; + /** + * @param type + * @param name + * @return + * @throws IOException + */ CodeWriter privateField(String type, String name) throws IOException; + /** + * @param type + * @param name + * @param value + * @return + * @throws IOException + */ CodeWriter privateStaticFinal(String type, String name, String value) throws IOException; + /** + * @param type + * @param name + * @return + * @throws IOException + */ CodeWriter protectedField(String type, String name) throws IOException; + /** + * @param type + * @param name + * @return + * @throws IOException + */ CodeWriter publicField(String type, String name) throws IOException; + /** + * @param type + * @param name + * @return + * @throws IOException + */ CodeWriter publicFinal(String type, String name) throws IOException; + /** + * @param type + * @param name + * @param value + * @return + * @throws IOException + */ CodeWriter publicFinal(String type, String name, String value) throws IOException; + /** + * @param type + * @param name + * @param value + * @return + * @throws IOException + */ CodeWriter publicStaticFinal(String type, String name, String value) throws IOException; + /** + * @param imports + * @return + * @throws IOException + */ CodeWriter staticimports(Class... imports) throws IOException; + /** + * @param type + * @return + * @throws IOException + */ CodeWriter suppressWarnings(String type) throws IOException; } \ No newline at end of file From 45abdbfae02ed092b9cd0d0afff9d81d6a799435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 11:52:43 +0000 Subject: [PATCH 0028/1968] extracted MethodEvaluator --- .../com/mysema/codegen/EvaluatorFactory.java | 20 +-------- .../com/mysema/codegen/MethodEvaluator.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+), 19 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/MethodEvaluator.java diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index a3130d5da4..bf5cb51c18 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -10,7 +10,6 @@ import java.io.UnsupportedEncodingException; import java.io.Writer; import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.net.URLClassLoader; import java.util.Arrays; @@ -133,24 +132,7 @@ public Evaluator createEvaluator( } final Method method = clazz.getMethod("eval", types); - return new Evaluator() { - @SuppressWarnings("unchecked") - @Override - public T evaluate(Object... args) { - try { - return (T) method.invoke(object, args); - } catch (IllegalAccessException e) { - throw new IllegalArgumentException(e); - } catch (InvocationTargetException e) { - throw new IllegalArgumentException(e); - } - } - - @Override - public Class getType() { - return projectionType; - } - }; + return new MethodEvaluator(method, object, projectionType); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { diff --git a/src/main/java/com/mysema/codegen/MethodEvaluator.java b/src/main/java/com/mysema/codegen/MethodEvaluator.java new file mode 100644 index 0000000000..dff31b482c --- /dev/null +++ b/src/main/java/com/mysema/codegen/MethodEvaluator.java @@ -0,0 +1,44 @@ +/** + * + */ +package com.mysema.codegen; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +/** + * @author tiwe + * + * @param + */ +public final class MethodEvaluator implements Evaluator { + + private final Method method; + + private final Object object; + + private final Class projectionType; + + MethodEvaluator(Method method, Object object, Class projectionType) { + this.method = method; + this.object = object; + this.projectionType = projectionType; + } + + @SuppressWarnings("unchecked") + @Override + public T evaluate(Object... args) { + try { + return (T) method.invoke(object, args); + } catch (IllegalAccessException e) { + throw new IllegalArgumentException(e); + } catch (InvocationTargetException e) { + throw new IllegalArgumentException(e); + } + } + + @Override + public Class getType() { + return projectionType; + } +} \ No newline at end of file From 026b82cd257ff83b34e2f8ca466db7324f8c04fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Apr 2010 13:02:50 +0000 Subject: [PATCH 0029/1968] added constant for INDENT size --- src/main/java/com/mysema/codegen/JavaWriter.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 362ae2e5f5..22002b526a 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -32,6 +32,8 @@ * */ public final class JavaWriter implements Appendable, CodeWriter{ + + private static final int INDENT_SPACES = 4; private static final String EXTENDS = " extends "; @@ -260,8 +262,8 @@ private JavaWriter goIn(){ } private JavaWriter goOut(){ - if (indent.length() >= 4){ - indent = indent.substring(0, indent.length() - 4); + if (indent.length() >= INDENT_SPACES){ + indent = indent.substring(0, indent.length() - INDENT_SPACES); } return this; } From 9541a93b86dd841be584f833086ccdb3b02f2327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 3 May 2010 06:56:16 +0000 Subject: [PATCH 0030/1968] added tests --- src/main/java/com/mysema/codegen/ClassUtils.java | 3 +++ .../java/com/mysema/codegen/ClassUtilsTest.java | 13 +++++++++++++ .../com/mysema/codegen/MemJavaFileObjectTest.java | 6 ++++++ 3 files changed, 22 insertions(+) diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/ClassUtils.java index 08744dbfb2..27445c32e8 100644 --- a/src/main/java/com/mysema/codegen/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/ClassUtils.java @@ -8,6 +8,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -37,6 +38,8 @@ public static Class normalize(Class clazz){ return Set.class; }else if (Collection.class.isAssignableFrom(clazz)){ return Collection.class; + }else if (Map.class.isAssignableFrom(clazz)){ + return Map.class; }else{ return clazz; } diff --git a/src/test/java/com/mysema/codegen/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/ClassUtilsTest.java index e9f5832bee..bf5132e5f0 100644 --- a/src/test/java/com/mysema/codegen/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/ClassUtilsTest.java @@ -2,7 +2,13 @@ import static org.junit.Assert.assertEquals; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.Locale; +import java.util.Map; +import java.util.Set; import org.junit.Test; @@ -18,5 +24,12 @@ public void testGetName() { assertEquals("java.util.Locale", ClassUtils.getName(Locale.class)); assertEquals("java.util.Locale[]", ClassUtils.getName(Locale[].class)); } + + @Test + public void testNormalize(){ + assertEquals(List.class, ClassUtils.normalize(ArrayList.class)); + assertEquals(Set.class, ClassUtils.normalize(HashSet.class)); + assertEquals(Map.class, ClassUtils.normalize(HashMap.class)); + } } diff --git a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java index 4421134fbf..da0425fe3d 100644 --- a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java @@ -20,5 +20,11 @@ public void testOpenOutputStream() throws IOException { writer.close(); assertEquals("Hello World", obj.getCharContent(true).toString()); } + + @Test + public void testOpenInputStream() throws IOException { + MemJavaFileObject obj = new MemJavaFileObject("mem","Test",Kind.SOURCE); + obj.openInputStream().close(); + } } From fd310644335f121e493a0b9103f06514bc82fae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 3 May 2010 07:13:03 +0000 Subject: [PATCH 0031/1968] --- .../java/com/mysema/codegen/MemJavaFileObjectTest.java | 5 +++-- .../java/com/mysema/codegen/MemSourceFileObjectTest.java | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java index da0425fe3d..a60eac4e1e 100644 --- a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java @@ -12,7 +12,7 @@ public class MemJavaFileObjectTest { @Test - public void testOpenOutputStream() throws IOException { + public void getCharContent() throws IOException { MemJavaFileObject obj = new MemJavaFileObject("mem","Test",Kind.SOURCE); Writer writer = obj.openWriter(); writer.write("Hello World"); @@ -22,8 +22,9 @@ public void testOpenOutputStream() throws IOException { } @Test - public void testOpenInputStream() throws IOException { + public void openInputStream() throws IOException { MemJavaFileObject obj = new MemJavaFileObject("mem","Test",Kind.SOURCE); + obj.openWriter().write("test"); obj.openInputStream().close(); } diff --git a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java index f8574aa9fb..75e26eb66e 100644 --- a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java @@ -20,5 +20,12 @@ public void testOpenWriter() throws IOException { obj.openWriter().write("Hello World"); assertEquals("Hello World", obj.getCharContent(true).toString()); } + + @Test + public void testOpenWriter2() throws IOException { + MemSourceFileObject obj = new MemSourceFileObject("Test"); + obj.openWriter().append("Hello World"); + assertEquals("Hello World", obj.getCharContent(true).toString()); + } } From c8b1e72e325f9160961fde2739ca24135c96b8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 3 May 2010 07:30:17 +0000 Subject: [PATCH 0032/1968] --- .../com/mysema/codegen/JavaWriterTest.java | 54 +++++++++++++------ src/test/resources/testExtends | 3 ++ src/test/resources/testImplements | 3 ++ src/test/resources/testInterface2 | 3 ++ 4 files changed, 48 insertions(+), 15 deletions(-) create mode 100644 src/test/resources/testExtends create mode 100644 src/test/resources/testImplements create mode 100644 src/test/resources/testInterface2 diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 16fb4a5e6a..c6795ed1f8 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -12,20 +12,31 @@ import java.lang.annotation.Annotation; import org.apache.commons.io.IOUtils; +import org.junit.Before; import org.junit.Test; public class JavaWriterTest { + + private StringWriter w; + + private CodeWriter writer; private static void match(String resource, String text) throws IOException{ + // TODO : try to compile ? String expected = IOUtils.toString(JavaWriterTest.class.getResourceAsStream(resource),"UTF-8").replace("\r\n", "\n").trim(); String actual = text.trim(); assertEquals(expected, actual); } + + @Before + public void setUp(){ + w = new StringWriter(); + writer = new JavaWriter(w); + } + @Test - public void testBasic() throws IOException { - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); + public void testBasic() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginClass("JavaWriterTest"); @@ -38,10 +49,24 @@ public void testBasic() throws IOException { match("/testBasic", w.toString()); } + @Test + public void testExtends() throws IOException{ + writer.beginClass("Test", "Superclass"); + writer.end(); + + match("/testExtends", w.toString()); + } + + @Test + public void testImplements() throws IOException{ + writer.beginClass("Test", null, "TestInterface1","TestInterface2"); + writer.end(); + + match("/testImplements", w.toString()); + } + @Test public void testInterface() throws IOException{ - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface("JavaWriterTest"); @@ -50,10 +75,16 @@ public void testInterface() throws IOException{ match("/testInterface", w.toString()); } + @Test + public void testInterface2() throws IOException{ + writer.beginInterface("Test", "Test1"); + writer.end(); + + match("/testInterface2", w.toString()); + } + @Test public void testJavadoc() throws IOException{ - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.javadoc("JavaWriterTest is a test class"); @@ -62,11 +93,10 @@ public void testJavadoc() throws IOException{ match("/testJavadoc", w.toString()); } + @Test public void testAnnotations() throws IOException{ - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class); writer.annotation(Entity.class); @@ -81,8 +111,6 @@ public void testAnnotations() throws IOException{ @Test public void testAnnotations2() throws IOException{ - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); writer.annotation(Entity.class); @@ -111,8 +139,6 @@ public Class annotationType() { @Test public void testFields() throws IOException{ - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); writer.beginClass("FieldTests"); // private writer.privateField("String", "privateField"); @@ -131,8 +157,6 @@ public void testFields() throws IOException{ @Test public void testMethods() throws IOException{ - StringWriter w = new StringWriter(); - CodeWriter writer = new JavaWriter(w); writer.beginClass("MethodTests"); // private diff --git a/src/test/resources/testExtends b/src/test/resources/testExtends new file mode 100644 index 0000000000..d2a98860a4 --- /dev/null +++ b/src/test/resources/testExtends @@ -0,0 +1,3 @@ +public class Test extends Superclass { + +} \ No newline at end of file diff --git a/src/test/resources/testImplements b/src/test/resources/testImplements new file mode 100644 index 0000000000..f85cf9519d --- /dev/null +++ b/src/test/resources/testImplements @@ -0,0 +1,3 @@ +public class Test implements TestInterface1, TestInterface2 { + +} \ No newline at end of file diff --git a/src/test/resources/testInterface2 b/src/test/resources/testInterface2 new file mode 100644 index 0000000000..249bdc6d43 --- /dev/null +++ b/src/test/resources/testInterface2 @@ -0,0 +1,3 @@ +public interface Test extends Test1 { + +} \ No newline at end of file From 6f5731e52f46c7ee91341ab4349f4e2dd3f0a8f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 3 May 2010 07:31:30 +0000 Subject: [PATCH 0033/1968] added tests --- src/test/java/com/mysema/codegen/SimpleCompilerTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java index 6fd3a3e220..4792c0fdd2 100644 --- a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java +++ b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java @@ -8,9 +8,15 @@ import junit.framework.Assert; +import org.junit.After; import org.junit.Test; public class SimpleCompilerTest { + + @After + public void tearDown(){ + new File("src/test/java/com/mysema/codegen/SimpleCompilerTest.class").delete(); + } @Test public void testRun() { From a180a6b878ed0a49197d0c56f7136db281b5c507 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 15 May 2010 10:39:25 +0000 Subject: [PATCH 0034/1968] added tests --- .../java/com/mysema/codegen/JavaWriter.java | 9 ---- .../com/mysema/codegen/ClassUtilsTest.java | 3 ++ .../com/mysema/codegen/JavaWriterTest.java | 52 ++++++++++++++++++- src/test/resources/testConstructors | 9 ++++ src/test/resources/testFields | 5 +- src/test/resources/testImports | 1 + src/test/resources/testMethods | 10 +++- src/test/resources/testSuppressWarnings | 2 + 8 files changed, 79 insertions(+), 12 deletions(-) create mode 100644 src/test/resources/testConstructors create mode 100644 src/test/resources/testImports create mode 100644 src/test/resources/testSuppressWarnings diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 22002b526a..b138de5562 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -210,15 +210,6 @@ public JavaWriter beginInterface(String simpleName, String... interfaces) throws return this; } - -// @Override -// public JavaWriter beginLine(String... segments) throws IOException { -// append(indent); -// for (String segment : segments){ -// append(segment); -// } -// return this; -// } private JavaWriter beginMethod(String modifiers, String returnType, String methodName, String... args) throws IOException{ append(indent + modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); diff --git a/src/test/java/com/mysema/codegen/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/ClassUtilsTest.java index bf5132e5f0..ae6be0d56f 100644 --- a/src/test/java/com/mysema/codegen/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/ClassUtilsTest.java @@ -3,6 +3,7 @@ import static org.junit.Assert.assertEquals; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -10,6 +11,7 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.collections15.Bag; import org.junit.Test; public class ClassUtilsTest { @@ -30,6 +32,7 @@ public void testNormalize(){ assertEquals(List.class, ClassUtils.normalize(ArrayList.class)); assertEquals(Set.class, ClassUtils.normalize(HashSet.class)); assertEquals(Map.class, ClassUtils.normalize(HashMap.class)); + assertEquals(Collection.class, ClassUtils.normalize(Bag.class)); } } diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index c6795ed1f8..a4d87c3129 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -10,17 +10,26 @@ import java.io.IOException; import java.io.StringWriter; import java.lang.annotation.Annotation; +import java.util.Arrays; +import org.apache.commons.collections15.Transformer; import org.apache.commons.io.IOUtils; import org.junit.Before; import org.junit.Test; public class JavaWriterTest { + + private static final Transformer transformer = new Transformer(){ + @Override + public String transform(String input) { + return input; + } + }; private StringWriter w; private CodeWriter writer; - + private static void match(String resource, String text) throws IOException{ // TODO : try to compile ? String expected = IOUtils.toString(JavaWriterTest.class.getResourceAsStream(resource),"UTF-8").replace("\r\n", "\n").trim(); @@ -150,6 +159,9 @@ public void testFields() throws IOException{ // public writer.publicField("String","publicField"); writer.publicStaticFinal("String", "publicStaticFinal", "\"val\""); + writer.publicFinal("String", "publicFinalField"); + writer.publicFinal("String", "publicFinalField2", "\"val\""); + writer.end(); match("/testFields", w.toString()); @@ -165,10 +177,48 @@ public void testMethods() throws IOException{ // method // public + writer.beginPublicMethod("String", "publicMethod", Arrays.asList("String a"), transformer); + writer.line("return null;"); + writer.end(); + + writer.beginStaticMethod("String", "staticMethod", Arrays.asList("String a"), transformer); + writer.line("return null;"); + writer.end(); writer.end(); match("/testMethods", w.toString()); } + @Test + public void testConstructors() throws IOException{ + writer.beginClass("ConstructorTests"); + + writer.beginConstructor(Arrays.asList("String a","String b"), transformer); + writer.end(); + + writer.beginConstructor("String a"); + writer.end(); + + writer.end(); + + match("/testConstructors", w.toString()); + + } + + @Test + public void testImports() throws IOException{ + writer.staticimports(Arrays.class); + + match("/testImports", w.toString()); + } + + @Test + public void testSuppressWarnings() throws IOException{ + writer.suppressWarnings("unused"); + writer.privateField("String", "test"); + + match("/testSuppressWarnings", w.toString()); + } + } diff --git a/src/test/resources/testConstructors b/src/test/resources/testConstructors new file mode 100644 index 0000000000..e3d282bfac --- /dev/null +++ b/src/test/resources/testConstructors @@ -0,0 +1,9 @@ +public class ConstructorTests { + + public ConstructorTests(String a, String b) { + } + + public ConstructorTests(String a) { + } + +} \ No newline at end of file diff --git a/src/test/resources/testFields b/src/test/resources/testFields index de6a0bea44..44b9e5c216 100644 --- a/src/test/resources/testFields +++ b/src/test/resources/testFields @@ -1,4 +1,3 @@ - public class FieldTests { private String privateField; @@ -13,4 +12,8 @@ public class FieldTests { public static final String publicStaticFinal = "val"; + public final String publicFinalField; + + public final String publicFinalField2 = "val"; + } \ No newline at end of file diff --git a/src/test/resources/testImports b/src/test/resources/testImports new file mode 100644 index 0000000000..788beac7e4 --- /dev/null +++ b/src/test/resources/testImports @@ -0,0 +1 @@ +import static java.util.Arrays.*; \ No newline at end of file diff --git a/src/test/resources/testMethods b/src/test/resources/testMethods index cd947a8e67..0fd50cb732 100644 --- a/src/test/resources/testMethods +++ b/src/test/resources/testMethods @@ -1,3 +1,11 @@ public class MethodTests { -} + public String publicMethod(String a) { + return null; + } + + public static String staticMethod(String a) { + return null; + } + +} \ No newline at end of file diff --git a/src/test/resources/testSuppressWarnings b/src/test/resources/testSuppressWarnings new file mode 100644 index 0000000000..f8902e4aa7 --- /dev/null +++ b/src/test/resources/testSuppressWarnings @@ -0,0 +1,2 @@ +@SuppressWarnings("unused") +private String test; \ No newline at end of file From 8f8b2fcd98e366c42a2adee47c774ed9c67bf0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 24 May 2010 21:03:08 +0000 Subject: [PATCH 0035/1968] extended CodeWriter signature --- .../java/com/mysema/codegen/CodeWriter.java | 180 ++---------------- .../java/com/mysema/codegen/JavaWriter.java | 20 ++ 2 files changed, 31 insertions(+), 169 deletions(-) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 24efd66952..c4fb5f6438 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -19,226 +19,68 @@ */ public interface CodeWriter extends Appendable{ - /** - * @param annotation - * @return - * @throws IOException - */ CodeWriter annotation(Annotation annotation) throws IOException; - /** - * @param annotation - * @return - * @throws IOException - */ CodeWriter annotation(Class annotation) throws IOException; - /** - * @param simpleName - * @return - * @throws IOException - */ CodeWriter beginClass(String simpleName) throws IOException; - /** - * @param simpleName - * @param superClass - * @param interfaces - * @return - * @throws IOException - */ CodeWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException; - /** - * @param - * @param params - * @param transformer - * @return - * @throws IOException - */ CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; - /** - * @param params - * @return - * @throws IOException - */ CodeWriter beginConstructor(String... params) throws IOException; - /** - * @param simpleName - * @param interfaces - * @return - * @throws IOException - */ CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; - /** - * @param - * @param returnType - * @param methodName - * @param parameters - * @param transformer - * @return - * @throws IOException - */ CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; - /** - * @param returnType - * @param methodName - * @param args - * @return - * @throws IOException - */ CodeWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException; - /** - * @param - * @param type - * @param name - * @param params - * @param transformer - * @return - * @throws IOException - */ CodeWriter beginStaticMethod(String type, String name, Collection params, Transformer transformer) throws IOException; - /** - * @param returnType - * @param methodName - * @param args - * @return - * @throws IOException - */ CodeWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException; - /** - * @return - * @throws IOException - */ CodeWriter end() throws IOException; - /** - * @param type - * @param name - * @return - * @throws IOException - */ CodeWriter field(String type, String name) throws IOException; - /** - * @param imports - * @return - * @throws IOException - */ CodeWriter imports(Class... imports) throws IOException; - /** - * @param imports - * @return - * @throws IOException - */ CodeWriter imports(Package... imports) throws IOException; - /** - * @param lines - * @return - * @throws IOException - */ CodeWriter javadoc(String... lines) throws IOException; - /** - * @param segments - * @return - * @throws IOException - */ CodeWriter line(String... segments) throws IOException; - /** - * @return - * @throws IOException - */ CodeWriter nl() throws IOException; - /** - * @param packageName - * @return - * @throws IOException - */ CodeWriter packageDecl(String packageName) throws IOException; - - /** - * @param type - * @param name - * @return - * @throws IOException - */ + CodeWriter privateField(String type, String name) throws IOException; - /** - * @param type - * @param name - * @param value - * @return - * @throws IOException - */ + CodeWriter privateFinal(String type, String name) throws IOException; + + CodeWriter privateFinal(String type, String name, String value) throws IOException; + CodeWriter privateStaticFinal(String type, String name, String value) throws IOException; - - /** - * @param type - * @param name - * @return - * @throws IOException - */ + CodeWriter protectedField(String type, String name) throws IOException; - /** - * @param type - * @param name - * @return - * @throws IOException - */ - CodeWriter publicField(String type, String name) throws IOException; + CodeWriter protectedFinal(String type, String name) throws IOException; + + CodeWriter protectedFinal(String type, String name, String value) throws IOException; - /** - * @param type - * @param name - * @return - * @throws IOException - */ + CodeWriter publicField(String type, String name) throws IOException; + CodeWriter publicFinal(String type, String name) throws IOException; - /** - * @param type - * @param name - * @param value - * @return - * @throws IOException - */ CodeWriter publicFinal(String type, String name, String value) throws IOException; - /** - * @param type - * @param name - * @param value - * @return - * @throws IOException - */ CodeWriter publicStaticFinal(String type, String name, String value) throws IOException; - /** - * @param imports - * @return - * @throws IOException - */ CodeWriter staticimports(Class... imports) throws IOException; - /** - * @param type - * @return - * @throws IOException - */ CodeWriter suppressWarnings(String type) throws IOException; } \ No newline at end of file diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index b138de5562..caaf8730c9 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -334,6 +334,16 @@ public JavaWriter privateField(String type, String name) throws IOException { return field(PRIVATE, type, name); } + @Override + public JavaWriter privateFinal(String type, String name) throws IOException { + return field(PRIVATE, type, name); + } + + @Override + public JavaWriter privateFinal(String type, String name, String value) throws IOException { + return field(PRIVATE, type, name, value); + } + @Override public JavaWriter privateStaticFinal(String type, String name, String value) throws IOException { return field(PRIVATE_STATIC_FINAL, type, name, value); @@ -343,6 +353,16 @@ public JavaWriter privateStaticFinal(String type, String name, String value) thr public JavaWriter protectedField(String type, String name) throws IOException { return field(PROTECTED, type, name); } + + @Override + public JavaWriter protectedFinal(String type, String name) throws IOException { + return field(PROTECTED, type, name); + } + + @Override + public JavaWriter protectedFinal(String type, String name, String value) throws IOException { + return field(PROTECTED, type, name, value); + } @Override public JavaWriter publicField(String type, String name) throws IOException { From 13fd69177dd489181831fa71421f75dd389c1696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 29 May 2010 18:44:07 +0000 Subject: [PATCH 0036/1968] --- .../java/com/mysema/codegen/EvaluatorFactory.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index bf5cb51c18..8dcfeda657 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -109,8 +109,11 @@ private void compile(String source, Class projectionType, */ public Evaluator createEvaluator( String source, - final Class projectionType, - String[] names, Class[] types, + // TODO : support for generic projection types + Class projectionType, + String[] names, + // TODO : support for generic argument type + Class[] types, Map constants) { try { @@ -124,14 +127,14 @@ public Evaluator createEvaluator( clazz = loader.loadClass(id); } - final Object object = !constants.isEmpty() ? clazz.newInstance() : null; + Object object = !constants.isEmpty() ? clazz.newInstance() : null; for (Map.Entry entry : constants.entrySet()){ Field field = clazz.getField(entry.getKey()); field.set(object, entry.getValue()); } - final Method method = clazz.getMethod("eval", types); + Method method = clazz.getMethod("eval", types); return new MethodEvaluator(method, object, projectionType); } catch (ClassNotFoundException e) { throw new CodegenException(e); From fe912564dcd3fb586ec9888e23709de1ad2001fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 31 May 2010 14:36:17 +0000 Subject: [PATCH 0037/1968] added logging --- .../java/com/mysema/codegen/EvaluatorFactoryTest.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index b71a5298b1..cc77d5feaa 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -54,11 +54,17 @@ public void setUp() throws IOException{ @Test public void testSimple(){ for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")){ - evaluate(expr, boolean.class, names, strings, Arrays.asList("a","b"), Collections.emptyMap()); + long start = System.currentTimeMillis(); + evaluate(expr, boolean.class, names, strings, Arrays.asList("a","b"), Collections.emptyMap()); + long duration = System.currentTimeMillis() - start; + System.err.println(expr + " took " + duration + "ms\n"); } for (String expr : Arrays.asList("a != b", "a < b", "a > b", "a <= b", "a >= b")){ - evaluate(expr, boolean.class, names, ints, Arrays.asList(0,1), Collections.emptyMap()); + long start = System.currentTimeMillis(); + evaluate(expr, boolean.class, names, ints, Arrays.asList(0,1), Collections.emptyMap()); + long duration = System.currentTimeMillis() - start; + System.err.println(expr + " took " + duration + "ms\n"); } } From 326c0825f3cc07da0a2e3aeba801ba8768ab6678 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 31 May 2010 14:45:59 +0000 Subject: [PATCH 0038/1968] fixed some minor issues --- src/main/java/com/mysema/codegen/MemClassLoader.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index 130d11f6a3..41bbdce3e2 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -73,15 +73,17 @@ protected URL findResource(String name) { } } - private JavaFileObject getFileObject(String name) { + private JavaFileObject getFileObject(String n) { LocationAndKind key; - if(name.endsWith(Kind.CLASS.extension)) { - name = name.replace('.','/') + Kind.CLASS.extension; + String name; + if(n.endsWith(Kind.CLASS.extension)) { + name = n.replace('.','/') + Kind.CLASS.extension; key = CLASS_KEY; - } else if(name.endsWith(Kind.SOURCE.extension)) { - name = name.replace('.','/') + Kind.SOURCE.extension; + } else if(n.endsWith(Kind.SOURCE.extension)) { + name = n.replace('.','/') + Kind.SOURCE.extension; key = SOURCE_KEY; }else{ + name = n; key = OTHER_KEY; } if(memFileSystem.containsKey(key)) { From fab883348a59975ef97753a2bd5f65f1ff06c885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 3 Jun 2010 16:48:35 +0000 Subject: [PATCH 0039/1968] added generic type system updated version to 0.1.3 --- pom.xml | 2 +- .../java/com/mysema/codegen/ClassUtils.java | 24 ++++++++ .../com/mysema/codegen/EvaluatorFactory.java | 48 ++++++++++------ src/main/java/com/mysema/codegen/Type.java | 57 +++++++++++++++++++ .../mysema/codegen/ComplexEvaluationTest.java | 45 +++++++++++++++ .../mysema/codegen/EvaluatorFactoryTest.java | 11 ++-- 6 files changed, 163 insertions(+), 24 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/Type.java create mode 100644 src/test/java/com/mysema/codegen/ComplexEvaluationTest.java diff --git a/pom.xml b/pom.xml index d45bafea91..5ebfb24390 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.2-SNAPSHOT + 0.1.3 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/ClassUtils.java index 27445c32e8..b5581dae38 100644 --- a/src/main/java/com/mysema/codegen/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/ClassUtils.java @@ -31,6 +31,30 @@ public static String getName(Class cl, Set packages, Set> c } } + public static String getName(Type cl){ + return getName(cl, Collections.singleton(Object.class.getPackage()), Collections.>emptySet()); + } + + public static String getName(Type type, Set packages, Set> classes){ + if (type.getParameters().isEmpty()){ + return getName(type.getJavaClass(), packages, classes); + }else{ + StringBuilder builder = new StringBuilder(); + builder.append(getName(type.getJavaClass(), packages, classes)); + builder.append("<"); + boolean first = true; + for (Type parameter : type.getParameters()){ + builder.append(getName(parameter, packages, classes)); + if (!first){ + builder.append(","); + } + first = false; + } + builder.append(">"); + return builder.toString(); + } + } + public static Class normalize(Class clazz){ if (List.class.isAssignableFrom(clazz)){ return List.class; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 8dcfeda657..d1c379fd46 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -54,8 +54,8 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } - private void compile(String source, Class projectionType, - String[] names, Class[] types, String id, Map constants) throws IOException { + private void compile(String source, Type projectionType, + String[] names, Type[] types, String id, Map constants) throws IOException { // create source StringWriter writer = new StringWriter(); JavaWriter javaw = new JavaWriter(writer); @@ -75,7 +75,7 @@ private void compile(String source, Class projectionType, }else{ javaw.beginPublicMethod(ClassUtils.getName(projectionType), "eval", params); } - javaw.line("return ", source, ";"); + javaw.append(source); javaw.end(); javaw.end(); @@ -95,34 +95,46 @@ private void compile(String source, Class projectionType, } } + + @SuppressWarnings("unchecked") + public Evaluator createEvaluator( + String source, + Class projectionType, + String[] names, + Class[] classes, + Map constants) { + Type[] types = new Type[classes.length]; + for (int i = 0; i < types.length; i++){ + types[i] = new Type(classes[i]); + } + return createEvaluator(source, new Type(projectionType), names, types, classes, constants); + } /** * Create a new Evaluator instance * * @param projection type * @param source expression in Java source code form - * @param projectionType type of the source expression + * @param projection type of the source expression * @param names names of the arguments * @param types types of the arguments * @param constants * @return */ public Evaluator createEvaluator( - String source, - // TODO : support for generic projection types - Class projectionType, - String[] names, - // TODO : support for generic argument type - Class[] types, - Map constants) { - + String source, + Type projection, + String[] names, + Type[] types, + Class[] classes, + Map constants) { try { - String id = toId(source, projectionType, types); + String id = toId(source, projection, types); Class clazz; try{ clazz = loader.loadClass(id); }catch(ClassNotFoundException e){ - compile(source, projectionType, names, types, id, constants); + compile(source, projection, names, types, id, constants); // reload clazz = loader.loadClass(id); } @@ -134,8 +146,8 @@ public Evaluator createEvaluator( field.set(object, entry.getValue()); } - Method method = clazz.getMethod("eval", types); - return new MethodEvaluator(method, object, projectionType); + Method method = clazz.getMethod("eval", classes); + return new MethodEvaluator(method, object, projection.getJavaClass()); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { @@ -156,11 +168,11 @@ public Evaluator createEvaluator( } - protected String toId(String source, Class returnType, Class... types) { + protected String toId(String source, Type returnType, Type... types) { StringBuilder b = new StringBuilder("Q"); b.append("_").append(source.hashCode()); b.append("_").append(returnType.getName().hashCode()); - for (Class type : types) { + for (Type type : types) { b.append("_").append(type.getName().hashCode()); } return b.toString().replace('-', '0'); diff --git a/src/main/java/com/mysema/codegen/Type.java b/src/main/java/com/mysema/codegen/Type.java new file mode 100644 index 0000000000..2db342dab5 --- /dev/null +++ b/src/main/java/com/mysema/codegen/Type.java @@ -0,0 +1,57 @@ +package com.mysema.codegen; + +import java.util.Arrays; +import java.util.List; + +/** + * Type represents a generic type used in code generation + * + * @author tiwe + * + * @param + */ +public class Type { + + private final Class javaClass; + + private final List> parameters; + + public Type(Class javaClass, List> parameters) { + this.javaClass = javaClass; + this.parameters = parameters; + } + + public Type(Class clazz, Type... parameters) { + this(clazz, Arrays.asList(parameters)); + } + + public Class getJavaClass() { + return javaClass; + } + + public List> getParameters() { + return parameters; + } + + public String getName() { + return javaClass.getName(); + } + + @Override + public int hashCode(){ + return javaClass.hashCode(); + } + + @Override + public boolean equals(Object o){ + if (o == this){ + return true; + }else if (o instanceof Type){ + Type t = (Type)o; + return t.javaClass.equals(javaClass) && t.parameters.equals(parameters); + }else{ + return false; + } + } + +} diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java new file mode 100644 index 0000000000..84aaf5ab59 --- /dev/null +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -0,0 +1,45 @@ +package com.mysema.codegen; + +import static org.junit.Assert.*; + +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import org.junit.Test; + +public class ComplexEvaluationTest { + + private EvaluatorFactory factory = new EvaluatorFactory((URLClassLoader) getClass().getClassLoader()); + + @Test + @SuppressWarnings("unchecked") + public void testComplex(){Type stringType = new Type(String.class); + Type resultType = new Type(List.class, stringType); + StringBuilder source = new StringBuilder(); + source.append("java.util.List rv = new java.util.ArrayList();\n"); + source.append("for (String a : a_){\n"); + source.append(" for (String b : b_){\n"); + source.append(" if (a.equals(b)){\n"); + source.append(" rv.add(a);\n"); + source.append(" }\n"); + source.append(" }\n"); + source.append("}\n"); + source.append("return rv;"); + + Evaluator evaluator = factory.createEvaluator( + source.toString(), + resultType, + new String[]{"a_","b_"}, + new Type[]{resultType, resultType}, + new Class[]{List.class,List.class}, + Collections.emptyMap()); + + List a_ = Arrays.asList("1","2","3","4"); + List b_ = Arrays.asList("2","4","6","8"); + + assertEquals(Arrays.asList("2","4"), evaluator.evaluate(a_, b_)); + } + +} diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index cc77d5feaa..2d0970251b 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -5,7 +5,7 @@ */ package com.mysema.codegen; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import java.io.IOException; import java.net.URLClassLoader; @@ -94,22 +94,23 @@ public void testWithConstants(){ public void testCustomType(){ test("a.getName()", String.class, Collections.singletonList("a"), Collections.>singletonList(TestEntity.class), - Arrays.asList(new TestEntity("Hello World")), "Hello World"); - + Arrays.asList(new TestEntity("Hello World")), "Hello World"); } - + private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ Assert.assertEquals(expectedResult, evaluate(source, projectionType, names, types, args, Collections.emptyMap())); } private Object evaluate(String source, Class projectionType, List names, List> types, List args, Map constants) { Evaluator evaluator = factory.createEvaluator( - source, + "return " + source + ";", projectionType, names.toArray(new String[names.size()]), types.toArray(new Class[types.size()]), constants); return evaluator.evaluate(args.toArray()); } + + } From 72cbf44852329fc46b8b1d2712265aee185a09a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 3 Jun 2010 16:49:50 +0000 Subject: [PATCH 0040/1968] updated version to 0.1.3-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ebfb24390..cd1a4692d6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.3 + 0.1.3-SNAPSHOT Codegen Code generation and compilation for Java From 1a01c49e88d48eda257f055c61769e75283f9b9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 3 Jun 2010 17:04:24 +0000 Subject: [PATCH 0041/1968] brought CodeWriter.beginLine back updated version to 0.1.4 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/CodeWriter.java | 10 ++++++---- src/main/java/com/mysema/codegen/JavaWriter.java | 9 +++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index cd1a4692d6..ab42e6197e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.3-SNAPSHOT + 0.1.4 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index c4fb5f6438..21882f004d 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -33,6 +33,8 @@ public interface CodeWriter extends Appendable{ CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; + JavaWriter beginLine(String[] segments) throws IOException; + CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; CodeWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException; @@ -56,9 +58,9 @@ public interface CodeWriter extends Appendable{ CodeWriter nl() throws IOException; CodeWriter packageDecl(String packageName) throws IOException; - - CodeWriter privateField(String type, String name) throws IOException; + CodeWriter privateField(String type, String name) throws IOException; + CodeWriter privateFinal(String type, String name) throws IOException; CodeWriter privateFinal(String type, String name, String value) throws IOException; @@ -70,9 +72,9 @@ public interface CodeWriter extends Appendable{ CodeWriter protectedFinal(String type, String name) throws IOException; CodeWriter protectedFinal(String type, String name, String value) throws IOException; - - CodeWriter publicField(String type, String name) throws IOException; + CodeWriter publicField(String type, String name) throws IOException; + CodeWriter publicFinal(String type, String name) throws IOException; CodeWriter publicFinal(String type, String name, String value) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index caaf8730c9..a1b819102e 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -210,6 +210,15 @@ public JavaWriter beginInterface(String simpleName, String... interfaces) throws return this; } + + @Override + public JavaWriter beginLine(String... segments) throws IOException { + append(indent); + for (String segment : segments){ + append(segment); + } + return this; + } private JavaWriter beginMethod(String modifiers, String returnType, String methodName, String... args) throws IOException{ append(indent + modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); From 063155f85f457f4ce1c9d65b3c4f27d7b8d9612c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 3 Jun 2010 17:05:13 +0000 Subject: [PATCH 0042/1968] updated version to 0.1.4-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ab42e6197e..53a2fd4d41 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.4 + 0.1.4-SNAPSHOT Codegen Code generation and compilation for Java From e8dd899b8bc12d146a8a392406e368621c815162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 3 Jun 2010 17:07:54 +0000 Subject: [PATCH 0043/1968] --- src/main/java/com/mysema/codegen/CodeWriter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 21882f004d..7446268e05 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -33,7 +33,7 @@ public interface CodeWriter extends Appendable{ CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; - JavaWriter beginLine(String[] segments) throws IOException; + JavaWriter beginLine(String... segments) throws IOException; CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; From 693d3016fdefc9df171706f440c483c989700d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 4 Jun 2010 06:28:12 +0000 Subject: [PATCH 0044/1968] updated version to 0.1.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 53a2fd4d41..ba32e39a65 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.4-SNAPSHOT + 0.1.5 Codegen Code generation and compilation for Java From 6d1dd624e61eb03a28e8845c395b2247a04b201a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 4 Jun 2010 06:30:17 +0000 Subject: [PATCH 0045/1968] updated version to 0.1.5-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ba32e39a65..18ad0be944 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.5 + 0.1.5-SNAPSHOT Codegen Code generation and compilation for Java From 94f4b51ac736dd74ca0fa3bec0fa393c633d4175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 13 Jun 2010 15:28:16 +0000 Subject: [PATCH 0046/1968] extended imports signature --- .../java/com/mysema/codegen/CodeWriter.java | 2 + .../java/com/mysema/codegen/JavaWriter.java | 65 ++++++++++++------- .../com/mysema/codegen/JavaWriterTest.java | 9 +++ src/test/resources/testImports2 | 3 + 4 files changed, 54 insertions(+), 25 deletions(-) create mode 100644 src/test/resources/testImports2 diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 7446268e05..7557e55f92 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -50,6 +50,8 @@ public interface CodeWriter extends Appendable{ CodeWriter imports(Class... imports) throws IOException; CodeWriter imports(Package... imports) throws IOException; + + CodeWriter imports(Collection imports) throws IOException; CodeWriter javadoc(String... lines) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index a1b819102e..1db6d214ae 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -33,16 +33,16 @@ */ public final class JavaWriter implements Appendable, CodeWriter{ - private static final int INDENT_SPACES = 4; - private static final String EXTENDS = " extends "; - + private static final String IMPLEMENTS = " implements "; private static final String IMPORT = "import "; private static final String IMPORT_STATIC = "import static "; + private static final int INDENT_SPACES = 4; + private static final String PACKAGE = "package "; private static final String PRIVATE = "private "; @@ -256,6 +256,14 @@ public JavaWriter field(String type, String name) throws IOException { return stmt(type + SPACE + name).nl(); } + private JavaWriter field(String modifier, String type, String name) throws IOException{ + return stmt(modifier + type + SPACE + name).nl(); + } + + private JavaWriter field(String modifier, String type, String name, String value) throws IOException{ + return stmt(modifier + type + SPACE + name + ASSIGN + value).nl(); + } + private JavaWriter goIn(){ indent += " "; return this; @@ -277,7 +285,22 @@ public JavaWriter imports(Class... imports) throws IOException{ nl(); return this; } - + + @Override + public CodeWriter imports(Collection imports) throws IOException { + for (Object o : imports){ + if (o instanceof Class){ + imports((Class)o); + }else if (o instanceof Package){ + imports((Package)o); + }else{ + line(IMPORT + o + SEMICOLON); + nl(); + } + } + return this; + } + @Override public JavaWriter imports(Package... imports) throws IOException { for (Package p : imports){ @@ -296,7 +319,7 @@ public JavaWriter javadoc(String... lines) throws IOException { } return line(" */"); } - + @Override public JavaWriter line(String... segments) throws IOException{ append(indent); @@ -305,7 +328,7 @@ public JavaWriter line(String... segments) throws IOException{ } return nl(); } - + @Override public JavaWriter nl() throws IOException { return append(NEWLINE); @@ -330,14 +353,14 @@ private JavaWriter params(Collection parameters, Transformer tr append(")"); return this; } - + private JavaWriter params(String... params) throws IOException{ append("("); append(StringUtils.join(params, COMMA)); append(")"); return this; } - + @Override public JavaWriter privateField(String type, String name) throws IOException { return field(PRIVATE, type, name); @@ -347,17 +370,17 @@ public JavaWriter privateField(String type, String name) throws IOException { public JavaWriter privateFinal(String type, String name) throws IOException { return field(PRIVATE, type, name); } - + @Override public JavaWriter privateFinal(String type, String name, String value) throws IOException { return field(PRIVATE, type, name, value); } - + @Override public JavaWriter privateStaticFinal(String type, String name, String value) throws IOException { return field(PRIVATE_STATIC_FINAL, type, name, value); } - + @Override public JavaWriter protectedField(String type, String name) throws IOException { return field(PROTECTED, type, name); @@ -372,7 +395,7 @@ public JavaWriter protectedFinal(String type, String name) throws IOException { public JavaWriter protectedFinal(String type, String name, String value) throws IOException { return field(PROTECTED, type, name, value); } - + @Override public JavaWriter publicField(String type, String name) throws IOException { return field(PUBLIC, type, name); @@ -382,25 +405,17 @@ public JavaWriter publicField(String type, String name) throws IOException { public JavaWriter publicFinal(String type, String name) throws IOException { return field(PUBLIC_FINAL, type, name); } - + @Override public JavaWriter publicFinal(String type, String name, String value) throws IOException { return field(PUBLIC_FINAL, type, name, value); } - + @Override public JavaWriter publicStaticFinal(String type, String name, String value) throws IOException { return field(PUBLIC_STATIC_FINAL, type, name, value); } - - private JavaWriter field(String modifier, String type, String name) throws IOException{ - return stmt(modifier + type + SPACE + name).nl(); - } - - private JavaWriter field(String modifier, String type, String name, String value) throws IOException{ - return stmt(modifier + type + SPACE + name + ASSIGN + value).nl(); - } - + @Override public JavaWriter staticimports(Class... imports) throws IOException{ for (Class cl : imports){ @@ -412,12 +427,12 @@ public JavaWriter staticimports(Class... imports) throws IOException{ private JavaWriter stmt(String stmt) throws IOException{ return line(stmt + SEMICOLON); } - + @Override public JavaWriter suppressWarnings(String type) throws IOException{ return line("@SuppressWarnings(\"" + type +"\")"); } - + private String[] transform(Collection parameters, Transformer transformer){ String[] rv = new String[parameters.size()]; int i = 0; diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index a4d87c3129..9939e7f78e 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -213,6 +213,15 @@ public void testImports() throws IOException{ match("/testImports", w.toString()); } + + @Test + public void testImports2() throws IOException{ + writer.imports(Arrays.asList("java.lang.reflect","java.util")); + + match("/testImports2", w.toString()); + } + + @Test public void testSuppressWarnings() throws IOException{ writer.suppressWarnings("unused"); diff --git a/src/test/resources/testImports2 b/src/test/resources/testImports2 new file mode 100644 index 0000000000..745057cb95 --- /dev/null +++ b/src/test/resources/testImports2 @@ -0,0 +1,3 @@ +import java.lang.reflect; + +import java.util; \ No newline at end of file From 16d8fe0e1ffb044c4a65d2dfbfbe1b31495388a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 13 Jun 2010 15:46:00 +0000 Subject: [PATCH 0047/1968] extended import signature --- .../java/com/mysema/codegen/ClassUtils.java | 10 ++--- .../java/com/mysema/codegen/CodeWriter.java | 4 +- .../java/com/mysema/codegen/JavaWriter.java | 43 +++++++++++-------- .../com/mysema/codegen/JavaWriterTest.java | 2 +- src/test/resources/testImports2 | 5 +-- 5 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/ClassUtils.java index b5581dae38..271ee65479 100644 --- a/src/main/java/com/mysema/codegen/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/ClassUtils.java @@ -18,13 +18,13 @@ public final class ClassUtils { public static String getName(Class cl){ - return getName(cl, Collections.singleton(Object.class.getPackage()), Collections.>emptySet()); + return getName(cl, Collections.singleton("java.lang"), Collections.emptySet()); } - public static String getName(Class cl, Set packages, Set> classes) { + public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; - } else if (cl.getPackage() == null || packages.contains(cl.getPackage()) || classes.contains(cl)) { + } else if (cl.getPackage() == null || packages.contains(cl.getPackage().getName()) || classes.contains(cl.getName())) { return cl.getSimpleName().replace('$', '.'); } else { return cl.getName().replace('$', '.'); @@ -32,10 +32,10 @@ public static String getName(Class cl, Set packages, Set> c } public static String getName(Type cl){ - return getName(cl, Collections.singleton(Object.class.getPackage()), Collections.>emptySet()); + return getName(cl, Collections.singleton("java.lang"), Collections.emptySet()); } - public static String getName(Type type, Set packages, Set> classes){ + public static String getName(Type type, Set packages, Set classes){ if (type.getParameters().isEmpty()){ return getName(type.getJavaClass(), packages, classes); }else{ diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 7557e55f92..71a5ab63e7 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -51,7 +51,9 @@ public interface CodeWriter extends Appendable{ CodeWriter imports(Package... imports) throws IOException; - CodeWriter imports(Collection imports) throws IOException; + CodeWriter importClasses(String... classes) throws IOException; + + CodeWriter importPackages(String... packages) throws IOException; CodeWriter javadoc(String... lines) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 1db6d214ae..cd14817f93 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -65,9 +65,9 @@ public final class JavaWriter implements Appendable, CodeWriter{ private final Appendable appendable; - private final Set> importedClasses = new HashSet>(); + private final Set importedClasses = new HashSet(); - private final Set importedPackages = new HashSet(); + private final Set importedPackages = new HashSet(); private String indent = ""; @@ -78,7 +78,7 @@ public JavaWriter(Appendable appendable){ throw new IllegalArgumentException("appendable is null"); } this.appendable = appendable; - this.importedPackages.add(Object.class.getPackage()); + this.importedPackages.add("java.lang"); } @Override @@ -149,7 +149,7 @@ public JavaWriter append(CharSequence csq, int start, int end) throws IOExceptio } private JavaWriter appendType(Class type) throws IOException{ - if (importedClasses.contains(type) || importedPackages.contains(type.getPackage())){ + if (importedClasses.contains(type.getName()) || importedPackages.contains(type.getPackage().getName())){ append(type.getSimpleName()); }else{ append(type.getName()); @@ -279,7 +279,7 @@ private JavaWriter goOut(){ @Override public JavaWriter imports(Class... imports) throws IOException{ for (Class cl : imports){ - importedClasses.add(cl); + importedClasses.add(cl.getName()); line(IMPORT + cl.getName() + SEMICOLON); } nl(); @@ -287,25 +287,30 @@ public JavaWriter imports(Class... imports) throws IOException{ } @Override - public CodeWriter imports(Collection imports) throws IOException { - for (Object o : imports){ - if (o instanceof Class){ - imports((Class)o); - }else if (o instanceof Package){ - imports((Package)o); - }else{ - line(IMPORT + o + SEMICOLON); - nl(); - } + public JavaWriter imports(Package... imports) throws IOException { + for (Package p : imports){ + importedPackages.add(p.getName()); + line(IMPORT + p.getName() + ".*;"); + } + nl(); + return this; + } + + @Override + public JavaWriter importClasses(String... imports) throws IOException{ + for (String cl : imports){ + importedClasses.add(cl); + line(IMPORT + cl + SEMICOLON); } + nl(); return this; } @Override - public JavaWriter imports(Package... imports) throws IOException { - for (Package p : imports){ + public JavaWriter importPackages(String... imports) throws IOException { + for (String p : imports){ importedPackages.add(p); - line(IMPORT + p.getName() + ".*;"); + line(IMPORT + p + ".*;"); } nl(); return this; @@ -336,7 +341,7 @@ public JavaWriter nl() throws IOException { @Override public JavaWriter packageDecl(String packageName) throws IOException{ - importedPackages.add(Package.getPackage(packageName)); + importedPackages.add(packageName); return line(PACKAGE + packageName + SEMICOLON).nl(); } diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 9939e7f78e..4d8156779f 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -216,7 +216,7 @@ public void testImports() throws IOException{ @Test public void testImports2() throws IOException{ - writer.imports(Arrays.asList("java.lang.reflect","java.util")); + writer.importPackages("java.lang.reflect","java.util"); match("/testImports2", w.toString()); } diff --git a/src/test/resources/testImports2 b/src/test/resources/testImports2 index 745057cb95..9779566dd2 100644 --- a/src/test/resources/testImports2 +++ b/src/test/resources/testImports2 @@ -1,3 +1,2 @@ -import java.lang.reflect; - -import java.util; \ No newline at end of file +import java.lang.reflect.*; +import java.util.*; \ No newline at end of file From dc8a07176893f140b94de8aec6ae60b6eb363955 Mon Sep 17 00:00:00 2001 From: Vesa Martilla Date: Wed, 7 Jul 2010 15:03:54 +0000 Subject: [PATCH 0048/1968] Upgraded JUnit 4.4 -> 4.8.1. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 18ad0be944..17c29fef4c 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ junit junit - 4.4 + 4.8.1 test From 41ef86b5e2401d724f1f646d32d51954cfe4e711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 15 Jul 2010 20:10:56 +0000 Subject: [PATCH 0049/1968] fixed protected final fields updated version to 0.1.6 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/CodeWriter.java | 2 +- src/main/java/com/mysema/codegen/JavaWriter.java | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 17c29fef4c..a1ffa8ad19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.5-SNAPSHOT + 0.1.6 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 71a5ab63e7..b6198e7e7b 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -72,7 +72,7 @@ public interface CodeWriter extends Appendable{ CodeWriter privateStaticFinal(String type, String name, String value) throws IOException; CodeWriter protectedField(String type, String name) throws IOException; - + CodeWriter protectedFinal(String type, String name) throws IOException; CodeWriter protectedFinal(String type, String name, String value) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index cd14817f93..64a8f7d405 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -50,6 +50,8 @@ public final class JavaWriter implements Appendable, CodeWriter{ private static final String PRIVATE_STATIC_FINAL = "private static final "; private static final String PROTECTED = "protected "; + + private static final String PROTECTED_FINAL = "protected final "; private static final String PUBLIC = "public "; @@ -393,12 +395,12 @@ public JavaWriter protectedField(String type, String name) throws IOException { @Override public JavaWriter protectedFinal(String type, String name) throws IOException { - return field(PROTECTED, type, name); + return field(PROTECTED_FINAL, type, name); } @Override public JavaWriter protectedFinal(String type, String name, String value) throws IOException { - return field(PROTECTED, type, name, value); + return field(PROTECTED_FINAL, type, name, value); } @Override From 43ad4c6714cbcf0e2ec607f93586210795faa528 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 15 Jul 2010 20:11:44 +0000 Subject: [PATCH 0050/1968] updated version to 0.1.6-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a1ffa8ad19..023bee5ee4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.6 + 0.1.6-SNAPSHOT Codegen Code generation and compilation for Java From 156b0cba4f5b6c7274b3dedf88cce5c407f37cc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 19 Jul 2010 14:08:42 +0000 Subject: [PATCH 0051/1968] improved annotation serialization updated codegen version to 0.1.7 --- pom.xml | 2 +- .../java/com/mysema/codegen/JavaWriter.java | 38 +++++++++++++------ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index 023bee5ee4..a51488047f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.6-SNAPSHOT + 0.1.7 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 64a8f7d405..1d59a6dd0b 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -86,16 +86,10 @@ public JavaWriter(Appendable appendable){ @Override public JavaWriter annotation(Annotation annotation) throws IOException { append(indent).append("@").appendType(annotation.annotationType()).append("("); - boolean first = true; - for (Method method : annotation.annotationType().getDeclaredMethods()){ + Method[] methods = annotation.annotationType().getDeclaredMethods(); + if (methods.length == 1 && methods[0].getName().equals("value")){ try { - Object value = method.invoke(annotation); - if (value == null){ - continue; - }else if (!first){ - append(COMMA); - } - append(method.getName()+"="); + Object value = methods[0].invoke(annotation); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); @@ -103,9 +97,29 @@ public JavaWriter annotation(Annotation annotation) throws IOException { throw new CodegenException(e); } catch (InvocationTargetException e) { throw new CodegenException(e); - } - first = false; - } + } + }else{ + boolean first = true; + for (Method method : methods){ + try { + Object value = method.invoke(annotation); + if (value == null){ + continue; + }else if (!first){ + append(COMMA); + } + append(method.getName()+"="); + annotationConstant(value); + } catch (IllegalArgumentException e) { + throw new CodegenException(e); + } catch (IllegalAccessException e) { + throw new CodegenException(e); + } catch (InvocationTargetException e) { + throw new CodegenException(e); + } + first = false; + } + } return append(")").nl(); } From e8d846c17de9e2f5e81ba82e528007002a2c787d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 19 Jul 2010 14:09:15 +0000 Subject: [PATCH 0052/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a51488047f..021fdf3286 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.7 + 0.1.7-SNAPSHOT Codegen Code generation and compilation for Java From aeef3326019a6fced1a352707f0689b4ebc6fee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 31 Jul 2010 21:46:13 +0000 Subject: [PATCH 0053/1968] improved handling of default values and boolean constants in annotations --- .../java/com/mysema/codegen/JavaWriter.java | 19 +++++++++---- .../com/mysema/codegen/AnnotationTest.java | 28 +++++++++++++++++++ .../com/mysema/codegen/TestAnnotation.java | 19 +++++++++++++ src/test/resources/testAnnotations2 | 2 +- 4 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/AnnotationTest.java create mode 100644 src/test/java/com/mysema/codegen/TestAnnotation.java diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 1d59a6dd0b..5f833af0d2 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -85,12 +85,14 @@ public JavaWriter(Appendable appendable){ @Override public JavaWriter annotation(Annotation annotation) throws IOException { - append(indent).append("@").appendType(annotation.annotationType()).append("("); + append(indent).append("@").appendType(annotation.annotationType()); Method[] methods = annotation.annotationType().getDeclaredMethods(); if (methods.length == 1 && methods[0].getName().equals("value")){ try { Object value = methods[0].invoke(annotation); + append("("); annotationConstant(value); + append(")"); } catch (IllegalArgumentException e) { throw new CodegenException(e); } catch (IllegalAccessException e) { @@ -103,10 +105,12 @@ public JavaWriter annotation(Annotation annotation) throws IOException { for (Method method : methods){ try { Object value = method.invoke(annotation); - if (value == null){ + if (value == null || value.equals(method.getDefaultValue())){ continue; }else if (!first){ append(COMMA); + }else{ + append("("); } append(method.getName()+"="); annotationConstant(value); @@ -118,9 +122,12 @@ public JavaWriter annotation(Annotation annotation) throws IOException { throw new CodegenException(e); } first = false; - } - } - return append(")").nl(); + } + if (!first){ + append(")"); + } + } + return nl(); } @@ -133,7 +140,7 @@ public JavaWriter annotation(Class annotation) throws IOEx private void annotationConstant(Object value) throws IOException{ if (value instanceof Class){ appendType((Class)value).append(".class"); - }else if (value instanceof Number){ + }else if (value instanceof Number || value instanceof Boolean){ append(value.toString()); }else if (value instanceof Enum){ Enum enumValue = (Enum)value; diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java new file mode 100644 index 0000000000..75570e9cca --- /dev/null +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -0,0 +1,28 @@ +package com.mysema.codegen; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.StringWriter; + +import org.junit.Test; + +@TestAnnotation(prop2 = false) +public class AnnotationTest { + + private StringWriter w = new StringWriter(); + private CodeWriter writer = new JavaWriter(w); + + @Test + public void testClassAnnotation() throws IOException{ + writer.annotation(getClass().getAnnotation(TestAnnotation.class)); + assertEquals("@com.mysema.codegen.TestAnnotation(prop2=false)", w.toString().trim()); + } + + @Test + public void testMethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { + writer.annotation(getClass().getMethod("testMethodAnnotation").getAnnotation(Test.class)); + assertEquals("@org.junit.Test", w.toString().trim()); + } + +} diff --git a/src/test/java/com/mysema/codegen/TestAnnotation.java b/src/test/java/com/mysema/codegen/TestAnnotation.java new file mode 100644 index 0000000000..5641a62b67 --- /dev/null +++ b/src/test/java/com/mysema/codegen/TestAnnotation.java @@ -0,0 +1,19 @@ +package com.mysema.codegen; + +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@Target( { TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation { + + boolean prop1() default false; + + boolean prop2(); + +} diff --git a/src/test/resources/testAnnotations2 b/src/test/resources/testAnnotations2 index 1e5ecc7856..c430e6aea9 100644 --- a/src/test/resources/testAnnotations2 +++ b/src/test/resources/testAnnotations2 @@ -6,7 +6,7 @@ import java.io.*; @Entity public class JavaWriterTest { - @org.junit.Test(timeout=0) + @org.junit.Test public void test() { } From 332337512591ed679d7a96f4819732bc3dfe5651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Aug 2010 20:43:41 +0000 Subject: [PATCH 0054/1968] added tests --- .../java/com/mysema/codegen/JavaWriter.java | 4 ++-- .../com/mysema/codegen/AnnotationTest.java | 13 +++++++++++-- .../com/mysema/codegen/TestAnnotation.java | 3 ++- .../com/mysema/codegen/TestAnnotation2.java | 18 ++++++++++++++++++ 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/TestAnnotation2.java diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 5f833af0d2..8fa048d547 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -33,6 +33,8 @@ */ public final class JavaWriter implements Appendable, CodeWriter{ + private static final int INDENT_SPACES = 4; + private static final String EXTENDS = " extends "; private static final String IMPLEMENTS = " implements "; @@ -41,8 +43,6 @@ public final class JavaWriter implements Appendable, CodeWriter{ private static final String IMPORT_STATIC = "import static "; - private static final int INDENT_SPACES = 4; - private static final String PACKAGE = "package "; private static final String PRIVATE = "private "; diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index 75570e9cca..e49d53d9f8 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -7,18 +7,27 @@ import org.junit.Test; -@TestAnnotation(prop2 = false) +@TestAnnotation(prop2 = false, clazz = AnnotationTest.class) +@TestAnnotation2("Hello") public class AnnotationTest { + private StringWriter w = new StringWriter(); private CodeWriter writer = new JavaWriter(w); @Test public void testClassAnnotation() throws IOException{ writer.annotation(getClass().getAnnotation(TestAnnotation.class)); - assertEquals("@com.mysema.codegen.TestAnnotation(prop2=false)", w.toString().trim()); + assertEquals("@com.mysema.codegen.TestAnnotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", w.toString().trim()); } + @Test + public void testClassAnnotation2() throws IOException{ + writer.annotation(getClass().getAnnotation(TestAnnotation2.class)); + assertEquals("@com.mysema.codegen.TestAnnotation2(\"Hello\")", w.toString().trim()); + } + + @Test public void testMethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { writer.annotation(getClass().getMethod("testMethodAnnotation").getAnnotation(Test.class)); diff --git a/src/test/java/com/mysema/codegen/TestAnnotation.java b/src/test/java/com/mysema/codegen/TestAnnotation.java index 5641a62b67..c47ce5e576 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation.java +++ b/src/test/java/com/mysema/codegen/TestAnnotation.java @@ -7,7 +7,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Documented @Target( { TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface TestAnnotation { @@ -15,5 +14,7 @@ boolean prop1() default false; boolean prop2(); + + Class clazz(); } diff --git a/src/test/java/com/mysema/codegen/TestAnnotation2.java b/src/test/java/com/mysema/codegen/TestAnnotation2.java new file mode 100644 index 0000000000..7420888f34 --- /dev/null +++ b/src/test/java/com/mysema/codegen/TestAnnotation2.java @@ -0,0 +1,18 @@ +/** + * + */ +package com.mysema.codegen; + +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target( { TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation2 { + + String value(); + +} \ No newline at end of file From f715b9eae1f3890a671acf3692b95d30af29f2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Aug 2010 20:43:52 +0000 Subject: [PATCH 0055/1968] --- src/test/java/com/mysema/codegen/TestAnnotation.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/test/java/com/mysema/codegen/TestAnnotation.java b/src/test/java/com/mysema/codegen/TestAnnotation.java index c47ce5e576..7f3e4f490e 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation.java +++ b/src/test/java/com/mysema/codegen/TestAnnotation.java @@ -2,7 +2,6 @@ import static java.lang.annotation.ElementType.TYPE; -import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; From f68da31101b883f5864b31f1d00d170145287d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Aug 2010 20:46:32 +0000 Subject: [PATCH 0056/1968] --- .../java/com/mysema/codegen/AnnotationTest.java | 8 ++++++++ .../java/com/mysema/codegen/TestAnnotation3.java | 16 ++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/test/java/com/mysema/codegen/TestAnnotation3.java diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index e49d53d9f8..c8c08b3e38 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -4,11 +4,13 @@ import java.io.IOException; import java.io.StringWriter; +import java.lang.annotation.ElementType; import org.junit.Test; @TestAnnotation(prop2 = false, clazz = AnnotationTest.class) @TestAnnotation2("Hello") +@TestAnnotation3(type = ElementType.ANNOTATION_TYPE) public class AnnotationTest { @@ -26,6 +28,12 @@ public void testClassAnnotation2() throws IOException{ writer.annotation(getClass().getAnnotation(TestAnnotation2.class)); assertEquals("@com.mysema.codegen.TestAnnotation2(\"Hello\")", w.toString().trim()); } + + @Test + public void testClassAnnotation3() throws IOException{ + writer.annotation(getClass().getAnnotation(TestAnnotation3.class)); + assertEquals("@com.mysema.codegen.TestAnnotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", w.toString().trim()); + } @Test diff --git a/src/test/java/com/mysema/codegen/TestAnnotation3.java b/src/test/java/com/mysema/codegen/TestAnnotation3.java new file mode 100644 index 0000000000..79c630b47e --- /dev/null +++ b/src/test/java/com/mysema/codegen/TestAnnotation3.java @@ -0,0 +1,16 @@ +package com.mysema.codegen; + +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target( { TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface TestAnnotation3 { + + ElementType type(); + +} From 7ada1f4bb066702bb775e49ba36b50a242ea96b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Aug 2010 21:10:48 +0000 Subject: [PATCH 0057/1968] extended Type --- .../java/com/mysema/codegen/ClassType.java | 93 +++++++++++++++++++ .../java/com/mysema/codegen/ClassUtils.java | 26 +----- .../com/mysema/codegen/EvaluatorFactory.java | 14 +-- src/main/java/com/mysema/codegen/Type.java | 54 +++-------- .../mysema/codegen/ComplexEvaluationTest.java | 6 +- 5 files changed, 115 insertions(+), 78 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/ClassType.java diff --git a/src/main/java/com/mysema/codegen/ClassType.java b/src/main/java/com/mysema/codegen/ClassType.java new file mode 100644 index 0000000000..004a3ecd68 --- /dev/null +++ b/src/main/java/com/mysema/codegen/ClassType.java @@ -0,0 +1,93 @@ +package com.mysema.codegen; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * Type represents a generic type used in code generation + * + * @author tiwe + * + * @param + */ +public class ClassType implements Type { + + private final Class javaClass; + + private final List> parameters; + + public ClassType(Class javaClass, List> parameters) { + this.javaClass = javaClass; + this.parameters = parameters; + } + + public ClassType(Class clazz, Type... parameters) { + this(clazz, Arrays.asList(parameters)); + } + + @Override + public boolean equals(Object o){ + if (o == this){ + return true; + }else if (o instanceof ClassType){ + ClassType t = (ClassType)o; + return t.javaClass.equals(javaClass) && t.parameters.equals(parameters); + }else{ + return false; + } + } + + @Override + public String getGenericName() { + return getGenericName(Collections.emptySet(), Collections.emptySet()); + } + + @Override + public String getGenericName(Set packages, Set classes) { + if (parameters.isEmpty()){ + return ClassUtils.getName(javaClass, packages, classes); + }else{ + StringBuilder builder = new StringBuilder(); + builder.append(ClassUtils.getName(javaClass, packages, classes)); + builder.append("<"); + boolean first = true; + for (Type parameter : parameters){ + builder.append(parameter.getGenericName(packages, classes)); + if (!first){ + builder.append(","); + } + first = false; + } + builder.append(">"); + return builder.toString(); + } + } + + @Override + public String getName() { + return javaClass.getName(); + } + + @Override + public String getPackageName() { + return javaClass.getPackage().getName(); + } + + @Override + public List> getParameters() { + return parameters; + } + + @Override + public String getSimpleName() { + return javaClass.getSimpleName(); + } + + @Override + public int hashCode(){ + return javaClass.hashCode(); + } + +} diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/ClassUtils.java index 271ee65479..b6080aca5c 100644 --- a/src/main/java/com/mysema/codegen/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/ClassUtils.java @@ -30,31 +30,7 @@ public static String getName(Class cl, Set packages, Set clas return cl.getName().replace('$', '.'); } } - - public static String getName(Type cl){ - return getName(cl, Collections.singleton("java.lang"), Collections.emptySet()); - } - - public static String getName(Type type, Set packages, Set classes){ - if (type.getParameters().isEmpty()){ - return getName(type.getJavaClass(), packages, classes); - }else{ - StringBuilder builder = new StringBuilder(); - builder.append(getName(type.getJavaClass(), packages, classes)); - builder.append("<"); - boolean first = true; - for (Type parameter : type.getParameters()){ - builder.append(getName(parameter, packages, classes)); - if (!first){ - builder.append(","); - } - first = false; - } - builder.append(">"); - return builder.toString(); - } - } - + public static Class normalize(Class clazz){ if (List.class.isAssignableFrom(clazz)){ return List.class; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index d1c379fd46..ad968adfd8 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -54,7 +54,7 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } - private void compile(String source, Type projectionType, + private void compile(String source, Class projectionType, String[] names, Type[] types, String id, Map constants) throws IOException { // create source StringWriter writer = new StringWriter(); @@ -62,7 +62,7 @@ private void compile(String source, Type projectionType, javaw.beginClass(id, null); String[] params = new String[names.length]; for (int i = 0; i < params.length; i++) { - params[i] = ClassUtils.getName(types[i]) + " " + names[i]; + params[i] = types[i].getGenericName() + " " + names[i]; } for (Map.Entry entry : constants.entrySet()){ @@ -105,9 +105,9 @@ public Evaluator createEvaluator( Map constants) { Type[] types = new Type[classes.length]; for (int i = 0; i < types.length; i++){ - types[i] = new Type(classes[i]); + types[i] = new ClassType(classes[i]); } - return createEvaluator(source, new Type(projectionType), names, types, classes, constants); + return createEvaluator(source, projectionType, names, types, classes, constants); } /** @@ -123,7 +123,7 @@ public Evaluator createEvaluator( */ public Evaluator createEvaluator( String source, - Type projection, + Class projection, String[] names, Type[] types, Class[] classes, @@ -147,7 +147,7 @@ public Evaluator createEvaluator( } Method method = clazz.getMethod("eval", classes); - return new MethodEvaluator(method, object, projection.getJavaClass()); + return new MethodEvaluator(method, object, projection); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { @@ -168,7 +168,7 @@ public Evaluator createEvaluator( } - protected String toId(String source, Type returnType, Type... types) { + protected String toId(String source, Class returnType, Type... types) { StringBuilder b = new StringBuilder("Q"); b.append("_").append(source.hashCode()); b.append("_").append(returnType.getName().hashCode()); diff --git a/src/main/java/com/mysema/codegen/Type.java b/src/main/java/com/mysema/codegen/Type.java index 2db342dab5..1986d678c7 100644 --- a/src/main/java/com/mysema/codegen/Type.java +++ b/src/main/java/com/mysema/codegen/Type.java @@ -1,57 +1,25 @@ package com.mysema.codegen; -import java.util.Arrays; import java.util.List; +import java.util.Set; /** - * Type represents a generic type used in code generation - * * @author tiwe * * @param */ -public class Type { - - private final Class javaClass; - - private final List> parameters; - - public Type(Class javaClass, List> parameters) { - this.javaClass = javaClass; - this.parameters = parameters; - } - - public Type(Class clazz, Type... parameters) { - this(clazz, Arrays.asList(parameters)); - } +public interface Type { - public Class getJavaClass() { - return javaClass; - } + String getGenericName(); - public List> getParameters() { - return parameters; - } - - public String getName() { - return javaClass.getName(); - } + String getGenericName(Set packages, Set classes); - @Override - public int hashCode(){ - return javaClass.hashCode(); - } + String getName(); + + String getPackageName(); - @Override - public boolean equals(Object o){ - if (o == this){ - return true; - }else if (o instanceof Type){ - Type t = (Type)o; - return t.javaClass.equals(javaClass) && t.parameters.equals(parameters); - }else{ - return false; - } - } + List> getParameters(); -} + String getSimpleName(); + +} \ No newline at end of file diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index 84aaf5ab59..2c009d71b0 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -15,8 +15,8 @@ public class ComplexEvaluationTest { @Test @SuppressWarnings("unchecked") - public void testComplex(){Type stringType = new Type(String.class); - Type resultType = new Type(List.class, stringType); + public void testComplex(){ClassType stringType = new ClassType(String.class); + Type resultType = new ClassType(List.class, stringType); StringBuilder source = new StringBuilder(); source.append("java.util.List rv = new java.util.ArrayList();\n"); source.append("for (String a : a_){\n"); @@ -30,7 +30,7 @@ public class ComplexEvaluationTest { Evaluator evaluator = factory.createEvaluator( source.toString(), - resultType, + List.class, new String[]{"a_","b_"}, new Type[]{resultType, resultType}, new Class[]{List.class,List.class}, From b9749d0cedce478d4fbbd22b8d386e35d4283508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:29:47 +0000 Subject: [PATCH 0058/1968] moved codegen core model from querydsl-core to codegen --- pom.xml | 11 ++ .../mysema/codegen/AbstractCodeWriter.java | 98 ++++++++++ .../java/com/mysema/codegen/ClassType.java | 93 ---------- .../java/com/mysema/codegen/CodeWriter.java | 2 +- .../com/mysema/codegen/EvaluatorFactory.java | 36 ++-- .../java/com/mysema/codegen/JavaWriter.java | 87 ++------- src/main/java/com/mysema/codegen/Type.java | 25 --- .../com/mysema/codegen/model/ClassType.java | 168 +++++++++++++++++ .../com/mysema/codegen/model/Constructor.java | 38 ++++ .../com/mysema/codegen/model/Parameter.java | 49 +++++ .../com/mysema/codegen/model/SimpleType.java | 173 ++++++++++++++++++ .../java/com/mysema/codegen/model/Type.java | 44 +++++ .../com/mysema/codegen/model/TypeAdapter.java | 109 +++++++++++ .../mysema/codegen/model/TypeCategory.java | 137 ++++++++++++++ .../com/mysema/codegen/model/TypeExtends.java | 50 +++++ .../com/mysema/codegen/model/TypeSuper.java | 56 ++++++ .../java/com/mysema/codegen/model/Types.java | 65 +++++++ .../mysema/codegen/model/package-info.java | 13 ++ .../java/com/mysema/codegen/package-info.java | 16 ++ .../codegen/{ => support}/ClassUtils.java | 14 +- .../mysema/codegen/support/package-info.java | 13 ++ .../com/mysema/codegen/AnnotationTest.java | 5 + .../mysema/codegen/ComplexEvaluationTest.java | 16 +- .../mysema/codegen/MemJavaFileObjectTest.java | 5 + .../codegen/MemSourceFileObjectTest.java | 5 + .../mysema/codegen/SimpleCompilerTest.java | 5 + .../com/mysema/codegen/TestAnnotation.java | 5 + .../com/mysema/codegen/TestAnnotation3.java | 5 + .../codegen/model/TypeCategoryTest.java | 22 +++ .../com/mysema/codegen/model/TypeTest.java | 169 +++++++++++++++++ .../codegen/{ => support}/ClassUtilsTest.java | 7 +- 31 files changed, 1324 insertions(+), 217 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/AbstractCodeWriter.java delete mode 100644 src/main/java/com/mysema/codegen/ClassType.java delete mode 100644 src/main/java/com/mysema/codegen/Type.java create mode 100644 src/main/java/com/mysema/codegen/model/ClassType.java create mode 100644 src/main/java/com/mysema/codegen/model/Constructor.java create mode 100644 src/main/java/com/mysema/codegen/model/Parameter.java create mode 100644 src/main/java/com/mysema/codegen/model/SimpleType.java create mode 100644 src/main/java/com/mysema/codegen/model/Type.java create mode 100644 src/main/java/com/mysema/codegen/model/TypeAdapter.java create mode 100644 src/main/java/com/mysema/codegen/model/TypeCategory.java create mode 100644 src/main/java/com/mysema/codegen/model/TypeExtends.java create mode 100644 src/main/java/com/mysema/codegen/model/TypeSuper.java create mode 100644 src/main/java/com/mysema/codegen/model/Types.java create mode 100644 src/main/java/com/mysema/codegen/model/package-info.java create mode 100644 src/main/java/com/mysema/codegen/package-info.java rename src/main/java/com/mysema/codegen/{ => support}/ClassUtils.java (66%) create mode 100644 src/main/java/com/mysema/codegen/support/package-info.java create mode 100644 src/test/java/com/mysema/codegen/model/TypeCategoryTest.java create mode 100644 src/test/java/com/mysema/codegen/model/TypeTest.java rename src/test/java/com/mysema/codegen/{ => support}/ClassUtilsTest.java (89%) diff --git a/pom.xml b/pom.xml index 021fdf3286..db6dbcbf5a 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,17 @@ 2.4 + + net.sourceforge.findbugs + jsr305 + 1.3.2 + + + net.sourceforge.findbugs + annotations + 1.3.2 + + junit diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java new file mode 100644 index 0000000000..ea4401e55f --- /dev/null +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import static com.mysema.codegen.Symbols.NEWLINE; +import static com.mysema.codegen.Symbols.SEMICOLON; + +import java.io.IOException; + + + +/** + * @author tiwe + * + * @param + */ +public abstract class AbstractCodeWriter> implements Appendable, CodeWriter{ + + private static final int INDENT_SPACES = 4; + + private final Appendable appendable; + + private String indent = ""; + + @SuppressWarnings("unchecked") + private final T self = (T)this; + + public AbstractCodeWriter(Appendable appendable){ + if (appendable == null){ + throw new IllegalArgumentException("appendable is null"); + } + this.appendable = appendable; + } + + + @Override + public T append(char c) throws IOException { + appendable.append(c); + return self; + } + + @Override + public T append(CharSequence csq) throws IOException { + appendable.append(csq); + return self; + } + + @Override + public T append(CharSequence csq, int start, int end) throws IOException { + appendable.append(csq, start, end); + return self; + } + + @Override + public T beginLine(String... segments) throws IOException { + append(indent); + for (String segment : segments){ + append(segment); + } + return self; + } + + protected T goIn(){ + indent += " "; + return self; + } + + + protected T goOut(){ + if (indent.length() >= INDENT_SPACES){ + indent = indent.substring(0, indent.length() - INDENT_SPACES); + } + return self; + } + + @Override + public T line(String... segments) throws IOException{ + append(indent); + for (String segment : segments){ + append(segment); + } + return nl(); + } + + @Override + public T nl() throws IOException { + return append(NEWLINE); + } + + + protected T stmt(String stmt) throws IOException{ + return line(stmt + SEMICOLON); + } + +} diff --git a/src/main/java/com/mysema/codegen/ClassType.java b/src/main/java/com/mysema/codegen/ClassType.java deleted file mode 100644 index 004a3ecd68..0000000000 --- a/src/main/java/com/mysema/codegen/ClassType.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.mysema.codegen; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -/** - * Type represents a generic type used in code generation - * - * @author tiwe - * - * @param - */ -public class ClassType implements Type { - - private final Class javaClass; - - private final List> parameters; - - public ClassType(Class javaClass, List> parameters) { - this.javaClass = javaClass; - this.parameters = parameters; - } - - public ClassType(Class clazz, Type... parameters) { - this(clazz, Arrays.asList(parameters)); - } - - @Override - public boolean equals(Object o){ - if (o == this){ - return true; - }else if (o instanceof ClassType){ - ClassType t = (ClassType)o; - return t.javaClass.equals(javaClass) && t.parameters.equals(parameters); - }else{ - return false; - } - } - - @Override - public String getGenericName() { - return getGenericName(Collections.emptySet(), Collections.emptySet()); - } - - @Override - public String getGenericName(Set packages, Set classes) { - if (parameters.isEmpty()){ - return ClassUtils.getName(javaClass, packages, classes); - }else{ - StringBuilder builder = new StringBuilder(); - builder.append(ClassUtils.getName(javaClass, packages, classes)); - builder.append("<"); - boolean first = true; - for (Type parameter : parameters){ - builder.append(parameter.getGenericName(packages, classes)); - if (!first){ - builder.append(","); - } - first = false; - } - builder.append(">"); - return builder.toString(); - } - } - - @Override - public String getName() { - return javaClass.getName(); - } - - @Override - public String getPackageName() { - return javaClass.getPackage().getName(); - } - - @Override - public List> getParameters() { - return parameters; - } - - @Override - public String getSimpleName() { - return javaClass.getSimpleName(); - } - - @Override - public int hashCode(){ - return javaClass.hashCode(); - } - -} diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index b6198e7e7b..d8a4e8b275 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -33,7 +33,7 @@ public interface CodeWriter extends Appendable{ CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; - JavaWriter beginLine(String... segments) throws IOException; + CodeWriter beginLine(String... segments) throws IOException; CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index ad968adfd8..3d658a6ddd 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -23,6 +23,12 @@ import javax.tools.ToolProvider; import javax.tools.JavaCompiler.CompilationTask; +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; +import com.mysema.codegen.support.ClassUtils; + + /** * EvaluatorFactory is a factory implementation for creating Evaluator instances @@ -54,15 +60,15 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } - private void compile(String source, Class projectionType, - String[] names, Type[] types, String id, Map constants) throws IOException { + private void compile(String source, Type projectionType, + String[] names, Type[] types, String id, Map constants) throws IOException { // create source StringWriter writer = new StringWriter(); JavaWriter javaw = new JavaWriter(writer); javaw.beginClass(id, null); String[] params = new String[names.length]; for (int i = 0; i < params.length; i++) { - params[i] = types[i].getGenericName() + " " + names[i]; + params[i] = types[i].getGenericName(true) + " " + names[i]; } for (Map.Entry entry : constants.entrySet()){ @@ -71,9 +77,9 @@ private void compile(String source, Class projectionType, } if (constants.isEmpty()){ - javaw.beginStaticMethod(ClassUtils.getName(projectionType), "eval", params); + javaw.beginStaticMethod(projectionType.getGenericName(false), "eval", params); }else{ - javaw.beginPublicMethod(ClassUtils.getName(projectionType), "eval", params); + javaw.beginPublicMethod(projectionType.getGenericName(false), "eval", params); } javaw.append(source); javaw.end(); @@ -103,11 +109,11 @@ public Evaluator createEvaluator( String[] names, Class[] classes, Map constants) { - Type[] types = new Type[classes.length]; + Type[] types = new Type[classes.length]; for (int i = 0; i < types.length; i++){ - types[i] = new ClassType(classes[i]); + types[i] = new ClassType(TypeCategory.SIMPLE,classes[i]); } - return createEvaluator(source, projectionType, names, types, classes, constants); + return createEvaluator(source, new ClassType(TypeCategory.SIMPLE,projectionType), names, types, classes, constants); } /** @@ -123,13 +129,13 @@ public Evaluator createEvaluator( */ public Evaluator createEvaluator( String source, - Class projection, + ClassType projection, String[] names, - Type[] types, + Type[] types, Class[] classes, Map constants) { try { - String id = toId(source, projection, types); + String id = toId(source, projection.getJavaClass(), types); Class clazz; try{ clazz = loader.loadClass(id); @@ -147,7 +153,7 @@ public Evaluator createEvaluator( } Method method = clazz.getMethod("eval", classes); - return new MethodEvaluator(method, object, projection); + return new MethodEvaluator(method, object, projection.getJavaClass()); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { @@ -168,12 +174,12 @@ public Evaluator createEvaluator( } - protected String toId(String source, Class returnType, Type... types) { + protected String toId(String source, Class returnType, Type... types) { StringBuilder b = new StringBuilder("Q"); b.append("_").append(source.hashCode()); b.append("_").append(returnType.getName().hashCode()); - for (Type type : types) { - b.append("_").append(type.getName().hashCode()); + for (Type type : types) { + b.append("_").append(type.getFullName().hashCode()); } return b.toString().replace('-', '0'); } diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 8fa048d547..3e2185d9c8 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -8,7 +8,6 @@ import static com.mysema.codegen.Symbols.ASSIGN; import static com.mysema.codegen.Symbols.COMMA; import static com.mysema.codegen.Symbols.DOT; -import static com.mysema.codegen.Symbols.NEWLINE; import static com.mysema.codegen.Symbols.QUOTE; import static com.mysema.codegen.Symbols.SEMICOLON; import static com.mysema.codegen.Symbols.SPACE; @@ -25,15 +24,14 @@ import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; + /** * JavaWriter is the default implementation of the CodeWriter interface * * @author tiwe * */ -public final class JavaWriter implements Appendable, CodeWriter{ - - private static final int INDENT_SPACES = 4; +public final class JavaWriter extends AbstractCodeWriter{ private static final String EXTENDS = " extends "; @@ -65,27 +63,20 @@ public final class JavaWriter implements Appendable, CodeWriter{ private static final String PUBLIC_STATIC_FINAL = "public static final "; - private final Appendable appendable; - private final Set importedClasses = new HashSet(); private final Set importedPackages = new HashSet(); - private String indent = ""; - private String type; public JavaWriter(Appendable appendable){ - if (appendable == null){ - throw new IllegalArgumentException("appendable is null"); - } - this.appendable = appendable; + super(appendable); this.importedPackages.add("java.lang"); } @Override public JavaWriter annotation(Annotation annotation) throws IOException { - append(indent).append("@").appendType(annotation.annotationType()); + beginLine().append("@").appendType(annotation.annotationType()); Method[] methods = annotation.annotationType().getDeclaredMethods(); if (methods.length == 1 && methods[0].getName().equals("value")){ try { @@ -133,7 +124,7 @@ public JavaWriter annotation(Annotation annotation) throws IOException { @Override public JavaWriter annotation(Class annotation) throws IOException{ - return append(indent).append("@").appendType(annotation).nl(); + return beginLine().append("@").appendType(annotation).nl(); } @SuppressWarnings("unchecked") @@ -152,25 +143,6 @@ private void annotationConstant(Object value) throws IOException{ } } - - @Override - public JavaWriter append(char c) throws IOException { - appendable.append(c); - return this; - } - - @Override - public JavaWriter append(CharSequence csq) throws IOException { - appendable.append(csq); - return this; - } - - @Override - public JavaWriter append(CharSequence csq, int start, int end) throws IOException { - appendable.append(csq, start, end); - return this; - } - private JavaWriter appendType(Class type) throws IOException{ if (importedClasses.contains(type.getName()) || importedPackages.contains(type.getPackage().getName())){ append(type.getSimpleName()); @@ -186,7 +158,7 @@ public JavaWriter beginClass(String simpleName) throws IOException{ @Override public JavaWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException{ - append(indent + PUBLIC_CLASS + simpleName); + beginLine(PUBLIC_CLASS + simpleName); if (superClass != null){ append(EXTENDS + superClass); } @@ -206,19 +178,19 @@ public JavaWriter beginClass(String simpleName, String superClass, String... int @Override public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { - append(indent + PUBLIC + type).params(parameters, transformer).append(" {").nl(); + beginLine(PUBLIC + type).params(parameters, transformer).append(" {").nl(); return goIn(); } @Override public JavaWriter beginConstructor(String... parameters) throws IOException{ - append(indent + PUBLIC + type).params(parameters).append(" {").nl(); + beginLine(PUBLIC + type).params(parameters).append(" {").nl(); return goIn(); } @Override public JavaWriter beginInterface(String simpleName, String... interfaces) throws IOException { - append(indent + PUBLIC_INTERFACE + simpleName); + beginLine(PUBLIC_INTERFACE + simpleName); if (interfaces.length > 0){ append(EXTENDS); append(StringUtils.join(interfaces, COMMA)); @@ -234,17 +206,10 @@ public JavaWriter beginInterface(String simpleName, String... interfaces) throws } - @Override - public JavaWriter beginLine(String... segments) throws IOException { - append(indent); - for (String segment : segments){ - append(segment); - } - return this; - } + private JavaWriter beginMethod(String modifiers, String returnType, String methodName, String... args) throws IOException{ - append(indent + modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); + beginLine(modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); return goIn(); } @@ -287,18 +252,6 @@ private JavaWriter field(String modifier, String type, String name, String value return stmt(modifier + type + SPACE + name + ASSIGN + value).nl(); } - private JavaWriter goIn(){ - indent += " "; - return this; - } - - private JavaWriter goOut(){ - if (indent.length() >= INDENT_SPACES){ - indent = indent.substring(0, indent.length() - INDENT_SPACES); - } - return this; - } - @Override public JavaWriter imports(Class... imports) throws IOException{ for (Class cl : imports){ @@ -347,20 +300,6 @@ public JavaWriter javadoc(String... lines) throws IOException { } return line(" */"); } - - @Override - public JavaWriter line(String... segments) throws IOException{ - append(indent); - for (String segment : segments){ - append(segment); - } - return nl(); - } - - @Override - public JavaWriter nl() throws IOException { - return append(NEWLINE); - } @Override public JavaWriter packageDecl(String packageName) throws IOException{ @@ -451,10 +390,6 @@ public JavaWriter staticimports(Class... imports) throws IOException{ } return this; } - - private JavaWriter stmt(String stmt) throws IOException{ - return line(stmt + SEMICOLON); - } @Override public JavaWriter suppressWarnings(String type) throws IOException{ diff --git a/src/main/java/com/mysema/codegen/Type.java b/src/main/java/com/mysema/codegen/Type.java deleted file mode 100644 index 1986d678c7..0000000000 --- a/src/main/java/com/mysema/codegen/Type.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.mysema.codegen; - -import java.util.List; -import java.util.Set; - -/** - * @author tiwe - * - * @param - */ -public interface Type { - - String getGenericName(); - - String getGenericName(Set packages, Set classes); - - String getName(); - - String getPackageName(); - - List> getParameters(); - - String getSimpleName(); - -} \ No newline at end of file diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java new file mode 100644 index 0000000000..4a2a42f59e --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import com.mysema.codegen.support.ClassUtils; + +/** + * @author tiwe + * + * @param + */ +public class ClassType implements Type { + + private final TypeCategory category; + + private final Class javaClass; + + private final List parameters; + + private final Class primitiveClass; + + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { + this(category, javaClass, primitiveClass, Collections.emptyList()); + } + + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass, List parameters) { + this.category = category; + this.javaClass = javaClass; + this.primitiveClass = primitiveClass; + this.parameters = parameters; + } + + public ClassType(TypeCategory category, Class javaClass, List parameters) { + this(category, javaClass, null, parameters); + } + + public ClassType(TypeCategory category, Class clazz, Type... parameters) { + this(category, clazz, null, Arrays.asList(parameters)); + } + + @Override + public Type as(TypeCategory c) { + if (category == c){ + return this; + }else{ + return new ClassType(c, javaClass); + } + } + + @Override + public Type asArrayType() { + String fullName = javaClass.getName()+"[]"; + String simpleName = javaClass.getSimpleName()+"[]"; + return new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + } + + + @Override + public boolean equals(Object o){ + if (o == this){ + return true; + }else if (o instanceof Type){ + Type t = (Type)o; + return t.getFullName().equals(javaClass.getName()) && t.getParameters().equals(parameters); + }else{ + return false; + } + } + + public TypeCategory getCategory() { + return category; + } + + @Override + public String getFullName() { + return javaClass.getName(); + } + + @Override + public String getGenericName(boolean asArgType) { + return getGenericName(asArgType, Collections.emptySet(), Collections.emptySet()); + } + + @Override + public String getGenericName(boolean asArgType, Set packages, Set classes) { + if (parameters.isEmpty()){ + return ClassUtils.getName(javaClass, packages, classes); + }else{ + StringBuilder builder = new StringBuilder(); + builder.append(ClassUtils.getName(javaClass, packages, classes)); + builder.append("<"); + boolean first = true; + for (Type parameter : parameters){ + if (!first){ + builder.append(","); + } + if (parameter == null || parameter.equals(this)){ + builder.append("?"); + }else{ + builder.append(parameter.getGenericName(true, packages, classes)); + } + first = false; + } + builder.append(">"); + return builder.toString(); + } + } + + public Class getJavaClass() { + return javaClass; + } + + @Override + public String getPackageName() { + return javaClass.getPackage().getName(); + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public String getPrimitiveName() { + return primitiveClass != null ? primitiveClass.getName() : null; + } + + @Override + public String getRawName(Set packages, Set classes) { + return ClassUtils.getName(javaClass, packages, classes); + } + + @Override + public String getSimpleName() { + return javaClass.getSimpleName(); + } + + @Override + public int hashCode(){ + return javaClass.getName().hashCode(); + } + + @Override + public boolean isFinal() { + return Modifier.isFinal(javaClass.getModifiers()); + } + + @Override + public boolean isPrimitive() { +// return javaClass.isPrimitive(); + return primitiveClass != null; + } + + public String toString(){ + return getGenericName(true); + } + + +} diff --git a/src/main/java/com/mysema/codegen/model/Constructor.java b/src/main/java/com/mysema/codegen/model/Constructor.java new file mode 100644 index 0000000000..b4a3ba9c60 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/Constructor.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.Collection; + +public final class Constructor { + + private final Collection parameters; + + public Constructor(Collection params) { + parameters = params; + } + + @Override + public boolean equals(Object o){ + if (o == this){ + return true; + }else if (o instanceof Constructor){ + return ((Constructor)o).parameters.equals(parameters); + }else{ + return false; + } + } + + public Collection getParameters() { + return parameters; + } + + @Override + public int hashCode(){ + return parameters.hashCode(); + } + +} diff --git a/src/main/java/com/mysema/codegen/model/Parameter.java b/src/main/java/com/mysema/codegen/model/Parameter.java new file mode 100644 index 0000000000..975dabd649 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/Parameter.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +/** + * Parameter represents a parameter in a Constructor + * + * @author tiwe + * @version $Id$ + */ +public final class Parameter { + + private final String name; + + private final Type type; + + public Parameter(String name, Type type) { + this.name = name; + this.type = type; + } + + @Override + public boolean equals(Object o) { + if (o == this){ + return true; + }else if (o instanceof Parameter){ + return type.equals(((Parameter) o).type); + }else{ + return false; + } + } + + public String getName() { + return name; + } + + public Type getType(){ + return type; + } + + @Override + public int hashCode() { + return type.hashCode(); + } + +} diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java new file mode 100644 index 0000000000..9c2f5e1e78 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Set; + + +/** + * @author tiwe + * + * @param + */ +public class SimpleType implements Type { + + private final TypeCategory category; + + private final String fullName, packageName, simpleName, localName; + + private final List parameters; + + private final boolean primitiveClass, finalClass; + + public SimpleType(Type type, Type... parameters) { + this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), + type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); + } + + public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, + boolean primitiveClass, boolean finalClass, + List parameters) { + this.category = category; + this.fullName = fullName; + this.packageName = packageName; + this.simpleName = simpleName; + if (packageName.length() > 0){ + this.localName = fullName.substring(packageName.length()+1); + }else{ + this.localName = fullName; + } + this.primitiveClass = primitiveClass; + this.finalClass = finalClass; + this.parameters = parameters; + } + + public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, + boolean p, boolean f, Type... parameters) { + this(typeCategory, fullName, packageName, simpleName, p, f, Arrays + .asList(parameters)); + } + + @Override + public Type as(TypeCategory c) { + if (category != c){ + return new SimpleType(c, fullName, packageName, simpleName, primitiveClass, finalClass, parameters); + }else{ + return this; + } + } + + @Override + public Type asArrayType() { + String fullName = getFullName()+"[]"; + String simpleName = getSimpleName()+"[]"; + return new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + } + + + @Override + public boolean equals(Object o){ + if (o == this){ + return true; + }else if (o instanceof Type){ + Type t = (Type)o; + return t.getFullName().equals(fullName) && t.getParameters().equals(parameters); + }else{ + return false; + } + } + + public TypeCategory getCategory() { + return category; + } + + @Override + public String getFullName() { + return fullName; + } + + @Override + public String getGenericName(boolean asArgType) { + return getGenericName(asArgType, Collections.emptySet(), Collections.emptySet()); + } + + @Override + public String getGenericName(boolean asArgType, Set packages, Set classes) { + if (parameters.isEmpty()){ + return getRawName(packages, classes); + }else{ + StringBuilder builder = new StringBuilder(); + builder.append(getRawName(packages, classes)); + builder.append("<"); + boolean first = true; + for (Type parameter : parameters){ + if (!first){ + builder.append(","); + } + if (parameter == null || parameter.equals(this)){ + builder.append("?"); + }else{ + builder.append(parameter.getGenericName(true, packages, classes)); + } + first = false; + } + builder.append(">"); + return builder.toString(); + } + } + + @Override + public String getPackageName() { + return packageName; + } + + @Override + public List getParameters() { + return parameters; + } + + @Override + public String getPrimitiveName() { + return null; + } + + @Override + public String getRawName(Set packages, Set classes) { + if (packages.contains(packageName) || classes.contains(fullName)){ + return localName; + }else{ + return fullName; + } + } + + @Override + public String getSimpleName() { + return simpleName; + } + + @Override + public int hashCode(){ + return fullName.hashCode(); + } + + @Override + public boolean isFinal() { + return finalClass; + } + + @Override + public boolean isPrimitive() { + return primitiveClass; + } + + public String toString(){ + return getGenericName(true); + } + +} diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java new file mode 100644 index 0000000000..0ca4f37b50 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.List; +import java.util.Set; + +/** + * @author tiwe + * + * @param + */ +public interface Type { + + Type as(TypeCategory category); + + Type asArrayType(); + + TypeCategory getCategory(); + + String getFullName(); + + String getGenericName(boolean asArgType); + + String getGenericName(boolean asArgType, Set packages, Set classes); + + String getPackageName(); + + List getParameters(); + + String getPrimitiveName(); + + String getRawName(Set packages, Set classes); + + String getSimpleName(); + + boolean isFinal(); + + boolean isPrimitive(); + +} \ No newline at end of file diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java new file mode 100644 index 0000000000..b11be2437e --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.List; +import java.util.Set; + +/** + * TypeAdapter is a basic adapter implementation for the Type interface + * + * @author tiwe + * + */ +public class TypeAdapter implements Type{ + + private final Type type; + + public TypeAdapter(Type type){ + this.type = type; + } + + @Override + public Type as(TypeCategory category) { + return type.as(category); + } + + @Override + public Type asArrayType() { + return type.asArrayType(); + } + + @Override + public boolean equals(Object o){ + return type.equals(o); + } + + @Override + public TypeCategory getCategory() { + return type.getCategory(); + } + + @Override + public String getFullName() { + return type.getFullName(); + } + + @Override + public String getGenericName(boolean asArgType) { + return type.getGenericName(asArgType); + } + + @Override + public String getGenericName(boolean asArgType, Set packages, Set classes) { + return type.getGenericName(asArgType, packages, classes); + } + + @Override + public String getPackageName() { + return type.getPackageName(); + } + + @Override + public List getParameters() { + return type.getParameters(); + } + + @Override + public String getPrimitiveName() { + return type.getPrimitiveName(); + } + + @Override + public String getRawName(Set packages, Set classes) { + return type.getRawName(packages, classes); + } + + @Override + public String getSimpleName() { + return type.getSimpleName(); + } + + protected Type getType(){ + return type; + } + + @Override + public int hashCode(){ + return type.hashCode(); + } + + @Override + public boolean isFinal() { + return type.isFinal(); + } + + @Override + public boolean isPrimitive() { + return type.isPrimitive(); + } + + @Override + public String toString() { + return type.toString(); + } + +} diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java new file mode 100644 index 0000000000..720bb06301 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.HashSet; +import java.util.Set; + +/** + * TypeCategory defines the expression type used for a Field + * + * @author tiwe + * + */ +public enum TypeCategory { + /** + * + */ + SIMPLE(null), + /** + * + */ + MAP(null), + /** + * + */ + COLLECTION(null), + /** + * + */ + LIST(COLLECTION), + /** + * + */ + SET(COLLECTION), + /** + * + */ + ARRAY(null), + /** + * + */ + COMPARABLE(SIMPLE), + /** + * + */ + BOOLEAN(COMPARABLE, Boolean.class.getName()), + /** + * + */ + DATE(COMPARABLE, java.sql.Date.class.getName(), "org.joda.time.LocalDate"), + /** + * + */ + DATETIME(COMPARABLE, + java.util.Calendar.class.getName(), + java.util.Date.class.getName(), + java.sql.Timestamp.class.getName(), + "org.joda.time.LocalDateTime", + "org.joda.time.Instant", + "org.joda.time.DateTime", + "org.joda.time.DateMidnight"), + /** + * + */ + CUSTOM(null), + + /** + * + */ + ENTITY(null), + + /** + * + */ + NUMERIC(COMPARABLE), + /** + * + */ + STRING(COMPARABLE, String.class.getName()), + /** + * + */ + TIME(COMPARABLE, java.sql.Time.class.getName(), "org.joda.time.LocalTime"); + + private final TypeCategory superType; + + private final Set types; + + TypeCategory(TypeCategory superType, String... types){ + this.superType = superType; + this.types = new HashSet(types.length); + for (String type : types){ + this.types.add(type); + } + } + + public TypeCategory getSuperType() { + return superType; + } + + public boolean supports(Class cl){ + return supports(cl.getName()); + } + + public boolean supports(String className){ + return types.contains(className); + } + + /** + * transitive and reflexive subCategoryOf check + * + * @param ancestor + * @return + */ + public boolean isSubCategoryOf(TypeCategory ancestor){ + if (this == ancestor){ + return true; + }else if (superType == null){ + return false; + }else{ + return superType == ancestor || superType.isSubCategoryOf(ancestor); + } + } + + public static TypeCategory get(String className){ + for (TypeCategory category : values()){ + if (category.supports(className)){ + return category; + } + } + return SIMPLE; + } + +} diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java new file mode 100644 index 0000000000..65403ee13a --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.Set; + +/** + * @author tiwe + * + */ +public class TypeExtends extends TypeAdapter{ + + private final String varName; + + public TypeExtends(String varName, Type type) { + super(type); + this.varName = varName; + } + + public TypeExtends(Type type) { + super(type); + varName = null; + } + + @Override + public String getGenericName(boolean asArgType){ + if (!asArgType){ + return "? extends " + super.getGenericName(true); + }else{ + return super.getGenericName(asArgType); + } + } + + @Override + public String getGenericName(boolean asArgType, Set packages, Set classes){ + if (!asArgType){ + return "? extends " + super.getGenericName(true, packages, classes); + }else{ + return super.getGenericName(asArgType, packages, classes); + } + } + + public String getVarName(){ + return varName; + } + +} diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java new file mode 100644 index 0000000000..7845b4de78 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.util.Set; + + +/** + * TypeSuper is a Type for type variables and wildcard types + * + * @author tiwe + * + */ +public class TypeSuper extends TypeAdapter{ + + private final Type superType; + + private final String varName; + + public TypeSuper(String varName, Type type) { + super(Types.OBJECT); + this.superType = type; + this.varName = varName; + } + + public TypeSuper(Type type) { + super(Types.OBJECT); + this.superType = type; + this.varName = null; + } + + @Override + public String getGenericName(boolean asArgType){ + if (!asArgType){ + return "? super " + superType.getGenericName(true); + }else{ + return super.getGenericName(asArgType); + } + } + + @Override + public String getGenericName(boolean asArgType, Set packages, Set classes){ + if (!asArgType){ + return "? super " + superType.getGenericName(true, packages, classes); + }else{ + return super.getGenericName(asArgType, packages, classes); + } + } + + public String getVarName(){ + return varName; + } +} diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java new file mode 100644 index 0000000000..2b3b8434d3 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.URI; +import java.util.Collection; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +/** + * @author tiwe + * + */ +public final class Types { + + public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE,Object.class); + + public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY,Object[].class); + + public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC,BigDecimal.class); + + public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC,BigInteger.class); + + public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN,Boolean.class, boolean.class); + + public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC,Byte.class, byte.class); + + public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE,Character.class, char.class); + + public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); + + public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC,Double.class, double.class); + + public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC,Float.class, float.class); + + public static final ClassType INT = new ClassType(TypeCategory.NUMERIC,Integer.class, int.class); + + public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, OBJECT); + + public static final ClassType LIST = new ClassType(TypeCategory.LIST, List.class, OBJECT); + + public static final ClassType LOCALE = new ClassType(TypeCategory.SIMPLE, Locale.class); + + public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC,Long.class, long.class); + + public static final ClassType MAP = new ClassType(TypeCategory.MAP, Map.class, OBJECT, OBJECT); + + public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); + + public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC,Short.class, short.class); + + public static final ClassType STRING = new ClassType(TypeCategory.STRING,String.class); + + public static final ClassType URI = new ClassType(TypeCategory.COMPARABLE,URI.class); + + private Types(){} + +} \ No newline at end of file diff --git a/src/main/java/com/mysema/codegen/model/package-info.java b/src/main/java/com/mysema/codegen/model/package-info.java new file mode 100644 index 0000000000..b23fd4eeb1 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/package-info.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ + +@DefaultAnnotation( { Nonnull.class }) +package com.mysema.codegen.model; + +import javax.annotation.Nonnull; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; + diff --git a/src/main/java/com/mysema/codegen/package-info.java b/src/main/java/com/mysema/codegen/package-info.java new file mode 100644 index 0000000000..cb8076bbc9 --- /dev/null +++ b/src/main/java/com/mysema/codegen/package-info.java @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ + +/** + * Alias functionality + */ +@DefaultAnnotation( { Nonnull.class }) +package com.mysema.codegen; + +import javax.annotation.Nonnull; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; + diff --git a/src/main/java/com/mysema/codegen/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java similarity index 66% rename from src/main/java/com/mysema/codegen/ClassUtils.java rename to src/main/java/com/mysema/codegen/support/ClassUtils.java index b6080aca5c..0928346376 100644 --- a/src/main/java/com/mysema/codegen/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -3,7 +3,7 @@ * All rights reserved. * */ -package com.mysema.codegen; +package com.mysema.codegen.support; import java.util.Collection; import java.util.Collections; @@ -24,8 +24,16 @@ public static String getName(Class cl){ public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; - } else if (cl.getPackage() == null || packages.contains(cl.getPackage().getName()) || classes.contains(cl.getName())) { - return cl.getSimpleName().replace('$', '.'); + } else if (cl.getPackage() == null + || cl.getPackage().getName().equals("java.lang") + || packages.contains(cl.getPackage().getName()) + || classes.contains(cl.getName())) { + if (cl.getPackage() != null){ + String localName = cl.getName().substring(cl.getPackage().getName().length()+1); + return localName.replace('$', '.'); + }else{ + return cl.getSimpleName().replace('$', '.'); + } } else { return cl.getName().replace('$', '.'); } diff --git a/src/main/java/com/mysema/codegen/support/package-info.java b/src/main/java/com/mysema/codegen/support/package-info.java new file mode 100644 index 0000000000..073460b195 --- /dev/null +++ b/src/main/java/com/mysema/codegen/support/package-info.java @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ + +@DefaultAnnotation( { Nonnull.class }) +package com.mysema.codegen.support; + +import javax.annotation.Nonnull; + +import edu.umd.cs.findbugs.annotations.DefaultAnnotation; + diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index c8c08b3e38..db32d646c1 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static org.junit.Assert.assertEquals; diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index 2c009d71b0..2c05a7ecd7 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static org.junit.Assert.*; @@ -9,14 +14,19 @@ import org.junit.Test; +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; + + public class ComplexEvaluationTest { private EvaluatorFactory factory = new EvaluatorFactory((URLClassLoader) getClass().getClassLoader()); @Test @SuppressWarnings("unchecked") - public void testComplex(){ClassType stringType = new ClassType(String.class); - Type resultType = new ClassType(List.class, stringType); + public void testComplex(){ClassType stringType = new ClassType(TypeCategory.STRING,String.class); + ClassType resultType = new ClassType(TypeCategory.LIST,List.class, stringType); StringBuilder source = new StringBuilder(); source.append("java.util.List rv = new java.util.ArrayList();\n"); source.append("for (String a : a_){\n"); @@ -30,7 +40,7 @@ public class ComplexEvaluationTest { Evaluator evaluator = factory.createEvaluator( source.toString(), - List.class, + resultType, new String[]{"a_","b_"}, new Type[]{resultType, resultType}, new Class[]{List.class,List.class}, diff --git a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java index a60eac4e1e..07f752efa6 100644 --- a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static org.junit.Assert.assertEquals; diff --git a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java index 75e26eb66e..cf8ee8358b 100644 --- a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static org.junit.Assert.*; diff --git a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java index 4792c0fdd2..7b223ffd26 100644 --- a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java +++ b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import java.io.File; diff --git a/src/test/java/com/mysema/codegen/TestAnnotation.java b/src/test/java/com/mysema/codegen/TestAnnotation.java index 7f3e4f490e..43e2f6bf6a 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation.java +++ b/src/test/java/com/mysema/codegen/TestAnnotation.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static java.lang.annotation.ElementType.TYPE; diff --git a/src/test/java/com/mysema/codegen/TestAnnotation3.java b/src/test/java/com/mysema/codegen/TestAnnotation3.java index 79c630b47e..ff36d953b4 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation3.java +++ b/src/test/java/com/mysema/codegen/TestAnnotation3.java @@ -1,3 +1,8 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ package com.mysema.codegen; import static java.lang.annotation.ElementType.TYPE; diff --git a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java new file mode 100644 index 0000000000..d5f9898488 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import static org.junit.Assert.*; + +import org.junit.Test; + +public class TypeCategoryTest { + + @Test + public void testIsSubCategoryOf() { + assertTrue(TypeCategory.BOOLEAN.isSubCategoryOf(TypeCategory.COMPARABLE)); + assertTrue(TypeCategory.STRING.isSubCategoryOf(TypeCategory.COMPARABLE)); + assertTrue(TypeCategory.NUMERIC.isSubCategoryOf(TypeCategory.COMPARABLE)); + assertTrue(TypeCategory.COMPARABLE.isSubCategoryOf(TypeCategory.SIMPLE)); + } + +} diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java new file mode 100644 index 0000000000..050834d9a1 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.Collections; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import org.junit.Test; + +public class TypeTest { + + private Set emptyStrings = Collections.emptySet(); + + private ClassType locale = new ClassType(TypeCategory.SIMPLE,Locale.class); + + private Type locale2 = new SimpleType(locale); + + private Type stringList = new ClassType(TypeCategory.LIST, List.class, Types.STRING); + + private Type stringList2 = new SimpleType(Types.LIST, Types.STRING); + + private Type stringMap = new ClassType(TypeCategory.MAP, Map.class, Types.STRING, Types.STRING); + + private Type stringMap2 = new SimpleType(Types.MAP, Types.STRING, Types.STRING); + + @Test + public void testEquals(){ + assertEquals(locale, locale2); + assertEquals(locale2, locale); + assertEquals(stringList, stringList2); + assertEquals(stringList2, stringList); + } + + @Test + public void testHashcode(){ + assertEquals(locale.hashCode(), locale2.hashCode()); + assertEquals(stringList.hashCode(), stringList2.hashCode()); + } + + @Test + public void testGetGenericNameBoolean() { + assertEquals("java.util.Locale",locale.getGenericName(true)); + assertEquals("java.util.Locale",locale2.getGenericName(true)); + assertEquals("java.util.List",stringList.getGenericName(true)); + assertEquals("java.util.List",stringList2.getGenericName(true)); + assertEquals("java.util.Map", stringMap.getGenericName(true)); + assertEquals("java.util.Map", stringMap2.getGenericName(true)); + } + + @Test + public void testGetRawName() { + assertEquals("java.util.Locale",locale.getRawName(emptyStrings,emptyStrings)); + assertEquals("java.util.Locale",locale2.getRawName(emptyStrings,emptyStrings)); + assertEquals("java.util.List",stringList.getRawName(emptyStrings,emptyStrings)); + assertEquals("java.util.List",stringList2.getRawName(emptyStrings,emptyStrings)); + } + + @Test + public void testGetGenericNameBooleanSetOfStringSetOfString() { + assertEquals("java.util.Locale",locale.getGenericName(true, emptyStrings, emptyStrings)); + assertEquals("java.util.Locale",locale2.getGenericName(true, emptyStrings, emptyStrings)); + assertEquals("java.util.List",stringList.getGenericName(true,emptyStrings,emptyStrings)); + assertEquals("java.util.List",stringList2.getGenericName(true,emptyStrings,emptyStrings)); + } + + @Test + public void testGetFullName() { + assertEquals("java.util.Locale",locale.getFullName()); + assertEquals("java.util.Locale",locale2.getFullName()); + assertEquals("java.util.List",stringList.getFullName()); + assertEquals("java.util.List",stringList2.getFullName()); + } + + @Test + public void testGetPackageName() { + assertEquals("java.util",locale.getPackageName()); + assertEquals("java.util",locale2.getPackageName()); + assertEquals("java.util",stringList.getPackageName()); + assertEquals("java.util",stringList2.getPackageName()); + } + + @Test + public void testGetParameters() { + assertEquals(Collections.emptyList(), locale.getParameters()); + assertEquals(Collections.emptyList(), locale2.getParameters()); + assertEquals(Collections.singletonList(Types.STRING), stringList.getParameters()); + assertEquals(Collections.singletonList(Types.STRING), stringList2.getParameters()); + } + + @Test + public void testGetSimpleName() { + assertEquals("Locale",locale.getSimpleName()); + assertEquals("Locale",locale2.getSimpleName()); + assertEquals("List",stringList.getSimpleName()); + assertEquals("List",stringList2.getSimpleName()); + } + + @Test + public void testGetJavaClass() { + assertEquals(Locale.class,locale.getJavaClass()); + } + + @Test + public void testIsFinal() { + assertTrue(locale.isFinal()); + assertTrue(locale2.isFinal()); + assertFalse(stringList.isFinal()); + } + + @Test + public void testIsPrimitive() { + assertFalse(locale.isPrimitive()); + assertFalse(locale2.isPrimitive()); + assertFalse(stringList.isPrimitive()); + assertFalse(stringList2.isPrimitive()); + } + + @Test + public void testGetCategory() { + assertEquals(TypeCategory.SIMPLE, locale.getCategory()); + assertEquals(TypeCategory.SIMPLE, locale2.getCategory()); + assertEquals(TypeCategory.LIST, stringList.getCategory()); + assertEquals(TypeCategory.LIST, stringList2.getCategory()); + } + + @Test + public void testAs() { + assertEquals(TypeCategory.SIMPLE, stringList.as(TypeCategory.SIMPLE).getCategory()); + assertEquals(TypeCategory.SIMPLE, stringList2.as(TypeCategory.SIMPLE).getCategory()); + } + + @Test + public void testGetPrimitiveName() { + assertNull(locale.getPrimitiveName()); + assertNull(locale2.getPrimitiveName()); + assertNull(stringList.getPrimitiveName()); + assertNull(stringList2.getPrimitiveName()); + } + + @Test + public void testToString() { + assertEquals("java.util.Locale",locale.toString()); + assertEquals("java.util.Locale",locale2.toString()); + assertEquals("java.util.List",stringList.toString()); + assertEquals("java.util.List",stringList2.toString()); + } + + @Test + public void testAsArrayType() { + assertEquals("java.util.Locale[]", locale.asArrayType().getFullName()); + assertEquals(TypeCategory.ARRAY, locale.asArrayType().getCategory()); + assertEquals("java.util.Locale[]", locale2.asArrayType().getFullName()); + assertEquals(TypeCategory.ARRAY, locale2.asArrayType().getCategory()); + assertEquals("java.util.List[]", stringList.asArrayType().getFullName()); + assertEquals("java.util.List[]", stringList2.asArrayType().getFullName()); + } + +} diff --git a/src/test/java/com/mysema/codegen/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java similarity index 89% rename from src/test/java/com/mysema/codegen/ClassUtilsTest.java rename to src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index ae6be0d56f..68ba5f6671 100644 --- a/src/test/java/com/mysema/codegen/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -1,4 +1,9 @@ -package com.mysema.codegen; +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.support; import static org.junit.Assert.assertEquals; From dc13d0925fa44f0e4931ec265077343b201c7374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:33:18 +0000 Subject: [PATCH 0059/1968] --- src/main/java/com/mysema/codegen/model/ClassType.java | 4 ++-- src/main/java/com/mysema/codegen/model/SimpleType.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 4a2a42f59e..037b89664e 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -103,10 +103,10 @@ public String getGenericName(boolean asArgType, Set packages, Set packages, Set Date: Tue, 3 Aug 2010 15:38:13 +0000 Subject: [PATCH 0060/1968] added Nullable annotations --- src/main/java/com/mysema/codegen/CodeWriter.java | 4 +++- src/main/java/com/mysema/codegen/model/ClassType.java | 7 +++++-- src/main/java/com/mysema/codegen/model/Type.java | 3 +++ src/main/java/com/mysema/codegen/model/TypeCategory.java | 5 ++++- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index d8a4e8b275..0ff75bd6a5 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -9,6 +9,8 @@ import java.lang.annotation.Annotation; import java.util.Collection; +import javax.annotation.Nullable; + import org.apache.commons.collections15.Transformer; /** @@ -25,7 +27,7 @@ public interface CodeWriter extends Appendable{ CodeWriter beginClass(String simpleName) throws IOException; - CodeWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException; + CodeWriter beginClass(String simpleName, @Nullable String superClass, String... interfaces) throws IOException; CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 037b89664e..8a8cf2e145 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -11,6 +11,8 @@ import java.util.List; import java.util.Set; +import javax.annotation.Nullable; + import com.mysema.codegen.support.ClassUtils; /** @@ -26,13 +28,14 @@ public class ClassType implements Type { private final List parameters; + @Nullable private final Class primitiveClass; - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { + public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass) { this(category, javaClass, primitiveClass, Collections.emptyList()); } - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass, List parameters) { + public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { this.category = category; this.javaClass = javaClass; this.primitiveClass = primitiveClass; diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index 0ca4f37b50..e0888be9c1 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.Set; +import javax.annotation.Nullable; + /** * @author tiwe * @@ -31,6 +33,7 @@ public interface Type { List getParameters(); + @Nullable String getPrimitiveName(); String getRawName(Set packages, Set classes); diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java index 720bb06301..07b676f0c9 100644 --- a/src/main/java/com/mysema/codegen/model/TypeCategory.java +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -8,6 +8,8 @@ import java.util.HashSet; import java.util.Set; +import javax.annotation.Nullable; + /** * TypeCategory defines the expression type used for a Field * @@ -85,11 +87,12 @@ public enum TypeCategory { */ TIME(COMPARABLE, java.sql.Time.class.getName(), "org.joda.time.LocalTime"); + @Nullable private final TypeCategory superType; private final Set types; - TypeCategory(TypeCategory superType, String... types){ + TypeCategory(@Nullable TypeCategory superType, String... types){ this.superType = superType; this.types = new HashSet(types.length); for (String type : types){ From 45c2e3e642b1ce70d4de48e3b1e6a7104a63eab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:43:28 +0000 Subject: [PATCH 0061/1968] added Nullable annotations --- src/main/java/com/mysema/codegen/MemFileSystemRegistry.java | 3 +++ src/main/java/com/mysema/codegen/model/SimpleType.java | 6 +++--- src/main/java/com/mysema/codegen/model/TypeExtends.java | 3 +++ src/main/java/com/mysema/codegen/model/TypeSuper.java | 3 +++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java index 1a079805c5..d37f61a2dc 100644 --- a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java +++ b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java @@ -11,6 +11,8 @@ import java.net.URL; import java.util.Map; import java.util.WeakHashMap; + +import javax.annotation.Nullable; import javax.tools.JavaFileManager; /** @@ -38,6 +40,7 @@ private MemFileSystemRegistry() { System.setProperty("java.protocol.handler.pkgs",pkgs); } + @Nullable public JavaFileManager getFileSystem(URL url) { String prefix = url.getProtocol() + "://" + url.getHost() + "/"; if(prefix2jfm.containsKey(prefix)) { diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 7b32b8dc97..7cd074c4b1 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -65,9 +65,9 @@ public Type as(TypeCategory c) { @Override public Type asArrayType() { - String fullName = getFullName()+"[]"; - String simpleName = getSimpleName()+"[]"; - return new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + String newFullName = getFullName()+"[]"; + String newSimpleName = getSimpleName()+"[]"; + return new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), newSimpleName, false, false); } diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 65403ee13a..eb630a1bc9 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -7,12 +7,15 @@ import java.util.Set; +import javax.annotation.Nullable; + /** * @author tiwe * */ public class TypeExtends extends TypeAdapter{ + @Nullable private final String varName; public TypeExtends(String varName, Type type) { diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index 7845b4de78..c4805e5014 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -7,6 +7,8 @@ import java.util.Set; +import javax.annotation.Nullable; + /** * TypeSuper is a Type for type variables and wildcard types @@ -18,6 +20,7 @@ public class TypeSuper extends TypeAdapter{ private final Type superType; + @Nullable private final String varName; public TypeSuper(String varName, Type type) { From 88f6973d45049ae7f4d976d626bbdafe7d6165cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:47:42 +0000 Subject: [PATCH 0062/1968] added Nullable annotations --- src/main/java/com/mysema/codegen/MemClassLoader.java | 4 ++++ src/main/java/com/mysema/codegen/MemJavaFileObject.java | 2 ++ src/main/java/com/mysema/codegen/SimpleCompiler.java | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index 41bbdce3e2..1c5db6fa23 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; +import javax.annotation.Nullable; import javax.tools.JavaFileObject; import javax.tools.StandardLocation; import javax.tools.JavaFileObject.Kind; @@ -55,6 +56,7 @@ protected Class findClass(String name) throws ClassNotFoundException { } @Override + @Nullable protected URL findResource(String name) { URL retValue = super.findResource(name); if(retValue != null) { @@ -73,6 +75,7 @@ protected URL findResource(String name) { } } + @Nullable private JavaFileObject getFileObject(String n) { LocationAndKind key; String name; @@ -94,6 +97,7 @@ private JavaFileObject getFileObject(String n) { } @Override + @Nullable public InputStream getResourceAsStream(String name) { JavaFileObject jfo = getFileObject(name); if (jfo != null) { diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index adcdaff468..b736dda0b2 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -15,6 +15,7 @@ import java.io.OutputStream; import java.net.URI; +import javax.annotation.Nullable; import javax.tools.SimpleJavaFileObject; /** @@ -25,6 +26,7 @@ */ public class MemJavaFileObject extends SimpleJavaFileObject { + @Nullable private ByteArrayOutputStream baos; private final String name; diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index 251eb07f9d..e6d99741c2 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -19,6 +19,7 @@ import java.util.Locale; import java.util.Set; +import javax.annotation.Nullable; import javax.lang.model.SourceVersion; import javax.tools.DiagnosticListener; import javax.tools.JavaCompiler; @@ -54,6 +55,7 @@ public static String getClassPath(URLClassLoader classLoader) { private final ClassLoader classLoader; + @Nullable private String classPath; private final JavaCompiler compiler; From 2dc1bced105133c6798e48faadbf6c5fc5899978 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:51:37 +0000 Subject: [PATCH 0063/1968] added Nullable annotations --- src/main/java/com/mysema/codegen/MethodEvaluator.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/MethodEvaluator.java b/src/main/java/com/mysema/codegen/MethodEvaluator.java index dff31b482c..220a2a832e 100644 --- a/src/main/java/com/mysema/codegen/MethodEvaluator.java +++ b/src/main/java/com/mysema/codegen/MethodEvaluator.java @@ -6,6 +6,8 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import javax.annotation.Nullable; + /** * @author tiwe * @@ -15,11 +17,12 @@ public final class MethodEvaluator implements Evaluator { private final Method method; + @Nullable private final Object object; private final Class projectionType; - MethodEvaluator(Method method, Object object, Class projectionType) { + MethodEvaluator(Method method, @Nullable Object object, Class projectionType) { this.method = method; this.object = object; this.projectionType = projectionType; From 2da57828eb43600fa947d219ce58e3a92a71e38d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:52:40 +0000 Subject: [PATCH 0064/1968] updated version to 0.1.8 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index db6dbcbf5a..a1cee8bc43 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.7-SNAPSHOT + 0.1.8 Codegen Code generation and compilation for Java From b464be9c0f821cbaedc58de3d5682226ff185919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 15:53:26 +0000 Subject: [PATCH 0065/1968] updated version to 0.1.8-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a1cee8bc43..7921504b30 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.8 + 0.1.8-SNAPSHOT Codegen Code generation and compilation for Java From d159b4c715b34f0e05ef5db26e3f383c56647108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 16:09:23 +0000 Subject: [PATCH 0066/1968] added tests --- .../mysema/codegen/model/ClassTypeTest.java | 41 +++++++++++++++++++ .../mysema/codegen/model/ConstructorTest.java | 32 +++++++++++++++ .../mysema/codegen/model/ParameterTest.java | 29 +++++++++++++ .../codegen/model/TypeCategoryTest.java | 6 ++- .../com/mysema/codegen/model/TypeTest.java | 5 +++ 5 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/model/ClassTypeTest.java create mode 100644 src/test/java/com/mysema/codegen/model/ConstructorTest.java create mode 100644 src/test/java/com/mysema/codegen/model/ParameterTest.java diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java new file mode 100644 index 0000000000..d075e3077c --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.util.Map; + +import org.junit.Test; + + +public class ClassTypeTest { + + private ClassType stringType = new ClassType(TypeCategory.STRING, String.class); + +// @Test +// public void asArrayType(){ +// assertEquals(stringType, stringType.asArrayType().getParameter(0)); +// } + + @Test + public void as(){ + assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); + } + + @SuppressWarnings("unchecked") + @Test + public void getParameters(){ + ClassType mapType = new ClassType(TypeCategory.MAP, Map.class, stringType, stringType); + assertEquals(2, mapType.getParameters().size()); + assertEquals(stringType, mapType.getParameters().get(0)); + assertEquals(stringType, mapType.getParameters().get(1)); +// assertEquals(stringType, mapType.getSelfOrValueType()); + assertFalse(mapType.isPrimitive()); + } + +} diff --git a/src/test/java/com/mysema/codegen/model/ConstructorTest.java b/src/test/java/com/mysema/codegen/model/ConstructorTest.java new file mode 100644 index 0000000000..c36aef19b8 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/ConstructorTest.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; + +import org.junit.Test; + +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Constructor; +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.TypeCategory; + +public class ConstructorTest { + + @Test + public void test(){ + Parameter firstName = new Parameter("firstName", new ClassType(TypeCategory.STRING, String.class)); + Parameter lastName = new Parameter("lastName", new ClassType(TypeCategory.STRING, String.class)); + Constructor c1 = new Constructor(Arrays.asList(firstName, lastName)); + Constructor c2 = new Constructor(Arrays.asList(firstName, lastName)); + assertEquals(c1, c1); + assertEquals(c1, c2); + assertEquals(c1.hashCode(), c2.hashCode()); + } + +} diff --git a/src/test/java/com/mysema/codegen/model/ParameterTest.java b/src/test/java/com/mysema/codegen/model/ParameterTest.java new file mode 100644 index 0000000000..a624930bed --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/ParameterTest.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.TypeCategory; + +public class ParameterTest { + + @Test + public void test(){ + Parameter param1 = new Parameter("test", new ClassType(TypeCategory.STRING, String.class)); + Parameter param2 = new Parameter("test2", new ClassType(TypeCategory.STRING, String.class)); + Parameter param3 = new Parameter("test2", new ClassType(TypeCategory.NUMERIC, Integer.class)); + + assertTrue(param1.equals(param2)); + assertFalse(param1.equals(param3)); + assertFalse(param2.equals(param3)); + } +} diff --git a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java index d5f9898488..13e1f8e432 100644 --- a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java @@ -5,7 +5,8 @@ */ package com.mysema.codegen.model; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -17,6 +18,7 @@ public void testIsSubCategoryOf() { assertTrue(TypeCategory.STRING.isSubCategoryOf(TypeCategory.COMPARABLE)); assertTrue(TypeCategory.NUMERIC.isSubCategoryOf(TypeCategory.COMPARABLE)); assertTrue(TypeCategory.COMPARABLE.isSubCategoryOf(TypeCategory.SIMPLE)); + assertFalse(TypeCategory.ENTITY.isSubCategoryOf(TypeCategory.SIMPLE)); } - + } diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index 050834d9a1..21b14dc85e 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -33,6 +33,11 @@ public class TypeTest { private Type stringMap = new ClassType(TypeCategory.MAP, Map.class, Types.STRING, Types.STRING); private Type stringMap2 = new SimpleType(Types.MAP, Types.STRING, Types.STRING); + + @Test + public void arrayType(){ + assertEquals("Object[]",Types.OBJECTS.getGenericName(true).toString()); + } @Test public void testEquals(){ From a24dd76ac9d01ebcc2c06a648af3c49d74fabdf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 16:58:52 +0000 Subject: [PATCH 0067/1968] --- src/main/java/com/mysema/codegen/model/TypeExtends.java | 7 ++----- src/main/java/com/mysema/codegen/model/TypeSuper.java | 7 ++----- src/main/java/com/mysema/codegen/model/Types.java | 5 +++-- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index eb630a1bc9..7ce9bfe5b3 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -5,6 +5,7 @@ */ package com.mysema.codegen.model; +import java.util.Collections; import java.util.Set; import javax.annotation.Nullable; @@ -30,11 +31,7 @@ public TypeExtends(Type type) { @Override public String getGenericName(boolean asArgType){ - if (!asArgType){ - return "? extends " + super.getGenericName(true); - }else{ - return super.getGenericName(asArgType); - } + return getGenericName(asArgType, Collections.emptySet(),Collections.emptySet()); } @Override diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index c4805e5014..08e3eac14f 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -5,6 +5,7 @@ */ package com.mysema.codegen.model; +import java.util.Collections; import java.util.Set; import javax.annotation.Nullable; @@ -37,11 +38,7 @@ public TypeSuper(Type type) { @Override public String getGenericName(boolean asArgType){ - if (!asArgType){ - return "? super " + superType.getGenericName(true); - }else{ - return super.getGenericName(asArgType); - } + return getGenericName(asArgType, Collections.emptySet(),Collections.emptySet()); } @Override diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 2b3b8434d3..12f7593226 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -18,6 +18,7 @@ * @author tiwe * */ +@SuppressWarnings("unchecked") public final class Types { public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE,Object.class); @@ -33,7 +34,7 @@ public final class Types { public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC,Byte.class, byte.class); public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE,Character.class, char.class); - + public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC,Double.class, double.class); @@ -62,4 +63,4 @@ public final class Types { private Types(){} -} \ No newline at end of file +} From 36c1ce913cec79fcd6f3b0cb745822b06cd67a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 17:03:56 +0000 Subject: [PATCH 0068/1968] improved getRawName --- src/main/java/com/mysema/codegen/model/SimpleType.java | 2 +- src/test/java/com/mysema/codegen/model/TypeTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 7cd074c4b1..6fe57b42c6 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -139,7 +139,7 @@ public String getPrimitiveName() { @Override public String getRawName(Set packages, Set classes) { - if (packages.contains(packageName) || classes.contains(fullName)){ + if (packages.contains(packageName) || "java.lang".equals(packageName) || classes.contains(fullName)){ return localName; }else{ return fullName; diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index 21b14dc85e..58ad2b66e2 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -24,6 +24,10 @@ public class TypeTest { private ClassType locale = new ClassType(TypeCategory.SIMPLE,Locale.class); + private Type string = Types.STRING; + + private Type string2 = new SimpleType(string); + private Type locale2 = new SimpleType(locale); private Type stringList = new ClassType(TypeCategory.LIST, List.class, Types.STRING); @@ -61,6 +65,9 @@ public void testGetGenericNameBoolean() { assertEquals("java.util.List",stringList2.getGenericName(true)); assertEquals("java.util.Map", stringMap.getGenericName(true)); assertEquals("java.util.Map", stringMap2.getGenericName(true)); + + assertEquals("String", string.getGenericName(true)); + assertEquals("String", string2.getGenericName(true)); } @Test @@ -69,6 +76,9 @@ public void testGetRawName() { assertEquals("java.util.Locale",locale2.getRawName(emptyStrings,emptyStrings)); assertEquals("java.util.List",stringList.getRawName(emptyStrings,emptyStrings)); assertEquals("java.util.List",stringList2.getRawName(emptyStrings,emptyStrings)); + + assertEquals("String", string.getRawName(emptyStrings, emptyStrings)); + assertEquals("String", string2.getRawName(emptyStrings, emptyStrings)); } @Test From d499f822e089f5b2b30f81a9c07a535869e09dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 17:21:57 +0000 Subject: [PATCH 0069/1968] updated version to 0.1.9 --- pom.xml | 2 +- src/test/java/com/mysema/codegen/model/TypeTest.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7921504b30..2e28966fa6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.8-SNAPSHOT + 0.1.9 Codegen Code generation and compilation for Java diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index 58ad2b66e2..8f067c39e1 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -131,6 +131,9 @@ public void testIsFinal() { assertTrue(locale.isFinal()); assertTrue(locale2.isFinal()); assertFalse(stringList.isFinal()); + + assertTrue(Types.STRING.isFinal()); + assertTrue(Types.LONG.isFinal()); } @Test From f4bd3ba3e85fca05b4b6538b27f640ecb956c434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 17:22:57 +0000 Subject: [PATCH 0070/1968] updated version to 0.1.9-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e28966fa6..7d9d43fa1c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.9 + 0.1.9-SNAPSHOT Codegen Code generation and compilation for Java From 1f1116ff3f5f40dee1089db6bed6cf40a2e2edbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 17:27:52 +0000 Subject: [PATCH 0071/1968] added Nullables --- src/main/java/com/mysema/codegen/model/TypeExtends.java | 1 + src/main/java/com/mysema/codegen/model/TypeSuper.java | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 7ce9bfe5b3..68185fbaa9 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -43,6 +43,7 @@ public String getGenericName(boolean asArgType, Set packages, Set packages, Set Date: Tue, 3 Aug 2010 17:30:26 +0000 Subject: [PATCH 0072/1968] updated version to 0.1.9 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7d9d43fa1c..2e28966fa6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.9-SNAPSHOT + 0.1.9 Codegen Code generation and compilation for Java From 50b11e41b2d018a5c9b3f5365dd627f161430e03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 17:31:50 +0000 Subject: [PATCH 0073/1968] updated version to 0.1.9-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e28966fa6..7d9d43fa1c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.9 + 0.1.9-SNAPSHOT Codegen Code generation and compilation for Java From 66b0406307b51a51c599bf9f11c1497701ff029b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 17:45:34 +0000 Subject: [PATCH 0074/1968] added Immutable annotations --- src/main/java/com/mysema/codegen/model/ClassType.java | 3 +++ src/main/java/com/mysema/codegen/model/Constructor.java | 3 +++ src/main/java/com/mysema/codegen/model/Parameter.java | 3 +++ src/main/java/com/mysema/codegen/model/SimpleType.java | 3 +++ src/main/java/com/mysema/codegen/model/TypeAdapter.java | 3 +++ src/main/java/com/mysema/codegen/model/TypeExtends.java | 3 +++ src/main/java/com/mysema/codegen/model/TypeSuper.java | 3 +++ 7 files changed, 21 insertions(+) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 8a8cf2e145..38c18025ea 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -13,6 +13,8 @@ import javax.annotation.Nullable; +import net.jcip.annotations.Immutable; + import com.mysema.codegen.support.ClassUtils; /** @@ -20,6 +22,7 @@ * * @param */ +@Immutable public class ClassType implements Type { private final TypeCategory category; diff --git a/src/main/java/com/mysema/codegen/model/Constructor.java b/src/main/java/com/mysema/codegen/model/Constructor.java index b4a3ba9c60..2a2f16a758 100644 --- a/src/main/java/com/mysema/codegen/model/Constructor.java +++ b/src/main/java/com/mysema/codegen/model/Constructor.java @@ -7,6 +7,9 @@ import java.util.Collection; +import net.jcip.annotations.Immutable; + +@Immutable public final class Constructor { private final Collection parameters; diff --git a/src/main/java/com/mysema/codegen/model/Parameter.java b/src/main/java/com/mysema/codegen/model/Parameter.java index 975dabd649..3c8c9cbef5 100644 --- a/src/main/java/com/mysema/codegen/model/Parameter.java +++ b/src/main/java/com/mysema/codegen/model/Parameter.java @@ -5,12 +5,15 @@ */ package com.mysema.codegen.model; +import net.jcip.annotations.Immutable; + /** * Parameter represents a parameter in a Constructor * * @author tiwe * @version $Id$ */ +@Immutable public final class Parameter { private final String name; diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 6fe57b42c6..3e3444c032 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -10,12 +10,15 @@ import java.util.List; import java.util.Set; +import net.jcip.annotations.Immutable; + /** * @author tiwe * * @param */ +@Immutable public class SimpleType implements Type { private final TypeCategory category; diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index b11be2437e..8888f121a9 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -8,12 +8,15 @@ import java.util.List; import java.util.Set; +import net.jcip.annotations.Immutable; + /** * TypeAdapter is a basic adapter implementation for the Type interface * * @author tiwe * */ +@Immutable public class TypeAdapter implements Type{ private final Type type; diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 68185fbaa9..df07e22dde 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -10,10 +10,13 @@ import javax.annotation.Nullable; +import net.jcip.annotations.Immutable; + /** * @author tiwe * */ +@Immutable public class TypeExtends extends TypeAdapter{ @Nullable diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index 75a1f428be..8b43de8038 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -10,6 +10,8 @@ import javax.annotation.Nullable; +import net.jcip.annotations.Immutable; + /** * TypeSuper is a Type for type variables and wildcard types @@ -17,6 +19,7 @@ * @author tiwe * */ +@Immutable public class TypeSuper extends TypeAdapter{ private final Type superType; From 62b035a74f88327cb2d62acd2fbf9045c2967340 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Aug 2010 19:44:25 +0000 Subject: [PATCH 0075/1968] fixed javadocs --- src/main/java/com/mysema/codegen/model/SimpleType.java | 2 -- src/main/java/com/mysema/codegen/model/Type.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 3e3444c032..4f7d6f9b9d 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -15,8 +15,6 @@ /** * @author tiwe - * - * @param */ @Immutable public class SimpleType implements Type { diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index e0888be9c1..72f6382bc1 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -12,8 +12,6 @@ /** * @author tiwe - * - * @param */ public interface Type { From 677aa87ec2b57ea33574d51f3e8e1c2b68b5e3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Aug 2010 14:51:27 +0000 Subject: [PATCH 0076/1968] --- src/main/java/com/mysema/codegen/AbstractCodeWriter.java | 2 -- src/main/java/com/mysema/codegen/model/Constructor.java | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index ea4401e55f..35ccb57d1a 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -10,8 +10,6 @@ import java.io.IOException; - - /** * @author tiwe * diff --git a/src/main/java/com/mysema/codegen/model/Constructor.java b/src/main/java/com/mysema/codegen/model/Constructor.java index 2a2f16a758..fcaa6c34e2 100644 --- a/src/main/java/com/mysema/codegen/model/Constructor.java +++ b/src/main/java/com/mysema/codegen/model/Constructor.java @@ -9,6 +9,10 @@ import net.jcip.annotations.Immutable; +/** + * @author tiwe + * + */ @Immutable public final class Constructor { From 6b444a5ad991fb728290c568a6043bc8a4f80922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Aug 2010 14:20:21 +0000 Subject: [PATCH 0077/1968] fixed private final usage --- src/main/java/com/mysema/codegen/JavaWriter.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 3e2185d9c8..52c11a7615 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -45,6 +45,8 @@ public final class JavaWriter extends AbstractCodeWriter{ private static final String PRIVATE = "private "; + private static final String PRIVATE_FINAL = "private final "; + private static final String PRIVATE_STATIC_FINAL = "private static final "; private static final String PROTECTED = "protected "; @@ -335,12 +337,12 @@ public JavaWriter privateField(String type, String name) throws IOException { @Override public JavaWriter privateFinal(String type, String name) throws IOException { - return field(PRIVATE, type, name); + return field(PRIVATE_FINAL, type, name); } @Override public JavaWriter privateFinal(String type, String name, String value) throws IOException { - return field(PRIVATE, type, name, value); + return field(PRIVATE_FINAL, type, name, value); } @Override From 245376b42db728d77aaf3f1f955cb0d027d8c19f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Aug 2010 15:11:59 +0000 Subject: [PATCH 0078/1968] updated version to 0.2.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7d9d43fa1c..b20a97b362 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.1.9-SNAPSHOT + 0.2.0 Codegen Code generation and compilation for Java From 8b6bf0bee23fc44df60d74ec7dadc5235d6a5ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Aug 2010 15:13:24 +0000 Subject: [PATCH 0079/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b20a97b362..06728e833e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.0 + 0.2.0-SNAPSHOT Codegen Code generation and compilation for Java From 8c8da3efdb9bb19300b905bb333709ffecb3ed31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 18 Aug 2010 16:27:32 +0000 Subject: [PATCH 0080/1968] made CodeWriter signature more typesafe by using Type from the model package --- .../java/com/mysema/codegen/CodeWriter.java | 40 ++++---- .../com/mysema/codegen/EvaluatorFactory.java | 15 +-- .../java/com/mysema/codegen/JavaWriter.java | 96 ++++++++++--------- .../com/mysema/codegen/model/ClassType.java | 2 +- .../com/mysema/codegen/model/Factory.java | 30 ++++++ .../com/mysema/codegen/model/Parameter.java | 4 + .../com/mysema/codegen/model/SimpleType.java | 4 + .../java/com/mysema/codegen/model/Types.java | 4 +- .../com/mysema/codegen/JavaWriterTest.java | 66 +++++++------ src/test/resources/testConstructors | 6 +- src/test/resources/testFields | 2 +- src/test/resources/testInterface2 | 2 +- src/test/resources/testMethods | 2 +- 13 files changed, 167 insertions(+), 106 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/model/Factory.java diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 0ff75bd6a5..43da487755 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -13,6 +13,8 @@ import org.apache.commons.collections15.Transformer; +import com.mysema.codegen.model.Type; + /** * CodeWriter defines an interface for serializing Java source code * @@ -25,29 +27,29 @@ public interface CodeWriter extends Appendable{ CodeWriter annotation(Class annotation) throws IOException; - CodeWriter beginClass(String simpleName) throws IOException; + CodeWriter beginClass(Type type) throws IOException; - CodeWriter beginClass(String simpleName, @Nullable String superClass, String... interfaces) throws IOException; + CodeWriter beginClass(Type type, @Nullable Type superClass, Type... interfaces) throws IOException; CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; CodeWriter beginConstructor(String... params) throws IOException; - CodeWriter beginInterface(String simpleName, String... interfaces) throws IOException; + CodeWriter beginInterface(Type type, Type... interfaces) throws IOException; CodeWriter beginLine(String... segments) throws IOException; - CodeWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; + CodeWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; - CodeWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException; + CodeWriter beginPublicMethod(Type returnType, String methodName, String... args) throws IOException; - CodeWriter beginStaticMethod(String type, String name, Collection params, Transformer transformer) throws IOException; + CodeWriter beginStaticMethod(Type type, String name, Collection params, Transformer transformer) throws IOException; - CodeWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException; + CodeWriter beginStaticMethod(Type returnType, String methodName, String... args) throws IOException; CodeWriter end() throws IOException; - CodeWriter field(String type, String name) throws IOException; + CodeWriter field(Type type, String name) throws IOException; CodeWriter imports(Class... imports) throws IOException; @@ -65,27 +67,27 @@ public interface CodeWriter extends Appendable{ CodeWriter packageDecl(String packageName) throws IOException; - CodeWriter privateField(String type, String name) throws IOException; + CodeWriter privateField(Type type, String name) throws IOException; - CodeWriter privateFinal(String type, String name) throws IOException; + CodeWriter privateFinal(Type type, String name) throws IOException; - CodeWriter privateFinal(String type, String name, String value) throws IOException; + CodeWriter privateFinal(Type type, String name, String value) throws IOException; - CodeWriter privateStaticFinal(String type, String name, String value) throws IOException; + CodeWriter privateStaticFinal(Type type, String name, String value) throws IOException; - CodeWriter protectedField(String type, String name) throws IOException; + CodeWriter protectedField(Type type, String name) throws IOException; - CodeWriter protectedFinal(String type, String name) throws IOException; + CodeWriter protectedFinal(Type type, String name) throws IOException; - CodeWriter protectedFinal(String type, String name, String value) throws IOException; + CodeWriter protectedFinal(Type type, String name, String value) throws IOException; - CodeWriter publicField(String type, String name) throws IOException; + CodeWriter publicField(Type type, String name) throws IOException; - CodeWriter publicFinal(String type, String name) throws IOException; + CodeWriter publicFinal(Type type, String name) throws IOException; - CodeWriter publicFinal(String type, String name, String value) throws IOException; + CodeWriter publicFinal(Type type, String name, String value) throws IOException; - CodeWriter publicStaticFinal(String type, String name, String value) throws IOException; + CodeWriter publicStaticFinal(Type type, String name, String value) throws IOException; CodeWriter staticimports(Class... imports) throws IOException; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 3d658a6ddd..dd59083734 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -24,9 +24,9 @@ import javax.tools.JavaCompiler.CompilationTask; import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; -import com.mysema.codegen.support.ClassUtils; @@ -60,26 +60,29 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } + @SuppressWarnings("unchecked") private void compile(String source, Type projectionType, String[] names, Type[] types, String id, Map constants) throws IOException { // create source StringWriter writer = new StringWriter(); JavaWriter javaw = new JavaWriter(writer); - javaw.beginClass(id, null); + SimpleType idType = new SimpleType(id, "", id); + javaw.beginClass(idType, null); String[] params = new String[names.length]; for (int i = 0; i < params.length; i++) { params[i] = types[i].getGenericName(true) + " " + names[i]; } for (Map.Entry entry : constants.entrySet()){ - String className = ClassUtils.getName(ClassUtils.normalize(entry.getValue().getClass())); - javaw.publicField(className, entry.getKey()); +// String className = ClassUtils.getName(ClassUtils.normalize(entry.getValue().getClass())); + Type type = new ClassType(TypeCategory.SIMPLE, entry.getValue().getClass()); + javaw.publicField(type, entry.getKey()); } if (constants.isEmpty()){ - javaw.beginStaticMethod(projectionType.getGenericName(false), "eval", params); + javaw.beginStaticMethod(projectionType, "eval", params); }else{ - javaw.beginPublicMethod(projectionType.getGenericName(false), "eval", params); + javaw.beginPublicMethod(projectionType, "eval", params); } javaw.append(source); javaw.end(); diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 52c11a7615..05f6d5086e 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -24,6 +24,8 @@ import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; +import com.mysema.codegen.model.Type; + /** * JavaWriter is the default implementation of the CodeWriter interface @@ -69,7 +71,7 @@ public final class JavaWriter extends AbstractCodeWriter{ private final Set importedPackages = new HashSet(); - private String type; + private Type type; public JavaWriter(Appendable appendable){ super(appendable); @@ -154,84 +156,86 @@ private JavaWriter appendType(Class type) throws IOException{ return this; } - public JavaWriter beginClass(String simpleName) throws IOException{ - return beginClass(simpleName, null); + @Override + public JavaWriter beginClass(Type type) throws IOException{ + return beginClass(type, null); } @Override - public JavaWriter beginClass(String simpleName, String superClass, String... interfaces) throws IOException{ - beginLine(PUBLIC_CLASS + simpleName); + public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException{ + importedPackages.add(type.getPackageName()); + beginLine(PUBLIC_CLASS + type.getSimpleName()); if (superClass != null){ - append(EXTENDS + superClass); + append(EXTENDS + superClass.getGenericName(false, importedPackages, importedClasses)); } if (interfaces.length > 0){ - append(IMPLEMENTS);//.join(COMMA, interfaces); - append(StringUtils.join(interfaces, COMMA)); + append(IMPLEMENTS); + for (int i = 0; i < interfaces.length; i++){ + if (i > 0){ + append(COMMA); + } + append(interfaces[i].getGenericName(false, importedPackages, importedClasses)); + } } append(" {").nl().nl(); goIn(); - - type = simpleName; - if (type.contains("<")){ - type = type.substring(0, type.indexOf('<')); - } + this.type = type; return this; } @Override public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { - beginLine(PUBLIC + type).params(parameters, transformer).append(" {").nl(); + beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); return goIn(); } @Override public JavaWriter beginConstructor(String... parameters) throws IOException{ - beginLine(PUBLIC + type).params(parameters).append(" {").nl(); + beginLine(PUBLIC + type.getSimpleName()).params(parameters).append(" {").nl(); return goIn(); } @Override - public JavaWriter beginInterface(String simpleName, String... interfaces) throws IOException { - beginLine(PUBLIC_INTERFACE + simpleName); + public JavaWriter beginInterface(Type type, Type... interfaces) throws IOException { + importedPackages.add(type.getPackageName()); + beginLine(PUBLIC_INTERFACE + type.getGenericName(false, importedPackages, importedClasses)); if (interfaces.length > 0){ append(EXTENDS); - append(StringUtils.join(interfaces, COMMA)); + for (int i = 0; i < interfaces.length; i++){ + if (i > 0){ + append(COMMA); + } + append(interfaces[i].getGenericName(false, importedPackages, importedClasses)); + } } append(" {").nl().nl(); goIn(); - - type = simpleName; - if (type.contains("<")){ - type = type.substring(0, type.indexOf('<')); - } - return this; - + this.type = type; + return this; } - - - private JavaWriter beginMethod(String modifiers, String returnType, String methodName, String... args) throws IOException{ + private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, String... args) throws IOException{ beginLine(modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); return goIn(); } @Override - public JavaWriter beginPublicMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC, returnType, methodName, transform(parameters, transformer)); } @Override - public JavaWriter beginPublicMethod(String returnType, String methodName, String... args) throws IOException{ + public JavaWriter beginPublicMethod(Type returnType, String methodName, String... args) throws IOException{ return beginMethod(PUBLIC, returnType, methodName, args); } @Override - public JavaWriter beginStaticMethod(String returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC_STATIC, returnType, methodName, transform(parameters, transformer)); } @Override - public JavaWriter beginStaticMethod(String returnType, String methodName, String... args) throws IOException{ + public JavaWriter beginStaticMethod(Type returnType, String methodName, String... args) throws IOException{ return beginMethod(PUBLIC_STATIC, returnType, methodName, args); } @@ -242,15 +246,15 @@ public JavaWriter end() throws IOException{ } @Override - public JavaWriter field(String type, String name) throws IOException { + public JavaWriter field(Type type, String name) throws IOException { return stmt(type + SPACE + name).nl(); } - private JavaWriter field(String modifier, String type, String name) throws IOException{ + private JavaWriter field(String modifier, Type type, String name) throws IOException{ return stmt(modifier + type + SPACE + name).nl(); } - private JavaWriter field(String modifier, String type, String name, String value) throws IOException{ + private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ return stmt(modifier + type + SPACE + name + ASSIGN + value).nl(); } @@ -331,57 +335,57 @@ private JavaWriter params(String... params) throws IOException{ } @Override - public JavaWriter privateField(String type, String name) throws IOException { + public JavaWriter privateField(Type type, String name) throws IOException { return field(PRIVATE, type, name); } @Override - public JavaWriter privateFinal(String type, String name) throws IOException { + public JavaWriter privateFinal(Type type, String name) throws IOException { return field(PRIVATE_FINAL, type, name); } @Override - public JavaWriter privateFinal(String type, String name, String value) throws IOException { + public JavaWriter privateFinal(Type type, String name, String value) throws IOException { return field(PRIVATE_FINAL, type, name, value); } @Override - public JavaWriter privateStaticFinal(String type, String name, String value) throws IOException { + public JavaWriter privateStaticFinal(Type type, String name, String value) throws IOException { return field(PRIVATE_STATIC_FINAL, type, name, value); } @Override - public JavaWriter protectedField(String type, String name) throws IOException { + public JavaWriter protectedField(Type type, String name) throws IOException { return field(PROTECTED, type, name); } @Override - public JavaWriter protectedFinal(String type, String name) throws IOException { + public JavaWriter protectedFinal(Type type, String name) throws IOException { return field(PROTECTED_FINAL, type, name); } @Override - public JavaWriter protectedFinal(String type, String name, String value) throws IOException { + public JavaWriter protectedFinal(Type type, String name, String value) throws IOException { return field(PROTECTED_FINAL, type, name, value); } @Override - public JavaWriter publicField(String type, String name) throws IOException { + public JavaWriter publicField(Type type, String name) throws IOException { return field(PUBLIC, type, name); } @Override - public JavaWriter publicFinal(String type, String name) throws IOException { + public JavaWriter publicFinal(Type type, String name) throws IOException { return field(PUBLIC_FINAL, type, name); } @Override - public JavaWriter publicFinal(String type, String name, String value) throws IOException { + public JavaWriter publicFinal(Type type, String name, String value) throws IOException { return field(PUBLIC_FINAL, type, name, value); } @Override - public JavaWriter publicStaticFinal(String type, String name, String value) throws IOException { + public JavaWriter publicStaticFinal(Type type, String name, String value) throws IOException { return field(PUBLIC_STATIC_FINAL, type, name, value); } diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 38c18025ea..ae37f4a02d 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -34,7 +34,7 @@ public class ClassType implements Type { @Nullable private final Class primitiveClass; - public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass) { + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { this(category, javaClass, primitiveClass, Collections.emptyList()); } diff --git a/src/main/java/com/mysema/codegen/model/Factory.java b/src/main/java/com/mysema/codegen/model/Factory.java new file mode 100644 index 0000000000..f4c8459f28 --- /dev/null +++ b/src/main/java/com/mysema/codegen/model/Factory.java @@ -0,0 +1,30 @@ +package com.mysema.codegen.model; + +import java.util.ArrayList; +import java.util.List; + +public final class Factory { + + @SuppressWarnings("unchecked") + public static ClassType type(Class clazz, Class... args){ + List parameters = new ArrayList(args.length); + for (Class arg : args){ + parameters.add(new ClassType(TypeCategory.SIMPLE, arg)); + } + return new ClassType(TypeCategory.SIMPLE, clazz, parameters); + } + + public static Parameter param(String name, Type type){ + return new Parameter(name, type); + } + + @SuppressWarnings("unchecked") + public static Parameter param(String name, Class type){ + return new Parameter(name, new ClassType(TypeCategory.SIMPLE, type)); + } + + private Factory(){} + + + +} diff --git a/src/main/java/com/mysema/codegen/model/Parameter.java b/src/main/java/com/mysema/codegen/model/Parameter.java index 3c8c9cbef5..8f8df265d8 100644 --- a/src/main/java/com/mysema/codegen/model/Parameter.java +++ b/src/main/java/com/mysema/codegen/model/Parameter.java @@ -49,4 +49,8 @@ public int hashCode() { return type.hashCode(); } + @Override + public String toString(){ + return type + " " + name; + } } diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 4f7d6f9b9d..33e6c44aad 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -32,6 +32,10 @@ public SimpleType(Type type, Type... parameters) { type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); } + public SimpleType(String fullName, String packageName, String simpleName) { + this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Collections.emptyList()); + } + public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, boolean primitiveClass, boolean finalClass, List parameters) { diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 12f7593226..7f0799bff4 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -20,7 +20,7 @@ */ @SuppressWarnings("unchecked") public final class Types { - + public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE,Object.class); public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY,Object[].class); @@ -61,6 +61,8 @@ public final class Types { public static final ClassType URI = new ClassType(TypeCategory.COMPARABLE,URI.class); + public static final ClassType VOID = new ClassType(TypeCategory.SIMPLE, void.class); + private Types(){} } diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 4d8156779f..fd8d251969 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -17,8 +17,13 @@ import org.junit.Before; import org.junit.Test; -public class JavaWriterTest { +import com.mysema.codegen.model.Factory; +import com.mysema.codegen.model.SimpleType; +import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.Types; +public class JavaWriterTest { + private static final Transformer transformer = new Transformer(){ @Override public String transform(String input) { @@ -29,6 +34,8 @@ public String transform(String input) { private StringWriter w; private CodeWriter writer; + + private Type testType, testType2, testSuperType, testInterface1, testInterface2; private static void match(String resource, String text) throws IOException{ // TODO : try to compile ? @@ -40,7 +47,12 @@ private static void match(String resource, String text) throws IOException{ @Before public void setUp(){ w = new StringWriter(); - writer = new JavaWriter(w); + writer = new JavaWriter(w); + testType = Factory.type(JavaWriterTest.class); + testType2 = new SimpleType("com.mysema.codegen.Test","com.mysema.codegen","Test"); + testSuperType = new SimpleType("com.mysema.codegen.Superclass","com.mysema.codegen","Superclass"); + testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); + testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); } @@ -48,9 +60,9 @@ public void setUp(){ public void testBasic() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); - writer.beginClass("JavaWriterTest"); + writer.beginClass(testType); writer.annotation(Test.class); - writer.beginPublicMethod("void", "test"); + writer.beginPublicMethod(Types.VOID, "test"); writer.line("// TODO"); writer.end(); writer.end(); @@ -60,7 +72,7 @@ public void testBasic() throws IOException { @Test public void testExtends() throws IOException{ - writer.beginClass("Test", "Superclass"); + writer.beginClass(testType2, testSuperType); writer.end(); match("/testExtends", w.toString()); @@ -68,7 +80,7 @@ public void testExtends() throws IOException{ @Test public void testImplements() throws IOException{ - writer.beginClass("Test", null, "TestInterface1","TestInterface2"); + writer.beginClass(testType2, null, testInterface1,testInterface2); writer.end(); match("/testImplements", w.toString()); @@ -78,7 +90,7 @@ public void testImplements() throws IOException{ public void testInterface() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); - writer.beginInterface("JavaWriterTest"); + writer.beginInterface(testType); writer.end(); match("/testInterface", w.toString()); @@ -86,7 +98,7 @@ public void testInterface() throws IOException{ @Test public void testInterface2() throws IOException{ - writer.beginInterface("Test", "Test1"); + writer.beginInterface(testType2, testInterface1); writer.end(); match("/testInterface2", w.toString()); @@ -97,7 +109,7 @@ public void testJavadoc() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.javadoc("JavaWriterTest is a test class"); - writer.beginClass("JavaWriterTest"); + writer.beginClass(testType); writer.end(); match("/testJavadoc", w.toString()); @@ -109,9 +121,9 @@ public void testAnnotations() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class); writer.annotation(Entity.class); - writer.beginClass("JavaWriterTest"); + writer.beginClass(testType); writer.annotation(Test.class); - writer.beginPublicMethod("void", "test"); + writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); @@ -123,7 +135,7 @@ public void testAnnotations2() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); writer.annotation(Entity.class); - writer.beginClass("JavaWriterTest"); + writer.beginClass(testType); writer.annotation(new Test(){ @Override public Class expected() { @@ -139,7 +151,7 @@ public long timeout() { public Class annotationType() { return Test.class; }}); - writer.beginPublicMethod("void", "test"); + writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); @@ -148,19 +160,19 @@ public Class annotationType() { @Test public void testFields() throws IOException{ - writer.beginClass("FieldTests"); + writer.beginClass(testType); // private - writer.privateField("String", "privateField"); - writer.privateStaticFinal("String", "privateStaticFinal", "\"val\""); + writer.privateField(Types.STRING, "privateField"); + writer.privateStaticFinal(Types.STRING, "privateStaticFinal", "\"val\""); // protected - writer.protectedField("String","protectedField"); + writer.protectedField(Types.STRING,"protectedField"); // field - writer.field("String","field"); + writer.field(Types.STRING,"field"); // public - writer.publicField("String","publicField"); - writer.publicStaticFinal("String", "publicStaticFinal", "\"val\""); - writer.publicFinal("String", "publicFinalField"); - writer.publicFinal("String", "publicFinalField2", "\"val\""); + writer.publicField(Types.STRING,"publicField"); + writer.publicStaticFinal(Types.STRING, "publicStaticFinal", "\"val\""); + writer.publicFinal(Types.STRING, "publicFinalField"); + writer.publicFinal(Types.STRING, "publicFinalField2", "\"val\""); writer.end(); @@ -169,7 +181,7 @@ public void testFields() throws IOException{ @Test public void testMethods() throws IOException{ - writer.beginClass("MethodTests"); + writer.beginClass(testType); // private // protected @@ -177,11 +189,11 @@ public void testMethods() throws IOException{ // method // public - writer.beginPublicMethod("String", "publicMethod", Arrays.asList("String a"), transformer); + writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList("String a"), transformer); writer.line("return null;"); writer.end(); - writer.beginStaticMethod("String", "staticMethod", Arrays.asList("String a"), transformer); + writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList("String a"), transformer); writer.line("return null;"); writer.end(); @@ -192,7 +204,7 @@ public void testMethods() throws IOException{ @Test public void testConstructors() throws IOException{ - writer.beginClass("ConstructorTests"); + writer.beginClass(testType); writer.beginConstructor(Arrays.asList("String a","String b"), transformer); writer.end(); @@ -225,7 +237,7 @@ public void testImports2() throws IOException{ @Test public void testSuppressWarnings() throws IOException{ writer.suppressWarnings("unused"); - writer.privateField("String", "test"); + writer.privateField(Types.STRING, "test"); match("/testSuppressWarnings", w.toString()); } diff --git a/src/test/resources/testConstructors b/src/test/resources/testConstructors index e3d282bfac..ded6f3dfe3 100644 --- a/src/test/resources/testConstructors +++ b/src/test/resources/testConstructors @@ -1,9 +1,9 @@ -public class ConstructorTests { +public class JavaWriterTest { - public ConstructorTests(String a, String b) { + public JavaWriterTest(String a, String b) { } - public ConstructorTests(String a) { + public JavaWriterTest(String a) { } } \ No newline at end of file diff --git a/src/test/resources/testFields b/src/test/resources/testFields index 44b9e5c216..2328ded73d 100644 --- a/src/test/resources/testFields +++ b/src/test/resources/testFields @@ -1,4 +1,4 @@ -public class FieldTests { +public class JavaWriterTest { private String privateField; diff --git a/src/test/resources/testInterface2 b/src/test/resources/testInterface2 index 249bdc6d43..350220c382 100644 --- a/src/test/resources/testInterface2 +++ b/src/test/resources/testInterface2 @@ -1,3 +1,3 @@ -public interface Test extends Test1 { +public interface Test extends TestInterface1 { } \ No newline at end of file diff --git a/src/test/resources/testMethods b/src/test/resources/testMethods index 0fd50cb732..506614da5f 100644 --- a/src/test/resources/testMethods +++ b/src/test/resources/testMethods @@ -1,4 +1,4 @@ -public class MethodTests { +public class JavaWriterTest { public String publicMethod(String a) { return null; From 4d8f6b219a854c864ed0603d516976e5fc311cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 18 Aug 2010 16:50:43 +0000 Subject: [PATCH 0081/1968] removed Factory --- .../com/mysema/codegen/model/ClassType.java | 23 ++++++++------ .../com/mysema/codegen/model/Factory.java | 30 ------------------- .../com/mysema/codegen/JavaWriterTest.java | 4 +-- 3 files changed, 16 insertions(+), 41 deletions(-) delete mode 100644 src/main/java/com/mysema/codegen/model/Factory.java diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index ae37f4a02d..6be8581eab 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -34,15 +34,9 @@ public class ClassType implements Type { @Nullable private final Class primitiveClass; - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { - this(category, javaClass, primitiveClass, Collections.emptyList()); - } - - public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { - this.category = category; - this.javaClass = javaClass; - this.primitiveClass = primitiveClass; - this.parameters = parameters; + + public ClassType(Class javaClass) { + this(TypeCategory.SIMPLE, javaClass, null, Collections.emptyList()); } public ClassType(TypeCategory category, Class javaClass, List parameters) { @@ -53,6 +47,17 @@ public ClassType(TypeCategory category, Class clazz, Type... parameters) { this(category, clazz, null, Arrays.asList(parameters)); } + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { + this(category, javaClass, primitiveClass, Collections.emptyList()); + } + + public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { + this.category = category; + this.javaClass = javaClass; + this.primitiveClass = primitiveClass; + this.parameters = parameters; + } + @Override public Type as(TypeCategory c) { if (category == c){ diff --git a/src/main/java/com/mysema/codegen/model/Factory.java b/src/main/java/com/mysema/codegen/model/Factory.java deleted file mode 100644 index f4c8459f28..0000000000 --- a/src/main/java/com/mysema/codegen/model/Factory.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.mysema.codegen.model; - -import java.util.ArrayList; -import java.util.List; - -public final class Factory { - - @SuppressWarnings("unchecked") - public static ClassType type(Class clazz, Class... args){ - List parameters = new ArrayList(args.length); - for (Class arg : args){ - parameters.add(new ClassType(TypeCategory.SIMPLE, arg)); - } - return new ClassType(TypeCategory.SIMPLE, clazz, parameters); - } - - public static Parameter param(String name, Type type){ - return new Parameter(name, type); - } - - @SuppressWarnings("unchecked") - public static Parameter param(String name, Class type){ - return new Parameter(name, new ClassType(TypeCategory.SIMPLE, type)); - } - - private Factory(){} - - - -} diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index fd8d251969..ffeeca3f50 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -17,7 +17,7 @@ import org.junit.Before; import org.junit.Test; -import com.mysema.codegen.model.Factory; +import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; @@ -48,7 +48,7 @@ private static void match(String resource, String text) throws IOException{ public void setUp(){ w = new StringWriter(); writer = new JavaWriter(w); - testType = Factory.type(JavaWriterTest.class); + testType = new ClassType(JavaWriterTest.class); testType2 = new SimpleType("com.mysema.codegen.Test","com.mysema.codegen","Test"); testSuperType = new SimpleType("com.mysema.codegen.Superclass","com.mysema.codegen","Superclass"); testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); From a8eb903f0269c9a0ab759c1a5adc1d2a43aace48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 18 Aug 2010 17:35:18 +0000 Subject: [PATCH 0082/1968] --- src/main/java/com/mysema/codegen/AbstractCodeWriter.java | 5 ----- src/main/java/com/mysema/codegen/JavaWriter.java | 6 +++--- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index 35ccb57d1a..cdaa9eb202 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -87,10 +87,5 @@ public T line(String... segments) throws IOException{ public T nl() throws IOException { return append(NEWLINE); } - - - protected T stmt(String stmt) throws IOException{ - return line(stmt + SEMICOLON); - } } diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 05f6d5086e..210a08f22e 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -247,15 +247,15 @@ public JavaWriter end() throws IOException{ @Override public JavaWriter field(Type type, String name) throws IOException { - return stmt(type + SPACE + name).nl(); + return line(type + SPACE + name + SEMICOLON).nl(); } private JavaWriter field(String modifier, Type type, String name) throws IOException{ - return stmt(modifier + type + SPACE + name).nl(); + return line(modifier + type + SPACE + name + SEMICOLON).nl(); } private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ - return stmt(modifier + type + SPACE + name + ASSIGN + value).nl(); + return line(modifier + type + SPACE + name + ASSIGN + value + SEMICOLON).nl(); } @Override From f7b20508a2d94049a1eab5b57d1c3cfa590ba0c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 18 Aug 2010 18:21:18 +0000 Subject: [PATCH 0083/1968] added joda time types --- .../com/mysema/codegen/model/SimpleType.java | 18 +++++++-------- .../java/com/mysema/codegen/model/Types.java | 22 ++++++++++++------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 33e6c44aad..6bf7847862 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -32,13 +32,17 @@ public SimpleType(Type type, Type... parameters) { type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); } - public SimpleType(String fullName, String packageName, String simpleName) { - this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Collections.emptyList()); + public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { + this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Arrays.asList(parameters)); + } + + public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, boolean p, boolean f, Type... parameters) { + this(typeCategory, fullName, packageName, simpleName, p, f, Arrays + .asList(parameters)); } public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, - boolean primitiveClass, boolean finalClass, - List parameters) { + boolean primitiveClass, boolean finalClass, List parameters) { this.category = category; this.fullName = fullName; this.packageName = packageName; @@ -53,12 +57,6 @@ public SimpleType(TypeCategory category, String fullName, String packageName, St this.parameters = parameters; } - public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, - boolean p, boolean f, Type... parameters) { - this(typeCategory, fullName, packageName, simpleName, p, f, Arrays - .asList(parameters)); - } - @Override public Type as(TypeCategory c) { if (category != c){ diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 7f0799bff4..2186ece5e6 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -23,20 +23,20 @@ public final class Types { public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE,Object.class); - public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY,Object[].class); - + public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY,Object[].class); + public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC,BigDecimal.class); public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC,BigInteger.class); - + public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN,Boolean.class, boolean.class); - + public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC,Byte.class, byte.class); public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE,Character.class, char.class); - - public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); + public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); + public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC,Double.class, double.class); public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC,Float.class, float.class); @@ -50,9 +50,9 @@ public final class Types { public static final ClassType LOCALE = new ClassType(TypeCategory.SIMPLE, Locale.class); public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC,Long.class, long.class); - - public static final ClassType MAP = new ClassType(TypeCategory.MAP, Map.class, OBJECT, OBJECT); + public static final ClassType MAP = new ClassType(TypeCategory.MAP, Map.class, OBJECT, OBJECT); + public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC,Short.class, short.class); @@ -63,6 +63,12 @@ public final class Types { public static final ClassType VOID = new ClassType(TypeCategory.SIMPLE, void.class); + public static final SimpleType DATE_TIME = new SimpleType(TypeCategory.DATETIME, "org.joda.time.DateTime", "org.joda.time", "DateTime", false, false); + + public static final SimpleType LOCAL_DATE = new SimpleType(TypeCategory.DATE, "org.joda.time.LocalDate", "org.joda.time", "LocalDate", false, false); + + public static final SimpleType LOCAL_TIME = new SimpleType(TypeCategory.TIME, "org.joda.time.LocalTime", "org.joda.time", "LocalTime", false, false); + private Types(){} } From 03295204c2f48c24333ba581288e599fb711befa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 18 Aug 2010 18:48:27 +0000 Subject: [PATCH 0084/1968] --- src/main/java/com/mysema/codegen/JavaWriter.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 210a08f22e..c1347f44f9 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -247,15 +247,15 @@ public JavaWriter end() throws IOException{ @Override public JavaWriter field(Type type, String name) throws IOException { - return line(type + SPACE + name + SEMICOLON).nl(); + return line(type.getGenericName(false, importedPackages, importedClasses) + SPACE + name + SEMICOLON).nl(); } private JavaWriter field(String modifier, Type type, String name) throws IOException{ - return line(modifier + type + SPACE + name + SEMICOLON).nl(); + return line(modifier + type.getGenericName(false, importedPackages, importedClasses) + SPACE + name + SEMICOLON).nl(); } private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ - return line(modifier + type + SPACE + name + ASSIGN + value + SEMICOLON).nl(); + return line(modifier + type.getGenericName(false, importedPackages, importedClasses) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); } @Override From ded05cdedcd0738ec25e4e946f461886194df022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 08:46:43 +0000 Subject: [PATCH 0085/1968] --- .../mysema/codegen/AbstractCodeWriter.java | 1 - .../java/com/mysema/codegen/CodeWriter.java | 13 ++-- .../com/mysema/codegen/EvaluatorFactory.java | 13 ++-- .../java/com/mysema/codegen/JavaWriter.java | 78 +++++++++++-------- .../com/mysema/codegen/model/ClassType.java | 70 ++++++++++------- .../com/mysema/codegen/model/SimpleType.java | 56 +++++++++---- .../java/com/mysema/codegen/model/Type.java | 3 + .../com/mysema/codegen/model/TypeAdapter.java | 5 ++ .../java/com/mysema/codegen/model/Types.java | 57 ++++++++------ .../mysema/codegen/ComplexEvaluationTest.java | 5 +- .../com/mysema/codegen/JavaWriterTest.java | 21 ++--- .../mysema/codegen/model/ClassTypeTest.java | 5 +- .../com/mysema/codegen/model/TypeTest.java | 10 +-- 13 files changed, 205 insertions(+), 132 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index cdaa9eb202..1cc68fc179 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -6,7 +6,6 @@ package com.mysema.codegen; import static com.mysema.codegen.Symbols.NEWLINE; -import static com.mysema.codegen.Symbols.SEMICOLON; import java.io.IOException; diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 43da487755..2e6422f642 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -13,6 +13,7 @@ import org.apache.commons.collections15.Transformer; +import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; /** @@ -31,21 +32,21 @@ public interface CodeWriter extends Appendable{ CodeWriter beginClass(Type type, @Nullable Type superClass, Type... interfaces) throws IOException; - CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; + CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; - CodeWriter beginConstructor(String... params) throws IOException; + CodeWriter beginConstructor(Parameter... params) throws IOException; CodeWriter beginInterface(Type type, Type... interfaces) throws IOException; CodeWriter beginLine(String... segments) throws IOException; - CodeWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; + CodeWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; - CodeWriter beginPublicMethod(Type returnType, String methodName, String... args) throws IOException; + CodeWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException; - CodeWriter beginStaticMethod(Type type, String name, Collection params, Transformer transformer) throws IOException; + CodeWriter beginStaticMethod(Type type, String name, Collection params, Transformer transformer) throws IOException; - CodeWriter beginStaticMethod(Type returnType, String methodName, String... args) throws IOException; + CodeWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException; CodeWriter end() throws IOException; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index dd59083734..70f0b67afc 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -24,6 +24,7 @@ import javax.tools.JavaCompiler.CompilationTask; import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; @@ -59,8 +60,7 @@ public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } - - @SuppressWarnings("unchecked") + private void compile(String source, Type projectionType, String[] names, Type[] types, String id, Map constants) throws IOException { // create source @@ -68,9 +68,9 @@ private void compile(String source, Type projectionType, JavaWriter javaw = new JavaWriter(writer); SimpleType idType = new SimpleType(id, "", id); javaw.beginClass(idType, null); - String[] params = new String[names.length]; + Parameter[] params = new Parameter[names.length]; for (int i = 0; i < params.length; i++) { - params[i] = types[i].getGenericName(true) + " " + names[i]; + params[i] = new Parameter(names[i], types[i]); } for (Map.Entry entry : constants.entrySet()){ @@ -105,7 +105,6 @@ private void compile(String source, Type projectionType, } - @SuppressWarnings("unchecked") public Evaluator createEvaluator( String source, Class projectionType, @@ -132,7 +131,7 @@ public Evaluator createEvaluator( */ public Evaluator createEvaluator( String source, - ClassType projection, + ClassType projection, String[] names, Type[] types, Class[] classes, @@ -156,7 +155,7 @@ public Evaluator createEvaluator( } Method method = clazz.getMethod("eval", classes); - return new MethodEvaluator(method, object, projection.getJavaClass()); + return new MethodEvaluator(method, object, (Class)projection.getJavaClass()); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index c1347f44f9..70f37f6610 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -22,8 +22,8 @@ import org.apache.commons.collections15.Transformer; import org.apache.commons.lang.StringEscapeUtils; -import org.apache.commons.lang.StringUtils; +import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; @@ -67,15 +67,15 @@ public final class JavaWriter extends AbstractCodeWriter{ private static final String PUBLIC_STATIC_FINAL = "public static final "; - private final Set importedClasses = new HashSet(); + private final Set classes = new HashSet(); - private final Set importedPackages = new HashSet(); + private final Set packages = new HashSet(); private Type type; public JavaWriter(Appendable appendable){ super(appendable); - this.importedPackages.add("java.lang"); + this.packages.add("java.lang"); } @Override @@ -148,7 +148,7 @@ private void annotationConstant(Object value) throws IOException{ } private JavaWriter appendType(Class type) throws IOException{ - if (importedClasses.contains(type.getName()) || importedPackages.contains(type.getPackage().getName())){ + if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ append(type.getSimpleName()); }else{ append(type.getName()); @@ -163,10 +163,10 @@ public JavaWriter beginClass(Type type) throws IOException{ @Override public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException{ - importedPackages.add(type.getPackageName()); + packages.add(type.getPackageName()); beginLine(PUBLIC_CLASS + type.getSimpleName()); if (superClass != null){ - append(EXTENDS + superClass.getGenericName(false, importedPackages, importedClasses)); + append(EXTENDS + superClass.getGenericName(false, packages, classes)); } if (interfaces.length > 0){ append(IMPLEMENTS); @@ -174,7 +174,7 @@ public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) thr if (i > 0){ append(COMMA); } - append(interfaces[i].getGenericName(false, importedPackages, importedClasses)); + append(interfaces[i].getGenericName(false, packages, classes)); } } append(" {").nl().nl(); @@ -184,28 +184,28 @@ public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) thr } @Override - public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); return goIn(); } @Override - public JavaWriter beginConstructor(String... parameters) throws IOException{ + public JavaWriter beginConstructor(Parameter... parameters) throws IOException{ beginLine(PUBLIC + type.getSimpleName()).params(parameters).append(" {").nl(); return goIn(); } @Override public JavaWriter beginInterface(Type type, Type... interfaces) throws IOException { - importedPackages.add(type.getPackageName()); - beginLine(PUBLIC_INTERFACE + type.getGenericName(false, importedPackages, importedClasses)); + packages.add(type.getPackageName()); + beginLine(PUBLIC_INTERFACE + type.getGenericName(false, packages, classes)); if (interfaces.length > 0){ append(EXTENDS); for (int i = 0; i < interfaces.length; i++){ if (i > 0){ append(COMMA); } - append(interfaces[i].getGenericName(false, importedPackages, importedClasses)); + append(interfaces[i].getGenericName(false, packages, classes)); } } append(" {").nl().nl(); @@ -214,28 +214,28 @@ public JavaWriter beginInterface(Type type, Type... interfaces) throws IOExcepti return this; } - private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, String... args) throws IOException{ - beginLine(modifiers + returnType + SPACE + methodName).params(args).append(" {").nl(); + private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ + beginLine(modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName).params(args).append(" {").nl(); return goIn(); } @Override - public JavaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC, returnType, methodName, transform(parameters, transformer)); } @Override - public JavaWriter beginPublicMethod(Type returnType, String methodName, String... args) throws IOException{ + public JavaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException{ return beginMethod(PUBLIC, returnType, methodName, args); } @Override - public JavaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC_STATIC, returnType, methodName, transform(parameters, transformer)); } @Override - public JavaWriter beginStaticMethod(Type returnType, String methodName, String... args) throws IOException{ + public JavaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException{ return beginMethod(PUBLIC_STATIC, returnType, methodName, args); } @@ -247,21 +247,21 @@ public JavaWriter end() throws IOException{ @Override public JavaWriter field(Type type, String name) throws IOException { - return line(type.getGenericName(false, importedPackages, importedClasses) + SPACE + name + SEMICOLON).nl(); + return line(type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); } private JavaWriter field(String modifier, Type type, String name) throws IOException{ - return line(modifier + type.getGenericName(false, importedPackages, importedClasses) + SPACE + name + SEMICOLON).nl(); + return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); } private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ - return line(modifier + type.getGenericName(false, importedPackages, importedClasses) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); + return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); } @Override public JavaWriter imports(Class... imports) throws IOException{ for (Class cl : imports){ - importedClasses.add(cl.getName()); + classes.add(cl.getName()); line(IMPORT + cl.getName() + SEMICOLON); } nl(); @@ -271,7 +271,7 @@ public JavaWriter imports(Class... imports) throws IOException{ @Override public JavaWriter imports(Package... imports) throws IOException { for (Package p : imports){ - importedPackages.add(p.getName()); + packages.add(p.getName()); line(IMPORT + p.getName() + ".*;"); } nl(); @@ -281,7 +281,7 @@ public JavaWriter imports(Package... imports) throws IOException { @Override public JavaWriter importClasses(String... imports) throws IOException{ for (String cl : imports){ - importedClasses.add(cl); + classes.add(cl); line(IMPORT + cl + SEMICOLON); } nl(); @@ -291,7 +291,7 @@ public JavaWriter importClasses(String... imports) throws IOException{ @Override public JavaWriter importPackages(String... imports) throws IOException { for (String p : imports){ - importedPackages.add(p); + packages.add(p); line(IMPORT + p + ".*;"); } nl(); @@ -309,31 +309,43 @@ public JavaWriter javadoc(String... lines) throws IOException { @Override public JavaWriter packageDecl(String packageName) throws IOException{ - importedPackages.add(packageName); + packages.add(packageName); return line(PACKAGE + packageName + SEMICOLON).nl(); } - private JavaWriter params(Collection parameters, Transformer transformer) throws IOException{ + private JavaWriter params(Collection parameters, Transformer transformer) throws IOException{ append("("); boolean first = true; for (T param : parameters){ if (!first){ append(COMMA); } - append(transformer.transform(param)); + param(transformer.transform(param)); first = false; } append(")"); return this; } - private JavaWriter params(String... params) throws IOException{ + private JavaWriter params(Parameter... params) throws IOException{ append("("); - append(StringUtils.join(params, COMMA)); + for (int i = 0; i < params.length; i++){ + if (i > 0){ + append(COMMA); + } + param(params[i]); + } append(")"); return this; } + private JavaWriter param(Parameter parameter) throws IOException{ + append(parameter.getType().getGenericName(true, packages, classes)); + append(" "); + append(parameter.getName()); + return this; + } + @Override public JavaWriter privateField(Type type, String name) throws IOException { return field(PRIVATE, type, name); @@ -402,8 +414,8 @@ public JavaWriter suppressWarnings(String type) throws IOException{ return line("@SuppressWarnings(\"" + type +"\")"); } - private String[] transform(Collection parameters, Transformer transformer){ - String[] rv = new String[parameters.size()]; + private Parameter[] transform(Collection parameters, Transformer transformer){ + Parameter[] rv = new Parameter[parameters.size()]; int i = 0; for (T value : parameters){ rv[i++] = transformer.transform(value); diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 6be8581eab..8be21f914b 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -23,57 +23,60 @@ * @param */ @Immutable -public class ClassType implements Type { +public class ClassType implements Type { private final TypeCategory category; - private final Class javaClass; + private final Class javaClass; private final List parameters; @Nullable private final Class primitiveClass; + private Type arrayType, componentType; - public ClassType(Class javaClass) { - this(TypeCategory.SIMPLE, javaClass, null, Collections.emptyList()); + public ClassType(Class javaClass, Type... parameters) { + this(TypeCategory.SIMPLE, javaClass, null, Arrays.asList(parameters)); } - public ClassType(TypeCategory category, Class javaClass, List parameters) { - this(category, javaClass, null, parameters); + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { + this(category, javaClass, primitiveClass, Collections.emptyList()); } - public ClassType(TypeCategory category, Class clazz, Type... parameters) { - this(category, clazz, null, Arrays.asList(parameters)); - } - - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { - this(category, javaClass, primitiveClass, Collections.emptyList()); - } - - public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { + public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { this.category = category; this.javaClass = javaClass; this.primitiveClass = primitiveClass; this.parameters = parameters; } + + public ClassType(TypeCategory category, Class javaClass, List parameters) { + this(category, javaClass, null, parameters); + } + + public ClassType(TypeCategory category, Class clazz, Type... parameters) { + this(category, clazz, null, Arrays.asList(parameters)); + } @Override public Type as(TypeCategory c) { if (category == c){ return this; }else{ - return new ClassType(c, javaClass); + return new ClassType(c, javaClass); } } @Override public Type asArrayType() { - String fullName = javaClass.getName()+"[]"; - String simpleName = javaClass.getSimpleName()+"[]"; - return new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + if (arrayType == null){ + String fullName = javaClass.getName()+"[]"; + String simpleName = javaClass.getSimpleName()+"[]"; + arrayType = new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + } + return arrayType; } - @Override public boolean equals(Object o){ @@ -86,11 +89,20 @@ public boolean equals(Object o){ return false; } } - + public TypeCategory getCategory() { return category; } + @Override + public Type getComponentType() { + Class clazz = javaClass.getComponentType(); + if (clazz != null && componentType == null){ + componentType = new ClassType(TypeCategory.SIMPLE, clazz); + } + return componentType; + } + @Override public String getFullName() { return javaClass.getName(); @@ -112,7 +124,7 @@ public String getGenericName(boolean asArgType, Set packages, Set packages, Set getJavaClass() { + public Class getJavaClass() { return javaClass; } @Override public String getPackageName() { - return javaClass.getPackage().getName(); + if (javaClass.getPackage() != null){ + return javaClass.getPackage().getName(); + }else{ + return ""; + } } @Override @@ -154,17 +170,17 @@ public String getRawName(Set packages, Set classes) { public String getSimpleName() { return javaClass.getSimpleName(); } - + @Override public int hashCode(){ return javaClass.getName().hashCode(); } - + @Override public boolean isFinal() { return Modifier.isFinal(javaClass.getModifiers()); } - + @Override public boolean isPrimitive() { // return javaClass.isPrimitive(); diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 6bf7847862..e19de05ad0 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -26,19 +26,21 @@ public class SimpleType implements Type { private final List parameters; private final boolean primitiveClass, finalClass; - - public SimpleType(Type type, Type... parameters) { - this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), - type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); - } + private Type arrayType, componentType; + public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Arrays.asList(parameters)); } - public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, boolean p, boolean f, Type... parameters) { - this(typeCategory, fullName, packageName, simpleName, p, f, Arrays - .asList(parameters)); + public SimpleType(Type type, List parameters) { + this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), + type.isPrimitive(), type.isFinal(), parameters); + } + + public SimpleType(Type type, Type... parameters) { + this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), + type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); } public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, @@ -56,6 +58,11 @@ public SimpleType(TypeCategory category, String fullName, String packageName, St this.finalClass = finalClass; this.parameters = parameters; } + + public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, boolean p, boolean f, Type... parameters) { + this(typeCategory, fullName, packageName, simpleName, p, f, Arrays + .asList(parameters)); + } @Override public Type as(TypeCategory c) { @@ -68,11 +75,13 @@ public Type as(TypeCategory c) { @Override public Type asArrayType() { - String newFullName = getFullName()+"[]"; - String newSimpleName = getSimpleName()+"[]"; - return new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), newSimpleName, false, false); + if (arrayType == null){ + String newFullName = getFullName()+"[]"; + String newSimpleName = getSimpleName()+"[]"; + arrayType = new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), newSimpleName, false, false); + } + return arrayType; } - @Override public boolean equals(Object o){ @@ -85,11 +94,25 @@ public boolean equals(Object o){ return false; } } - + public TypeCategory getCategory() { return category; } + @Override + public Type getComponentType() { + if (fullName.endsWith("[]")){ + if (componentType == null){ + String newFullName = fullName.substring(0, fullName.length()-2); + String newSimpleName = simpleName.substring(0, simpleName.length()-2); + componentType = new SimpleType(TypeCategory.SIMPLE, newFullName, getPackageName(), newSimpleName, false, false); + } + return componentType; + }else{ + return null; + } + } + @Override public String getFullName() { return fullName; @@ -111,7 +134,7 @@ public String getGenericName(boolean asArgType, Set packages, Set packages, Set classes) { public String getSimpleName() { return simpleName; } - + @Override public int hashCode(){ return fullName.hashCode(); @@ -168,9 +191,10 @@ public boolean isFinal() { public boolean isPrimitive() { return primitiveClass; } - + public String toString(){ return getGenericName(true); } + } diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index 72f6382bc1..a3b211f726 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -19,6 +19,9 @@ public interface Type { Type asArrayType(); + @Nullable + Type getComponentType(); + TypeCategory getCategory(); String getFullName(); diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index 8888f121a9..e06b6a33be 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -35,6 +35,11 @@ public Type asArrayType() { return type.asArrayType(); } + @Override + public Type getComponentType() { + return type.getComponentType(); + } + @Override public boolean equals(Object o){ return type.equals(o); diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 2186ece5e6..4fdc4aeb72 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -18,50 +18,63 @@ * @author tiwe * */ -@SuppressWarnings("unchecked") public final class Types { - public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE,Object.class); + public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE, Object.class); - public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY,Object[].class); + public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY, Object[].class); - public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC,BigDecimal.class); + public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC, BigDecimal.class); - public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC,BigInteger.class); + public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC, BigInteger.class); - public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN,Boolean.class, boolean.class); + public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN, Boolean.class, boolean.class); - public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC,Byte.class, byte.class); + public static final ClassType BOOLEAN_P = new ClassType(TypeCategory.BOOLEAN, boolean.class); - public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE,Character.class, char.class); + public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC, Byte.class, byte.class); + + public static final ClassType BYTE_P = new ClassType(TypeCategory.NUMERIC, byte.class); + + public static final ClassType CHARACTER = new ClassType(TypeCategory.COMPARABLE, Character.class, char.class); + + public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE, char.class); - public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); + public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); + + public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC, Double.class, double.class); - public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC,Double.class, double.class); + public static final ClassType DOUBLE_P = new ClassType(TypeCategory.NUMERIC, double.class); - public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC,Float.class, float.class); + public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC, Float.class, float.class); - public static final ClassType INT = new ClassType(TypeCategory.NUMERIC,Integer.class, int.class); + public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class); + + public static final ClassType INT = new ClassType(TypeCategory.NUMERIC, int.class); - public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, OBJECT); + public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, OBJECT); - public static final ClassType LIST = new ClassType(TypeCategory.LIST, List.class, OBJECT); + public static final ClassType LIST = new ClassType(TypeCategory.LIST, List.class, OBJECT); - public static final ClassType LOCALE = new ClassType(TypeCategory.SIMPLE, Locale.class); + public static final ClassType LOCALE = new ClassType(TypeCategory.SIMPLE, Locale.class); - public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC,Long.class, long.class); + public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC, Long.class, long.class); + + public static final ClassType LONG_P = new ClassType(TypeCategory.NUMERIC, long.class); - public static final ClassType MAP = new ClassType(TypeCategory.MAP, Map.class, OBJECT, OBJECT); + public static final ClassType MAP = new ClassType(TypeCategory.MAP, Map.class, OBJECT, OBJECT); - public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); + public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); + + public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC, Short.class, short.class); - public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC,Short.class, short.class); + public static final ClassType SHORT_P = new ClassType(TypeCategory.NUMERIC, short.class); - public static final ClassType STRING = new ClassType(TypeCategory.STRING,String.class); + public static final ClassType STRING = new ClassType(TypeCategory.STRING, String.class); - public static final ClassType URI = new ClassType(TypeCategory.COMPARABLE,URI.class); + public static final ClassType URI = new ClassType(TypeCategory.COMPARABLE, URI.class); - public static final ClassType VOID = new ClassType(TypeCategory.SIMPLE, void.class); + public static final ClassType VOID = new ClassType(TypeCategory.SIMPLE, void.class); public static final SimpleType DATE_TIME = new SimpleType(TypeCategory.DATETIME, "org.joda.time.DateTime", "org.joda.time", "DateTime", false, false); diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index 2c05a7ecd7..a112cd31de 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -17,6 +17,7 @@ import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; +import com.mysema.codegen.model.Types; public class ComplexEvaluationTest { @@ -25,8 +26,8 @@ public class ComplexEvaluationTest { @Test @SuppressWarnings("unchecked") - public void testComplex(){ClassType stringType = new ClassType(TypeCategory.STRING,String.class); - ClassType resultType = new ClassType(TypeCategory.LIST,List.class, stringType); + public void testComplex(){ + ClassType resultType = new ClassType(TypeCategory.LIST,List.class, Types.STRING); StringBuilder source = new StringBuilder(); source.append("java.util.List rv = new java.util.ArrayList();\n"); source.append("for (String a : a_){\n"); diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index ffeeca3f50..d24f659d78 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -18,16 +18,17 @@ import org.junit.Test; import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; public class JavaWriterTest { - - private static final Transformer transformer = new Transformer(){ - @Override - public String transform(String input) { - return input; + + private static final Transformer transformer = new Transformer(){ + @Override + public Parameter transform(Parameter input) { + return input; } }; @@ -48,7 +49,7 @@ private static void match(String resource, String text) throws IOException{ public void setUp(){ w = new StringWriter(); writer = new JavaWriter(w); - testType = new ClassType(JavaWriterTest.class); + testType = new ClassType(JavaWriterTest.class); testType2 = new SimpleType("com.mysema.codegen.Test","com.mysema.codegen","Test"); testSuperType = new SimpleType("com.mysema.codegen.Superclass","com.mysema.codegen","Superclass"); testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); @@ -189,11 +190,11 @@ public void testMethods() throws IOException{ // method // public - writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList("String a"), transformer); + writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList("String a"), transformer); + writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); @@ -206,10 +207,10 @@ public void testMethods() throws IOException{ public void testConstructors() throws IOException{ writer.beginClass(testType); - writer.beginConstructor(Arrays.asList("String a","String b"), transformer); + writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); writer.end(); - writer.beginConstructor("String a"); + writer.beginConstructor(new Parameter("a", Types.STRING)); writer.end(); writer.end(); diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index d075e3077c..09743d286c 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -15,7 +15,7 @@ public class ClassTypeTest { - private ClassType stringType = new ClassType(TypeCategory.STRING, String.class); + private ClassType stringType = new ClassType(TypeCategory.STRING, String.class); // @Test // public void asArrayType(){ @@ -27,10 +27,9 @@ public void as(){ assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); } - @SuppressWarnings("unchecked") @Test public void getParameters(){ - ClassType mapType = new ClassType(TypeCategory.MAP, Map.class, stringType, stringType); + ClassType mapType = new ClassType(TypeCategory.MAP, Map.class, stringType, stringType); assertEquals(2, mapType.getParameters().size()); assertEquals(stringType, mapType.getParameters().get(0)); assertEquals(stringType, mapType.getParameters().get(1)); diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index 8f067c39e1..44ca93972c 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -22,7 +22,7 @@ public class TypeTest { private Set emptyStrings = Collections.emptySet(); - private ClassType locale = new ClassType(TypeCategory.SIMPLE,Locale.class); + private ClassType locale = new ClassType(TypeCategory.SIMPLE,Locale.class); private Type string = Types.STRING; @@ -30,11 +30,11 @@ public class TypeTest { private Type locale2 = new SimpleType(locale); - private Type stringList = new ClassType(TypeCategory.LIST, List.class, Types.STRING); + private Type stringList = new ClassType(TypeCategory.LIST, List.class, Types.STRING); private Type stringList2 = new SimpleType(Types.LIST, Types.STRING); - private Type stringMap = new ClassType(TypeCategory.MAP, Map.class, Types.STRING, Types.STRING); + private Type stringMap = new ClassType(TypeCategory.MAP, Map.class, Types.STRING, Types.STRING); private Type stringMap2 = new SimpleType(Types.MAP, Types.STRING, Types.STRING); @@ -63,8 +63,8 @@ public void testGetGenericNameBoolean() { assertEquals("java.util.Locale",locale2.getGenericName(true)); assertEquals("java.util.List",stringList.getGenericName(true)); assertEquals("java.util.List",stringList2.getGenericName(true)); - assertEquals("java.util.Map", stringMap.getGenericName(true)); - assertEquals("java.util.Map", stringMap2.getGenericName(true)); + assertEquals("java.util.Map", stringMap.getGenericName(true)); + assertEquals("java.util.Map", stringMap2.getGenericName(true)); assertEquals("String", string.getGenericName(true)); assertEquals("String", string2.getGenericName(true)); From 0dd07cf34c2559a70229f1f92cd52f4c26e62eca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 08:49:35 +0000 Subject: [PATCH 0086/1968] --- src/main/java/com/mysema/codegen/EvaluatorFactory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 70f0b67afc..bc28db7f0f 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -129,6 +129,7 @@ public Evaluator createEvaluator( * @param constants * @return */ + @SuppressWarnings("unchecked") public Evaluator createEvaluator( String source, ClassType projection, From 0ee2f0e293d3e621663f7b3e50fe7da2cd3f33db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 09:25:44 +0000 Subject: [PATCH 0087/1968] --- src/main/java/com/mysema/codegen/EvaluatorFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index bc28db7f0f..a79a001f25 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -28,6 +28,7 @@ import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; +import com.mysema.codegen.support.ClassUtils; @@ -74,8 +75,7 @@ private void compile(String source, Type projectionType, } for (Map.Entry entry : constants.entrySet()){ -// String className = ClassUtils.getName(ClassUtils.normalize(entry.getValue().getClass())); - Type type = new ClassType(TypeCategory.SIMPLE, entry.getValue().getClass()); + Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); javaw.publicField(type, entry.getKey()); } From cf39eb70d9f7150b836fcdb6538f0bea99e092d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 09:27:17 +0000 Subject: [PATCH 0088/1968] --- src/main/java/com/mysema/codegen/model/ClassType.java | 1 + src/main/java/com/mysema/codegen/model/SimpleType.java | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 8be21f914b..bdc553f7a9 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -34,6 +34,7 @@ public class ClassType implements Type { @Nullable private final Class primitiveClass; + @Nullable private Type arrayType, componentType; public ClassType(Class javaClass, Type... parameters) { diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index e19de05ad0..408c3ccb77 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -10,6 +10,8 @@ import java.util.List; import java.util.Set; +import javax.annotation.Nullable; + import net.jcip.annotations.Immutable; @@ -27,6 +29,7 @@ public class SimpleType implements Type { private final boolean primitiveClass, finalClass; + @Nullable private Type arrayType, componentType; public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { From 85972b2627bcce95207ba000d7180b086ff79449 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 09:41:43 +0000 Subject: [PATCH 0089/1968] updated version to 0.2.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 06728e833e..ea29bbef84 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.0-SNAPSHOT + 0.2.1 Codegen Code generation and compilation for Java From aa474720d2a3316dc63b6044c2cfaecaff905d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 09:42:30 +0000 Subject: [PATCH 0090/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea29bbef84..d3bdd945cd 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.1 + 0.2.1-SNAPSHOT Codegen Code generation and compilation for Java From cd8655a5c8bc3e39d707f2724129a0b9d5e3726e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Aug 2010 11:51:27 +0000 Subject: [PATCH 0091/1968] updated version to 0.2.2 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/CodeWriter.java | 4 ++++ src/main/java/com/mysema/codegen/JavaWriter.java | 11 +++++++++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d3bdd945cd..fcfe01da3e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.1-SNAPSHOT + 0.2.2 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 2e6422f642..68d0270627 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -24,6 +24,10 @@ */ public interface CodeWriter extends Appendable{ + String getRawName(Type type); + + String getGenericName(boolean asArgType, Type type); + CodeWriter annotation(Annotation annotation) throws IOException; CodeWriter annotation(Class annotation) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 70f37f6610..b3d4a468fc 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -257,6 +257,16 @@ private JavaWriter field(String modifier, Type type, String name) throws IOExcep private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); } + + @Override + public String getGenericName(boolean asArgType, Type type) { + return type.getGenericName(asArgType, packages, classes); + } + + @Override + public String getRawName(Type type) { + return type.getRawName(packages, classes); + } @Override public JavaWriter imports(Class... imports) throws IOException{ @@ -423,4 +433,5 @@ private Parameter[] transform(Collection parameters, Transformer Date: Thu, 19 Aug 2010 11:52:05 +0000 Subject: [PATCH 0092/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fcfe01da3e..3b092a127f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.2 + 0.2.2-SNAPSHOT Codegen Code generation and compilation for Java From 748535215b7bfa6179cf10ca84dcb43978596b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 23 Aug 2010 20:09:27 +0000 Subject: [PATCH 0093/1968] added Enum type category --- src/main/java/com/mysema/codegen/model/TypeCategory.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java index 07b676f0c9..2d070ccaa5 100644 --- a/src/main/java/com/mysema/codegen/model/TypeCategory.java +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -64,6 +64,10 @@ public enum TypeCategory { "org.joda.time.Instant", "org.joda.time.DateTime", "org.joda.time.DateMidnight"), + /** + * + */ + ENUM(COMPARABLE), /** * */ From f1a387c9b290279a030b803f94bcbfa9a19aacbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 24 Aug 2010 07:59:04 +0000 Subject: [PATCH 0094/1968] updated version to 0.2.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3b092a127f..1f40ecfb8b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.2-SNAPSHOT + 0.2.3 Codegen Code generation and compilation for Java From 5570568d31b84947e38f41f2a266f2d08dc625d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 24 Aug 2010 07:59:47 +0000 Subject: [PATCH 0095/1968] updated version to 0.2.3-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1f40ecfb8b..e5f9bbc1dc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.3 + 0.2.3-SNAPSHOT Codegen Code generation and compilation for Java From eb49b3a7460183eaf404c892c794d03135d1a432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 1 Sep 2010 12:10:23 +0000 Subject: [PATCH 0096/1968] added stub for ScalaWriter --- .../java/com/mysema/codegen/ScalaWriter.java | 431 ++++++++++++++++++ .../com/mysema/codegen/model/SimpleType.java | 6 +- .../com/mysema/codegen/ScalaWriterTest.java | 54 +++ 3 files changed, 490 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/mysema/codegen/ScalaWriter.java create mode 100644 src/test/java/com/mysema/codegen/ScalaWriterTest.java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java new file mode 100644 index 0000000000..54a9a319b4 --- /dev/null +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -0,0 +1,431 @@ +package com.mysema.codegen; + +import static com.mysema.codegen.Symbols.ASSIGN; +import static com.mysema.codegen.Symbols.COMMA; +import static com.mysema.codegen.Symbols.DOT; +import static com.mysema.codegen.Symbols.QUOTE; +import static com.mysema.codegen.Symbols.SEMICOLON; +import static com.mysema.codegen.Symbols.SPACE; + +import java.io.IOException; +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import org.apache.commons.collections15.Transformer; +import org.apache.commons.lang.StringEscapeUtils; + +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.Type; + +/** + * @author tiwe + * + */ +public class ScalaWriter extends AbstractCodeWriter{ + + private static final String DEF = "def "; + + private static final String EXTENDS = " extends "; + + private static final String IMPLEMENTS = " implements "; + + private static final String IMPORT = "import "; + + private static final String IMPORT_STATIC = "import static "; + + private static final String PACKAGE = "package "; + + private static final String PRIVATE = "private "; + + private static final String PRIVATE_FINAL = "private final "; + + private static final String PRIVATE_STATIC_FINAL = "private static final "; + + private static final String PROTECTED = "protected "; + + private static final String PROTECTED_FINAL = "protected final "; + + private static final String PUBLIC = "public "; + + private static final String PUBLIC_CLASS = "class "; + + private static final String PUBLIC_FINAL = "public final "; + + private static final String TRAIT = "trait "; + + private static final String PUBLIC_STATIC = "public static "; + + private static final String PUBLIC_STATIC_FINAL = "public static final "; + + private final Set classes = new HashSet(); + + private final Set packages = new HashSet(); + + private Type type; + + public ScalaWriter(Appendable appendable){ + super(appendable); + this.packages.add("java.lang"); + } + + @Override + public ScalaWriter annotation(Annotation annotation) throws IOException { + beginLine().append("@").appendType(annotation.annotationType()); + Method[] methods = annotation.annotationType().getDeclaredMethods(); + if (methods.length == 1 && methods[0].getName().equals("value")){ + try { + Object value = methods[0].invoke(annotation); + append("("); + annotationConstant(value); + append(")"); + } catch (IllegalArgumentException e) { + throw new CodegenException(e); + } catch (IllegalAccessException e) { + throw new CodegenException(e); + } catch (InvocationTargetException e) { + throw new CodegenException(e); + } + }else{ + boolean first = true; + for (Method method : methods){ + try { + Object value = method.invoke(annotation); + if (value == null || value.equals(method.getDefaultValue())){ + continue; + }else if (!first){ + append(COMMA); + }else{ + append("("); + } + append(method.getName()+"="); + annotationConstant(value); + } catch (IllegalArgumentException e) { + throw new CodegenException(e); + } catch (IllegalAccessException e) { + throw new CodegenException(e); + } catch (InvocationTargetException e) { + throw new CodegenException(e); + } + first = false; + } + if (!first){ + append(")"); + } + } + return nl(); + } + + @Override + public ScalaWriter annotation(Class annotation) throws IOException { + return beginLine().append("@").appendType(annotation).nl(); + } + + @SuppressWarnings("unchecked") + private void annotationConstant(Object value) throws IOException{ + if (value instanceof Class){ + appendType((Class)value).append(".class"); + }else if (value instanceof Number || value instanceof Boolean){ + append(value.toString()); + }else if (value instanceof Enum){ + Enum enumValue = (Enum)value; + append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + }else if (value instanceof String){ + append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); + }else{ + throw new IllegalArgumentException("Unsupported annotation value : " + value); + } + } + + private ScalaWriter appendType(Class type) throws IOException{ + if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ + append(type.getSimpleName()); + }else{ + append(type.getName()); + } + return this; + } + + @Override + public ScalaWriter beginClass(Type type) throws IOException { + return beginClass(type, null); + } + + @Override + public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException { + packages.add(type.getPackageName()); + beginLine(PUBLIC_CLASS + type.getSimpleName()); + if (superClass != null){ + append(EXTENDS + superClass.getGenericName(false, packages, classes)); + } + if (interfaces.length > 0){ + append(IMPLEMENTS); + for (int i = 0; i < interfaces.length; i++){ + if (i > 0){ + append(COMMA); + } + append(interfaces[i].getGenericName(false, packages, classes)); + } + } + append(" {").nl().nl(); + goIn(); + this.type = type; + return this; + } + + @Override + public ScalaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { + beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); + return goIn(); + } + + @Override + public ScalaWriter beginConstructor(Parameter... params) throws IOException { + beginLine(PUBLIC + type.getSimpleName()).params(params).append(" {").nl(); + return goIn(); + } + + @Override + public ScalaWriter beginInterface(Type type, Type... interfaces) + throws IOException { + packages.add(type.getPackageName()); + beginLine(TRAIT + type.getGenericName(false, packages, classes)); + if (interfaces.length > 0){ + append(EXTENDS); + for (int i = 0; i < interfaces.length; i++){ + if (i > 0){ + append(COMMA); + } + append(interfaces[i].getGenericName(false, packages, classes)); + } + } + append(" {").nl().nl(); + goIn(); + this.type = type; + return this; + } + + private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ +// beginLine(modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName).params(args).append(" {").nl(); + beginLine(modifiers + methodName).params(args).append(" {").nl(); + return goIn(); + } + + @Override + public ScalaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); + } + + @Override + public ScalaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException{ + return beginMethod(DEF, returnType, methodName, args); + } + + @Override + public ScalaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); + } + + @Override + public ScalaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException{ + return beginMethod(DEF, returnType, methodName, args); + } + + @Override + public ScalaWriter end() throws IOException { + goOut(); + return line("}").nl(); + } + + public ScalaWriter field(Type type, String name) throws IOException { + return line(type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); + } + + private ScalaWriter field(String modifier, Type type, String name) throws IOException{ + return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); + } + + private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ + return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); + } + + @Override + public String getGenericName(boolean asArgType, Type type) { + return type.getGenericName(asArgType, packages, classes); + } + + @Override + public String getRawName(Type type) { + return type.getRawName(packages, classes); + } + + @Override + public ScalaWriter imports(Class... imports) throws IOException{ + for (Class cl : imports){ + classes.add(cl.getName()); + line(IMPORT + cl.getName() + SEMICOLON); + } + nl(); + return this; + } + + @Override + public ScalaWriter imports(Package... imports) throws IOException { + for (Package p : imports){ + packages.add(p.getName()); + line(IMPORT + p.getName() + "._;"); + } + nl(); + return this; + } + + @Override + public ScalaWriter importClasses(String... imports) throws IOException{ + for (String cl : imports){ + classes.add(cl); + line(IMPORT + cl + SEMICOLON); + } + nl(); + return this; + } + + @Override + public ScalaWriter importPackages(String... imports) throws IOException { + for (String p : imports){ + packages.add(p); + line(IMPORT + p + "._;"); + } + nl(); + return this; + } + + @Override + public ScalaWriter javadoc(String... lines) throws IOException { + line("/**"); + for (String line : lines){ + line(" * " + line); + } + return line(" */"); + } + + @Override + public ScalaWriter packageDecl(String packageName) throws IOException { + packages.add(packageName); + return line(PACKAGE + packageName + SEMICOLON).nl(); + } + + private ScalaWriter params(Collection parameters, Transformer transformer) throws IOException{ + append("("); + boolean first = true; + for (T param : parameters){ + if (!first){ + append(COMMA); + } + param(transformer.transform(param)); + first = false; + } + append(")"); + return this; + } + + private ScalaWriter params(Parameter... params) throws IOException{ + append("("); + for (int i = 0; i < params.length; i++){ + if (i > 0){ + append(COMMA); + } + param(params[i]); + } + append(")"); + return this; + } + + + private ScalaWriter param(Parameter parameter) throws IOException{ + append(parameter.getName()); + append(": "); + append(parameter.getType().getGenericName(true, packages, classes)); + return this; + } + + @Override + public ScalaWriter privateField(Type type, String name) throws IOException { + return field(PRIVATE, type, name); + } + + @Override + public ScalaWriter privateFinal(Type type, String name) throws IOException { + return field(PRIVATE_FINAL, type, name); + } + + @Override + public ScalaWriter privateFinal(Type type, String name, String value) throws IOException { + return field(PRIVATE_FINAL, type, name, value); + } + + @Override + public ScalaWriter privateStaticFinal(Type type, String name, String value) throws IOException { + return field(PRIVATE_STATIC_FINAL, type, name, value); + } + + @Override + public ScalaWriter protectedField(Type type, String name) throws IOException { + return field(PROTECTED, type, name); + } + + @Override + public ScalaWriter protectedFinal(Type type, String name) throws IOException { + return field(PROTECTED_FINAL, type, name); + } + + @Override + public ScalaWriter protectedFinal(Type type, String name, String value) throws IOException { + return field(PROTECTED_FINAL, type, name, value); + } + + @Override + public ScalaWriter publicField(Type type, String name) throws IOException { + return field(PUBLIC, type, name); + } + + @Override + public ScalaWriter publicFinal(Type type, String name) throws IOException { + return field(PUBLIC_FINAL, type, name); + } + + @Override + public ScalaWriter publicFinal(Type type, String name, String value) throws IOException { + return field(PUBLIC_FINAL, type, name, value); + } + + @Override + public ScalaWriter publicStaticFinal(Type type, String name, String value) throws IOException { + return field(PUBLIC_STATIC_FINAL, type, name, value); + } + + @Override + public ScalaWriter staticimports(Class... imports) throws IOException { + for (Class cl : imports){ + line(IMPORT_STATIC + cl.getName() + "._;"); + } + return this; + } + + @Override + public ScalaWriter suppressWarnings(String type) throws IOException { + return line("@SuppressWarnings(\"" + type +"\")"); + } + + private Parameter[] transform(Collection parameters, Transformer transformer){ + Parameter[] rv = new Parameter[parameters.size()]; + int i = 0; + for (T value : parameters){ + rv[i++] = transformer.transform(value); + } + return rv; + } + +} diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 408c3ccb77..f3f8ba9322 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -31,10 +31,14 @@ public class SimpleType implements Type { @Nullable private Type arrayType, componentType; - + public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Arrays.asList(parameters)); } + + public SimpleType(String simpleName){ + this(TypeCategory.SIMPLE, simpleName, "", simpleName, false, false); + } public SimpleType(Type type, List parameters) { this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java new file mode 100644 index 0000000000..27effcf53d --- /dev/null +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -0,0 +1,54 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; + +import org.junit.Test; + +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.SimpleType; +import com.mysema.codegen.model.Types; + +public class ScalaWriterTest { + + private Writer w = new StringWriter(); + + private ScalaWriter writer = new ScalaWriter(w); + + @Test + public void beanAccessors() throws IOException{ + writer.beginClass(new SimpleType("Person")); + writer.beginPublicMethod(Types.STRING, "getName"); + writer.line("\"Daniel Spiewak\""); + writer.end(); + writer.beginPublicMethod(Types.VOID, "setName", new Parameter("name",Types.STRING)); + writer.line("//"); + writer.end(); + writer.end(); + + System.out.println(w); + } + + @Test + public void mainMethod() throws IOException{ +// def main(args: Array[String]) { + writer.beginClass(new SimpleType("Main")); + writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); + writer.line("//"); + writer.end(); + writer.end(); + + System.out.println(w); + } + + @Test + public void trait() throws IOException{ + writer.beginInterface(new SimpleType("MyTrait")); + writer.line("//"); + writer.end(); + + System.out.println(w); + } + +} From df2020e74b67d155ba0cf23e879d6e653cd97aa5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 1 Sep 2010 12:30:36 +0000 Subject: [PATCH 0097/1968] --- src/main/java/com/mysema/codegen/ScalaWriter.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 54a9a319b4..6733bba55c 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -43,8 +43,6 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String PRIVATE_FINAL = "private final "; - private static final String PRIVATE_STATIC_FINAL = "private static final "; - private static final String PROTECTED = "protected "; private static final String PROTECTED_FINAL = "protected final "; @@ -56,10 +54,6 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String PUBLIC_FINAL = "public final "; private static final String TRAIT = "trait "; - - private static final String PUBLIC_STATIC = "public static "; - - private static final String PUBLIC_STATIC_FINAL = "public static final "; private final Set classes = new HashSet(); @@ -368,7 +362,7 @@ public ScalaWriter privateFinal(Type type, String name, String value) throws IOE @Override public ScalaWriter privateStaticFinal(Type type, String name, String value) throws IOException { - return field(PRIVATE_STATIC_FINAL, type, name, value); + return field(PRIVATE_FINAL, type, name, value); } @Override @@ -403,7 +397,7 @@ public ScalaWriter publicFinal(Type type, String name, String value) throws IOEx @Override public ScalaWriter publicStaticFinal(Type type, String name, String value) throws IOException { - return field(PUBLIC_STATIC_FINAL, type, name, value); + return field(PUBLIC_FINAL, type, name, value); } @Override From 7f2ae57f45481ffeabd0e5ae3ef14dec9e61676c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 1 Sep 2010 13:05:10 +0000 Subject: [PATCH 0098/1968] added tests --- .../java/com/mysema/codegen/ScalaWriter.java | 75 +++++-- .../com/mysema/codegen/ScalaWriterTest.java | 209 +++++++++++++++++- 2 files changed, 261 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 6733bba55c..7ffdacffa6 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -26,7 +26,7 @@ * */ public class ScalaWriter extends AbstractCodeWriter{ - + private static final String DEF = "def "; private static final String EXTENDS = " extends "; @@ -41,17 +41,17 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String PRIVATE = "private "; - private static final String PRIVATE_FINAL = "private final "; + private static final String PRIVATE_VAL = "private val "; private static final String PROTECTED = "protected "; - private static final String PROTECTED_FINAL = "protected final "; + private static final String PROTECTED_VAL = "protected val "; private static final String PUBLIC = "public "; private static final String PUBLIC_CLASS = "class "; - private static final String PUBLIC_FINAL = "public final "; + private static final String VAL = "val "; private static final String TRAIT = "trait "; @@ -153,7 +153,7 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) th packages.add(type.getPackageName()); beginLine(PUBLIC_CLASS + type.getSimpleName()); if (superClass != null){ - append(EXTENDS + superClass.getGenericName(false, packages, classes)); + append(EXTENDS + getGenericName(false, superClass)); } if (interfaces.length > 0){ append(IMPLEMENTS); @@ -161,7 +161,7 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) th if (i > 0){ append(COMMA); } - append(interfaces[i].getGenericName(false, packages, classes)); + append(getGenericName(false, interfaces[i])); } } append(" {").nl().nl(); @@ -186,14 +186,14 @@ public ScalaWriter beginConstructor(Parameter... params) throws IOException { public ScalaWriter beginInterface(Type type, Type... interfaces) throws IOException { packages.add(type.getPackageName()); - beginLine(TRAIT + type.getGenericName(false, packages, classes)); + beginLine(TRAIT + getGenericName(false, type)); if (interfaces.length > 0){ append(EXTENDS); for (int i = 0; i < interfaces.length; i++){ if (i > 0){ append(COMMA); } - append(interfaces[i].getGenericName(false, packages, classes)); + append(getGenericName(false, interfaces[i])); } } append(" {").nl().nl(); @@ -235,25 +235,56 @@ public ScalaWriter end() throws IOException { } public ScalaWriter field(Type type, String name) throws IOException { - return line(type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); + return line(name + ": " + getGenericName(true, type) + SPACE + SEMICOLON).nl(); } private ScalaWriter field(String modifier, Type type, String name) throws IOException{ - return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); + return line(modifier + name + ": " + getGenericName(true, type) + SEMICOLON).nl(); } private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ - return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); + return line(modifier + name + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON).nl(); } @Override public String getGenericName(boolean asArgType, Type type) { - return type.getGenericName(asArgType, packages, classes); + if (type.getParameters().isEmpty()){ + return getRawName(type); + }else{ + StringBuilder builder = new StringBuilder(); + builder.append(getRawName(type)); + builder.append("["); + boolean first = true; + String fullName = type.getFullName(); + for (Type parameter : type.getParameters()){ + if (!first){ + builder.append(", "); + } + if (parameter == null || parameter.getFullName().equals(fullName)){ + builder.append("?"); + }else{ + builder.append(getGenericName(false, parameter)); + } + first = false; + } + builder.append("]"); + return builder.toString(); + } } @Override public String getRawName(Type type) { - return type.getRawName(packages, classes); + String fullName = type.getFullName(); + String packageName = type.getPackageName(); + if (packages.contains(packageName) || "java.lang".equals(packageName) || classes.contains(fullName)){ + if (packageName.length() > 0){ + return fullName.substring(packageName.length()+1); + }else{ + return fullName; + } + }else{ + return fullName; + } } @Override @@ -341,7 +372,7 @@ private ScalaWriter params(Parameter... params) throws IOException{ private ScalaWriter param(Parameter parameter) throws IOException{ append(parameter.getName()); append(": "); - append(parameter.getType().getGenericName(true, packages, classes)); + append(getGenericName(true, parameter.getType())); return this; } @@ -352,17 +383,17 @@ public ScalaWriter privateField(Type type, String name) throws IOException { @Override public ScalaWriter privateFinal(Type type, String name) throws IOException { - return field(PRIVATE_FINAL, type, name); + return field(PRIVATE_VAL, type, name); } @Override public ScalaWriter privateFinal(Type type, String name, String value) throws IOException { - return field(PRIVATE_FINAL, type, name, value); + return field(PRIVATE_VAL, type, name, value); } @Override public ScalaWriter privateStaticFinal(Type type, String name, String value) throws IOException { - return field(PRIVATE_FINAL, type, name, value); + return field(PRIVATE_VAL, type, name, value); } @Override @@ -372,12 +403,12 @@ public ScalaWriter protectedField(Type type, String name) throws IOException { @Override public ScalaWriter protectedFinal(Type type, String name) throws IOException { - return field(PROTECTED_FINAL, type, name); + return field(PROTECTED_VAL, type, name); } @Override public ScalaWriter protectedFinal(Type type, String name, String value) throws IOException { - return field(PROTECTED_FINAL, type, name, value); + return field(PROTECTED_VAL, type, name, value); } @Override @@ -387,17 +418,17 @@ public ScalaWriter publicField(Type type, String name) throws IOException { @Override public ScalaWriter publicFinal(Type type, String name) throws IOException { - return field(PUBLIC_FINAL, type, name); + return field(VAL, type, name); } @Override public ScalaWriter publicFinal(Type type, String name, String value) throws IOException { - return field(PUBLIC_FINAL, type, name, value); + return field(VAL, type, name, value); } @Override public ScalaWriter publicStaticFinal(Type type, String name, String value) throws IOException { - return field(PUBLIC_FINAL, type, name, value); + return field(VAL, type, name, value); } @Override diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 27effcf53d..016b467e18 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -1,21 +1,49 @@ package com.mysema.codegen; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import java.io.StringWriter; import java.io.Writer; +import java.lang.annotation.Annotation; +import java.util.Arrays; +import java.util.List; +import org.apache.commons.collections15.Transformer; +import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; +import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.SimpleType; +import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; public class ScalaWriterTest { + private static final Transformer transformer = new Transformer(){ + @Override + public Parameter transform(Parameter input) { + return input; + } + }; + private Writer w = new StringWriter(); private ScalaWriter writer = new ScalaWriter(w); + private Type testType, testType2, testSuperType, testInterface1, testInterface2; + + @Before + public void setUp(){ + testType = new ClassType(JavaWriterTest.class); + testType2 = new SimpleType("com.mysema.codegen.Test","com.mysema.codegen","Test"); + testSuperType = new SimpleType("com.mysema.codegen.Superclass","com.mysema.codegen","Superclass"); + testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); + testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); + } + @Test public void beanAccessors() throws IOException{ writer.beginClass(new SimpleType("Person")); @@ -31,7 +59,9 @@ public void beanAccessors() throws IOException{ } @Test - public void mainMethod() throws IOException{ + @Ignore + public void arrays() throws IOException{ + // FIXME // def main(args: Array[String]) { writer.beginClass(new SimpleType("Main")); writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); @@ -40,15 +70,192 @@ public void mainMethod() throws IOException{ writer.end(); System.out.println(w); + assertTrue(w.toString().contains("def main(args: Array[String])")); } @Test public void trait() throws IOException{ + // trait MyTrait writer.beginInterface(new SimpleType("MyTrait")); writer.line("//"); writer.end(); System.out.println(w); + assertTrue(w.toString().contains("trait MyTrait")); + } + + @Test + public void fields() throws IOException{ +// private val people: List[Person] + writer.imports(List.class); + writer.beginClass(new SimpleType("Main")); + writer.privateFinal(new SimpleType(Types.LIST, new SimpleType("Person")), "people"); + writer.end(); + + System.out.println(w); + assertTrue(w.toString().contains("private val people: List[Person]")); + } + + @Test + public void testBasic() throws IOException { + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class, Test.class); + writer.beginClass(testType); + writer.annotation(Test.class); + writer.beginPublicMethod(Types.VOID, "test"); + writer.line("// TODO"); + writer.end(); + writer.end(); + +// match("/testBasic", w.toString()); + } + + @Test + public void testExtends() throws IOException{ + writer.beginClass(testType2, testSuperType); + writer.end(); + +// match("/testExtends", w.toString()); + } + + @Test + public void testImplements() throws IOException{ + writer.beginClass(testType2, null, testInterface1,testInterface2); + writer.end(); + +// match("/testImplements", w.toString()); + } + + @Test + public void testInterface() throws IOException{ + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class, Test.class); + writer.beginInterface(testType); + writer.end(); + +// match("/testInterface", w.toString()); + } + + @Test + public void testInterface2() throws IOException{ + writer.beginInterface(testType2, testInterface1); + writer.end(); + +// match("/testInterface2", w.toString()); + } + + @Test + public void testJavadoc() throws IOException{ + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class, Test.class); + writer.javadoc("JavaWriterTest is a test class"); + writer.beginClass(testType); + writer.end(); + +// match("/testJavadoc", w.toString()); + } + + + @Test + public void testAnnotations() throws IOException{ + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class, StringWriter.class); + writer.annotation(Entity.class); + writer.beginClass(testType); + writer.annotation(Test.class); + writer.beginPublicMethod(Types.VOID, "test"); + writer.end(); + writer.end(); + +// match("/testAnnotations", w.toString()); + } + + @Test + public void testAnnotations2() throws IOException{ + writer.packageDecl("com.mysema.codegen"); + writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); + writer.annotation(Entity.class); + writer.beginClass(testType); + writer.annotation(new Test(){ + @Override + public Class expected() { + // TODO Auto-generated method stub + return null; + } + @Override + public long timeout() { + + return 0; + } + @Override + public Class annotationType() { + return Test.class; + }}); + writer.beginPublicMethod(Types.VOID, "test"); + writer.end(); + writer.end(); + +// match("/testAnnotations2", w.toString()); + } + + @Test + public void testFields() throws IOException{ + writer.beginClass(testType); + // private + writer.privateField(Types.STRING, "privateField"); + writer.privateStaticFinal(Types.STRING, "privateStaticFinal", "\"val\""); + // protected + writer.protectedField(Types.STRING,"protectedField"); + // field + writer.field(Types.STRING,"field"); + // public + writer.publicField(Types.STRING,"publicField"); + writer.publicStaticFinal(Types.STRING, "publicStaticFinal", "\"val\""); + writer.publicFinal(Types.STRING, "publicFinalField"); + writer.publicFinal(Types.STRING, "publicFinalField2", "\"val\""); + + writer.end(); + +// match("/testFields", w.toString()); + } + + @Test + public void testMethods() throws IOException{ + writer.beginClass(testType); + // private + + // protected + + // method + + // public + writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); + writer.line("return null;"); + writer.end(); + + writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); + writer.line("return null;"); + writer.end(); + + writer.end(); + +// match("/testMethods", w.toString()); + } + + @Test + public void testConstructors() throws IOException{ + writer.beginClass(testType); + + writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); + writer.end(); + + writer.beginConstructor(new Parameter("a", Types.STRING)); + writer.end(); + + writer.end(); + +// match("/testConstructors", w.toString()); + } } From e1a7e93d3bf80c98d53e02878860269d6025392e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 1 Sep 2010 13:29:43 +0000 Subject: [PATCH 0099/1968] --- .../java/com/mysema/codegen/ScalaWriter.java | 14 +++++++++--- .../com/mysema/codegen/ScalaWriterTest.java | 22 +++++++++---------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 7ffdacffa6..7e826479e7 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -20,6 +20,7 @@ import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.Types; /** * @author tiwe @@ -51,6 +52,8 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String PUBLIC_CLASS = "class "; + private static final String VAR = "var "; + private static final String VAL = "val "; private static final String TRAIT = "trait "; @@ -204,7 +207,12 @@ public ScalaWriter beginInterface(Type type, Type... interfaces) private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ // beginLine(modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName).params(args).append(" {").nl(); - beginLine(modifiers + methodName).params(args).append(" {").nl(); + if (returnType.equals(Types.VOID)){ + beginLine(modifiers + methodName).params(args).append(" {").nl(); + }else{ + beginLine(modifiers + methodName).params(args).append(": " + getGenericName(true, returnType)).append(" {").nl(); + } + return goIn(); } @@ -235,7 +243,7 @@ public ScalaWriter end() throws IOException { } public ScalaWriter field(Type type, String name) throws IOException { - return line(name + ": " + getGenericName(true, type) + SPACE + SEMICOLON).nl(); + return line(VAR + name + ": " + getGenericName(true, type) + SEMICOLON).nl(); } private ScalaWriter field(String modifier, Type type, String name) throws IOException{ @@ -413,7 +421,7 @@ public ScalaWriter protectedFinal(Type type, String name, String value) throws I @Override public ScalaWriter publicField(Type type, String name) throws IOException { - return field(PUBLIC, type, name); + return field(VAR, type, name); } @Override diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 016b467e18..4f2b26c25b 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -107,7 +107,7 @@ public void testBasic() throws IOException { writer.end(); writer.end(); -// match("/testBasic", w.toString()); + System.out.println(w); } @Test @@ -115,7 +115,7 @@ public void testExtends() throws IOException{ writer.beginClass(testType2, testSuperType); writer.end(); -// match("/testExtends", w.toString()); + System.out.println(w); } @Test @@ -123,7 +123,7 @@ public void testImplements() throws IOException{ writer.beginClass(testType2, null, testInterface1,testInterface2); writer.end(); -// match("/testImplements", w.toString()); + System.out.println(w); } @Test @@ -133,7 +133,7 @@ public void testInterface() throws IOException{ writer.beginInterface(testType); writer.end(); -// match("/testInterface", w.toString()); + System.out.println(w); } @Test @@ -141,7 +141,7 @@ public void testInterface2() throws IOException{ writer.beginInterface(testType2, testInterface1); writer.end(); -// match("/testInterface2", w.toString()); + System.out.println(w); } @Test @@ -152,7 +152,7 @@ public void testJavadoc() throws IOException{ writer.beginClass(testType); writer.end(); -// match("/testJavadoc", w.toString()); + System.out.println(w); } @@ -167,7 +167,7 @@ public void testAnnotations() throws IOException{ writer.end(); writer.end(); -// match("/testAnnotations", w.toString()); + System.out.println(w); } @Test @@ -195,7 +195,7 @@ public Class annotationType() { writer.end(); writer.end(); -// match("/testAnnotations2", w.toString()); + System.out.println(w); } @Test @@ -216,7 +216,7 @@ public void testFields() throws IOException{ writer.end(); -// match("/testFields", w.toString()); + System.out.println(w); } @Test @@ -239,7 +239,7 @@ public void testMethods() throws IOException{ writer.end(); -// match("/testMethods", w.toString()); + System.out.println(w); } @Test @@ -254,7 +254,7 @@ public void testConstructors() throws IOException{ writer.end(); -// match("/testConstructors", w.toString()); + System.out.println(w); } From 21a6d7df236264f4589d704f1318dcbd11354888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 2 Sep 2010 12:21:19 +0000 Subject: [PATCH 0100/1968] added support for array annotation values updated version to 0.2.4 --- pom.xml | 9 +++- .../java/com/mysema/codegen/JavaWriter.java | 16 ++++++- .../com/mysema/codegen/AnnotationTest.java | 18 ++++++++ src/test/java/com/mysema/codegen/MaxImpl.java | 46 +++++++++++++++++++ src/test/java/com/mysema/codegen/MinImpl.java | 46 +++++++++++++++++++ .../java/com/mysema/codegen/NotNullImpl.java | 35 ++++++++++++++ 6 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/MaxImpl.java create mode 100644 src/test/java/com/mysema/codegen/MinImpl.java create mode 100644 src/test/java/com/mysema/codegen/NotNullImpl.java diff --git a/pom.xml b/pom.xml index e5f9bbc1dc..9f88be34d2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.3-SNAPSHOT + 0.2.4 Codegen Code generation and compilation for Java @@ -58,6 +58,13 @@ 1.3.2 test + + + javax.validation + validation-api + 1.0.CR3 + test + diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index b3d4a468fc..f53cb4fe24 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -16,6 +16,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -102,6 +103,8 @@ public JavaWriter annotation(Annotation annotation) throws IOException { Object value = method.invoke(annotation); if (value == null || value.equals(method.getDefaultValue())){ continue; + }else if (value.getClass().isArray() && Arrays.equals((Object[])value, (Object[])method.getDefaultValue())){ + continue; }else if (!first){ append(COMMA); }else{ @@ -133,7 +136,18 @@ public JavaWriter annotation(Class annotation) throws IOEx @SuppressWarnings("unchecked") private void annotationConstant(Object value) throws IOException{ - if (value instanceof Class){ + if (value.getClass().isArray()){ + append("{"); + boolean first = true; + for (Object o : (Object[])value){ + if (!first){ + append(", "); + } + annotationConstant(o); + first = false; + } + append("}"); + }else if (value instanceof Class){ appendType((Class)value).append(".class"); }else if (value instanceof Number || value instanceof Boolean){ append(value.toString()); diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index db32d646c1..018560e04c 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -46,5 +46,23 @@ public void testMethodAnnotation() throws IOException, SecurityException, NoSuch writer.annotation(getClass().getMethod("testMethodAnnotation").getAnnotation(Test.class)); assertEquals("@org.junit.Test", w.toString().trim()); } + + @Test + public void testMin() throws IOException{ + writer.annotation(new MinImpl(10)); + assertEquals("@javax.validation.constraints.Min(value=10)", w.toString().trim()); + } + + @Test + public void testMax() throws IOException{ + writer.annotation(new MaxImpl(10)); + assertEquals("@javax.validation.constraints.Max(value=10)", w.toString().trim()); + } + + @Test + public void testNotNull() throws IOException{ + writer.annotation(new NotNullImpl()); + assertEquals("@javax.validation.constraints.NotNull", w.toString().trim()); + } } diff --git a/src/test/java/com/mysema/codegen/MaxImpl.java b/src/test/java/com/mysema/codegen/MaxImpl.java new file mode 100644 index 0000000000..e7917a2e8e --- /dev/null +++ b/src/test/java/com/mysema/codegen/MaxImpl.java @@ -0,0 +1,46 @@ +package com.mysema.codegen; + +import java.lang.annotation.Annotation; + +import javax.validation.ConstraintPayload; +import javax.validation.constraints.*; + +/** + * @author tiwe + * + */ +@SuppressWarnings("all") +public class MaxImpl implements Max{ + + private final long value; + + public MaxImpl(long value) { + this.value = value; + } + + @Override + public Class[] groups() { + return new Class[0]; + } + + @Override + public String message() { + return "{javax.validation.constraints.Max.message}"; + } + + @Override + public Class[] payload() { + return new Class[0]; + } + + @Override + public long value() { + return value; + } + + @Override + public Class annotationType() { + return Max.class; + } + +} diff --git a/src/test/java/com/mysema/codegen/MinImpl.java b/src/test/java/com/mysema/codegen/MinImpl.java new file mode 100644 index 0000000000..a3058dcd17 --- /dev/null +++ b/src/test/java/com/mysema/codegen/MinImpl.java @@ -0,0 +1,46 @@ +package com.mysema.codegen; + +import java.lang.annotation.Annotation; + +import javax.validation.ConstraintPayload; +import javax.validation.constraints.*; + +/** + * @author tiwe + * + */ +@SuppressWarnings("all") +public class MinImpl implements Min{ + + private final long value; + + public MinImpl(long value) { + this.value = value; + } + + @Override + public Class[] groups() { + return new Class[0]; + } + + @Override + public String message() { + return "{javax.validation.constraints.Min.message}"; + } + + @Override + public Class[] payload() { + return new Class[0]; + } + + @Override + public long value() { + return value; + } + + @Override + public Class annotationType() { + return Min.class; + } + +} diff --git a/src/test/java/com/mysema/codegen/NotNullImpl.java b/src/test/java/com/mysema/codegen/NotNullImpl.java new file mode 100644 index 0000000000..be70489145 --- /dev/null +++ b/src/test/java/com/mysema/codegen/NotNullImpl.java @@ -0,0 +1,35 @@ +package com.mysema.codegen; + +import java.lang.annotation.Annotation; + +import javax.validation.ConstraintPayload; +import javax.validation.constraints.*; + +/** + * @author tiwe + * + */ +@SuppressWarnings("all") +public class NotNullImpl implements NotNull{ + + @Override + public Class[] groups() { + return new Class[0]; + } + + @Override + public String message() { + return "{javax.validation.constraints.NotNull.message}"; + } + + @Override + public Class[] payload() { + return new Class[0]; + } + + @Override + public Class annotationType() { + return NotNull.class; + } + +} From f8b189ea75341fb527a0d0cbeb1eed192a8ba8ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 2 Sep 2010 12:22:03 +0000 Subject: [PATCH 0101/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9f88be34d2..737dd1c5da 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.4 + 0.2.4-SNAPSHOT Codegen Code generation and compilation for Java From cccc7f0e4e0f4e1b34b8e3b382e7c152ab84640c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 4 Sep 2010 10:52:31 +0000 Subject: [PATCH 0102/1968] --- pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pom.xml b/pom.xml index 737dd1c5da..a3a45a5fb3 100644 --- a/pom.xml +++ b/pom.xml @@ -68,4 +68,17 @@ + + + jboss + http://repository.jboss.org/maven2 + + true + + + false + + + + From f6810cee3d347b0c2a9fe2a283e27da9c49a8f7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 4 Sep 2010 11:17:52 +0000 Subject: [PATCH 0103/1968] fixed array serialization --- src/main/java/com/mysema/codegen/ScalaWriter.java | 12 ++++++------ .../java/com/mysema/codegen/ScalaWriterTest.java | 3 --- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 7e826479e7..bc5c22a37d 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -5,7 +5,6 @@ import static com.mysema.codegen.Symbols.DOT; import static com.mysema.codegen.Symbols.QUOTE; import static com.mysema.codegen.Symbols.SEMICOLON; -import static com.mysema.codegen.Symbols.SPACE; import java.io.IOException; import java.lang.annotation.Annotation; @@ -206,7 +205,6 @@ public ScalaWriter beginInterface(Type type, Type... interfaces) } private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ -// beginLine(modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName).params(args).append(" {").nl(); if (returnType.equals(Types.VOID)){ beginLine(modifiers + methodName).params(args).append(" {").nl(); }else{ @@ -284,14 +282,16 @@ public String getGenericName(boolean asArgType, Type type) { public String getRawName(Type type) { String fullName = type.getFullName(); String packageName = type.getPackageName(); + String rv = fullName; if (packages.contains(packageName) || "java.lang".equals(packageName) || classes.contains(fullName)){ if (packageName.length() > 0){ - return fullName.substring(packageName.length()+1); - }else{ - return fullName; + rv = fullName.substring(packageName.length()+1); } + } + if (rv.endsWith("[]")){ + return "Array[" + rv.substring(0, rv.length()-2) + "]"; }else{ - return fullName; + return rv; } } diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 4f2b26c25b..647a9956be 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -11,7 +11,6 @@ import org.apache.commons.collections15.Transformer; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import com.mysema.codegen.model.ClassType; @@ -59,9 +58,7 @@ public void beanAccessors() throws IOException{ } @Test - @Ignore public void arrays() throws IOException{ - // FIXME // def main(args: Array[String]) { writer.beginClass(new SimpleType("Main")); writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); From 5449cea342010dae907bb0c26083a24ed1a35402 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 4 Sep 2010 14:48:33 +0000 Subject: [PATCH 0104/1968] --- .../java/com/mysema/codegen/ScalaWriter.java | 2 +- .../com/mysema/codegen/model/ClassType.java | 2 +- .../com/mysema/codegen/model/SimpleType.java | 4 ++-- .../mysema/codegen/support/ClassUtils.java | 3 +-- .../com/mysema/codegen/model/TypeTest.java | 24 ++++++++++--------- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index bc5c22a37d..d72f1e985d 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -283,7 +283,7 @@ public String getRawName(Type type) { String fullName = type.getFullName(); String packageName = type.getPackageName(); String rv = fullName; - if (packages.contains(packageName) || "java.lang".equals(packageName) || classes.contains(fullName)){ + if (packages.contains(packageName) || classes.contains(fullName)){ if (packageName.length() > 0){ rv = fullName.substring(packageName.length()+1); } diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index bdc553f7a9..3eb9e0e864 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -111,7 +111,7 @@ public String getFullName() { @Override public String getGenericName(boolean asArgType) { - return getGenericName(asArgType, Collections.emptySet(), Collections.emptySet()); + return getGenericName(asArgType, Collections.singleton("java.lang"), Collections.emptySet()); } @Override diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index f3f8ba9322..53dd365de7 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -127,7 +127,7 @@ public String getFullName() { @Override public String getGenericName(boolean asArgType) { - return getGenericName(asArgType, Collections.emptySet(), Collections.emptySet()); + return getGenericName(asArgType, Collections.singleton("java.lang"), Collections.emptySet()); } @Override @@ -172,7 +172,7 @@ public String getPrimitiveName() { @Override public String getRawName(Set packages, Set classes) { - if (packages.contains(packageName) || "java.lang".equals(packageName) || classes.contains(fullName)){ + if (packages.contains(packageName) || classes.contains(fullName)){ return localName; }else{ return fullName; diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 0928346376..be0cab66f2 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -24,8 +24,7 @@ public static String getName(Class cl){ public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; - } else if (cl.getPackage() == null - || cl.getPackage().getName().equals("java.lang") + } else if (cl.getPackage() == null || packages.contains(cl.getPackage().getName()) || classes.contains(cl.getName())) { if (cl.getPackage() != null){ diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index 44ca93972c..35d8aed794 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -20,7 +20,9 @@ public class TypeTest { - private Set emptyStrings = Collections.emptySet(); + private Set packages = Collections.singleton("java.lang"); + + private Set classes = Collections.emptySet(); private ClassType locale = new ClassType(TypeCategory.SIMPLE,Locale.class); @@ -72,21 +74,21 @@ public void testGetGenericNameBoolean() { @Test public void testGetRawName() { - assertEquals("java.util.Locale",locale.getRawName(emptyStrings,emptyStrings)); - assertEquals("java.util.Locale",locale2.getRawName(emptyStrings,emptyStrings)); - assertEquals("java.util.List",stringList.getRawName(emptyStrings,emptyStrings)); - assertEquals("java.util.List",stringList2.getRawName(emptyStrings,emptyStrings)); + assertEquals("java.util.Locale",locale.getRawName(packages, classes)); + assertEquals("java.util.Locale",locale2.getRawName(packages, classes)); + assertEquals("java.util.List",stringList.getRawName(packages, classes)); + assertEquals("java.util.List",stringList2.getRawName(packages, classes)); - assertEquals("String", string.getRawName(emptyStrings, emptyStrings)); - assertEquals("String", string2.getRawName(emptyStrings, emptyStrings)); + assertEquals("String", string.getRawName(packages, classes)); + assertEquals("String", string2.getRawName(packages, classes)); } @Test public void testGetGenericNameBooleanSetOfStringSetOfString() { - assertEquals("java.util.Locale",locale.getGenericName(true, emptyStrings, emptyStrings)); - assertEquals("java.util.Locale",locale2.getGenericName(true, emptyStrings, emptyStrings)); - assertEquals("java.util.List",stringList.getGenericName(true,emptyStrings,emptyStrings)); - assertEquals("java.util.List",stringList2.getGenericName(true,emptyStrings,emptyStrings)); + assertEquals("java.util.Locale",locale.getGenericName(true, packages, classes)); + assertEquals("java.util.Locale",locale2.getGenericName(true, packages, classes)); + assertEquals("java.util.List",stringList.getGenericName(true,packages, classes)); + assertEquals("java.util.List",stringList2.getGenericName(true,packages, classes)); } @Test From 84fa51e885238260a3e786606d0956a83c81f185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 6 Sep 2010 18:05:11 +0000 Subject: [PATCH 0105/1968] --- src/test/java/com/mysema/codegen/ScalaWriterTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 647a9956be..0bcd3d7b41 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -61,12 +61,14 @@ public void beanAccessors() throws IOException{ public void arrays() throws IOException{ // def main(args: Array[String]) { writer.beginClass(new SimpleType("Main")); + writer.field(Types.STRING.asArrayType(), "stringArray"); writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); writer.line("//"); writer.end(); writer.end(); System.out.println(w); + assertTrue(w.toString().contains("var stringArray: Array[String];")); assertTrue(w.toString().contains("def main(args: Array[String])")); } From 3ad42e1d3ea5dc50271b42a97382bc5011a8d6e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Sep 2010 13:57:04 +0000 Subject: [PATCH 0106/1968] renamed tests --- .../com/mysema/codegen/AnnotationTest.java | 14 ++++---- .../mysema/codegen/ComplexEvaluationTest.java | 2 +- .../mysema/codegen/EvaluatorFactoryTest.java | 8 ++--- .../com/mysema/codegen/JavaWriterTest.java | 28 +++++++-------- .../codegen/MemSourceFileObjectTest.java | 6 ++-- .../com/mysema/codegen/ScalaWriterTest.java | 22 ++++++------ .../mysema/codegen/SimpleCompilerTest.java | 2 +- .../mysema/codegen/model/ClassTypeTest.java | 2 +- .../mysema/codegen/model/ConstructorTest.java | 2 +- .../codegen/model/TypeCategoryTest.java | 2 +- .../com/mysema/codegen/model/TypeTest.java | 34 +++++++++---------- .../codegen/support/ClassUtilsTest.java | 4 +-- 12 files changed, 63 insertions(+), 63 deletions(-) diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index 018560e04c..7c367e8c7c 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -23,44 +23,44 @@ public class AnnotationTest { private CodeWriter writer = new JavaWriter(w); @Test - public void testClassAnnotation() throws IOException{ + public void ClassAnnotation() throws IOException{ writer.annotation(getClass().getAnnotation(TestAnnotation.class)); assertEquals("@com.mysema.codegen.TestAnnotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", w.toString().trim()); } @Test - public void testClassAnnotation2() throws IOException{ + public void ClassAnnotation2() throws IOException{ writer.annotation(getClass().getAnnotation(TestAnnotation2.class)); assertEquals("@com.mysema.codegen.TestAnnotation2(\"Hello\")", w.toString().trim()); } @Test - public void testClassAnnotation3() throws IOException{ + public void ClassAnnotation3() throws IOException{ writer.annotation(getClass().getAnnotation(TestAnnotation3.class)); assertEquals("@com.mysema.codegen.TestAnnotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", w.toString().trim()); } @Test - public void testMethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { + public void MethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { writer.annotation(getClass().getMethod("testMethodAnnotation").getAnnotation(Test.class)); assertEquals("@org.junit.Test", w.toString().trim()); } @Test - public void testMin() throws IOException{ + public void Min() throws IOException{ writer.annotation(new MinImpl(10)); assertEquals("@javax.validation.constraints.Min(value=10)", w.toString().trim()); } @Test - public void testMax() throws IOException{ + public void Max() throws IOException{ writer.annotation(new MaxImpl(10)); assertEquals("@javax.validation.constraints.Max(value=10)", w.toString().trim()); } @Test - public void testNotNull() throws IOException{ + public void NotNull() throws IOException{ writer.annotation(new NotNullImpl()); assertEquals("@javax.validation.constraints.NotNull", w.toString().trim()); } diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index a112cd31de..1f59568b10 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -26,7 +26,7 @@ public class ComplexEvaluationTest { @Test @SuppressWarnings("unchecked") - public void testComplex(){ + public void Complex(){ ClassType resultType = new ClassType(TypeCategory.LIST,List.class, Types.STRING); StringBuilder source = new StringBuilder(); source.append("java.util.List rv = new java.util.ArrayList();\n"); diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index 2d0970251b..43ba1d9396 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -52,7 +52,7 @@ public void setUp() throws IOException{ } @Test - public void testSimple(){ + public void Simple(){ for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")){ long start = System.currentTimeMillis(); evaluate(expr, boolean.class, names, strings, Arrays.asList("a","b"), Collections.emptyMap()); @@ -69,7 +69,7 @@ public void testSimple(){ } @Test - public void testResults(){ + public void Results(){ // String + String test("a + b", String.class, names, strings, Arrays.asList("Hello ", "World"), "Hello World"); @@ -81,7 +81,7 @@ public void testResults(){ } @Test - public void testWithConstants(){ + public void WithConstants(){ Map constants = new HashMap(); constants.put("x", "Hello World"); List> types = Arrays.>asList(String.class); @@ -91,7 +91,7 @@ public void testWithConstants(){ } @Test - public void testCustomType(){ + public void CustomType(){ test("a.getName()", String.class, Collections.singletonList("a"), Collections.>singletonList(TestEntity.class), Arrays.asList(new TestEntity("Hello World")), "Hello World"); diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index d24f659d78..4aaec8ead2 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -58,7 +58,7 @@ public void setUp(){ @Test - public void testBasic() throws IOException { + public void Basic() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginClass(testType); @@ -72,7 +72,7 @@ public void testBasic() throws IOException { } @Test - public void testExtends() throws IOException{ + public void Extends() throws IOException{ writer.beginClass(testType2, testSuperType); writer.end(); @@ -80,7 +80,7 @@ public void testExtends() throws IOException{ } @Test - public void testImplements() throws IOException{ + public void Implements() throws IOException{ writer.beginClass(testType2, null, testInterface1,testInterface2); writer.end(); @@ -88,7 +88,7 @@ public void testImplements() throws IOException{ } @Test - public void testInterface() throws IOException{ + public void Interface() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface(testType); @@ -98,7 +98,7 @@ public void testInterface() throws IOException{ } @Test - public void testInterface2() throws IOException{ + public void Interface2() throws IOException{ writer.beginInterface(testType2, testInterface1); writer.end(); @@ -106,7 +106,7 @@ public void testInterface2() throws IOException{ } @Test - public void testJavadoc() throws IOException{ + public void Javadoc() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.javadoc("JavaWriterTest is a test class"); @@ -118,7 +118,7 @@ public void testJavadoc() throws IOException{ @Test - public void testAnnotations() throws IOException{ + public void Annotations() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class); writer.annotation(Entity.class); @@ -132,7 +132,7 @@ public void testAnnotations() throws IOException{ } @Test - public void testAnnotations2() throws IOException{ + public void Annotations2() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); writer.annotation(Entity.class); @@ -160,7 +160,7 @@ public Class annotationType() { } @Test - public void testFields() throws IOException{ + public void Fields() throws IOException{ writer.beginClass(testType); // private writer.privateField(Types.STRING, "privateField"); @@ -181,7 +181,7 @@ public void testFields() throws IOException{ } @Test - public void testMethods() throws IOException{ + public void Methods() throws IOException{ writer.beginClass(testType); // private @@ -204,7 +204,7 @@ public void testMethods() throws IOException{ } @Test - public void testConstructors() throws IOException{ + public void Constructors() throws IOException{ writer.beginClass(testType); writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); @@ -220,7 +220,7 @@ public void testConstructors() throws IOException{ } @Test - public void testImports() throws IOException{ + public void Imports() throws IOException{ writer.staticimports(Arrays.class); match("/testImports", w.toString()); @@ -228,7 +228,7 @@ public void testImports() throws IOException{ @Test - public void testImports2() throws IOException{ + public void Imports2() throws IOException{ writer.importPackages("java.lang.reflect","java.util"); match("/testImports2", w.toString()); @@ -236,7 +236,7 @@ public void testImports2() throws IOException{ @Test - public void testSuppressWarnings() throws IOException{ + public void SuppressWarnings() throws IOException{ writer.suppressWarnings("unused"); writer.privateField(Types.STRING, "test"); diff --git a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java index cf8ee8358b..b06807e23b 100644 --- a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java @@ -14,20 +14,20 @@ public class MemSourceFileObjectTest { @Test - public void test(){ + public void Simple(){ MemSourceFileObject obj = new MemSourceFileObject("Test", "Hello World"); assertEquals("Hello World", obj.getCharContent(true).toString()); } @Test - public void testOpenWriter() throws IOException { + public void OpenWriter() throws IOException { MemSourceFileObject obj = new MemSourceFileObject("Test"); obj.openWriter().write("Hello World"); assertEquals("Hello World", obj.getCharContent(true).toString()); } @Test - public void testOpenWriter2() throws IOException { + public void OpenWriter2() throws IOException { MemSourceFileObject obj = new MemSourceFileObject("Test"); obj.openWriter().append("Hello World"); assertEquals("Hello World", obj.getCharContent(true).toString()); diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 0bcd3d7b41..9625a0d0a7 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -96,7 +96,7 @@ public void fields() throws IOException{ } @Test - public void testBasic() throws IOException { + public void Basic() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginClass(testType); @@ -110,7 +110,7 @@ public void testBasic() throws IOException { } @Test - public void testExtends() throws IOException{ + public void Extends() throws IOException{ writer.beginClass(testType2, testSuperType); writer.end(); @@ -118,7 +118,7 @@ public void testExtends() throws IOException{ } @Test - public void testImplements() throws IOException{ + public void Implements() throws IOException{ writer.beginClass(testType2, null, testInterface1,testInterface2); writer.end(); @@ -126,7 +126,7 @@ public void testImplements() throws IOException{ } @Test - public void testInterface() throws IOException{ + public void Interface() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface(testType); @@ -136,7 +136,7 @@ public void testInterface() throws IOException{ } @Test - public void testInterface2() throws IOException{ + public void Interface2() throws IOException{ writer.beginInterface(testType2, testInterface1); writer.end(); @@ -144,7 +144,7 @@ public void testInterface2() throws IOException{ } @Test - public void testJavadoc() throws IOException{ + public void Javadoc() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.javadoc("JavaWriterTest is a test class"); @@ -156,7 +156,7 @@ public void testJavadoc() throws IOException{ @Test - public void testAnnotations() throws IOException{ + public void Annotations() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class); writer.annotation(Entity.class); @@ -170,7 +170,7 @@ public void testAnnotations() throws IOException{ } @Test - public void testAnnotations2() throws IOException{ + public void Annotations2() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); writer.annotation(Entity.class); @@ -198,7 +198,7 @@ public Class annotationType() { } @Test - public void testFields() throws IOException{ + public void Fields() throws IOException{ writer.beginClass(testType); // private writer.privateField(Types.STRING, "privateField"); @@ -219,7 +219,7 @@ public void testFields() throws IOException{ } @Test - public void testMethods() throws IOException{ + public void Methods() throws IOException{ writer.beginClass(testType); // private @@ -242,7 +242,7 @@ public void testMethods() throws IOException{ } @Test - public void testConstructors() throws IOException{ + public void Constructors() throws IOException{ writer.beginClass(testType); writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); diff --git a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java index 7b223ffd26..2c65178ebe 100644 --- a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java +++ b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java @@ -24,7 +24,7 @@ public void tearDown(){ } @Test - public void testRun() { + public void Run() { new File("target/out").mkdir(); JavaCompiler compiler = new SimpleCompiler(); System.out.println(compiler.getClass().getName()); diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 09743d286c..d5487009d2 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -23,7 +23,7 @@ public class ClassTypeTest { // } @Test - public void as(){ + public void As(){ assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); } diff --git a/src/test/java/com/mysema/codegen/model/ConstructorTest.java b/src/test/java/com/mysema/codegen/model/ConstructorTest.java index c36aef19b8..3070283236 100644 --- a/src/test/java/com/mysema/codegen/model/ConstructorTest.java +++ b/src/test/java/com/mysema/codegen/model/ConstructorTest.java @@ -20,7 +20,7 @@ public class ConstructorTest { @Test public void test(){ - Parameter firstName = new Parameter("firstName", new ClassType(TypeCategory.STRING, String.class)); + Parameter firstName = new Parameter("firstName", new ClassType(TypeCategory.STRING, String.class)); Parameter lastName = new Parameter("lastName", new ClassType(TypeCategory.STRING, String.class)); Constructor c1 = new Constructor(Arrays.asList(firstName, lastName)); Constructor c2 = new Constructor(Arrays.asList(firstName, lastName)); diff --git a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java index 13e1f8e432..90f719b1c7 100644 --- a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java @@ -13,7 +13,7 @@ public class TypeCategoryTest { @Test - public void testIsSubCategoryOf() { + public void IsSubCategoryOf() { assertTrue(TypeCategory.BOOLEAN.isSubCategoryOf(TypeCategory.COMPARABLE)); assertTrue(TypeCategory.STRING.isSubCategoryOf(TypeCategory.COMPARABLE)); assertTrue(TypeCategory.NUMERIC.isSubCategoryOf(TypeCategory.COMPARABLE)); diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index 35d8aed794..bf296ba95a 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -46,7 +46,7 @@ public void arrayType(){ } @Test - public void testEquals(){ + public void Equals(){ assertEquals(locale, locale2); assertEquals(locale2, locale); assertEquals(stringList, stringList2); @@ -54,13 +54,13 @@ public void testEquals(){ } @Test - public void testHashcode(){ + public void Hashcode(){ assertEquals(locale.hashCode(), locale2.hashCode()); assertEquals(stringList.hashCode(), stringList2.hashCode()); } @Test - public void testGetGenericNameBoolean() { + public void GetGenericNameBoolean() { assertEquals("java.util.Locale",locale.getGenericName(true)); assertEquals("java.util.Locale",locale2.getGenericName(true)); assertEquals("java.util.List",stringList.getGenericName(true)); @@ -73,7 +73,7 @@ public void testGetGenericNameBoolean() { } @Test - public void testGetRawName() { + public void GetRawName() { assertEquals("java.util.Locale",locale.getRawName(packages, classes)); assertEquals("java.util.Locale",locale2.getRawName(packages, classes)); assertEquals("java.util.List",stringList.getRawName(packages, classes)); @@ -84,7 +84,7 @@ public void testGetRawName() { } @Test - public void testGetGenericNameBooleanSetOfStringSetOfString() { + public void GetGenericNameBooleanSetOfStringSetOfString() { assertEquals("java.util.Locale",locale.getGenericName(true, packages, classes)); assertEquals("java.util.Locale",locale2.getGenericName(true, packages, classes)); assertEquals("java.util.List",stringList.getGenericName(true,packages, classes)); @@ -92,7 +92,7 @@ public void testGetGenericNameBooleanSetOfStringSetOfString() { } @Test - public void testGetFullName() { + public void GetFullName() { assertEquals("java.util.Locale",locale.getFullName()); assertEquals("java.util.Locale",locale2.getFullName()); assertEquals("java.util.List",stringList.getFullName()); @@ -100,7 +100,7 @@ public void testGetFullName() { } @Test - public void testGetPackageName() { + public void GetPackageName() { assertEquals("java.util",locale.getPackageName()); assertEquals("java.util",locale2.getPackageName()); assertEquals("java.util",stringList.getPackageName()); @@ -108,7 +108,7 @@ public void testGetPackageName() { } @Test - public void testGetParameters() { + public void GetParameters() { assertEquals(Collections.emptyList(), locale.getParameters()); assertEquals(Collections.emptyList(), locale2.getParameters()); assertEquals(Collections.singletonList(Types.STRING), stringList.getParameters()); @@ -116,7 +116,7 @@ public void testGetParameters() { } @Test - public void testGetSimpleName() { + public void GetSimpleName() { assertEquals("Locale",locale.getSimpleName()); assertEquals("Locale",locale2.getSimpleName()); assertEquals("List",stringList.getSimpleName()); @@ -124,12 +124,12 @@ public void testGetSimpleName() { } @Test - public void testGetJavaClass() { + public void GetJavaClass() { assertEquals(Locale.class,locale.getJavaClass()); } @Test - public void testIsFinal() { + public void IsFinal() { assertTrue(locale.isFinal()); assertTrue(locale2.isFinal()); assertFalse(stringList.isFinal()); @@ -139,7 +139,7 @@ public void testIsFinal() { } @Test - public void testIsPrimitive() { + public void IsPrimitive() { assertFalse(locale.isPrimitive()); assertFalse(locale2.isPrimitive()); assertFalse(stringList.isPrimitive()); @@ -147,7 +147,7 @@ public void testIsPrimitive() { } @Test - public void testGetCategory() { + public void GetCategory() { assertEquals(TypeCategory.SIMPLE, locale.getCategory()); assertEquals(TypeCategory.SIMPLE, locale2.getCategory()); assertEquals(TypeCategory.LIST, stringList.getCategory()); @@ -155,13 +155,13 @@ public void testGetCategory() { } @Test - public void testAs() { + public void As() { assertEquals(TypeCategory.SIMPLE, stringList.as(TypeCategory.SIMPLE).getCategory()); assertEquals(TypeCategory.SIMPLE, stringList2.as(TypeCategory.SIMPLE).getCategory()); } @Test - public void testGetPrimitiveName() { + public void GetPrimitiveName() { assertNull(locale.getPrimitiveName()); assertNull(locale2.getPrimitiveName()); assertNull(stringList.getPrimitiveName()); @@ -169,7 +169,7 @@ public void testGetPrimitiveName() { } @Test - public void testToString() { + public void ToString() { assertEquals("java.util.Locale",locale.toString()); assertEquals("java.util.Locale",locale2.toString()); assertEquals("java.util.List",stringList.toString()); @@ -177,7 +177,7 @@ public void testToString() { } @Test - public void testAsArrayType() { + public void AsArrayType() { assertEquals("java.util.Locale[]", locale.asArrayType().getFullName()); assertEquals(TypeCategory.ARRAY, locale.asArrayType().getCategory()); assertEquals("java.util.Locale[]", locale2.asArrayType().getFullName()); diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index 68ba5f6671..8e7122b2c7 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -22,7 +22,7 @@ public class ClassUtilsTest { @Test - public void testGetName() { + public void GetName() { assertEquals("Object", ClassUtils.getName(Object.class)); assertEquals("Object[]", ClassUtils.getName(Object[].class)); assertEquals("int", ClassUtils.getName(int.class)); @@ -33,7 +33,7 @@ public void testGetName() { } @Test - public void testNormalize(){ + public void Normalize(){ assertEquals(List.class, ClassUtils.normalize(ArrayList.class)); assertEquals(Set.class, ClassUtils.normalize(HashSet.class)); assertEquals(Map.class, ClassUtils.normalize(HashMap.class)); From ceeacd9541eb7b3ea483dd9d9b4299521347b9fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Sep 2010 15:01:35 +0000 Subject: [PATCH 0107/1968] renamed tests --- src/test/java/com/mysema/codegen/AnnotationTest.java | 5 ++--- src/test/java/com/mysema/codegen/JavaWriterTest.java | 6 ++++++ src/test/java/com/mysema/codegen/model/ClassTypeTest.java | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index 7c367e8c7c..2366a6368a 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -39,11 +39,10 @@ public void ClassAnnotation3() throws IOException{ writer.annotation(getClass().getAnnotation(TestAnnotation3.class)); assertEquals("@com.mysema.codegen.TestAnnotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", w.toString().trim()); } - - + @Test public void MethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { - writer.annotation(getClass().getMethod("testMethodAnnotation").getAnnotation(Test.class)); + writer.annotation(getClass().getMethod("MethodAnnotation").getAnnotation(Test.class)); assertEquals("@org.junit.Test", w.toString().trim()); } diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 4aaec8ead2..6e03439997 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -11,6 +11,7 @@ import java.io.StringWriter; import java.lang.annotation.Annotation; import java.util.Arrays; +import java.util.Collections; import org.apache.commons.collections15.Transformer; import org.apache.commons.io.IOUtils; @@ -56,6 +57,11 @@ public void setUp(){ testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); } + @Test + public void Primitive_Arrays(){ + ClassType byteArray = new ClassType(byte[].class); + assertEquals("byte[]", writer.getRawName(byteArray)); + } @Test public void Basic() throws IOException { diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index d5487009d2..06f27b7476 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -8,6 +8,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import java.util.Collections; import java.util.Map; import org.junit.Test; @@ -37,4 +38,10 @@ public void getParameters(){ assertFalse(mapType.isPrimitive()); } + @Test + public void Primitive_Arrays(){ + ClassType byteArray = new ClassType(byte[].class); + assertEquals("byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + } + } From 08d6422de33ee3c67364e807f30e47049f8aed91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Sep 2010 15:13:05 +0000 Subject: [PATCH 0108/1968] added support for serializing array types properly --- .../com/mysema/codegen/model/ClassType.java | 2 +- .../mysema/codegen/support/ClassUtils.java | 10 ++++++++++ .../mysema/codegen/model/ClassTypeTest.java | 9 +++++++++ .../mysema/codegen/model/SimpleTypeTest.java | 19 +++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/mysema/codegen/model/SimpleTypeTest.java diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 3eb9e0e864..e9d8a1e4e3 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -106,7 +106,7 @@ public Type getComponentType() { @Override public String getFullName() { - return javaClass.getName(); + return ClassUtils.getFullName(javaClass); } @Override diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index be0cab66f2..3093dfd45a 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -21,6 +21,15 @@ public static String getName(Class cl){ return getName(cl, Collections.singleton("java.lang"), Collections.emptySet()); } + + public static String getFullName(Class cl) { + if (cl.isArray()){ + return getFullName(cl.getComponentType()) + "[]"; + }else{ + return cl.getName(); + } + } + public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; @@ -53,4 +62,5 @@ public static Class normalize(Class clazz){ } private ClassUtils(){} + } diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 06f27b7476..844af1f924 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -42,6 +42,15 @@ public void getParameters(){ public void Primitive_Arrays(){ ClassType byteArray = new ClassType(byte[].class); assertEquals("byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + assertEquals("byte[]", byteArray.getSimpleName()); + assertEquals("byte[]", byteArray.getFullName()); } + @Test + public void Array(){ + ClassType byteArray = new ClassType(Byte[].class); + assertEquals("Byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + assertEquals("Byte[]", byteArray.getSimpleName()); + assertEquals("java.lang.Byte[]", byteArray.getFullName()); + } } diff --git a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java new file mode 100644 index 0000000000..697a841037 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java @@ -0,0 +1,19 @@ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; + +import java.util.Collections; + +import org.junit.Test; + +public class SimpleTypeTest { + + @Test + public void PrimitiveArray(){ + Type byteArray = new ClassType(byte[].class); + Type byteArray2 = new SimpleType(byteArray, byteArray.getParameters()); + assertEquals("byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + assertEquals("byte[]", byteArray2.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + } + +} From 63bb4a77eb4e8c17167806448674e9d671d39d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Sep 2010 16:12:33 +0000 Subject: [PATCH 0109/1968] updated version to 0.2.5 --- pom.xml | 2 +- src/test/java/com/mysema/codegen/JavaWriterTest.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index a3a45a5fb3..1241048cb4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.4-SNAPSHOT + 0.2.5 Codegen Code generation and compilation for Java diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 6e03439997..eb6a89a418 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -11,7 +11,6 @@ import java.io.StringWriter; import java.lang.annotation.Annotation; import java.util.Arrays; -import java.util.Collections; import org.apache.commons.collections15.Transformer; import org.apache.commons.io.IOUtils; From 3a9cd91641e2af45a26d97dac4b12c5656f8e04b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Sep 2010 16:13:18 +0000 Subject: [PATCH 0110/1968] updated version to 0.2.5-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1241048cb4..997337b929 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.5 + 0.2.5-SNAPSHOT Codegen Code generation and compilation for Java From 8eb2e28bff315eaf728f190aede5609114f2a521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 19 Sep 2010 15:48:55 +0000 Subject: [PATCH 0111/1968] added custom class header option --- .../java/com/mysema/codegen/ScalaWriter.java | 26 +++++++++++++---- .../com/mysema/codegen/ScalaWriterTest.java | 28 +++++++++++++++---- 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index d72f1e985d..b09a66f27f 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -63,11 +63,18 @@ public class ScalaWriter extends AbstractCodeWriter{ private Type type; + private final boolean compact; + public ScalaWriter(Appendable appendable){ + this(appendable, false); + } + + public ScalaWriter(Appendable appendable, boolean compact){ super(appendable); this.packages.add("java.lang"); + this.compact = compact; } - + @Override public ScalaWriter annotation(Annotation annotation) throws IOException { beginLine().append("@").appendType(annotation.annotationType()); @@ -144,6 +151,12 @@ private ScalaWriter appendType(Class type) throws IOException{ } return this; } + + public ScalaWriter beginClass(String header) throws IOException{ + line(PUBLIC_CLASS, header); + goIn(); + return this; + } @Override public ScalaWriter beginClass(Type type) throws IOException { @@ -153,7 +166,7 @@ public ScalaWriter beginClass(Type type) throws IOException { @Override public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException { packages.add(type.getPackageName()); - beginLine(PUBLIC_CLASS + type.getSimpleName()); + beginLine(PUBLIC_CLASS, type.getSimpleName()); if (superClass != null){ append(EXTENDS + getGenericName(false, superClass)); } @@ -241,15 +254,18 @@ public ScalaWriter end() throws IOException { } public ScalaWriter field(Type type, String name) throws IOException { - return line(VAR + name + ": " + getGenericName(true, type) + SEMICOLON).nl(); + line(VAR + name + ": " + getGenericName(true, type) + SEMICOLON); + return compact ? this : nl(); } private ScalaWriter field(String modifier, Type type, String name) throws IOException{ - return line(modifier + name + ": " + getGenericName(true, type) + SEMICOLON).nl(); + line(modifier + name + ": " + getGenericName(true, type) + SEMICOLON); + return compact ? this : nl(); } private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ - return line(modifier + name + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON).nl(); + line(modifier + name + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON); + return compact ? this : nl(); } @Override diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 9625a0d0a7..49b1097cc8 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -30,7 +30,7 @@ public Parameter transform(Parameter input) { private Writer w = new StringWriter(); - private ScalaWriter writer = new ScalaWriter(w); + private ScalaWriter writer = new ScalaWriter(w, true); private Type testType, testType2, testSuperType, testInterface1, testInterface2; @@ -44,7 +44,25 @@ public void setUp(){ } @Test - public void beanAccessors() throws IOException{ + public void CustomHeader() throws IOException{ +// class QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path){ +// val id = createNumber("ID", classOf[Integer]); +// val company = createNumber("COMPANY", classOf[Integer]); +// val idKey = createPrimaryKey(id); +// val companyKey: ForeignKey[QCompany] = createForeignKey(company, "ID"); +// } + writer.beginClass("QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path)"); + writer.publicFinal(Types.OBJECT, "id", "createNumber(\"ID\", classOf[Integer])"); + writer.publicFinal(Types.OBJECT, "company", "createNumber(\"COMPANY\", classOf[Integer])"); + writer.publicFinal(Types.OBJECT, "idKey", "createPrimaryKey(id)"); + writer.publicFinal(Types.OBJECT, "companyKey", "createForeignKey(company,\"ID\")"); + writer.end(); + + System.out.println(w); + } + + @Test + public void BeanAccessors() throws IOException{ writer.beginClass(new SimpleType("Person")); writer.beginPublicMethod(Types.STRING, "getName"); writer.line("\"Daniel Spiewak\""); @@ -58,7 +76,7 @@ public void beanAccessors() throws IOException{ } @Test - public void arrays() throws IOException{ + public void Arrays() throws IOException{ // def main(args: Array[String]) { writer.beginClass(new SimpleType("Main")); writer.field(Types.STRING.asArrayType(), "stringArray"); @@ -73,7 +91,7 @@ public void arrays() throws IOException{ } @Test - public void trait() throws IOException{ + public void Trait() throws IOException{ // trait MyTrait writer.beginInterface(new SimpleType("MyTrait")); writer.line("//"); @@ -84,7 +102,7 @@ public void trait() throws IOException{ } @Test - public void fields() throws IOException{ + public void Field() throws IOException{ // private val people: List[Person] writer.imports(List.class); writer.beginClass(new SimpleType("Main")); From 8c9fda63d2be23464a776631fa52ad315289a409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Sep 2010 05:52:55 +0000 Subject: [PATCH 0112/1968] --- src/main/java/com/mysema/codegen/ScalaWriter.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index b09a66f27f..321cfeaa50 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -71,7 +71,10 @@ public ScalaWriter(Appendable appendable){ public ScalaWriter(Appendable appendable, boolean compact){ super(appendable); - this.packages.add("java.lang"); + this.classes.add("java.lang.String"); + this.classes.add("java.lang.Object"); + this.classes.add("java.lang.Integer"); + this.classes.add("java.lang.Comparable"); this.compact = compact; } From 57d7f80bcfe8eb47f8bfde5df8ac911289f78f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Sep 2010 07:34:43 +0000 Subject: [PATCH 0113/1968] updated version to 0.2.6 --- pom.xml | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 997337b929..9995059461 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.5-SNAPSHOT + 0.2.6 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 321cfeaa50..58e10de648 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -50,6 +50,8 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String PUBLIC = "public "; private static final String PUBLIC_CLASS = "class "; + + private static final String PUBLIC_OBJECT = "object "; private static final String VAR = "var "; @@ -155,8 +157,14 @@ private ScalaWriter appendType(Class type) throws IOException{ return this; } - public ScalaWriter beginClass(String header) throws IOException{ - line(PUBLIC_CLASS, header); + public ScalaWriter beginObject(String header) throws IOException { + line(PUBLIC_OBJECT, header, " {"); + goIn(); + return this; + } + + public ScalaWriter beginClass(String header) throws IOException { + line(PUBLIC_CLASS, header, " {"); goIn(); return this; } @@ -308,7 +316,11 @@ public String getRawName(Type type) { } } if (rv.endsWith("[]")){ - return "Array[" + rv.substring(0, rv.length()-2) + "]"; + rv = rv.substring(0, rv.length()-2); + if (classes.contains(rv)){ + rv = rv.substring(packageName.length()+1); + } + return "Array[" + rv + "]"; }else{ return rv; } From a638e011738a944e58b4ce2ee574a6f572ce7439 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Sep 2010 07:35:28 +0000 Subject: [PATCH 0114/1968] updated version to 0.2.6-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9995059461..df2f9aaf3a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.6 + 0.2.6-SNAPSHOT Codegen Code generation and compilation for Java From fa81781584089a534bbc537341977fe91cfc7199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Sep 2010 13:09:40 +0000 Subject: [PATCH 0115/1968] updated version to 0.2.7 --- pom.xml | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 45 +++++++++++++------ .../com/mysema/codegen/ScalaWriterTest.java | 14 ++++++ 3 files changed, 46 insertions(+), 15 deletions(-) diff --git a/pom.xml b/pom.xml index df2f9aaf3a..1ec3145248 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.6-SNAPSHOT + 0.2.7 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 58e10de648..c15d37a38c 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -10,6 +10,7 @@ import java.lang.annotation.Annotation; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -102,7 +103,10 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { for (Method method : methods){ try { Object value = method.invoke(annotation); - if (value == null || value.equals(method.getDefaultValue())){ + if (value == null + || value.equals(method.getDefaultValue()) + || (value.getClass().isArray() + && Arrays.equals((Object[])value, (Object[])method.getDefaultValue()))){ continue; }else if (!first){ append(COMMA); @@ -134,19 +138,32 @@ public ScalaWriter annotation(Class annotation) throws IOE @SuppressWarnings("unchecked") private void annotationConstant(Object value) throws IOException{ - if (value instanceof Class){ - appendType((Class)value).append(".class"); - }else if (value instanceof Number || value instanceof Boolean){ - append(value.toString()); - }else if (value instanceof Enum){ - Enum enumValue = (Enum)value; - append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); - }else if (value instanceof String){ - append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); - }else{ - throw new IllegalArgumentException("Unsupported annotation value : " + value); - } - } + if (value.getClass().isArray()){ + append("Array("); + boolean first = true; + for (Object o : (Object[])value){ + if (!first){ + append(", "); + } + annotationConstant(o); + first = false; + } + append(")"); + }else if (value instanceof Class){ + append("classOf["); + appendType((Class)value); + append("]"); + }else if (value instanceof Number || value instanceof Boolean){ + append(value.toString()); + }else if (value instanceof Enum){ + Enum enumValue = (Enum)value; + append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + }else if (value instanceof String){ + append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); + }else{ + throw new IllegalArgumentException("Unsupported annotation value : " + value); + } + } private ScalaWriter appendType(Class type) throws IOException{ if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 49b1097cc8..a351bbe931 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -9,6 +9,8 @@ import java.util.Arrays; import java.util.List; +import javax.validation.constraints.Max; + import org.apache.commons.collections15.Transformer; import org.junit.Before; import org.junit.Test; @@ -172,6 +174,18 @@ public void Javadoc() throws IOException{ System.out.println(w); } + @Test + public void AnnotationConstant() throws IOException{ + Max annotation = new MaxImpl(0l){ + @Override + public Class[] groups() { + return new Class[]{Object.class, String.class}; + } + }; + writer.annotation(annotation); + + System.out.println(w); + } @Test public void Annotations() throws IOException{ From b376ee6c7d8f9e3d814fb98d278e34c83fc749c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Sep 2010 13:10:23 +0000 Subject: [PATCH 0116/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ec3145248..831be924de 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.7 + 0.2.7-SNAPSHOT Codegen Code generation and compilation for Java From 8729f6f29114e0f12f63c6b913f46121a54c0ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Sep 2010 13:56:02 +0000 Subject: [PATCH 0117/1968] updated version to 0.2.8 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/CodeWriter.java | 2 ++ src/main/java/com/mysema/codegen/JavaWriter.java | 5 +++++ src/main/java/com/mysema/codegen/ScalaWriter.java | 5 +++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 831be924de..75f74a5a28 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.7-SNAPSHOT + 0.2.8 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 68d0270627..4afa2f8320 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -87,6 +87,8 @@ public interface CodeWriter extends Appendable{ CodeWriter protectedFinal(Type type, String name, String value) throws IOException; CodeWriter publicField(Type type, String name) throws IOException; + + CodeWriter publicField(Type type, String name, String value) throws IOException; CodeWriter publicFinal(Type type, String name) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index f53cb4fe24..4fb0c267f0 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -410,6 +410,11 @@ public JavaWriter publicField(Type type, String name) throws IOException { return field(PUBLIC, type, name); } + @Override + public JavaWriter publicField(Type type, String name, String value) throws IOException { + return field(PUBLIC, type, name, value); + } + @Override public JavaWriter publicFinal(Type type, String name) throws IOException { return field(PUBLIC_FINAL, type, name); diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index c15d37a38c..e458618d36 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -472,6 +472,11 @@ public ScalaWriter publicField(Type type, String name) throws IOException { return field(VAR, type, name); } + @Override + public ScalaWriter publicField(Type type, String name, String value) throws IOException { + return field(VAR, type, name, value); + } + @Override public ScalaWriter publicFinal(Type type, String name) throws IOException { return field(VAL, type, name); From 549ca2fe001639be38f491320c3294980b16b7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Sep 2010 13:57:12 +0000 Subject: [PATCH 0118/1968] updated version to 0.2.8-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 75f74a5a28..265fad78aa 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.8 + 0.2.8-SNAPSHOT Codegen Code generation and compilation for Java From 518ef2d45f49d087d3559a8f936752afc5358ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 22 Sep 2010 10:30:03 +0000 Subject: [PATCH 0119/1968] fixed array handling updated version to 0.2.9 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/ClassType.java | 6 +----- .../java/com/mysema/codegen/support/ClassUtils.java | 10 ++++++++++ src/test/java/com/mysema/codegen/ScalaWriterTest.java | 5 +++++ .../java/com/mysema/codegen/model/ClassTypeTest.java | 6 ++++++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 265fad78aa..e85a19eb9f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.8-SNAPSHOT + 0.2.9 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index e9d8a1e4e3..614e7a5983 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -145,11 +145,7 @@ public Class getJavaClass() { @Override public String getPackageName() { - if (javaClass.getPackage() != null){ - return javaClass.getPackage().getName(); - }else{ - return ""; - } + return ClassUtils.getPackageName(javaClass); } @Override diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 3093dfd45a..a66160ddba 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -30,6 +30,16 @@ public static String getFullName(Class cl) { } } + public static String getPackageName(Class cl){ + if (cl.isArray()){ + return getPackageName(cl.getComponentType()); + }else if (cl.getPackage() != null){ + return cl.getPackage().getName(); + }else{ + return ""; + } + } + public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index a351bbe931..bf8ca8e816 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -19,6 +19,7 @@ import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; public class ScalaWriterTest { @@ -85,11 +86,15 @@ public void Arrays() throws IOException{ writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); writer.line("//"); writer.end(); + writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args",new ClassType(TypeCategory.ARRAY,String[].class))); + writer.line("//"); + writer.end(); writer.end(); System.out.println(w); assertTrue(w.toString().contains("var stringArray: Array[String];")); assertTrue(w.toString().contains("def main(args: Array[String])")); + assertTrue(w.toString().contains("def main2(args: Array[String])")); } @Test diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 844af1f924..9bd6c49f73 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -23,6 +23,12 @@ public class ClassTypeTest { // assertEquals(stringType, stringType.asArrayType().getParameter(0)); // } + @Test + public void ArrayType(){ + Type type = new ClassType(TypeCategory.ARRAY,String[].class); + assertEquals("java.lang", type.getPackageName()); + } + @Test public void As(){ assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); From d3dfeb8391fa7222de38bbfc246cb005c35041b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 22 Sep 2010 10:32:46 +0000 Subject: [PATCH 0120/1968] updated version to 0.2.9-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e85a19eb9f..7d4bc64440 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.9 + 0.2.9-SNAPSHOT Codegen Code generation and compilation for Java From 59c807243bb5be6cfd505cdf8ada599f29a547f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 22 Sep 2010 10:41:06 +0000 Subject: [PATCH 0121/1968] added array test --- .../com/mysema/codegen/JavaWriterTest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index eb6a89a418..287e7b66f4 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -6,6 +6,7 @@ package com.mysema.codegen; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.StringWriter; @@ -21,6 +22,7 @@ import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; public class JavaWriterTest { @@ -56,6 +58,24 @@ public void setUp(){ testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); } + @Test + public void Arrays() throws IOException{ + writer.beginClass(new SimpleType("Main")); + writer.field(Types.STRING.asArrayType(), "stringArray"); + writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); + writer.line("//"); + writer.end(); + writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args",new ClassType(TypeCategory.ARRAY,String[].class))); + writer.line("//"); + writer.end(); + writer.end(); + + System.out.println(w); + assertTrue(w.toString().contains("String[] stringArray;")); + assertTrue(w.toString().contains("public void main(String[] args) {")); + assertTrue(w.toString().contains("public void main2(String[] args) {")); + } + @Test public void Primitive_Arrays(){ ClassType byteArray = new ClassType(byte[].class); From 1f6ce6f5ce1b4fd0a96c1ab667a77e1b1ec3e059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Oct 2010 08:16:17 +0000 Subject: [PATCH 0122/1968] fixed String escaping updated version to 0.3.0 --- pom.xml | 2 +- .../java/com/mysema/codegen/JavaWriter.java | 3 ++- .../{TestAnnotation.java => Annotation.java} | 2 +- ...{TestAnnotation2.java => Annotation2.java} | 2 +- .../com/mysema/codegen/Annotation2Impl.java | 24 +++++++++++++++++++ ...{TestAnnotation3.java => Annotation3.java} | 2 +- .../com/mysema/codegen/AnnotationTest.java | 24 ++++++++++++------- 7 files changed, 45 insertions(+), 14 deletions(-) rename src/test/java/com/mysema/codegen/{TestAnnotation.java => Annotation.java} (92%) rename src/test/java/com/mysema/codegen/{TestAnnotation2.java => Annotation2.java} (89%) create mode 100644 src/test/java/com/mysema/codegen/Annotation2Impl.java rename src/test/java/com/mysema/codegen/{TestAnnotation3.java => Annotation3.java} (91%) diff --git a/pom.xml b/pom.xml index 7d4bc64440..ab13899e5f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.2.9-SNAPSHOT + 0.3.0 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 4fb0c267f0..136aa33476 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -155,7 +155,8 @@ private void annotationConstant(Object value) throws IOException{ Enum enumValue = (Enum)value; append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); }else if (value instanceof String){ - append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); + String escaped = StringEscapeUtils.escapeJava(value.toString()); + append(QUOTE + escaped.replace("\\/", "/") + QUOTE); }else{ throw new IllegalArgumentException("Unsupported annotation value : " + value); } diff --git a/src/test/java/com/mysema/codegen/TestAnnotation.java b/src/test/java/com/mysema/codegen/Annotation.java similarity index 92% rename from src/test/java/com/mysema/codegen/TestAnnotation.java rename to src/test/java/com/mysema/codegen/Annotation.java index 43e2f6bf6a..02172d75de 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation.java +++ b/src/test/java/com/mysema/codegen/Annotation.java @@ -13,7 +13,7 @@ @Target( { TYPE }) @Retention(RetentionPolicy.RUNTIME) -public @interface TestAnnotation { +public @interface Annotation { boolean prop1() default false; diff --git a/src/test/java/com/mysema/codegen/TestAnnotation2.java b/src/test/java/com/mysema/codegen/Annotation2.java similarity index 89% rename from src/test/java/com/mysema/codegen/TestAnnotation2.java rename to src/test/java/com/mysema/codegen/Annotation2.java index 7420888f34..f569d7ef7b 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation2.java +++ b/src/test/java/com/mysema/codegen/Annotation2.java @@ -11,7 +11,7 @@ @Target( { TYPE }) @Retention(RetentionPolicy.RUNTIME) -public @interface TestAnnotation2 { +public @interface Annotation2 { String value(); diff --git a/src/test/java/com/mysema/codegen/Annotation2Impl.java b/src/test/java/com/mysema/codegen/Annotation2Impl.java new file mode 100644 index 0000000000..8eff139abe --- /dev/null +++ b/src/test/java/com/mysema/codegen/Annotation2Impl.java @@ -0,0 +1,24 @@ +package com.mysema.codegen; + +import java.lang.annotation.Annotation; + +@SuppressWarnings("all") +public class Annotation2Impl implements Annotation2{ + + private final String value; + + public Annotation2Impl(String value) { + this.value = value; + } + + @Override + public String value() { + return value; + } + + @Override + public Class annotationType() { + return Annotation2.class; + } + +} diff --git a/src/test/java/com/mysema/codegen/TestAnnotation3.java b/src/test/java/com/mysema/codegen/Annotation3.java similarity index 91% rename from src/test/java/com/mysema/codegen/TestAnnotation3.java rename to src/test/java/com/mysema/codegen/Annotation3.java index ff36d953b4..2cb3357f5d 100644 --- a/src/test/java/com/mysema/codegen/TestAnnotation3.java +++ b/src/test/java/com/mysema/codegen/Annotation3.java @@ -14,7 +14,7 @@ @Target( { TYPE }) @Retention(RetentionPolicy.RUNTIME) -public @interface TestAnnotation3 { +public @interface Annotation3 { ElementType type(); diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index 2366a6368a..1212391b06 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -13,9 +13,9 @@ import org.junit.Test; -@TestAnnotation(prop2 = false, clazz = AnnotationTest.class) -@TestAnnotation2("Hello") -@TestAnnotation3(type = ElementType.ANNOTATION_TYPE) +@Annotation(prop2 = false, clazz = AnnotationTest.class) +@Annotation2("Hello") +@Annotation3(type = ElementType.ANNOTATION_TYPE) public class AnnotationTest { @@ -24,20 +24,20 @@ public class AnnotationTest { @Test public void ClassAnnotation() throws IOException{ - writer.annotation(getClass().getAnnotation(TestAnnotation.class)); - assertEquals("@com.mysema.codegen.TestAnnotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", w.toString().trim()); + writer.annotation(getClass().getAnnotation(Annotation.class)); + assertEquals("@com.mysema.codegen.Annotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", w.toString().trim()); } @Test public void ClassAnnotation2() throws IOException{ - writer.annotation(getClass().getAnnotation(TestAnnotation2.class)); - assertEquals("@com.mysema.codegen.TestAnnotation2(\"Hello\")", w.toString().trim()); + writer.annotation(getClass().getAnnotation(Annotation2.class)); + assertEquals("@com.mysema.codegen.Annotation2(\"Hello\")", w.toString().trim()); } @Test public void ClassAnnotation3() throws IOException{ - writer.annotation(getClass().getAnnotation(TestAnnotation3.class)); - assertEquals("@com.mysema.codegen.TestAnnotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", w.toString().trim()); + writer.annotation(getClass().getAnnotation(Annotation3.class)); + assertEquals("@com.mysema.codegen.Annotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", w.toString().trim()); } @Test @@ -64,4 +64,10 @@ public void NotNull() throws IOException{ assertEquals("@javax.validation.constraints.NotNull", w.toString().trim()); } + @Test + public void Uri_Value() throws IOException{ + writer.annotation(new Annotation2Impl("http://www.example.com#")); + assertEquals("@com.mysema.codegen.Annotation2(\"http://www.example.com#\")", w.toString().trim()); + } + } From a0602a36e81c058f2a925aa05062549bb1000181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Oct 2010 08:16:58 +0000 Subject: [PATCH 0123/1968] updated version to 0.3.0-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ab13899e5f..3d0acb9758 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.0 + 0.3.0-SNAPSHOT Codegen Code generation and compilation for Java From 8b5fb7a5841672f0a64479d1c9c41ae77fd837e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Nov 2010 14:55:47 +0000 Subject: [PATCH 0124/1968] added proper handling of inner classes updated version to 0.3.1 --- pom.xml | 2 +- .../java/com/mysema/codegen/JavaWriter.java | 130 +++++++++--------- .../com/mysema/codegen/JavaWriterTest.java | 115 +++++++++------- src/test/resources/testInnerClasses | 10 ++ 4 files changed, 144 insertions(+), 113 deletions(-) create mode 100644 src/test/resources/testInnerClasses diff --git a/pom.xml b/pom.xml index 3d0acb9758..ec365eeefa 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.0-SNAPSHOT + 0.3.1 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 136aa33476..14cfbeecb9 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -1,7 +1,7 @@ /* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. - * + * */ package com.mysema.codegen; @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.HashSet; import java.util.Set; +import java.util.Stack; import org.apache.commons.collections15.Transformer; import org.apache.commons.lang.StringEscapeUtils; @@ -30,14 +31,14 @@ /** * JavaWriter is the default implementation of the CodeWriter interface - * + * * @author tiwe * */ public final class JavaWriter extends AbstractCodeWriter{ - + private static final String EXTENDS = " extends "; - + private static final String IMPLEMENTS = " implements "; private static final String IMPORT = "import "; @@ -47,13 +48,13 @@ public final class JavaWriter extends AbstractCodeWriter{ private static final String PACKAGE = "package "; private static final String PRIVATE = "private "; - + private static final String PRIVATE_FINAL = "private final "; - + private static final String PRIVATE_STATIC_FINAL = "private static final "; private static final String PROTECTED = "protected "; - + private static final String PROTECTED_FINAL = "protected final "; private static final String PUBLIC = "public "; @@ -67,18 +68,19 @@ public final class JavaWriter extends AbstractCodeWriter{ private static final String PUBLIC_STATIC = "public static "; private static final String PUBLIC_STATIC_FINAL = "public static final "; - + private final Set classes = new HashSet(); - + private final Set packages = new HashSet(); - - private Type type; - + +// private Type type; + private final Stack types = new Stack(); + public JavaWriter(Appendable appendable){ super(appendable); this.packages.add("java.lang"); } - + @Override public JavaWriter annotation(Annotation annotation) throws IOException { beginLine().append("@").appendType(annotation.annotationType()); @@ -95,10 +97,10 @@ public JavaWriter annotation(Annotation annotation) throws IOException { throw new CodegenException(e); } catch (InvocationTargetException e) { throw new CodegenException(e); - } + } }else{ - boolean first = true; - for (Method method : methods){ + boolean first = true; + for (Method method : methods){ try { Object value = method.invoke(annotation); if (value == null || value.equals(method.getDefaultValue())){ @@ -110,7 +112,7 @@ public JavaWriter annotation(Annotation annotation) throws IOException { }else{ append("("); } - append(method.getName()+"="); + append(method.getName()+"="); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); @@ -120,20 +122,20 @@ public JavaWriter annotation(Annotation annotation) throws IOException { throw new CodegenException(e); } first = false; - } + } if (!first){ - append(")"); - } - } + append(")"); + } + } return nl(); - } - + } + @Override public JavaWriter annotation(Class annotation) throws IOException{ return beginLine().append("@").appendType(annotation).nl(); } - + @SuppressWarnings("unchecked") private void annotationConstant(Object value) throws IOException{ if (value.getClass().isArray()){ @@ -148,20 +150,20 @@ private void annotationConstant(Object value) throws IOException{ } append("}"); }else if (value instanceof Class){ - appendType((Class)value).append(".class"); + appendType((Class)value).append(".class"); }else if (value instanceof Number || value instanceof Boolean){ append(value.toString()); }else if (value instanceof Enum){ Enum enumValue = (Enum)value; append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); }else if (value instanceof String){ - String escaped = StringEscapeUtils.escapeJava(value.toString()); + String escaped = StringEscapeUtils.escapeJava(value.toString()); append(QUOTE + escaped.replace("\\/", "/") + QUOTE); }else{ throw new IllegalArgumentException("Unsupported annotation value : " + value); } } - + private JavaWriter appendType(Class type) throws IOException{ if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ append(type.getSimpleName()); @@ -175,7 +177,7 @@ private JavaWriter appendType(Class type) throws IOException{ public JavaWriter beginClass(Type type) throws IOException{ return beginClass(type, null); } - + @Override public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException{ packages.add(type.getPackageName()); @@ -194,22 +196,24 @@ public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) thr } append(" {").nl().nl(); goIn(); - this.type = type; + types.push(type); return this; } - + @Override public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { - beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); - return goIn(); + types.push(types.peek()); + beginLine(PUBLIC + types.peek().getSimpleName()).params(parameters, transformer).append(" {").nl(); + return goIn(); } - + @Override public JavaWriter beginConstructor(Parameter... parameters) throws IOException{ - beginLine(PUBLIC + type.getSimpleName()).params(parameters).append(" {").nl(); + types.push(types.peek()); + beginLine(PUBLIC + types.peek().getSimpleName()).params(parameters).append(" {").nl(); return goIn(); } - + @Override public JavaWriter beginInterface(Type type, Type... interfaces) throws IOException { packages.add(type.getPackageName()); @@ -225,15 +229,16 @@ public JavaWriter beginInterface(Type type, Type... interfaces) throws IOExcepti } append(" {").nl().nl(); goIn(); - this.type = type; - return this; + types.push(type); + return this; } - + private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ + types.push(types.peek()); beginLine(modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName).params(args).append(" {").nl(); return goIn(); } - + @Override public JavaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC, returnType, methodName, transform(parameters, transformer)); @@ -243,7 +248,7 @@ public JavaWriter beginPublicMethod(Type returnType, String methodName, Coll public JavaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException{ return beginMethod(PUBLIC, returnType, methodName, args); } - + @Override public JavaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC_STATIC, returnType, methodName, transform(parameters, transformer)); @@ -253,13 +258,14 @@ public JavaWriter beginStaticMethod(Type returnType, String methodName, Coll public JavaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException{ return beginMethod(PUBLIC_STATIC, returnType, methodName, args); } - + @Override public JavaWriter end() throws IOException{ + types.pop(); goOut(); return line("}").nl(); } - + @Override public JavaWriter field(Type type, String name) throws IOException { return line(type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); @@ -268,11 +274,11 @@ public JavaWriter field(Type type, String name) throws IOException { private JavaWriter field(String modifier, Type type, String name) throws IOException{ return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); } - + private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); } - + @Override public String getGenericName(boolean asArgType, Type type) { return type.getGenericName(asArgType, packages, classes); @@ -302,7 +308,7 @@ public JavaWriter imports(Package... imports) throws IOException { nl(); return this; } - + @Override public JavaWriter importClasses(String... imports) throws IOException{ for (String cl : imports){ @@ -337,7 +343,7 @@ public JavaWriter packageDecl(String packageName) throws IOException{ packages.add(packageName); return line(PACKAGE + packageName + SEMICOLON).nl(); } - + private JavaWriter params(Collection parameters, Transformer transformer) throws IOException{ append("("); boolean first = true; @@ -363,24 +369,24 @@ private JavaWriter params(Parameter... params) throws IOException{ append(")"); return this; } - + private JavaWriter param(Parameter parameter) throws IOException{ append(parameter.getType().getGenericName(true, packages, classes)); append(" "); append(parameter.getName()); return this; } - + @Override public JavaWriter privateField(Type type, String name) throws IOException { return field(PRIVATE, type, name); } - + @Override public JavaWriter privateFinal(Type type, String name) throws IOException { - return field(PRIVATE_FINAL, type, name); + return field(PRIVATE_FINAL, type, name); } - + @Override public JavaWriter privateFinal(Type type, String name, String value) throws IOException { return field(PRIVATE_FINAL, type, name, value); @@ -390,15 +396,15 @@ public JavaWriter privateFinal(Type type, String name, String value) throws IOEx public JavaWriter privateStaticFinal(Type type, String name, String value) throws IOException { return field(PRIVATE_STATIC_FINAL, type, name, value); } - + @Override public JavaWriter protectedField(Type type, String name) throws IOException { - return field(PROTECTED, type, name); + return field(PROTECTED, type, name); } - + @Override public JavaWriter protectedFinal(Type type, String name) throws IOException { - return field(PROTECTED_FINAL, type, name); + return field(PROTECTED_FINAL, type, name); } @Override @@ -410,22 +416,22 @@ public JavaWriter protectedFinal(Type type, String name, String value) throws IO public JavaWriter publicField(Type type, String name) throws IOException { return field(PUBLIC, type, name); } - + @Override public JavaWriter publicField(Type type, String name, String value) throws IOException { return field(PUBLIC, type, name, value); } - + @Override public JavaWriter publicFinal(Type type, String name) throws IOException { - return field(PUBLIC_FINAL, type, name); + return field(PUBLIC_FINAL, type, name); } - + @Override public JavaWriter publicFinal(Type type, String name, String value) throws IOException { return field(PUBLIC_FINAL, type, name, value); } - + @Override public JavaWriter publicStaticFinal(Type type, String name, String value) throws IOException { return field(PUBLIC_STATIC_FINAL, type, name, value); @@ -438,7 +444,7 @@ public JavaWriter staticimports(Class... imports) throws IOException{ } return this; } - + @Override public JavaWriter suppressWarnings(String type) throws IOException{ return line("@SuppressWarnings(\"" + type +"\")"); @@ -446,7 +452,7 @@ public JavaWriter suppressWarnings(String type) throws IOException{ private Parameter[] transform(Collection parameters, Transformer transformer){ Parameter[] rv = new Parameter[parameters.size()]; - int i = 0; + int i = 0; for (T value : parameters){ rv[i++] = transformer.transform(value); } diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 287e7b66f4..2d20973ee1 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -1,7 +1,7 @@ /* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. - * + * */ package com.mysema.codegen; @@ -31,15 +31,15 @@ public class JavaWriterTest { @Override public Parameter transform(Parameter input) { return input; - } + } }; - + private StringWriter w; - + private CodeWriter writer; private Type testType, testType2, testSuperType, testInterface1, testInterface2; - + private static void match(String resource, String text) throws IOException{ // TODO : try to compile ? String expected = IOUtils.toString(JavaWriterTest.class.getResourceAsStream(resource),"UTF-8").replace("\r\n", "\n").trim(); @@ -64,26 +64,26 @@ public void Arrays() throws IOException{ writer.field(Types.STRING.asArrayType(), "stringArray"); writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); writer.line("//"); - writer.end(); + writer.end(); writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args",new ClassType(TypeCategory.ARRAY,String[].class))); writer.line("//"); - writer.end(); writer.end(); - + writer.end(); + System.out.println(w); assertTrue(w.toString().contains("String[] stringArray;")); assertTrue(w.toString().contains("public void main(String[] args) {")); assertTrue(w.toString().contains("public void main2(String[] args) {")); } - + @Test public void Primitive_Arrays(){ ClassType byteArray = new ClassType(byte[].class); assertEquals("byte[]", writer.getRawName(byteArray)); } - + @Test - public void Basic() throws IOException { + public void Basic() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginClass(testType); @@ -92,44 +92,44 @@ public void Basic() throws IOException { writer.line("// TODO"); writer.end(); writer.end(); - + match("/testBasic", w.toString()); } - + @Test public void Extends() throws IOException{ writer.beginClass(testType2, testSuperType); writer.end(); - + match("/testExtends", w.toString()); } - + @Test public void Implements() throws IOException{ writer.beginClass(testType2, null, testInterface1,testInterface2); writer.end(); - + match("/testImplements", w.toString()); } - + @Test public void Interface() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface(testType); writer.end(); - + match("/testInterface", w.toString()); } - + @Test public void Interface2() throws IOException{ writer.beginInterface(testType2, testInterface1); writer.end(); - + match("/testInterface2", w.toString()); } - + @Test public void Javadoc() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -137,11 +137,11 @@ public void Javadoc() throws IOException{ writer.javadoc("JavaWriterTest is a test class"); writer.beginClass(testType); writer.end(); - + match("/testJavadoc", w.toString()); } - + @Test public void Annotations() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -152,10 +152,10 @@ public void Annotations() throws IOException{ writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); - + match("/testAnnotations", w.toString()); } - + @Test public void Annotations2() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -180,10 +180,10 @@ public Class annotationType() { writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); - + match("/testAnnotations2", w.toString()); } - + @Test public void Fields() throws IOException{ writer.beginClass(testType); @@ -199,73 +199,88 @@ public void Fields() throws IOException{ writer.publicStaticFinal(Types.STRING, "publicStaticFinal", "\"val\""); writer.publicFinal(Types.STRING, "publicFinalField"); writer.publicFinal(Types.STRING, "publicFinalField2", "\"val\""); - + writer.end(); - + match("/testFields", w.toString()); } - + @Test public void Methods() throws IOException{ writer.beginClass(testType); // private - + // protected - + // method - + // public writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - + writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - + writer.end(); - + match("/testMethods", w.toString()); } - + @Test public void Constructors() throws IOException{ writer.beginClass(testType); - + writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); writer.end(); - + writer.beginConstructor(new Parameter("a", Types.STRING)); writer.end(); - + writer.end(); - + match("/testConstructors", w.toString()); - + } - + + @Test + public void Inner_Classes() throws IOException{ + writer.beginClass(testType); + + writer.beginClass(testType2); + writer.end(); + + writer.beginConstructor(new Parameter("a", Types.STRING)); + writer.end(); + + writer.end(); + + match("/testInnerClasses", w.toString()); + } + @Test public void Imports() throws IOException{ writer.staticimports(Arrays.class); - + match("/testImports", w.toString()); } - + @Test public void Imports2() throws IOException{ writer.importPackages("java.lang.reflect","java.util"); - + match("/testImports2", w.toString()); } - - + + @Test public void SuppressWarnings() throws IOException{ writer.suppressWarnings("unused"); writer.privateField(Types.STRING, "test"); - + match("/testSuppressWarnings", w.toString()); } - + } diff --git a/src/test/resources/testInnerClasses b/src/test/resources/testInnerClasses new file mode 100644 index 0000000000..0a0651554d --- /dev/null +++ b/src/test/resources/testInnerClasses @@ -0,0 +1,10 @@ +public class JavaWriterTest { + + public class Test { + + } + + public JavaWriterTest(String a) { + } + +} \ No newline at end of file From 2d6f296aae1529b358b7b1270f7ffe32f569ef7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Nov 2010 14:56:34 +0000 Subject: [PATCH 0125/1968] updated version to 0.3.1-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ec365eeefa..b83716a81c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.1 + 0.3.1-SNAPSHOT Codegen Code generation and compilation for Java From 5312bc456976cef94418908ee8f26254b5a1b1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 28 Feb 2011 13:10:05 +0000 Subject: [PATCH 0126/1968] improved indentation for Scala updated version to 0.3.2 --- pom.xml | 2 +- .../mysema/codegen/AbstractCodeWriter.java | 43 +++--- .../java/com/mysema/codegen/JavaWriter.java | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 130 +++++++++--------- 4 files changed, 91 insertions(+), 86 deletions(-) diff --git a/pom.xml b/pom.xml index b83716a81c..ed1008bef3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.1-SNAPSHOT + 0.3.2 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index 1cc68fc179..9862f5ddce 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -9,36 +9,41 @@ import java.io.IOException; +import org.apache.commons.lang.StringUtils; + /** * @author tiwe * * @param */ public abstract class AbstractCodeWriter> implements Appendable, CodeWriter{ - - private static final int INDENT_SPACES = 4; - + private final Appendable appendable; - + + private final int spaces; + + private final String spacesString; + private String indent = ""; @SuppressWarnings("unchecked") private final T self = (T)this; - - public AbstractCodeWriter(Appendable appendable){ + + public AbstractCodeWriter(Appendable appendable, int spaces){ if (appendable == null){ throw new IllegalArgumentException("appendable is null"); } this.appendable = appendable; + this.spaces = spaces; + this.spacesString = StringUtils.leftPad("", spaces); } - @Override public T append(char c) throws IOException { appendable.append(c); return self; } - + @Override public T append(CharSequence csq) throws IOException { appendable.append(csq); @@ -50,7 +55,7 @@ public T append(CharSequence csq, int start, int end) throws IOException { appendable.append(csq, start, end); return self; } - + @Override public T beginLine(String... segments) throws IOException { append(indent); @@ -59,32 +64,32 @@ public T beginLine(String... segments) throws IOException { } return self; } - + protected T goIn(){ - indent += " "; + indent += spacesString; return self; } - - + + protected T goOut(){ - if (indent.length() >= INDENT_SPACES){ - indent = indent.substring(0, indent.length() - INDENT_SPACES); + if (indent.length() >= spaces){ + indent = indent.substring(0, indent.length() - spaces); } return self; } - + @Override public T line(String... segments) throws IOException{ append(indent); for (String segment : segments){ append(segment); - } + } return nl(); } - + @Override public T nl() throws IOException { - return append(NEWLINE); + return append(NEWLINE); } } diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 14cfbeecb9..16c82ac4cf 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -77,7 +77,7 @@ public final class JavaWriter extends AbstractCodeWriter{ private final Stack types = new Stack(); public JavaWriter(Appendable appendable){ - super(appendable); + super(appendable, 4); this.packages.add("java.lang"); } diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index e458618d36..d51f998815 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -27,60 +27,60 @@ * */ public class ScalaWriter extends AbstractCodeWriter{ - + private static final String DEF = "def "; - + private static final String EXTENDS = " extends "; - + private static final String IMPLEMENTS = " implements "; private static final String IMPORT = "import "; - private static final String IMPORT_STATIC = "import static "; + private static final String IMPORT_STATIC = "import "; private static final String PACKAGE = "package "; private static final String PRIVATE = "private "; - + private static final String PRIVATE_VAL = "private val "; - + private static final String PROTECTED = "protected "; - + private static final String PROTECTED_VAL = "protected val "; private static final String PUBLIC = "public "; private static final String PUBLIC_CLASS = "class "; - + private static final String PUBLIC_OBJECT = "object "; private static final String VAR = "var "; - + private static final String VAL = "val "; private static final String TRAIT = "trait "; - + private final Set classes = new HashSet(); - + private final Set packages = new HashSet(); - + private Type type; - + private final boolean compact; - + public ScalaWriter(Appendable appendable){ this(appendable, false); } public ScalaWriter(Appendable appendable, boolean compact){ - super(appendable); + super(appendable, 2); this.classes.add("java.lang.String"); this.classes.add("java.lang.Object"); this.classes.add("java.lang.Integer"); this.classes.add("java.lang.Comparable"); this.compact = compact; } - + @Override public ScalaWriter annotation(Annotation annotation) throws IOException { beginLine().append("@").appendType(annotation.annotationType()); @@ -97,15 +97,15 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { throw new CodegenException(e); } catch (InvocationTargetException e) { throw new CodegenException(e); - } + } }else{ - boolean first = true; - for (Method method : methods){ + boolean first = true; + for (Method method : methods){ try { Object value = method.invoke(annotation); - if (value == null + if (value == null || value.equals(method.getDefaultValue()) - || (value.getClass().isArray() + || (value.getClass().isArray() && Arrays.equals((Object[])value, (Object[])method.getDefaultValue()))){ continue; }else if (!first){ @@ -113,7 +113,7 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { }else{ append("("); } - append(method.getName()+"="); + append(method.getName()+"="); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); @@ -123,11 +123,11 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { throw new CodegenException(e); } first = false; - } + } if (!first){ - append(")"); - } - } + append(")"); + } + } return nl(); } @@ -135,7 +135,7 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { public ScalaWriter annotation(Class annotation) throws IOException { return beginLine().append("@").appendType(annotation).nl(); } - + @SuppressWarnings("unchecked") private void annotationConstant(Object value) throws IOException{ if (value.getClass().isArray()){ @@ -148,7 +148,7 @@ private void annotationConstant(Object value) throws IOException{ annotationConstant(o); first = false; } - append(")"); + append(")"); }else if (value instanceof Class){ append("classOf["); appendType((Class)value); @@ -164,7 +164,7 @@ private void annotationConstant(Object value) throws IOException{ throw new IllegalArgumentException("Unsupported annotation value : " + value); } } - + private ScalaWriter appendType(Class type) throws IOException{ if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ append(type.getSimpleName()); @@ -173,13 +173,13 @@ private ScalaWriter appendType(Class type) throws IOException{ } return this; } - + public ScalaWriter beginObject(String header) throws IOException { line(PUBLIC_OBJECT, header, " {"); goIn(); return this; } - + public ScalaWriter beginClass(String header) throws IOException { line(PUBLIC_CLASS, header, " {"); goIn(); @@ -216,7 +216,7 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) th @Override public ScalaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); - return goIn(); + return goIn(); } @Override @@ -242,19 +242,19 @@ public ScalaWriter beginInterface(Type type, Type... interfaces) append(" {").nl().nl(); goIn(); this.type = type; - return this; + return this; } private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ if (returnType.equals(Types.VOID)){ - beginLine(modifiers + methodName).params(args).append(" {").nl(); + beginLine(modifiers + methodName).params(args).append(" {").nl(); }else{ beginLine(modifiers + methodName).params(args).append(": " + getGenericName(true, returnType)).append(" {").nl(); } - + return goIn(); } - + @Override public ScalaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); @@ -264,7 +264,7 @@ public ScalaWriter beginPublicMethod(Type returnType, String methodName, Col public ScalaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException{ return beginMethod(DEF, returnType, methodName, args); } - + @Override public ScalaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); @@ -280,7 +280,7 @@ public ScalaWriter end() throws IOException { goOut(); return line("}").nl(); } - + public ScalaWriter field(Type type, String name) throws IOException { line(VAR + name + ": " + getGenericName(true, type) + SEMICOLON); return compact ? this : nl(); @@ -290,12 +290,12 @@ private ScalaWriter field(String modifier, Type type, String name) throws IOExce line(modifier + name + ": " + getGenericName(true, type) + SEMICOLON); return compact ? this : nl(); } - + private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ line(modifier + name + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON); return compact ? this : nl(); } - + @Override public String getGenericName(boolean asArgType, Type type) { if (type.getParameters().isEmpty()){ @@ -306,15 +306,15 @@ public String getGenericName(boolean asArgType, Type type) { builder.append("["); boolean first = true; String fullName = type.getFullName(); - for (Type parameter : type.getParameters()){ + for (Type parameter : type.getParameters()){ if (!first){ builder.append(", "); } if (parameter == null || parameter.getFullName().equals(fullName)){ builder.append("?"); }else{ - builder.append(getGenericName(false, parameter)); - } + builder.append(getGenericName(false, parameter)); + } first = false; } builder.append("]"); @@ -329,14 +329,14 @@ public String getRawName(Type type) { String rv = fullName; if (packages.contains(packageName) || classes.contains(fullName)){ if (packageName.length() > 0){ - rv = fullName.substring(packageName.length()+1); - } + rv = fullName.substring(packageName.length()+1); + } } if (rv.endsWith("[]")){ rv = rv.substring(0, rv.length()-2); if (classes.contains(rv)){ rv = rv.substring(packageName.length()+1); - } + } return "Array[" + rv + "]"; }else{ return rv; @@ -362,7 +362,7 @@ public ScalaWriter imports(Package... imports) throws IOException { nl(); return this; } - + @Override public ScalaWriter importClasses(String... imports) throws IOException{ for (String cl : imports){ @@ -397,7 +397,7 @@ public ScalaWriter packageDecl(String packageName) throws IOException { packages.add(packageName); return line(PACKAGE + packageName + SEMICOLON).nl(); } - + private ScalaWriter params(Collection parameters, Transformer transformer) throws IOException{ append("("); boolean first = true; @@ -411,7 +411,7 @@ private ScalaWriter params(Collection parameters, Transformer... imports) throws IOException { public ScalaWriter suppressWarnings(String type) throws IOException { return line("@SuppressWarnings(\"" + type +"\")"); } - + private Parameter[] transform(Collection parameters, Transformer transformer){ Parameter[] rv = new Parameter[parameters.size()]; - int i = 0; + int i = 0; for (T value : parameters){ rv[i++] = transformer.transform(value); } From 3124eca34bebcbd243b6e113628672d613849a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 28 Feb 2011 13:10:46 +0000 Subject: [PATCH 0127/1968] updated version to 0.3.2-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ed1008bef3..42cd98819f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.2 + 0.3.2-SNAPSHOT Codegen Code generation and compilation for Java From 14020959544269984dda4ea2bba71e87e37a89ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 2 Mar 2011 17:50:34 +0000 Subject: [PATCH 0128/1968] fixed array type handling --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/ClassType.java | 9 ++++++--- .../java/com/mysema/codegen/model/ClassTypeTest.java | 9 ++++++++- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 42cd98819f..51e8b79a02 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.2-SNAPSHOT + 0.3.3 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 614e7a5983..7f11c19e76 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -29,6 +29,8 @@ public class ClassType implements Type { private final Class javaClass; + private final String className; + private final List parameters; @Nullable @@ -50,6 +52,7 @@ public ClassType(TypeCategory category, Class javaClass, @Nullable Class p this.javaClass = javaClass; this.primitiveClass = primitiveClass; this.parameters = parameters; + this.className = ClassUtils.getFullName(javaClass); } public ClassType(TypeCategory category, Class javaClass, List parameters) { @@ -85,7 +88,7 @@ public boolean equals(Object o){ return true; }else if (o instanceof Type){ Type t = (Type)o; - return t.getFullName().equals(javaClass.getName()) && t.getParameters().equals(parameters); + return t.getFullName().equals(className) && t.getParameters().equals(parameters); }else{ return false; } @@ -106,7 +109,7 @@ public Type getComponentType() { @Override public String getFullName() { - return ClassUtils.getFullName(javaClass); + return className; } @Override @@ -170,7 +173,7 @@ public String getSimpleName() { @Override public int hashCode(){ - return javaClass.getName().hashCode(); + return className.hashCode(); } @Override diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 9bd6c49f73..9be5c5496e 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -29,13 +29,20 @@ public void ArrayType(){ assertEquals("java.lang", type.getPackageName()); } + @Test + public void ArrayType_Equals_SimpleType(){ + Type type = new ClassType(TypeCategory.ARRAY,String[].class); + Type type2 = new SimpleType("java.lang.String[]", "java.lang", "String[]"); + assertEquals(type, type2); + } + @Test public void As(){ assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); } @Test - public void getParameters(){ + public void GetParameters(){ ClassType mapType = new ClassType(TypeCategory.MAP, Map.class, stringType, stringType); assertEquals(2, mapType.getParameters().size()); assertEquals(stringType, mapType.getParameters().get(0)); From 3a3a4a3cc95e4438e8865030a70d884d7258d1c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 2 Mar 2011 17:51:28 +0000 Subject: [PATCH 0129/1968] updated version to 0.3.3-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 51e8b79a02..a02d81a750 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.3 + 0.3.3-SNAPSHOT Codegen Code generation and compilation for Java From 5f54bbe0f8325580f304f9bd43957f1143c0ce46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 08:40:44 +0000 Subject: [PATCH 0130/1968] added tests --- .../com/mysema/codegen/model/TypeExtendsTest.java | 14 ++++++++++++++ .../com/mysema/codegen/model/TypeSuperTest.java | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/test/java/com/mysema/codegen/model/TypeExtendsTest.java create mode 100644 src/test/java/com/mysema/codegen/model/TypeSuperTest.java diff --git a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java new file mode 100644 index 0000000000..1c48a1dd90 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java @@ -0,0 +1,14 @@ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TypeExtendsTest { + + @Test + public void GetGenericName() { + assertEquals("? extends java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(false)); + } + +} diff --git a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java new file mode 100644 index 0000000000..b56c73c984 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java @@ -0,0 +1,14 @@ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TypeSuperTest { + + @Test + public void GetGenericName() { + assertEquals("? super java.lang.String", new TypeSuper(Types.STRING).getGenericName(false)); + } + +} From 5204829b644253062d4567972d5517ef63ac194b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 08:55:21 +0000 Subject: [PATCH 0131/1968] added tests --- .../mysema/codegen/model/TypeAdapterTest.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/test/java/com/mysema/codegen/model/TypeAdapterTest.java diff --git a/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java b/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java new file mode 100644 index 0000000000..508e7ff040 --- /dev/null +++ b/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java @@ -0,0 +1,24 @@ +package com.mysema.codegen.model; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TypeAdapterTest { + + @Test + public void Delegation(){ + Type inner = Types.OBJECT; + Type type = new TypeAdapter(inner); + assertEquals(inner.getCategory(), type.getCategory()); + assertEquals(inner.getComponentType(), type.getComponentType()); + assertEquals(inner.getFullName(), type.getFullName()); + assertEquals(inner.getGenericName(true), type.getGenericName(true)); + assertEquals(inner.getPackageName(), type.getPackageName()); + assertEquals(inner.getParameters(), type.getParameters()); + assertEquals(inner.getPrimitiveName(), type.getPrimitiveName()); + assertEquals(inner.getSimpleName(), type.getSimpleName()); + assertEquals(inner.isFinal(), type.isFinal()); + assertEquals(inner.isPrimitive(), type.isPrimitive()); + } +} From 402f3c5cc68cde9bfcf39753e757330b116cd3d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 09:12:42 +0000 Subject: [PATCH 0132/1968] added tests --- .../java/com/mysema/codegen/JavaWriter.java | 7 +- .../java/com/mysema/codegen/ScalaWriter.java | 7 +- .../com/mysema/codegen/JavaWriterTest.java | 20 +++ .../com/mysema/codegen/ScalaWriterTest.java | 136 ++++++++++-------- .../mysema/codegen/model/TypeExtendsTest.java | 5 + .../mysema/codegen/model/TypeSuperTest.java | 5 + 6 files changed, 120 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 16c82ac4cf..789694f7ed 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -155,7 +155,12 @@ private void annotationConstant(Object value) throws IOException{ append(value.toString()); }else if (value instanceof Enum){ Enum enumValue = (Enum)value; - append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + if (classes.contains(enumValue.getClass().getName()) + || packages.contains(enumValue.getClass().getPackage().getName())){ + append(enumValue.name()); + }else{ + append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + } }else if (value instanceof String){ String escaped = StringEscapeUtils.escapeJava(value.toString()); append(QUOTE + escaped.replace("\\/", "/") + QUOTE); diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index d51f998815..36db419a9d 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -157,7 +157,12 @@ private void annotationConstant(Object value) throws IOException{ append(value.toString()); }else if (value instanceof Enum){ Enum enumValue = (Enum)value; - append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + if (classes.contains(enumValue.getClass().getName()) + || packages.contains(enumValue.getClass().getPackage().getName())){ + append(enumValue.name()); + }else{ + append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + } }else if (value instanceof String){ append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); }else{ diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 2d20973ee1..e3d7259198 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -11,6 +11,8 @@ import java.io.IOException; import java.io.StringWriter; import java.lang.annotation.Annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; import java.util.Arrays; import org.apache.commons.collections15.Transformer; @@ -184,6 +186,24 @@ public Class annotationType() { match("/testAnnotations2", w.toString()); } + @Test + public void Annotation_With_ArrayMethod() throws IOException{ + Target annotation = new Target(){ + @Override + public ElementType[] value() { + return new ElementType[]{ElementType.FIELD, ElementType.METHOD}; + } + @Override + public Class annotationType() { + return Target.class; + } + }; + + writer.imports(Target.class.getPackage()); + writer.annotation(annotation); + assertTrue(w.toString().contains("@Target({FIELD, METHOD})")); + } + @Test public void Fields() throws IOException{ writer.beginClass(testType); diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index bf8ca8e816..14e18aed9e 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -6,6 +6,8 @@ import java.io.StringWriter; import java.io.Writer; import java.lang.annotation.Annotation; +import java.lang.annotation.ElementType; +import java.lang.annotation.Target; import java.util.Arrays; import java.util.List; @@ -23,20 +25,20 @@ import com.mysema.codegen.model.Types; public class ScalaWriterTest { - + private static final Transformer transformer = new Transformer(){ @Override public Parameter transform(Parameter input) { return input; - } + } }; - - private Writer w = new StringWriter(); - - private ScalaWriter writer = new ScalaWriter(w, true); - + + private final Writer w = new StringWriter(); + + private final ScalaWriter writer = new ScalaWriter(w, true); + private Type testType, testType2, testSuperType, testInterface1, testInterface2; - + @Before public void setUp(){ testType = new ClassType(JavaWriterTest.class); @@ -45,7 +47,7 @@ public void setUp(){ testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); } - + @Test public void CustomHeader() throws IOException{ // class QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path){ @@ -60,24 +62,24 @@ public void CustomHeader() throws IOException{ writer.publicFinal(Types.OBJECT, "idKey", "createPrimaryKey(id)"); writer.publicFinal(Types.OBJECT, "companyKey", "createForeignKey(company,\"ID\")"); writer.end(); - + System.out.println(w); } - + @Test public void BeanAccessors() throws IOException{ - writer.beginClass(new SimpleType("Person")); + writer.beginClass(new SimpleType("Person")); writer.beginPublicMethod(Types.STRING, "getName"); writer.line("\"Daniel Spiewak\""); - writer.end(); + writer.end(); writer.beginPublicMethod(Types.VOID, "setName", new Parameter("name",Types.STRING)); writer.line("//"); - writer.end(); writer.end(); - + writer.end(); + System.out.println(w); } - + @Test public void Arrays() throws IOException{ // def main(args: Array[String]) { @@ -85,29 +87,29 @@ public void Arrays() throws IOException{ writer.field(Types.STRING.asArrayType(), "stringArray"); writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); writer.line("//"); - writer.end(); + writer.end(); writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args",new ClassType(TypeCategory.ARRAY,String[].class))); writer.line("//"); - writer.end(); writer.end(); - + writer.end(); + System.out.println(w); assertTrue(w.toString().contains("var stringArray: Array[String];")); assertTrue(w.toString().contains("def main(args: Array[String])")); assertTrue(w.toString().contains("def main2(args: Array[String])")); } - + @Test public void Trait() throws IOException{ // trait MyTrait writer.beginInterface(new SimpleType("MyTrait")); writer.line("//"); writer.end(); - + System.out.println(w); assertTrue(w.toString().contains("trait MyTrait")); } - + @Test public void Field() throws IOException{ // private val people: List[Person] @@ -115,13 +117,13 @@ public void Field() throws IOException{ writer.beginClass(new SimpleType("Main")); writer.privateFinal(new SimpleType(Types.LIST, new SimpleType("Person")), "people"); writer.end(); - + System.out.println(w); assertTrue(w.toString().contains("private val people: List[Person]")); } - + @Test - public void Basic() throws IOException { + public void Basic() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginClass(testType); @@ -130,44 +132,44 @@ public void Basic() throws IOException { writer.line("// TODO"); writer.end(); writer.end(); - + System.out.println(w); } - + @Test public void Extends() throws IOException{ writer.beginClass(testType2, testSuperType); writer.end(); - + System.out.println(w); } - + @Test public void Implements() throws IOException{ writer.beginClass(testType2, null, testInterface1,testInterface2); writer.end(); - + System.out.println(w); } - + @Test public void Interface() throws IOException{ writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface(testType); writer.end(); - + System.out.println(w); } - + @Test public void Interface2() throws IOException{ writer.beginInterface(testType2, testInterface1); writer.end(); - + System.out.println(w); } - + @Test public void Javadoc() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -175,7 +177,7 @@ public void Javadoc() throws IOException{ writer.javadoc("JavaWriterTest is a test class"); writer.beginClass(testType); writer.end(); - + System.out.println(w); } @@ -188,10 +190,28 @@ public Class[] groups() { } }; writer.annotation(annotation); - - System.out.println(w); + + System.out.println(w); + } + + @Test + public void Annotation_With_ArrayMethod() throws IOException{ + Target annotation = new Target(){ + @Override + public ElementType[] value() { + return new ElementType[]{ElementType.FIELD, ElementType.METHOD}; + } + @Override + public Class annotationType() { + return Target.class; + } + }; + + writer.imports(Target.class.getPackage()); + writer.annotation(annotation); + assertTrue(w.toString().contains("@Target(Array(FIELD, METHOD))")); } - + @Test public void Annotations() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -202,10 +222,10 @@ public void Annotations() throws IOException{ writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); - + System.out.println(w); } - + @Test public void Annotations2() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -230,10 +250,10 @@ public Class annotationType() { writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); - + System.out.println(w); } - + @Test public void Fields() throws IOException{ writer.beginClass(testType); @@ -249,49 +269,49 @@ public void Fields() throws IOException{ writer.publicStaticFinal(Types.STRING, "publicStaticFinal", "\"val\""); writer.publicFinal(Types.STRING, "publicFinalField"); writer.publicFinal(Types.STRING, "publicFinalField2", "\"val\""); - + writer.end(); - + System.out.println(w); } - + @Test public void Methods() throws IOException{ writer.beginClass(testType); // private - + // protected - + // method - + // public writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - + writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - + writer.end(); - + System.out.println(w); } - + @Test public void Constructors() throws IOException{ writer.beginClass(testType); - + writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); writer.end(); - + writer.beginConstructor(new Parameter("a", Types.STRING)); writer.end(); - + writer.end(); - + System.out.println(w); - + } } diff --git a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java index 1c48a1dd90..d51be75c24 100644 --- a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java @@ -11,4 +11,9 @@ public void GetGenericName() { assertEquals("? extends java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(false)); } + @Test + public void GetGenericName_As_ArgType(){ + assertEquals("java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(true)); + } + } diff --git a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java index b56c73c984..3dd8f7d877 100644 --- a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java @@ -11,4 +11,9 @@ public void GetGenericName() { assertEquals("? super java.lang.String", new TypeSuper(Types.STRING).getGenericName(false)); } + @Test + public void GetGenericName_As_ArgType() { + assertEquals("java.lang.Object", new TypeSuper(Types.STRING).getGenericName(true)); + } + } From 1a5da4ffa03c1ce90a6671cec2dddd6650a91d69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 09:15:52 +0000 Subject: [PATCH 0133/1968] --- src/main/java/com/mysema/codegen/JavaWriter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 789694f7ed..71d105b214 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -73,7 +73,6 @@ public final class JavaWriter extends AbstractCodeWriter{ private final Set packages = new HashSet(); -// private Type type; private final Stack types = new Stack(); public JavaWriter(Appendable appendable){ From cb4eb2e595fb3608dbc736a4810f78368e63f4cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 09:28:52 +0000 Subject: [PATCH 0134/1968] --- .../java/com/mysema/codegen/ScalaWriter.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 36db419a9d..a9ff4d0361 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -32,7 +32,7 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String EXTENDS = " extends "; - private static final String IMPLEMENTS = " implements "; + private static final String WITH = " with "; private static final String IMPORT = "import "; @@ -204,12 +204,24 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) th append(EXTENDS + getGenericName(false, superClass)); } if (interfaces.length > 0){ - append(IMPLEMENTS); - for (int i = 0; i < interfaces.length; i++){ - if (i > 0){ - append(COMMA); + if (superClass == null){ + append(EXTENDS); + append(getGenericName(false, interfaces[0])); + append(WITH); + for (int i = 1; i < interfaces.length; i++){ + if (i > 1){ + append(COMMA); + } + append(getGenericName(false, interfaces[i])); + } + }else{ + append(WITH); + for (int i = 0; i < interfaces.length; i++){ + if (i > 0){ + append(COMMA); + } + append(getGenericName(false, interfaces[i])); } - append(getGenericName(false, interfaces[i])); } } append(" {").nl().nl(); @@ -237,12 +249,17 @@ public ScalaWriter beginInterface(Type type, Type... interfaces) beginLine(TRAIT + getGenericName(false, type)); if (interfaces.length > 0){ append(EXTENDS); - for (int i = 0; i < interfaces.length; i++){ - if (i > 0){ - append(COMMA); + append(getGenericName(false, interfaces[0])); + if (interfaces.length > 1){ + append(WITH); + for (int i = 1; i < interfaces.length; i++){ + if (i > 1){ + append(COMMA); + } + append(getGenericName(false, interfaces[i])); } - append(getGenericName(false, interfaces[i])); } + } append(" {").nl().nl(); goIn(); From f5780fea46e28d0500c0639d019f37c89e8aa25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 13:23:11 +0000 Subject: [PATCH 0135/1968] added tests --- .../com/mysema/codegen/ScalaWriterTest.java | 19 +++++++++++++++++++ .../mysema/codegen/model/SimpleTypeTest.java | 14 +++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 14e18aed9e..73af64f32c 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -48,6 +48,25 @@ public void setUp(){ testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); } + @Test + public void Object() throws IOException{ + writer.beginObject("Test"); + writer.end(); + assertTrue(w.toString().contains("object Test {")); + } + + @Test + public void Class_With_Interfaces() throws IOException{ + writer.beginClass(testType, testType2, testInterface1); + assertTrue(w.toString().contains("class JavaWriterTest extends Test with TestInterface1 {")); + } + + @Test + public void Interface_With_Superinterfaces() throws IOException{ + writer.beginInterface(testType, testType2, testInterface1); + assertTrue(w.toString().contains("trait JavaWriterTest extends Test with TestInterface1 {")); + } + @Test public void CustomHeader() throws IOException{ // class QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path){ diff --git a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java index 697a841037..b71bb2b8ff 100644 --- a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java @@ -7,7 +7,7 @@ import org.junit.Test; public class SimpleTypeTest { - + @Test public void PrimitiveArray(){ Type byteArray = new ClassType(byte[].class); @@ -16,4 +16,16 @@ public void PrimitiveArray(){ assertEquals("byte[]", byteArray2.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); } + @Test + public void Array_FullName(){ + Type type = new SimpleType(new ClassType(String[].class)); + assertEquals("java.lang.String[]", type.getFullName()); + } + + @Test + public void GetComponenType(){ + Type type = new SimpleType(new ClassType(String[].class)); + assertEquals("java.lang.String", type.getComponentType().getFullName()); + } + } From 55ece4bd0e0023c30b2a2e96e8acf8c24ccf7bbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 13:32:19 +0000 Subject: [PATCH 0136/1968] added tests --- .../com/mysema/codegen/model/TypeCategoryTest.java | 14 +++++++++++++- .../com/mysema/codegen/model/TypeExtendsTest.java | 5 +++++ .../com/mysema/codegen/model/TypeSuperTest.java | 5 +++++ .../com/mysema/codegen/support/ClassUtilsTest.java | 3 ++- 4 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java index 90f719b1c7..81f96c97b4 100644 --- a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java @@ -5,9 +5,13 @@ */ package com.mysema.codegen.model; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.sql.Date; +import java.sql.Time; + import org.junit.Test; public class TypeCategoryTest { @@ -20,5 +24,13 @@ public void IsSubCategoryOf() { assertTrue(TypeCategory.COMPARABLE.isSubCategoryOf(TypeCategory.SIMPLE)); assertFalse(TypeCategory.ENTITY.isSubCategoryOf(TypeCategory.SIMPLE)); } - + + @Test + public void Get(){ + assertEquals(TypeCategory.BOOLEAN, TypeCategory.get(Boolean.class.getName())); + assertEquals(TypeCategory.STRING, TypeCategory.get(String.class.getName())); + assertEquals(TypeCategory.DATE, TypeCategory.get(Date.class.getName())); + assertEquals(TypeCategory.TIME, TypeCategory.get(Time.class.getName())); + } + } diff --git a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java index d51be75c24..c599e411b3 100644 --- a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java @@ -6,6 +6,11 @@ public class TypeExtendsTest { + @Test + public void GetVarName(){ + assertEquals("var", new TypeExtends("var", Types.COLLECTION).getVarName()); + } + @Test public void GetGenericName() { assertEquals("? extends java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(false)); diff --git a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java index 3dd8f7d877..ae55f72c29 100644 --- a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java @@ -6,6 +6,11 @@ public class TypeSuperTest { + @Test + public void GetVarName(){ + assertEquals("var", new TypeSuper("var", Types.STRING).getVarName()); + } + @Test public void GetGenericName() { assertEquals("? super java.lang.String", new TypeSuper(Types.STRING).getGenericName(false)); diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index 8e7122b2c7..317cd44d7b 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -23,6 +23,7 @@ public class ClassUtilsTest { @Test public void GetName() { + assertEquals("int", ClassUtils.getName(int.class)); assertEquals("Object", ClassUtils.getName(Object.class)); assertEquals("Object[]", ClassUtils.getName(Object[].class)); assertEquals("int", ClassUtils.getName(int.class)); @@ -31,7 +32,7 @@ public void GetName() { assertEquals("java.util.Locale", ClassUtils.getName(Locale.class)); assertEquals("java.util.Locale[]", ClassUtils.getName(Locale[].class)); } - + @Test public void Normalize(){ assertEquals(List.class, ClassUtils.normalize(ArrayList.class)); From 021fbef4e56561ded1e52fee7b1dd1d54cc702d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 13:43:37 +0000 Subject: [PATCH 0137/1968] added tests --- .../com/mysema/codegen/model/ClassType.java | 44 +++++++-------- .../java/com/mysema/codegen/model/Types.java | 54 ++++++++++--------- .../mysema/codegen/model/ClassTypeTest.java | 29 ++++++++-- .../mysema/codegen/model/SimpleTypeTest.java | 5 ++ .../codegen/support/ClassUtilsTest.java | 4 ++ 5 files changed, 84 insertions(+), 52 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 7f11c19e76..5fca7bcb97 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -26,27 +26,27 @@ public class ClassType implements Type { private final TypeCategory category; - + private final Class javaClass; - + private final String className; - + private final List parameters; - + @Nullable private final Class primitiveClass; - + @Nullable private Type arrayType, componentType; public ClassType(Class javaClass, Type... parameters) { this(TypeCategory.SIMPLE, javaClass, null, Arrays.asList(parameters)); } - + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { this(category, javaClass, primitiveClass, Collections.emptyList()); - } - + } + public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { this.category = category; this.javaClass = javaClass; @@ -54,15 +54,15 @@ public ClassType(TypeCategory category, Class javaClass, @Nullable Class p this.parameters = parameters; this.className = ClassUtils.getFullName(javaClass); } - + public ClassType(TypeCategory category, Class javaClass, List parameters) { this(category, javaClass, null, parameters); } - + public ClassType(TypeCategory category, Class clazz, Type... parameters) { this(category, clazz, null, Arrays.asList(parameters)); } - + @Override public Type as(TypeCategory c) { if (category == c){ @@ -77,7 +77,7 @@ public Type asArrayType() { if (arrayType == null){ String fullName = javaClass.getName()+"[]"; String simpleName = javaClass.getSimpleName()+"[]"; - arrayType = new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + arrayType = new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); } return arrayType; } @@ -97,7 +97,7 @@ public boolean equals(Object o){ public TypeCategory getCategory() { return category; } - + @Override public Type getComponentType() { Class clazz = javaClass.getComponentType(); @@ -106,10 +106,10 @@ public Type getComponentType() { } return componentType; } - + @Override public String getFullName() { - return className; + return className; } @Override @@ -126,15 +126,15 @@ public String getGenericName(boolean asArgType, Set packages, Set"); @@ -175,7 +175,7 @@ public String getSimpleName() { public int hashCode(){ return className.hashCode(); } - + @Override public boolean isFinal() { return Modifier.isFinal(javaClass.getModifiers()); @@ -183,13 +183,13 @@ public boolean isFinal() { @Override public boolean isPrimitive() { -// return javaClass.isPrimitive(); - return primitiveClass != null; + return javaClass.isPrimitive() || primitiveClass != null; } + @Override public String toString(){ return getGenericName(true); } - + } diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 4fdc4aeb72..91e34d9b2c 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -19,37 +19,39 @@ * */ public final class Types { - + public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE, Object.class); - - public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY, Object[].class); - + + public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY, Object[].class); + public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC, BigDecimal.class); - + public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC, BigInteger.class); - + public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN, Boolean.class, boolean.class); - + public static final ClassType BOOLEAN_P = new ClassType(TypeCategory.BOOLEAN, boolean.class); - + public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC, Byte.class, byte.class); - + public static final ClassType BYTE_P = new ClassType(TypeCategory.NUMERIC, byte.class); - + public static final ClassType CHARACTER = new ClassType(TypeCategory.COMPARABLE, Character.class, char.class); - + public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE, char.class); public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); - + public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC, Double.class, double.class); - + public static final ClassType DOUBLE_P = new ClassType(TypeCategory.NUMERIC, double.class); public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC, Float.class, float.class); - public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class); - + public static final ClassType FLOAT_P = new ClassType(TypeCategory.NUMERIC, float.class); + + public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class, int.class); + public static final ClassType INT = new ClassType(TypeCategory.NUMERIC, int.class); public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, OBJECT); @@ -59,29 +61,29 @@ public final class Types { public static final ClassType LOCALE = new ClassType(TypeCategory.SIMPLE, Locale.class); public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC, Long.class, long.class); - + public static final ClassType LONG_P = new ClassType(TypeCategory.NUMERIC, long.class); - + public static final ClassType MAP = new ClassType(TypeCategory.MAP, Map.class, OBJECT, OBJECT); - + public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); - + public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC, Short.class, short.class); - + public static final ClassType SHORT_P = new ClassType(TypeCategory.NUMERIC, short.class); - + public static final ClassType STRING = new ClassType(TypeCategory.STRING, String.class); - + public static final ClassType URI = new ClassType(TypeCategory.COMPARABLE, URI.class); - + public static final ClassType VOID = new ClassType(TypeCategory.SIMPLE, void.class); - + public static final SimpleType DATE_TIME = new SimpleType(TypeCategory.DATETIME, "org.joda.time.DateTime", "org.joda.time", "DateTime", false, false); public static final SimpleType LOCAL_DATE = new SimpleType(TypeCategory.DATE, "org.joda.time.LocalDate", "org.joda.time", "LocalDate", false, false); public static final SimpleType LOCAL_TIME = new SimpleType(TypeCategory.TIME, "org.joda.time.LocalTime", "org.joda.time", "LocalTime", false, false); - + private Types(){} - + } diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 9be5c5496e..ad75b36c3f 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.Map; @@ -16,7 +17,7 @@ public class ClassTypeTest { - private ClassType stringType = new ClassType(TypeCategory.STRING, String.class); + private final ClassType stringType = new ClassType(TypeCategory.STRING, String.class); // @Test // public void asArrayType(){ @@ -28,14 +29,14 @@ public void ArrayType(){ Type type = new ClassType(TypeCategory.ARRAY,String[].class); assertEquals("java.lang", type.getPackageName()); } - + @Test public void ArrayType_Equals_SimpleType(){ Type type = new ClassType(TypeCategory.ARRAY,String[].class); Type type2 = new SimpleType("java.lang.String[]", "java.lang", "String[]"); assertEquals(type, type2); } - + @Test public void As(){ assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); @@ -58,7 +59,7 @@ public void Primitive_Arrays(){ assertEquals("byte[]", byteArray.getSimpleName()); assertEquals("byte[]", byteArray.getFullName()); } - + @Test public void Array(){ ClassType byteArray = new ClassType(Byte[].class); @@ -66,4 +67,24 @@ public void Array(){ assertEquals("Byte[]", byteArray.getSimpleName()); assertEquals("java.lang.Byte[]", byteArray.getFullName()); } + + @Test + public void IsPrimitive(){ + assertTrue(Types.CHAR.isPrimitive()); + assertTrue(Types.DOUBLE_P.isPrimitive()); + assertTrue(Types.FLOAT_P.isPrimitive()); + assertTrue(Types.INT.isPrimitive()); + assertTrue(Types.LONG_P.isPrimitive()); + assertTrue(Types.SHORT_P.isPrimitive()); + } + + @Test + public void GetPrimitiveName(){ + assertEquals("char", Types.CHARACTER.getPrimitiveName()); + assertEquals("double", Types.DOUBLE.getPrimitiveName()); + assertEquals("float", Types.FLOAT.getPrimitiveName()); + assertEquals("int", Types.INTEGER.getPrimitiveName()); + assertEquals("long", Types.LONG.getPrimitiveName()); + assertEquals("short", Types.SHORT.getPrimitiveName()); + } } diff --git a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java index b71bb2b8ff..c841c91dd7 100644 --- a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java @@ -28,4 +28,9 @@ public void GetComponenType(){ assertEquals("java.lang.String", type.getComponentType().getFullName()); } + @Test + public void getRawName(){ + assertEquals("String", new SimpleType(Types.STRING).getRawName(Collections.emptySet(), Collections.singleton(Types.STRING.getFullName()))); + } + } diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index 317cd44d7b..667becb5bd 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -9,6 +9,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -21,9 +22,12 @@ public class ClassUtilsTest { + + @Test public void GetName() { assertEquals("int", ClassUtils.getName(int.class)); + assertEquals("int", ClassUtils.getName(int.class, Collections.emptySet(), Collections.emptySet())); assertEquals("Object", ClassUtils.getName(Object.class)); assertEquals("Object[]", ClassUtils.getName(Object[].class)); assertEquals("int", ClassUtils.getName(int.class)); From adc5d9597288e8f6c4bc2ea8dbf660500dd58094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 13:51:58 +0000 Subject: [PATCH 0138/1968] added tests --- .../java/com/mysema/codegen/JavaWriterTest.java | 15 +++++++++++++++ .../com/mysema/codegen/model/ClassTypeTest.java | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index e3d7259198..edd6d982b3 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -132,6 +132,14 @@ public void Interface2() throws IOException{ match("/testInterface2", w.toString()); } + @Test + public void Interface3() throws IOException{ + writer.beginInterface(testType, testType2, testInterface1, testInterface2); + writer.end(); + + assertTrue(w.toString().contains("public interface JavaWriterTest extends Test, TestInterface1, TestInterface2 {")); + } + @Test public void Javadoc() throws IOException{ writer.packageDecl("com.mysema.codegen"); @@ -294,6 +302,13 @@ public void Imports2() throws IOException{ match("/testImports2", w.toString()); } + @Test + public void Imports3() throws IOException{ + writer.importClasses("java.util.Locale"); + + assertTrue(w.toString().contains("import java.util.Locale;")); + } + @Test public void SuppressWarnings() throws IOException{ diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index ad75b36c3f..5ab17369ba 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -52,6 +52,11 @@ public void GetParameters(){ assertFalse(mapType.isPrimitive()); } + @Test + public void GetComponentType(){ + assertEquals("java.lang.String", new ClassType(String[].class).getComponentType().getFullName()); + } + @Test public void Primitive_Arrays(){ ClassType byteArray = new ClassType(byte[].class); From 10fbb3c87f057f1613f7fda5dd9be95b1ae884b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 9 Mar 2011 13:54:19 +0000 Subject: [PATCH 0139/1968] removed Immutable annotations --- .../com/mysema/codegen/model/ClassType.java | 3 - .../com/mysema/codegen/model/SimpleType.java | 60 +++++++++---------- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 5fca7bcb97..69468d7b1f 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -13,8 +13,6 @@ import javax.annotation.Nullable; -import net.jcip.annotations.Immutable; - import com.mysema.codegen.support.ClassUtils; /** @@ -22,7 +20,6 @@ * * @param */ -@Immutable public class ClassType implements Type { private final TypeCategory category; diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 53dd365de7..d00dba9bf4 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -12,26 +12,23 @@ import javax.annotation.Nullable; -import net.jcip.annotations.Immutable; - /** * @author tiwe */ -@Immutable public class SimpleType implements Type { private final TypeCategory category; - + private final String fullName, packageName, simpleName, localName; - + private final List parameters; - + private final boolean primitiveClass, finalClass; - + @Nullable private Type arrayType, componentType; - + public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Arrays.asList(parameters)); } @@ -39,33 +36,33 @@ public SimpleType(String fullName, String packageName, String simpleName, Type.. public SimpleType(String simpleName){ this(TypeCategory.SIMPLE, simpleName, "", simpleName, false, false); } - + public SimpleType(Type type, List parameters) { - this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), + this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), type.isPrimitive(), type.isFinal(), parameters); } - + public SimpleType(Type type, Type... parameters) { - this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), + this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); } - - public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, + + public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, boolean primitiveClass, boolean finalClass, List parameters) { this.category = category; this.fullName = fullName; this.packageName = packageName; this.simpleName = simpleName; if (packageName.length() > 0){ - this.localName = fullName.substring(packageName.length()+1); + this.localName = fullName.substring(packageName.length()+1); }else{ this.localName = fullName; - } + } this.primitiveClass = primitiveClass; this.finalClass = finalClass; this.parameters = parameters; } - + public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, boolean p, boolean f, Type... parameters) { this(typeCategory, fullName, packageName, simpleName, p, f, Arrays .asList(parameters)); @@ -74,18 +71,18 @@ public SimpleType(TypeCategory typeCategory, String fullName, String packageName @Override public Type as(TypeCategory c) { if (category != c){ - return new SimpleType(c, fullName, packageName, simpleName, primitiveClass, finalClass, parameters); + return new SimpleType(c, fullName, packageName, simpleName, primitiveClass, finalClass, parameters); }else{ return this; } } - + @Override public Type asArrayType() { if (arrayType == null){ String newFullName = getFullName()+"[]"; String newSimpleName = getSimpleName()+"[]"; - arrayType = new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), newSimpleName, false, false); + arrayType = new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), newSimpleName, false, false); } return arrayType; } @@ -105,21 +102,21 @@ public boolean equals(Object o){ public TypeCategory getCategory() { return category; } - + @Override public Type getComponentType() { if (fullName.endsWith("[]")){ if (componentType == null){ String newFullName = fullName.substring(0, fullName.length()-2); String newSimpleName = simpleName.substring(0, simpleName.length()-2); - componentType = new SimpleType(TypeCategory.SIMPLE, newFullName, getPackageName(), newSimpleName, false, false); + componentType = new SimpleType(TypeCategory.SIMPLE, newFullName, getPackageName(), newSimpleName, false, false); } return componentType; }else{ return null; - } + } } - + @Override public String getFullName() { return fullName; @@ -139,15 +136,15 @@ public String getGenericName(boolean asArgType, Set packages, Set"); @@ -183,25 +180,26 @@ public String getRawName(Set packages, Set classes) { public String getSimpleName() { return simpleName; } - + @Override public int hashCode(){ return fullName.hashCode(); } - + @Override public boolean isFinal() { return finalClass; } - + @Override public boolean isPrimitive() { return primitiveClass; } + @Override public String toString(){ return getGenericName(true); } - + } From d2cc6fc4a1824e6f574b3ea41f9dac7557c36a62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 31 Mar 2011 07:18:58 +0000 Subject: [PATCH 0140/1968] fixed packageless class handling updated version to 0.3.4 --- pom.xml | 2 +- .../mysema/codegen/support/ClassUtils.java | 22 +++++++++---------- src/test/java/NestedTest.java | 20 +++++++++++++++++ 3 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 src/test/java/NestedTest.java diff --git a/pom.xml b/pom.xml index a02d81a750..9b74c2520a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.3-SNAPSHOT + 0.3.4 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index a66160ddba..56a2248ee5 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -1,7 +1,7 @@ /* * Copyright (c) 2010 Mysema Ltd. * All rights reserved. - * + * */ package com.mysema.codegen.support; @@ -16,11 +16,11 @@ * */ public final class ClassUtils { - + public static String getName(Class cl){ return getName(cl, Collections.singleton("java.lang"), Collections.emptySet()); } - + public static String getFullName(Class cl) { if (cl.isArray()){ @@ -29,7 +29,7 @@ public static String getFullName(Class cl) { return cl.getName(); } } - + public static String getPackageName(Class cl){ if (cl.isArray()){ return getPackageName(cl.getComponentType()); @@ -39,24 +39,24 @@ public static String getPackageName(Class cl){ return ""; } } - + public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; - } else if (cl.getPackage() == null - || packages.contains(cl.getPackage().getName()) + } else if (cl.getPackage() == null + || packages.contains(cl.getPackage().getName()) || classes.contains(cl.getName())) { if (cl.getPackage() != null){ String localName = cl.getName().substring(cl.getPackage().getName().length()+1); return localName.replace('$', '.'); }else{ - return cl.getSimpleName().replace('$', '.'); + return cl.getName().replace('$', '.'); } } else { return cl.getName().replace('$', '.'); } } - + public static Class normalize(Class clazz){ if (List.class.isAssignableFrom(clazz)){ return List.class; @@ -64,10 +64,10 @@ public static Class normalize(Class clazz){ return Set.class; }else if (Collection.class.isAssignableFrom(clazz)){ return Collection.class; - }else if (Map.class.isAssignableFrom(clazz)){ + }else if (Map.class.isAssignableFrom(clazz)){ return Map.class; }else{ - return clazz; + return clazz; } } diff --git a/src/test/java/NestedTest.java b/src/test/java/NestedTest.java new file mode 100644 index 0000000000..955d76e249 --- /dev/null +++ b/src/test/java/NestedTest.java @@ -0,0 +1,20 @@ +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.mysema.codegen.support.ClassUtils; + + +public class NestedTest { + + public static class Inner { + + } + + @Test + public void ClassUtils_getName(){ + String name = ClassUtils.getName(NestedTest.Inner.class); + assertEquals("NestedTest.Inner", name); + } + +} From 33965299cddbc7fa55e1e21738d6093d3b56ce86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 31 Mar 2011 07:19:52 +0000 Subject: [PATCH 0141/1968] updated version to 0.3.4-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9b74c2520a..b050abaee5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.4 + 0.3.4-SNAPSHOT Codegen Code generation and compilation for Java From deb389cd6a03db2c581ed1abdf6bd8aa7041f6d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 31 Mar 2011 07:22:47 +0000 Subject: [PATCH 0142/1968] additional name handling fixes --- src/main/java/com/mysema/codegen/support/ClassUtils.java | 2 +- src/test/java/NestedTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 56a2248ee5..3b88a0e676 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -26,7 +26,7 @@ public static String getFullName(Class cl) { if (cl.isArray()){ return getFullName(cl.getComponentType()) + "[]"; }else{ - return cl.getName(); + return cl.getName().replace('$', '.'); } } diff --git a/src/test/java/NestedTest.java b/src/test/java/NestedTest.java index 955d76e249..fabad55485 100644 --- a/src/test/java/NestedTest.java +++ b/src/test/java/NestedTest.java @@ -2,6 +2,7 @@ import org.junit.Test; +import com.mysema.codegen.model.ClassType; import com.mysema.codegen.support.ClassUtils; @@ -17,4 +18,9 @@ public void ClassUtils_getName(){ assertEquals("NestedTest.Inner", name); } + @Test + public void ClassType_getName(){ + assertEquals("NestedTest.Inner", new ClassType(NestedTest.Inner.class).getFullName()); + } + } From a928c0e35f420ce94040ee177e86bb845e821d8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 10 Apr 2011 09:44:40 +0000 Subject: [PATCH 0143/1968] updated version to 0.3.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b050abaee5..6b343efc68 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.4-SNAPSHOT + 0.3.5 Codegen Code generation and compilation for Java From 5aeefe89461d2aa6b9cbd800681d7f1b87df8537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 10 Apr 2011 09:45:36 +0000 Subject: [PATCH 0144/1968] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6b343efc68..d59de4f186 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.5 + 0.3.5-SNAPSHOT Codegen Code generation and compilation for Java From 6df167a52700e75576f48fb7139bfee1020b39f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 10 Apr 2011 11:40:42 +0000 Subject: [PATCH 0145/1968] --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/ClassType.java | 2 +- .../java/com/mysema/codegen/model/ClassTypeTest.java | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d59de4f186..f033f36fbf 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.5-SNAPSHOT + 0.3.6-SNAPSHOT Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 69468d7b1f..52bbc88648 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -72,7 +72,7 @@ public Type as(TypeCategory c) { @Override public Type asArrayType() { if (arrayType == null){ - String fullName = javaClass.getName()+"[]"; + String fullName = ClassUtils.getFullName(javaClass)+"[]"; String simpleName = javaClass.getSimpleName()+"[]"; arrayType = new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); } diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index 5ab17369ba..b3bd03ea2a 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -17,6 +17,10 @@ public class ClassTypeTest { + public class Inner { + + } + private final ClassType stringType = new ClassType(TypeCategory.STRING, String.class); // @Test @@ -24,6 +28,12 @@ public class ClassTypeTest { // assertEquals(stringType, stringType.asArrayType().getParameter(0)); // } + @Test + public void InnerClass_Name(){ + assertEquals("com.mysema.codegen.model.ClassTypeTest.Inner", new ClassType(Inner.class).getFullName()); + assertEquals("com.mysema.codegen.model.ClassTypeTest.Inner[]", new ClassType(Inner.class).asArrayType().getFullName()); + } + @Test public void ArrayType(){ Type type = new ClassType(TypeCategory.ARRAY,String[].class); From 862c0d003b09fab4cb838c63bdd2af6e3478bfc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 12 Apr 2011 06:24:34 +0000 Subject: [PATCH 0146/1968] improved TypeExtends serialization --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/TypeAdapter.java | 2 +- src/main/java/com/mysema/codegen/model/TypeExtends.java | 8 ++++++-- .../java/com/mysema/codegen/model/TypeExtendsTest.java | 5 +++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index f033f36fbf..0a6ea26a49 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.6-SNAPSHOT + 0.3.7-SNAPSHOT Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index e06b6a33be..c1e08bd590 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -19,7 +19,7 @@ @Immutable public class TypeAdapter implements Type{ - private final Type type; + protected final Type type; public TypeAdapter(Type type){ this.type = type; diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index df07e22dde..97ee31cd4a 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -31,7 +31,7 @@ public TypeExtends(Type type) { super(type); varName = null; } - + @Override public String getGenericName(boolean asArgType){ return getGenericName(asArgType, Collections.emptySet(),Collections.emptySet()); @@ -40,7 +40,11 @@ public String getGenericName(boolean asArgType){ @Override public String getGenericName(boolean asArgType, Set packages, Set classes){ if (!asArgType){ - return "? extends " + super.getGenericName(true, packages, classes); + if (type.equals(Types.OBJECT)){ + return "?"; + }else{ + return "? extends " + super.getGenericName(true, packages, classes); + } }else{ return super.getGenericName(asArgType, packages, classes); } diff --git a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java index c599e411b3..ac87b4b329 100644 --- a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java @@ -21,4 +21,9 @@ public void GetGenericName_As_ArgType(){ assertEquals("java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(true)); } + @Test + public void GetGenericName_With_Object(){ + assertEquals("?", new TypeExtends(Types.OBJECT).getGenericName(false)); + } + } From 29ef45f739ae15d9efe9e753c2c1463bded40611 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 5 May 2011 11:13:28 +0000 Subject: [PATCH 0147/1968] improved Scala serialization --- pom.xml | 2 +- src/main/java/com/mysema/codegen/ScalaWriter.java | 3 +++ .../java/com/mysema/codegen/ScalaWriterTest.java | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0a6ea26a49..1d37153998 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.7-SNAPSHOT + 0.3.8 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index a9ff4d0361..f1be2519ac 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -349,6 +349,9 @@ public String getRawName(Type type) { String fullName = type.getFullName(); String packageName = type.getPackageName(); String rv = fullName; + if (type.isPrimitive() && packageName.isEmpty()){ + rv = Character.toUpperCase(rv.charAt(0)) + rv.substring(1); + } if (packages.contains(packageName) || classes.contains(fullName)){ if (packageName.length() > 0){ rv = fullName.substring(packageName.length()+1); diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 73af64f32c..9739516c77 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -332,5 +332,19 @@ public void Constructors() throws IOException{ System.out.println(w); } + + @Test + public void Primitive() throws IOException { + writer.beginClass(testType); + + writer.beginConstructor(new Parameter("a", Types.INT)); + writer.end(); + + writer.end(); + + System.out.println(w); + + assertTrue(w.toString().contains("public JavaWriterTest(a: Int) {")); + } } From 0087082cd561793cdaab75f6e8f8a5c2fd908490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 5 May 2011 11:14:16 +0000 Subject: [PATCH 0148/1968] updated version to 0.3.8-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1d37153998..c994894a5b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.8 + 0.3.8-SNAPSHOT Codegen Code generation and compilation for Java From 19cf1b95b5140d95005ecb4f3ec1efed03628d29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 10 May 2011 08:20:28 +0000 Subject: [PATCH 0149/1968] added escaping of Scala reserved words --- pom.xml | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 22 +++++-- .../codegen/support/ScalaSyntaxUtils.java | 66 +++++++++++++++++++ .../com/mysema/codegen/ScalaWriterTest.java | 21 ++++++ 4 files changed, 103 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java diff --git a/pom.xml b/pom.xml index c994894a5b..c3eaa9eb7e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.8-SNAPSHOT + 0.3.9 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index f1be2519ac..2ee24c6673 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -21,6 +21,7 @@ import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; +import com.mysema.codegen.support.ScalaSyntaxUtils; /** * @author tiwe @@ -113,7 +114,7 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { }else{ append("("); } - append(method.getName()+"="); + append(escape(method.getName())+"="); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); @@ -269,9 +270,9 @@ public ScalaWriter beginInterface(Type type, Type... interfaces) private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ if (returnType.equals(Types.VOID)){ - beginLine(modifiers + methodName).params(args).append(" {").nl(); + beginLine(modifiers + escape(methodName)).params(args).append(" {").nl(); }else{ - beginLine(modifiers + methodName).params(args).append(": " + getGenericName(true, returnType)).append(" {").nl(); + beginLine(modifiers + escape(methodName)).params(args).append(": " + getGenericName(true, returnType)).append(" {").nl(); } return goIn(); @@ -304,17 +305,17 @@ public ScalaWriter end() throws IOException { } public ScalaWriter field(Type type, String name) throws IOException { - line(VAR + name + ": " + getGenericName(true, type) + SEMICOLON); + line(VAR + escape(name) + ": " + getGenericName(true, type) + SEMICOLON); return compact ? this : nl(); } private ScalaWriter field(String modifier, Type type, String name) throws IOException{ - line(modifier + name + ": " + getGenericName(true, type) + SEMICOLON); + line(modifier + escape(name) + ": " + getGenericName(true, type) + SEMICOLON); return compact ? this : nl(); } private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ - line(modifier + name + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON); + line(modifier + escape(name) + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON); return compact ? this : nl(); } @@ -451,7 +452,7 @@ private ScalaWriter params(Parameter... params) throws IOException{ private ScalaWriter param(Parameter parameter) throws IOException{ - append(parameter.getName()); + append(escape(parameter.getName())); append(": "); append(getGenericName(true, parameter.getType())); return this; @@ -539,4 +540,11 @@ private Parameter[] transform(Collection parameters, Transformer reserved = new HashSet(Arrays.asList( + "abstract", + "do", + "finally", + "import", + "object", + "return", + "trait", + "var", + "_", + ":", + "case", + "else", + "for", + "lazy", + "override", + "sealed", + "try", + "while", + "=", + "=>", + "<-", + "catch", + "extends", + "forSome", + "match", + "package", + "super", + "true", + "with", + "<:", + "class", + "false", + "if", + "new", + "private", + "this", + "type", + "yield", + "<%", + ">:", + "def", + "final", + "implicit", + "null", + "protected", + "throw", + "val", + "#", + "@" + )); + + public static boolean isReserved(String token) { + return reserved.contains(token); + } +} diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 9739516c77..10c65c6291 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -347,4 +347,25 @@ public void Primitive() throws IOException { assertTrue(w.toString().contains("public JavaWriterTest(a: Int) {")); } + @Test + public void ReservedWords() throws IOException { + writer.beginClass(testType); + + writer.beginConstructor(new Parameter("type", Types.INT)); + writer.end(); + + writer.publicField(testType, "class"); + + writer.beginPublicMethod(testType, "var"); + writer.end(); + + writer.end(); + + System.out.println(w); + + assertTrue(w.toString().contains("`type`: Int")); + assertTrue(w.toString().contains("`class`: JavaWriterTest")); + assertTrue(w.toString().contains("`var`(): JavaWriterTest")); + } + } From 26aafd07895ae4340f744fd67f987454d980af5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 10 May 2011 08:21:50 +0000 Subject: [PATCH 0150/1968] updated version to 0.3.9-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c3eaa9eb7e..473e071b72 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.9 + 0.3.9-SNAPSHOT Codegen Code generation and compilation for Java From 0d6440cc0e86a00af558c3e70657d5c2db36f5dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 1 Jul 2011 13:14:47 +0000 Subject: [PATCH 0151/1968] fixed extends type serialization updated version to 0.4.0 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/TypeExtends.java | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 473e071b72..55f47fc68e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.3.9-SNAPSHOT + 0.4.0 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 97ee31cd4a..073635e30a 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -12,6 +12,8 @@ import net.jcip.annotations.Immutable; +import org.apache.commons.lang.StringUtils; + /** * @author tiwe * @@ -43,7 +45,8 @@ public String getGenericName(boolean asArgType, Set packages, Set Date: Fri, 1 Jul 2011 13:15:32 +0000 Subject: [PATCH 0152/1968] updated version to 0.4.0-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 55f47fc68e..65a0ac4da5 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.0 + 0.4.0-SNAPSHOT Codegen Code generation and compilation for Java From 0b6b07c79ead29edc1e463fc948a80ed74ed1d0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 25 Jul 2011 06:04:47 +0000 Subject: [PATCH 0153/1968] fixed serialization issues --- .../java/com/mysema/codegen/JavaWriter.java | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 2 +- .../com/mysema/codegen/InnerClassesTest.java | 31 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/mysema/codegen/InnerClassesTest.java diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 71d105b214..dfcafdb606 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -185,7 +185,7 @@ public JavaWriter beginClass(Type type) throws IOException{ @Override public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException{ packages.add(type.getPackageName()); - beginLine(PUBLIC_CLASS + type.getSimpleName()); + beginLine(PUBLIC_CLASS + type.getGenericName(false, packages, classes)); if (superClass != null){ append(EXTENDS + superClass.getGenericName(false, packages, classes)); } diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 2ee24c6673..e62ea35aa4 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -200,7 +200,7 @@ public ScalaWriter beginClass(Type type) throws IOException { @Override public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException { packages.add(type.getPackageName()); - beginLine(PUBLIC_CLASS, type.getSimpleName()); + beginLine(PUBLIC_CLASS, getGenericName(false, type)); if (superClass != null){ append(EXTENDS + getGenericName(false, superClass)); } diff --git a/src/test/java/com/mysema/codegen/InnerClassesTest.java b/src/test/java/com/mysema/codegen/InnerClassesTest.java new file mode 100644 index 0000000000..502d1f2986 --- /dev/null +++ b/src/test/java/com/mysema/codegen/InnerClassesTest.java @@ -0,0 +1,31 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; + +import org.junit.Test; + +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.SimpleType; +import com.mysema.codegen.model.Type; + +public class InnerClassesTest { + + public static class Entity { + + } + + @Test + public void DirectParameter() throws IOException { + Type entityType = new ClassType(Entity.class); + Type type = new SimpleType("com.mysema.codegen.gen.QEntity", "com.mysema.codegen.gen", "QEntity", entityType); + + StringWriter str = new StringWriter(); + JavaWriter writer = new JavaWriter(str); + writer.beginClass(type); + writer.end(); + + System.err.println(str.toString()); + } + +} From 0cf7d1fd5fc40162efc84cefeebaeb5a36382a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 4 Aug 2011 11:16:55 +0000 Subject: [PATCH 0154/1968] updated version to 0.4.1 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/SimpleType.java | 9 +++++++-- src/main/java/com/mysema/codegen/support/ClassUtils.java | 3 ++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 65a0ac4da5..a43471c7e8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.0-SNAPSHOT + 0.4.1 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index d00dba9bf4..2f1cf12efb 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -20,7 +20,7 @@ public class SimpleType implements Type { private final TypeCategory category; - private final String fullName, packageName, simpleName, localName; + private final String fullName, outerClassName, packageName, simpleName, localName; private final List parameters; @@ -58,6 +58,11 @@ public SimpleType(TypeCategory category, String fullName, String packageName, St }else{ this.localName = fullName; } + if (fullName.substring(packageName.length()+1).contains(".")) { + this.outerClassName = fullName.substring(0, fullName.lastIndexOf('.')); + } else { + this.outerClassName = fullName; + } this.primitiveClass = primitiveClass; this.finalClass = finalClass; this.parameters = parameters; @@ -169,7 +174,7 @@ public String getPrimitiveName() { @Override public String getRawName(Set packages, Set classes) { - if (packages.contains(packageName) || classes.contains(fullName)){ + if (packages.contains(packageName) || classes.contains(fullName) || classes.contains(outerClassName)){ return localName; }else{ return fullName; diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 3b88a0e676..958eee69d1 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -45,7 +45,8 @@ public static String getName(Class cl, Set packages, Set clas return getName(cl.getComponentType(), packages, classes) + "[]"; } else if (cl.getPackage() == null || packages.contains(cl.getPackage().getName()) - || classes.contains(cl.getName())) { + || classes.contains(cl.getName()) + || classes.contains(cl.getName().substring(0, cl.getName().lastIndexOf('.')))) { if (cl.getPackage() != null){ String localName = cl.getName().substring(cl.getPackage().getName().length()+1); return localName.replace('$', '.'); From 4daa204ec21b58893486168bc915aace634b3cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 8 Aug 2011 09:36:38 +0300 Subject: [PATCH 0155/1968] updated version to SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a43471c7e8..3b92fc5402 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.1 + 0.4.1-SNAPSHOT Codegen Code generation and compilation for Java From bff742ac3f4884be9255b282555e171c751a39d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 19 Sep 2011 10:43:37 +0300 Subject: [PATCH 0156/1968] added OSGI manifest --- pom.xml | 34 ++++++++++++++++++++++++++++++---- template.mf | 12 ++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 template.mf diff --git a/pom.xml b/pom.xml index 3b92fc5402..b12998e00e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.1-SNAPSHOT + 0.4.2 Codegen Code generation and compilation for Java @@ -16,16 +16,21 @@ 2010 + + 4.01 + 2.4 + + net.sourceforge.collections collections-generic - 4.01 + ${commons.collections.version} commons-lang commons-lang - 2.4 + ${commons.lang.version} @@ -68,6 +73,27 @@ + + + + com.springsource.bundlor + com.springsource.bundlor.maven + 1.0.0.RELEASE + + + bundlor + + bundlor + + + + + true + + + + + jboss @@ -81,4 +107,4 @@ - + \ No newline at end of file diff --git a/template.mf b/template.mf new file mode 100644 index 0000000000..e2845e0ff3 --- /dev/null +++ b/template.mf @@ -0,0 +1,12 @@ +Bundle-SymbolicName: com.mysema.codegen +Bundle-Name: Codegen +Bundle-Vendor: Mysema +Bundle-ManifestVersion: 2 +Import-Template: + javax.annotation.*;version="0", + org.apache.commons.collections15.*;version="${commons.collections.version}", + org.apache.commons.lang.*;version="${commons.lang.version}", + javax.tools.*;version="1" +Excluded-Imports: + edu.umd.cs.findbugs.annotations.*, + net.jcip.annotations.* From 439139b842862d1e4fd59282a95bb349252d3d13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 19 Sep 2011 10:46:45 +0300 Subject: [PATCH 0157/1968] updated version to 0.4.2-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b12998e00e..918adc1e9b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.2 + 0.4.2-SNAPSHOT Codegen Code generation and compilation for Java From 495a188d2c13aa655fa07e9a2bc0d494985285b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 26 Sep 2011 12:28:43 +0300 Subject: [PATCH 0158/1968] updated version to 0.4.3 --- pom.xml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 918adc1e9b..1639b82645 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.2-SNAPSHOT + 0.4.3 Codegen Code generation and compilation for Java @@ -75,6 +75,13 @@ + + org.apache.maven.plugins + maven-jar-plugin + + true + + com.springsource.bundlor com.springsource.bundlor.maven @@ -107,4 +114,13 @@ + + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + + \ No newline at end of file From 2e7a85768eaa07049855d41ffc36a13ffde641a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 7 Nov 2011 19:48:10 +0200 Subject: [PATCH 0159/1968] updated dependencies, updated to version 0.4.4 --- pom.xml | 12 ++++++------ .../java/com/mysema/codegen/AbstractCodeWriter.java | 2 +- src/main/java/com/mysema/codegen/JavaWriter.java | 2 +- src/main/java/com/mysema/codegen/ScalaWriter.java | 2 +- .../java/com/mysema/codegen/model/TypeExtends.java | 2 +- template.mf | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 1639b82645..4ccbf1f018 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.3 + 0.4.4 Codegen Code generation and compilation for Java @@ -18,18 +18,18 @@ 4.01 - 2.4 + 3.0.1 - + net.sourceforge.collections collections-generic ${commons.collections.version} - commons-lang - commons-lang + org.apache.commons + commons-lang3 ${commons.lang.version} @@ -123,4 +123,4 @@ - \ No newline at end of file + diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index 9862f5ddce..bacdc3e7e2 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -9,7 +9,7 @@ import java.io.IOException; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; /** * @author tiwe diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index dfcafdb606..84d29323e3 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -23,7 +23,7 @@ import java.util.Stack; import org.apache.commons.collections15.Transformer; -import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang3.StringEscapeUtils; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index e62ea35aa4..fbae3e36c7 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -16,7 +16,7 @@ import java.util.Set; import org.apache.commons.collections15.Transformer; -import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang3.StringEscapeUtils; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 073635e30a..0ea13cd816 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -12,7 +12,7 @@ import net.jcip.annotations.Immutable; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; /** * @author tiwe diff --git a/template.mf b/template.mf index e2845e0ff3..93ecf636a0 100644 --- a/template.mf +++ b/template.mf @@ -5,7 +5,7 @@ Bundle-ManifestVersion: 2 Import-Template: javax.annotation.*;version="0", org.apache.commons.collections15.*;version="${commons.collections.version}", - org.apache.commons.lang.*;version="${commons.lang.version}", + org.apache.commons.lang3.*;version="${commons.lang.version}", javax.tools.*;version="1" Excluded-Imports: edu.umd.cs.findbugs.annotations.*, From e9abca9778cb44b9c8b0ce3cac3dcdc7ef57d36b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 22 Nov 2011 23:58:21 +0200 Subject: [PATCH 0160/1968] updated version to 0.4.5 --- pom.xml | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 24 ++++++++++++------- .../com/mysema/codegen/ScalaWriterTest.java | 11 ++++++++- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 4ccbf1f018..ef3eecc3a7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.4 + 0.4.5 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index fbae3e36c7..65379695d2 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -4,7 +4,6 @@ import static com.mysema.codegen.Symbols.COMMA; import static com.mysema.codegen.Symbols.DOT; import static com.mysema.codegen.Symbols.QUOTE; -import static com.mysema.codegen.Symbols.SEMICOLON; import java.io.IOException; import java.lang.annotation.Annotation; @@ -54,6 +53,8 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String PUBLIC_CLASS = "class "; private static final String PUBLIC_OBJECT = "object "; + + private static final String CASE_CLASS = "case class "; private static final String VAR = "var "; @@ -185,7 +186,7 @@ public ScalaWriter beginObject(String header) throws IOException { goIn(); return this; } - + public ScalaWriter beginClass(String header) throws IOException { line(PUBLIC_CLASS, header, " {"); goIn(); @@ -297,6 +298,11 @@ public ScalaWriter beginStaticMethod(Type returnType, String methodName, Col public ScalaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException{ return beginMethod(DEF, returnType, methodName, args); } + + public ScalaWriter caseClass(String header, Parameter... parameters) throws IOException { + beginLine(CASE_CLASS, header).params(parameters).nl(); + return this; + } @Override public ScalaWriter end() throws IOException { @@ -305,17 +311,17 @@ public ScalaWriter end() throws IOException { } public ScalaWriter field(Type type, String name) throws IOException { - line(VAR + escape(name) + ": " + getGenericName(true, type) + SEMICOLON); + line(VAR + escape(name) + ": " + getGenericName(true, type)); return compact ? this : nl(); } private ScalaWriter field(String modifier, Type type, String name) throws IOException{ - line(modifier + escape(name) + ": " + getGenericName(true, type) + SEMICOLON); + line(modifier + escape(name) + ": " + getGenericName(true, type)); return compact ? this : nl(); } private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ - line(modifier + escape(name) + ": " + getGenericName(true, type) + ASSIGN + value + SEMICOLON); + line(modifier + escape(name) + ": " + getGenericName(true, type) + ASSIGN + value); return compact ? this : nl(); } @@ -373,7 +379,7 @@ public String getRawName(Type type) { public ScalaWriter imports(Class... imports) throws IOException{ for (Class cl : imports){ classes.add(cl.getName()); - line(IMPORT + cl.getName() + SEMICOLON); + line(IMPORT + cl.getName()); } nl(); return this; @@ -383,7 +389,7 @@ public ScalaWriter imports(Class... imports) throws IOException{ public ScalaWriter imports(Package... imports) throws IOException { for (Package p : imports){ packages.add(p.getName()); - line(IMPORT + p.getName() + "._;"); + line(IMPORT + p.getName() + "._"); } nl(); return this; @@ -393,7 +399,7 @@ public ScalaWriter imports(Package... imports) throws IOException { public ScalaWriter importClasses(String... imports) throws IOException{ for (String cl : imports){ classes.add(cl); - line(IMPORT + cl + SEMICOLON); + line(IMPORT + cl); } nl(); return this; @@ -421,7 +427,7 @@ public ScalaWriter javadoc(String... lines) throws IOException { @Override public ScalaWriter packageDecl(String packageName) throws IOException { packages.add(packageName); - return line(PACKAGE + packageName + SEMICOLON).nl(); + return line(PACKAGE + packageName).nl(); } private ScalaWriter params(Collection parameters, Transformer transformer) throws IOException{ diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 10c65c6291..f28d9a9a48 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -1,5 +1,6 @@ package com.mysema.codegen; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.io.IOException; @@ -113,7 +114,7 @@ public void Arrays() throws IOException{ writer.end(); System.out.println(w); - assertTrue(w.toString().contains("var stringArray: Array[String];")); + assertTrue(w.toString().contains("var stringArray: Array[String]")); assertTrue(w.toString().contains("def main(args: Array[String])")); assertTrue(w.toString().contains("def main2(args: Array[String])")); } @@ -333,6 +334,14 @@ public void Constructors() throws IOException{ } + @Test + public void CaseClass() throws IOException { + writer.caseClass("TestType", new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)); + + System.out.println(w); + assertEquals("case class TestType(a: String, b: String)\n", w.toString()); + } + @Test public void Primitive() throws IOException { writer.beginClass(testType); From 3f19fd618ffcd988e8b247515db72193fc8654b1 Mon Sep 17 00:00:00 2001 From: Jean-Pierre Bergamin Date: Fri, 25 Nov 2011 12:34:10 +0100 Subject: [PATCH 0161/1968] Import the javax.tools package with version "0" --- template.mf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/template.mf b/template.mf index 93ecf636a0..0d5d82fd2b 100644 --- a/template.mf +++ b/template.mf @@ -6,7 +6,7 @@ Import-Template: javax.annotation.*;version="0", org.apache.commons.collections15.*;version="${commons.collections.version}", org.apache.commons.lang3.*;version="${commons.lang.version}", - javax.tools.*;version="1" + javax.tools.*;version="0" Excluded-Imports: edu.umd.cs.findbugs.annotations.*, net.jcip.annotations.* From 6633ea706a089f53e04305258a388282832876ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 16 Dec 2011 14:12:39 +0200 Subject: [PATCH 0162/1968] improved Scala serialization --- pom.xml | 2 +- src/main/java/com/mysema/codegen/ScalaWriter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ef3eecc3a7..82a2967852 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.5 + 0.4.6 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 65379695d2..0e07826bf8 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -409,7 +409,7 @@ public ScalaWriter importClasses(String... imports) throws IOException{ public ScalaWriter importPackages(String... imports) throws IOException { for (String p : imports){ packages.add(p); - line(IMPORT + p + "._;"); + line(IMPORT + p + "._"); } nl(); return this; From b2a4dfb0ed8ffda98fecf76db45e8a999936880d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 26 Jan 2012 00:09:11 +0200 Subject: [PATCH 0163/1968] added Scala test --- .../mysema/codegen/AbstractCodeWriter.java | 4 +--- .../java/com/mysema/codegen/ScalaWriter.java | 19 ++++++++++++++----- .../com/mysema/codegen/ScalaWriterTest.java | 8 ++++++++ 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index bacdc3e7e2..4660c5f73a 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -5,8 +5,6 @@ */ package com.mysema.codegen; -import static com.mysema.codegen.Symbols.NEWLINE; - import java.io.IOException; import org.apache.commons.lang3.StringUtils; @@ -89,7 +87,7 @@ public T line(String... segments) throws IOException{ @Override public T nl() throws IOException { - return append(NEWLINE); + return append("\n"); } } diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 0e07826bf8..e4b1e4f741 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -21,13 +21,17 @@ import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; import com.mysema.codegen.support.ScalaSyntaxUtils; +import com.sun.xml.internal.ws.util.StringUtils; /** * @author tiwe * */ -public class ScalaWriter extends AbstractCodeWriter{ +public class ScalaWriter extends AbstractCodeWriter { + private static final Set PRIMITIVE_TYPES = new HashSet( + Arrays.asList("byte","char","int","long","short","double","float")); + private static final String DEF = "def "; private static final String EXTENDS = " extends "; @@ -61,7 +65,7 @@ public class ScalaWriter extends AbstractCodeWriter{ private static final String VAL = "val "; private static final String TRAIT = "trait "; - + private final Set classes = new HashSet(); private final Set packages = new HashSet(); @@ -340,7 +344,7 @@ public String getGenericName(boolean asArgType, Type type) { builder.append(", "); } if (parameter == null || parameter.getFullName().equals(fullName)){ - builder.append("?"); + builder.append("_"); }else{ builder.append(getGenericName(false, parameter)); } @@ -354,6 +358,9 @@ public String getGenericName(boolean asArgType, Type type) { @Override public String getRawName(Type type) { String fullName = type.getFullName(); + if (PRIMITIVE_TYPES.contains(fullName)) { + fullName = StringUtils.capitalize(fullName); + } String packageName = type.getPackageName(); String rv = fullName; if (type.isPrimitive() && packageName.isEmpty()){ @@ -366,8 +373,10 @@ public String getRawName(Type type) { } if (rv.endsWith("[]")){ rv = rv.substring(0, rv.length()-2); - if (classes.contains(rv)){ - rv = rv.substring(packageName.length()+1); + if (PRIMITIVE_TYPES.contains(rv)) { + rv = StringUtils.capitalize(rv); + } else if (classes.contains(rv)){ + rv = rv.substring(packageName.length()+1); } return "Array[" + rv + "]"; }else{ diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index f28d9a9a48..6bceb6b6bf 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -118,6 +118,14 @@ public void Arrays() throws IOException{ assertTrue(w.toString().contains("def main(args: Array[String])")); assertTrue(w.toString().contains("def main2(args: Array[String])")); } + + @Test + public void Arrays2() throws IOException { + writer.field(Types.BYTE_P.asArrayType(), "byteArray"); + + System.out.println(w); + assertTrue(w.toString().contains("var byteArray: Array[Byte]")); + } @Test public void Trait() throws IOException{ From 1b82f4d570b6eb7309b9a672ffce69c432c61cec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 26 Jan 2012 00:11:26 +0200 Subject: [PATCH 0164/1968] added further tests --- src/main/java/com/mysema/codegen/ScalaWriter.java | 4 +++- src/test/java/com/mysema/codegen/ScalaWriterTest.java | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index e4b1e4f741..91cc76d514 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -177,7 +177,9 @@ private void annotationConstant(Object value) throws IOException{ } private ScalaWriter appendType(Class type) throws IOException{ - if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ + if (type.isPrimitive()) { + append(StringUtils.capitalize(type.getName())); + } else if (type.getPackage() == null || classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ append(type.getSimpleName()); }else{ append(type.getName()); diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 6bceb6b6bf..3435b39218 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -214,7 +214,7 @@ public void AnnotationConstant() throws IOException{ Max annotation = new MaxImpl(0l){ @Override public Class[] groups() { - return new Class[]{Object.class, String.class}; + return new Class[]{Object.class, String.class, int.class}; } }; writer.annotation(annotation); From 07d4f99e3f33788ed603b63abfc4417a572597bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 26 Jan 2012 19:18:16 +0200 Subject: [PATCH 0165/1968] fixed scala handling of primitive types --- pom.xml | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 2 +- .../com/mysema/codegen/ScalaWriterTest.java | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 82a2967852..63661c7cfe 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.6 + 0.4.7 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 91cc76d514..66450b2e21 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -30,7 +30,7 @@ public class ScalaWriter extends AbstractCodeWriter { private static final Set PRIMITIVE_TYPES = new HashSet( - Arrays.asList("byte","char","int","long","short","double","float")); + Arrays.asList("boolean", "byte","char","int","long","short","double","float")); private static final String DEF = "def "; diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 3435b39218..74a48c33db 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -24,6 +24,7 @@ import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; +import com.sun.xml.internal.ws.util.StringUtils; public class ScalaWriterTest { @@ -363,6 +364,22 @@ public void Primitive() throws IOException { assertTrue(w.toString().contains("public JavaWriterTest(a: Int) {")); } + + @Test + public void Primive_Types() throws IOException { + writer.field(Types.BOOLEAN_P, "field"); + writer.field(Types.BYTE_P, "field"); + writer.field(Types.CHAR, "field"); + writer.field(Types.INT, "field"); + writer.field(Types.LONG_P, "field"); + writer.field(Types.SHORT_P, "field"); + writer.field(Types.DOUBLE_P, "field"); + writer.field(Types.FLOAT_P, "field"); + + for (String type : Arrays.asList("boolean", "byte","char","int","long","short","double","float")) { + assertTrue(w.toString().contains("field: " + StringUtils.capitalize(type))); + } + } @Test public void ReservedWords() throws IOException { From 66e6a9c2824f9e5aea0aad88de6a073547e38209 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 26 Jan 2012 19:22:29 +0200 Subject: [PATCH 0166/1968] fixed StringUtils usage --- src/main/java/com/mysema/codegen/ScalaWriter.java | 2 +- src/test/java/com/mysema/codegen/ScalaWriterTest.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 66450b2e21..319bb8318a 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -16,12 +16,12 @@ import org.apache.commons.collections15.Transformer; import org.apache.commons.lang3.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; import com.mysema.codegen.support.ScalaSyntaxUtils; -import com.sun.xml.internal.ws.util.StringUtils; /** * @author tiwe diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 74a48c33db..fb5a7a4d68 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -15,6 +15,7 @@ import javax.validation.constraints.Max; import org.apache.commons.collections15.Transformer; +import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; @@ -24,7 +25,7 @@ import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; -import com.sun.xml.internal.ws.util.StringUtils; + public class ScalaWriterTest { From 30b1dd109c067026dd8517fea2bea9b12068412c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 5 Feb 2012 22:04:28 +0200 Subject: [PATCH 0167/1968] #1 removed findbugs dependency --- pom.xml | 13 +------------ src/main/java/com/mysema/codegen/CodeWriter.java | 4 +--- .../java/com/mysema/codegen/MemClassLoader.java | 6 +----- .../com/mysema/codegen/MemFileSystemRegistry.java | 2 -- .../java/com/mysema/codegen/MemJavaFileObject.java | 2 -- .../java/com/mysema/codegen/MethodEvaluator.java | 5 +---- .../java/com/mysema/codegen/SimpleCompiler.java | 2 -- .../java/com/mysema/codegen/model/ClassType.java | 6 +----- .../java/com/mysema/codegen/model/Constructor.java | 3 --- .../java/com/mysema/codegen/model/Parameter.java | 2 -- .../java/com/mysema/codegen/model/SimpleType.java | 3 --- src/main/java/com/mysema/codegen/model/Type.java | 4 ---- .../java/com/mysema/codegen/model/TypeAdapter.java | 3 --- .../java/com/mysema/codegen/model/TypeCategory.java | 5 +---- .../java/com/mysema/codegen/model/TypeExtends.java | 8 ++------ .../java/com/mysema/codegen/model/TypeSuper.java | 6 +----- .../java/com/mysema/codegen/model/package-info.java | 5 ----- src/main/java/com/mysema/codegen/package-info.java | 5 ----- .../com/mysema/codegen/support/package-info.java | 6 ------ template.mf | 3 --- 20 files changed, 9 insertions(+), 84 deletions(-) diff --git a/pom.xml b/pom.xml index 63661c7cfe..cd3ff7f93c 100644 --- a/pom.xml +++ b/pom.xml @@ -32,18 +32,7 @@ commons-lang3 ${commons.lang.version} - - - net.sourceforge.findbugs - jsr305 - 1.3.2 - - - net.sourceforge.findbugs - annotations - 1.3.2 - - + junit diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 4afa2f8320..230998b196 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -9,8 +9,6 @@ import java.lang.annotation.Annotation; import java.util.Collection; -import javax.annotation.Nullable; - import org.apache.commons.collections15.Transformer; import com.mysema.codegen.model.Parameter; @@ -34,7 +32,7 @@ public interface CodeWriter extends Appendable{ CodeWriter beginClass(Type type) throws IOException; - CodeWriter beginClass(Type type, @Nullable Type superClass, Type... interfaces) throws IOException; + CodeWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException; CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index 1c5db6fa23..b6eb3225e2 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -17,10 +17,9 @@ import java.util.List; import java.util.Map; -import javax.annotation.Nullable; import javax.tools.JavaFileObject; -import javax.tools.StandardLocation; import javax.tools.JavaFileObject.Kind; +import javax.tools.StandardLocation; /** @@ -56,7 +55,6 @@ protected Class findClass(String name) throws ClassNotFoundException { } @Override - @Nullable protected URL findResource(String name) { URL retValue = super.findResource(name); if(retValue != null) { @@ -75,7 +73,6 @@ protected URL findResource(String name) { } } - @Nullable private JavaFileObject getFileObject(String n) { LocationAndKind key; String name; @@ -97,7 +94,6 @@ private JavaFileObject getFileObject(String n) { } @Override - @Nullable public InputStream getResourceAsStream(String name) { JavaFileObject jfo = getFileObject(name); if (jfo != null) { diff --git a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java index d37f61a2dc..7bb0cae078 100644 --- a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java +++ b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java @@ -12,7 +12,6 @@ import java.util.Map; import java.util.WeakHashMap; -import javax.annotation.Nullable; import javax.tools.JavaFileManager; /** @@ -40,7 +39,6 @@ private MemFileSystemRegistry() { System.setProperty("java.protocol.handler.pkgs",pkgs); } - @Nullable public JavaFileManager getFileSystem(URL url) { String prefix = url.getProtocol() + "://" + url.getHost() + "/"; if(prefix2jfm.containsKey(prefix)) { diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index b736dda0b2..adcdaff468 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -15,7 +15,6 @@ import java.io.OutputStream; import java.net.URI; -import javax.annotation.Nullable; import javax.tools.SimpleJavaFileObject; /** @@ -26,7 +25,6 @@ */ public class MemJavaFileObject extends SimpleJavaFileObject { - @Nullable private ByteArrayOutputStream baos; private final String name; diff --git a/src/main/java/com/mysema/codegen/MethodEvaluator.java b/src/main/java/com/mysema/codegen/MethodEvaluator.java index 220a2a832e..dff31b482c 100644 --- a/src/main/java/com/mysema/codegen/MethodEvaluator.java +++ b/src/main/java/com/mysema/codegen/MethodEvaluator.java @@ -6,8 +6,6 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import javax.annotation.Nullable; - /** * @author tiwe * @@ -17,12 +15,11 @@ public final class MethodEvaluator implements Evaluator { private final Method method; - @Nullable private final Object object; private final Class projectionType; - MethodEvaluator(Method method, @Nullable Object object, Class projectionType) { + MethodEvaluator(Method method, Object object, Class projectionType) { this.method = method; this.object = object; this.projectionType = projectionType; diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index e6d99741c2..251eb07f9d 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -19,7 +19,6 @@ import java.util.Locale; import java.util.Set; -import javax.annotation.Nullable; import javax.lang.model.SourceVersion; import javax.tools.DiagnosticListener; import javax.tools.JavaCompiler; @@ -55,7 +54,6 @@ public static String getClassPath(URLClassLoader classLoader) { private final ClassLoader classLoader; - @Nullable private String classPath; private final JavaCompiler compiler; diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 52bbc88648..897d2dd44b 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -11,8 +11,6 @@ import java.util.List; import java.util.Set; -import javax.annotation.Nullable; - import com.mysema.codegen.support.ClassUtils; /** @@ -30,10 +28,8 @@ public class ClassType implements Type { private final List parameters; - @Nullable private final Class primitiveClass; - @Nullable private Type arrayType, componentType; public ClassType(Class javaClass, Type... parameters) { @@ -44,7 +40,7 @@ public ClassType(TypeCategory category, Class javaClass, Class primitiveCl this(category, javaClass, primitiveClass, Collections.emptyList()); } - public ClassType(TypeCategory category, Class javaClass, @Nullable Class primitiveClass, List parameters) { + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass, List parameters) { this.category = category; this.javaClass = javaClass; this.primitiveClass = primitiveClass; diff --git a/src/main/java/com/mysema/codegen/model/Constructor.java b/src/main/java/com/mysema/codegen/model/Constructor.java index fcaa6c34e2..1e0509b48a 100644 --- a/src/main/java/com/mysema/codegen/model/Constructor.java +++ b/src/main/java/com/mysema/codegen/model/Constructor.java @@ -7,13 +7,10 @@ import java.util.Collection; -import net.jcip.annotations.Immutable; - /** * @author tiwe * */ -@Immutable public final class Constructor { private final Collection parameters; diff --git a/src/main/java/com/mysema/codegen/model/Parameter.java b/src/main/java/com/mysema/codegen/model/Parameter.java index 8f8df265d8..97e619291e 100644 --- a/src/main/java/com/mysema/codegen/model/Parameter.java +++ b/src/main/java/com/mysema/codegen/model/Parameter.java @@ -5,7 +5,6 @@ */ package com.mysema.codegen.model; -import net.jcip.annotations.Immutable; /** * Parameter represents a parameter in a Constructor @@ -13,7 +12,6 @@ * @author tiwe * @version $Id$ */ -@Immutable public final class Parameter { private final String name; diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 2f1cf12efb..be03655f92 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -10,8 +10,6 @@ import java.util.List; import java.util.Set; -import javax.annotation.Nullable; - /** * @author tiwe @@ -26,7 +24,6 @@ public class SimpleType implements Type { private final boolean primitiveClass, finalClass; - @Nullable private Type arrayType, componentType; public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index a3b211f726..59a8f82177 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -8,8 +8,6 @@ import java.util.List; import java.util.Set; -import javax.annotation.Nullable; - /** * @author tiwe */ @@ -19,7 +17,6 @@ public interface Type { Type asArrayType(); - @Nullable Type getComponentType(); TypeCategory getCategory(); @@ -34,7 +31,6 @@ public interface Type { List getParameters(); - @Nullable String getPrimitiveName(); String getRawName(Set packages, Set classes); diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index c1e08bd590..c8e771ea49 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -8,15 +8,12 @@ import java.util.List; import java.util.Set; -import net.jcip.annotations.Immutable; - /** * TypeAdapter is a basic adapter implementation for the Type interface * * @author tiwe * */ -@Immutable public class TypeAdapter implements Type{ protected final Type type; diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java index 2d070ccaa5..aa5dd678fe 100644 --- a/src/main/java/com/mysema/codegen/model/TypeCategory.java +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -8,8 +8,6 @@ import java.util.HashSet; import java.util.Set; -import javax.annotation.Nullable; - /** * TypeCategory defines the expression type used for a Field * @@ -91,12 +89,11 @@ public enum TypeCategory { */ TIME(COMPARABLE, java.sql.Time.class.getName(), "org.joda.time.LocalTime"); - @Nullable private final TypeCategory superType; private final Set types; - TypeCategory(@Nullable TypeCategory superType, String... types){ + TypeCategory(TypeCategory superType, String... types){ this.superType = superType; this.types = new HashSet(types.length); for (String type : types){ diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 0ea13cd816..e10b4fdc2f 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -8,20 +8,16 @@ import java.util.Collections; import java.util.Set; -import javax.annotation.Nullable; - -import net.jcip.annotations.Immutable; - import org.apache.commons.lang3.StringUtils; +import com.sun.istack.internal.Nullable; + /** * @author tiwe * */ -@Immutable public class TypeExtends extends TypeAdapter{ - @Nullable private final String varName; public TypeExtends(String varName, Type type) { diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index 8b43de8038..c8811efde8 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -8,9 +8,7 @@ import java.util.Collections; import java.util.Set; -import javax.annotation.Nullable; - -import net.jcip.annotations.Immutable; +import com.sun.istack.internal.Nullable; /** @@ -19,12 +17,10 @@ * @author tiwe * */ -@Immutable public class TypeSuper extends TypeAdapter{ private final Type superType; - @Nullable private final String varName; public TypeSuper(String varName, Type type) { diff --git a/src/main/java/com/mysema/codegen/model/package-info.java b/src/main/java/com/mysema/codegen/model/package-info.java index b23fd4eeb1..f7f1b7b3ef 100644 --- a/src/main/java/com/mysema/codegen/model/package-info.java +++ b/src/main/java/com/mysema/codegen/model/package-info.java @@ -4,10 +4,5 @@ * */ -@DefaultAnnotation( { Nonnull.class }) package com.mysema.codegen.model; -import javax.annotation.Nonnull; - -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; - diff --git a/src/main/java/com/mysema/codegen/package-info.java b/src/main/java/com/mysema/codegen/package-info.java index cb8076bbc9..3efe27cc7e 100644 --- a/src/main/java/com/mysema/codegen/package-info.java +++ b/src/main/java/com/mysema/codegen/package-info.java @@ -7,10 +7,5 @@ /** * Alias functionality */ -@DefaultAnnotation( { Nonnull.class }) package com.mysema.codegen; -import javax.annotation.Nonnull; - -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; - diff --git a/src/main/java/com/mysema/codegen/support/package-info.java b/src/main/java/com/mysema/codegen/support/package-info.java index 073460b195..6c8bf5fca8 100644 --- a/src/main/java/com/mysema/codegen/support/package-info.java +++ b/src/main/java/com/mysema/codegen/support/package-info.java @@ -4,10 +4,4 @@ * */ -@DefaultAnnotation( { Nonnull.class }) package com.mysema.codegen.support; - -import javax.annotation.Nonnull; - -import edu.umd.cs.findbugs.annotations.DefaultAnnotation; - diff --git a/template.mf b/template.mf index 93ecf636a0..774e072625 100644 --- a/template.mf +++ b/template.mf @@ -7,6 +7,3 @@ Import-Template: org.apache.commons.collections15.*;version="${commons.collections.version}", org.apache.commons.lang3.*;version="${commons.lang.version}", javax.tools.*;version="1" -Excluded-Imports: - edu.umd.cs.findbugs.annotations.*, - net.jcip.annotations.* From 497de0a10d970c596a0e9278a893bd5dd734b1eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 5 Feb 2012 22:09:21 +0200 Subject: [PATCH 0168/1968] #2 fixed URI creation --- src/main/java/com/mysema/codegen/MemSourceFileObject.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/MemSourceFileObject.java b/src/main/java/com/mysema/codegen/MemSourceFileObject.java index a1486f72a6..08f5f97961 100644 --- a/src/main/java/com/mysema/codegen/MemSourceFileObject.java +++ b/src/main/java/com/mysema/codegen/MemSourceFileObject.java @@ -22,7 +22,7 @@ public class MemSourceFileObject extends SimpleJavaFileObject { private static URI toUri(String fqname) { - return URI.create(fqname.replace(".","/") + ".java"); + return URI.create("file:///" + fqname.replace(".","/") + ".java"); } private final StringBuilder contents; From eb6fd7ecac4ff5bfedaa966d823dbfd63c21f6e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 5 Feb 2012 22:13:28 +0200 Subject: [PATCH 0169/1968] version 0.4.8 --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/TypeExtends.java | 2 -- src/main/java/com/mysema/codegen/model/TypeSuper.java | 3 --- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index cd3ff7f93c..f2b3dccb1a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.7 + 0.4.8 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index e10b4fdc2f..53e4043346 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -10,7 +10,6 @@ import org.apache.commons.lang3.StringUtils; -import com.sun.istack.internal.Nullable; /** * @author tiwe @@ -49,7 +48,6 @@ public String getGenericName(boolean asArgType, Set packages, Set packages, Set Date: Sun, 11 Mar 2012 11:31:36 +0200 Subject: [PATCH 0170/1968] added getJavaClass --- pom.xml | 2 +- .../mysema/codegen/AbstractCodeWriter.java | 24 +- .../java/com/mysema/codegen/CodeWriter.java | 26 ++- .../com/mysema/codegen/CodegenException.java | 14 +- .../java/com/mysema/codegen/Evaluator.java | 4 +- .../com/mysema/codegen/EvaluatorFactory.java | 90 ++++---- .../java/com/mysema/codegen/JavaWriter.java | 211 ++++++++++-------- .../com/mysema/codegen/LocationAndKind.java | 30 ++- .../com/mysema/codegen/MemClassLoader.java | 75 ++++--- .../com/mysema/codegen/MemFileManager.java | 96 ++++---- .../mysema/codegen/MemFileSystemRegistry.java | 34 +-- .../com/mysema/codegen/MemJavaFileObject.java | 26 +-- .../mysema/codegen/MemSourceFileObject.java | 26 ++- .../com/mysema/codegen/MethodEvaluator.java | 8 +- .../java/com/mysema/codegen/ScalaWriter.java | 208 +++++++++-------- .../com/mysema/codegen/SimpleCompiler.java | 73 +++--- src/main/java/com/mysema/codegen/Symbols.java | 11 +- .../com/mysema/codegen/model/ClassType.java | 52 ++--- .../com/mysema/codegen/model/Constructor.java | 14 +- .../com/mysema/codegen/model/Parameter.java | 13 +- .../com/mysema/codegen/model/SimpleType.java | 131 +++++++---- .../java/com/mysema/codegen/model/Type.java | 26 ++- .../com/mysema/codegen/model/TypeAdapter.java | 19 +- .../mysema/codegen/model/TypeCategory.java | 43 ++-- .../com/mysema/codegen/model/TypeExtends.java | 22 +- .../com/mysema/codegen/model/TypeSuper.java | 24 +- .../java/com/mysema/codegen/model/Types.java | 44 ++-- .../mysema/codegen/support/ClassUtils.java | 52 ++--- .../codegen/support/ScalaSyntaxUtils.java | 64 +----- .../mysema/codegen/support/package-info.java | 1 + src/test/java/NestedTest.java | 5 +- .../java/com/mysema/codegen/Annotation.java | 8 +- .../java/com/mysema/codegen/Annotation2.java | 6 +- .../com/mysema/codegen/Annotation2Impl.java | 6 +- .../java/com/mysema/codegen/Annotation3.java | 6 +- .../com/mysema/codegen/AnnotationTest.java | 46 ++-- .../mysema/codegen/ComplexEvaluationTest.java | 34 ++- .../mysema/codegen/EvaluatorFactoryTest.java | 114 +++++----- .../com/mysema/codegen/InnerClassesTest.java | 15 +- .../com/mysema/codegen/JavaWriterTest.java | 117 +++++----- src/test/java/com/mysema/codegen/MaxImpl.java | 8 +- .../mysema/codegen/MemJavaFileObjectTest.java | 6 +- .../codegen/MemSourceFileObjectTest.java | 6 +- src/test/java/com/mysema/codegen/MinImpl.java | 8 +- .../java/com/mysema/codegen/NotNullImpl.java | 4 +- .../com/mysema/codegen/ScalaWriterTest.java | 158 +++++++------ .../mysema/codegen/SimpleCompilerTest.java | 9 +- .../mysema/codegen/model/ClassTypeTest.java | 70 +++--- .../mysema/codegen/model/ConstructorTest.java | 8 +- .../mysema/codegen/model/ParameterTest.java | 5 +- .../mysema/codegen/model/SimpleTypeTest.java | 38 +++- .../mysema/codegen/model/TypeAdapterTest.java | 2 +- .../codegen/model/TypeCategoryTest.java | 2 +- .../mysema/codegen/model/TypeExtendsTest.java | 12 +- .../mysema/codegen/model/TypeSuperTest.java | 2 +- .../com/mysema/codegen/model/TypeTest.java | 100 ++++----- .../codegen/support/ClassUtilsTest.java | 9 +- 57 files changed, 1191 insertions(+), 1076 deletions(-) diff --git a/pom.xml b/pom.xml index f2b3dccb1a..d74c880fbc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.8 + 0.4.9 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index 4660c5f73a..bc9d7ce17d 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -11,10 +11,11 @@ /** * @author tiwe - * + * * @param */ -public abstract class AbstractCodeWriter> implements Appendable, CodeWriter{ +public abstract class AbstractCodeWriter> implements Appendable, + CodeWriter { private final Appendable appendable; @@ -25,10 +26,10 @@ public abstract class AbstractCodeWriter> implem private String indent = ""; @SuppressWarnings("unchecked") - private final T self = (T)this; + private final T self = (T) this; - public AbstractCodeWriter(Appendable appendable, int spaces){ - if (appendable == null){ + public AbstractCodeWriter(Appendable appendable, int spaces) { + if (appendable == null) { throw new IllegalArgumentException("appendable is null"); } this.appendable = appendable; @@ -57,29 +58,28 @@ public T append(CharSequence csq, int start, int end) throws IOException { @Override public T beginLine(String... segments) throws IOException { append(indent); - for (String segment : segments){ + for (String segment : segments) { append(segment); } return self; } - protected T goIn(){ + protected T goIn() { indent += spacesString; return self; } - - protected T goOut(){ - if (indent.length() >= spaces){ + protected T goOut() { + if (indent.length() >= spaces) { indent = indent.substring(0, indent.length() - spaces); } return self; } @Override - public T line(String... segments) throws IOException{ + public T line(String... segments) throws IOException { append(indent); - for (String segment : segments){ + for (String segment : segments) { append(segment); } return nl(); diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 230998b196..f139574780 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -18,14 +18,14 @@ * CodeWriter defines an interface for serializing Java source code * * @author tiwe - * + * */ -public interface CodeWriter extends Appendable{ +public interface CodeWriter extends Appendable { String getRawName(Type type); - + String getGenericName(boolean asArgType, Type type); - + CodeWriter annotation(Annotation annotation) throws IOException; CodeWriter annotation(Class annotation) throws IOException; @@ -42,11 +42,13 @@ public interface CodeWriter extends Appendable{ CodeWriter beginLine(String... segments) throws IOException; - CodeWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException; + CodeWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, + Transformer transformer) throws IOException; CodeWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException; - CodeWriter beginStaticMethod(Type type, String name, Collection params, Transformer transformer) throws IOException; + CodeWriter beginStaticMethod(Type type, String name, Collection params, + Transformer transformer) throws IOException; CodeWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException; @@ -57,9 +59,9 @@ public interface CodeWriter extends Appendable{ CodeWriter imports(Class... imports) throws IOException; CodeWriter imports(Package... imports) throws IOException; - + CodeWriter importClasses(String... classes) throws IOException; - + CodeWriter importPackages(String... packages) throws IOException; CodeWriter javadoc(String... lines) throws IOException; @@ -69,7 +71,7 @@ public interface CodeWriter extends Appendable{ CodeWriter nl() throws IOException; CodeWriter packageDecl(String packageName) throws IOException; - + CodeWriter privateField(Type type, String name) throws IOException; CodeWriter privateFinal(Type type, String name) throws IOException; @@ -79,13 +81,13 @@ public interface CodeWriter extends Appendable{ CodeWriter privateStaticFinal(Type type, String name, String value) throws IOException; CodeWriter protectedField(Type type, String name) throws IOException; - + CodeWriter protectedFinal(Type type, String name) throws IOException; CodeWriter protectedFinal(Type type, String name, String value) throws IOException; - + CodeWriter publicField(Type type, String name) throws IOException; - + CodeWriter publicField(Type type, String name, String value) throws IOException; CodeWriter publicFinal(Type type, String name) throws IOException; diff --git a/src/main/java/com/mysema/codegen/CodegenException.java b/src/main/java/com/mysema/codegen/CodegenException.java index 7056fd57fb..efbe565cb9 100644 --- a/src/main/java/com/mysema/codegen/CodegenException.java +++ b/src/main/java/com/mysema/codegen/CodegenException.java @@ -7,21 +7,21 @@ /** * @author tiwe - * + * */ -public class CodegenException extends RuntimeException{ +public class CodegenException extends RuntimeException { private static final long serialVersionUID = -8704782349669898467L; - public CodegenException(String msg){ + public CodegenException(String msg) { super(msg); } - - public CodegenException(String msg, Throwable t){ + + public CodegenException(String msg, Throwable t) { super(msg, t); } - - public CodegenException(Throwable t){ + + public CodegenException(Throwable t) { super(t); } } diff --git a/src/main/java/com/mysema/codegen/Evaluator.java b/src/main/java/com/mysema/codegen/Evaluator.java index 03c67e4a7e..493856bd17 100644 --- a/src/main/java/com/mysema/codegen/Evaluator.java +++ b/src/main/java/com/mysema/codegen/Evaluator.java @@ -13,13 +13,13 @@ * */ public interface Evaluator { - + /** * @param args * @return */ T evaluate(Object... args); - + /** * @return */ diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index a79a001f25..f75d9fde6a 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -30,8 +30,6 @@ import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.support.ClassUtils; - - /** * EvaluatorFactory is a factory implementation for creating Evaluator instances * @@ -41,7 +39,7 @@ public class EvaluatorFactory { private final MemFileManager fileManager; - + private final String classpath; private final List compilationOptions; @@ -50,20 +48,20 @@ public class EvaluatorFactory { private final ClassLoader loader; - public EvaluatorFactory(URLClassLoader parent){ + public EvaluatorFactory(URLClassLoader parent) { this(parent, ToolProvider.getSystemJavaCompiler()); } - + public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { this.fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); - this.compiler = compiler; + this.compiler = compiler; this.classpath = SimpleCompiler.getClassPath(parent); this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); } - - private void compile(String source, Type projectionType, - String[] names, Type[] types, String id, Map constants) throws IOException { + + private void compile(String source, Type projectionType, String[] names, Type[] types, + String id, Map constants) throws IOException { // create source StringWriter writer = new StringWriter(); JavaWriter javaw = new JavaWriter(writer); @@ -73,17 +71,17 @@ private void compile(String source, Type projectionType, for (int i = 0; i < params.length; i++) { params[i] = new Parameter(names[i], types[i]); } - - for (Map.Entry entry : constants.entrySet()){ + + for (Map.Entry entry : constants.entrySet()) { Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); javaw.publicField(type, entry.getKey()); } - if (constants.isEmpty()){ - javaw.beginStaticMethod(projectionType, "eval", params); - }else{ + if (constants.isEmpty()) { + javaw.beginStaticMethod(projectionType, "eval", params); + } else { javaw.beginPublicMethod(projectionType, "eval", params); - } + } javaw.append(source); javaw.end(); javaw.end(); @@ -92,71 +90,63 @@ private void compile(String source, Type projectionType, SimpleJavaFileObject javaFileObject = new MemSourceFileObject(id, writer.toString()); Writer out = new StringWriter(); - CompilationTask task = compiler.getTask( - out, - fileManager, - null, - compilationOptions, - null, + CompilationTask task = compiler.getTask(out, fileManager, null, compilationOptions, null, Collections.singletonList(javaFileObject)); if (!task.call().booleanValue()) { throw new CodegenException("Compilation of " + source + " failed.\n" + out.toString()); } } - - public Evaluator createEvaluator( - String source, - Class projectionType, - String[] names, - Class[] classes, - Map constants) { + + public Evaluator createEvaluator(String source, Class projectionType, + String[] names, Class[] classes, Map constants) { Type[] types = new Type[classes.length]; - for (int i = 0; i < types.length; i++){ - types[i] = new ClassType(TypeCategory.SIMPLE,classes[i]); + for (int i = 0; i < types.length; i++) { + types[i] = new ClassType(TypeCategory.SIMPLE, classes[i]); } - return createEvaluator(source, new ClassType(TypeCategory.SIMPLE,projectionType), names, types, classes, constants); + return createEvaluator(source, new ClassType(TypeCategory.SIMPLE, projectionType), names, + types, classes, constants); } /** * Create a new Evaluator instance * - * @param projection type - * @param source expression in Java source code form - * @param projection type of the source expression - * @param names names of the arguments - * @param types types of the arguments + * @param + * projection type + * @param source + * expression in Java source code form + * @param projection + * type of the source expression + * @param names + * names of the arguments + * @param types + * types of the arguments * @param constants * @return */ @SuppressWarnings("unchecked") - public Evaluator createEvaluator( - String source, - ClassType projection, - String[] names, - Type[] types, - Class[] classes, - Map constants) { + public Evaluator createEvaluator(String source, ClassType projection, String[] names, + Type[] types, Class[] classes, Map constants) { try { String id = toId(source, projection.getJavaClass(), types); Class clazz; - try{ + try { clazz = loader.loadClass(id); - }catch(ClassNotFoundException e){ + } catch (ClassNotFoundException e) { compile(source, projection, names, types, id, constants); // reload clazz = loader.loadClass(id); } - + Object object = !constants.isEmpty() ? clazz.newInstance() : null; - - for (Map.Entry entry : constants.entrySet()){ + + for (Map.Entry entry : constants.entrySet()) { Field field = clazz.getField(entry.getKey()); field.set(object, entry.getValue()); } Method method = clazz.getMethod("eval", classes); - return new MethodEvaluator(method, object, (Class)projection.getJavaClass()); + return new MethodEvaluator(method, object, (Class) projection.getJavaClass()); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { @@ -176,7 +166,7 @@ public Evaluator createEvaluator( } } - + protected String toId(String source, Class returnType, Type... types) { StringBuilder b = new StringBuilder("Q"); b.append("_").append(source.hashCode()); diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 84d29323e3..95e2b01e79 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -28,14 +28,13 @@ import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; - /** * JavaWriter is the default implementation of the CodeWriter interface - * + * * @author tiwe - * + * */ -public final class JavaWriter extends AbstractCodeWriter{ +public final class JavaWriter extends AbstractCodeWriter { private static final String EXTENDS = " extends "; @@ -75,7 +74,7 @@ public final class JavaWriter extends AbstractCodeWriter{ private final Stack types = new Stack(); - public JavaWriter(Appendable appendable){ + public JavaWriter(Appendable appendable) { super(appendable, 4); this.packages.add("java.lang"); } @@ -84,7 +83,7 @@ public JavaWriter(Appendable appendable){ public JavaWriter annotation(Annotation annotation) throws IOException { beginLine().append("@").appendType(annotation.annotationType()); Method[] methods = annotation.annotationType().getDeclaredMethods(); - if (methods.length == 1 && methods[0].getName().equals("value")){ + if (methods.length == 1 && methods[0].getName().equals("value")) { try { Object value = methods[0].invoke(annotation); append("("); @@ -97,21 +96,22 @@ public JavaWriter annotation(Annotation annotation) throws IOException { } catch (InvocationTargetException e) { throw new CodegenException(e); } - }else{ + } else { boolean first = true; - for (Method method : methods){ + for (Method method : methods) { try { Object value = method.invoke(annotation); - if (value == null || value.equals(method.getDefaultValue())){ + if (value == null || value.equals(method.getDefaultValue())) { continue; - }else if (value.getClass().isArray() && Arrays.equals((Object[])value, (Object[])method.getDefaultValue())){ + } else if (value.getClass().isArray() + && Arrays.equals((Object[]) value, (Object[]) method.getDefaultValue())) { continue; - }else if (!first){ + } else if (!first) { append(COMMA); - }else{ + } else { append("("); } - append(method.getName()+"="); + append(method.getName() + "="); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); @@ -122,77 +122,76 @@ public JavaWriter annotation(Annotation annotation) throws IOException { } first = false; } - if (!first){ + if (!first) { append(")"); } } return nl(); - } - + } @Override - public JavaWriter annotation(Class annotation) throws IOException{ + public JavaWriter annotation(Class annotation) throws IOException { return beginLine().append("@").appendType(annotation).nl(); } @SuppressWarnings("unchecked") - private void annotationConstant(Object value) throws IOException{ - if (value.getClass().isArray()){ - append("{"); - boolean first = true; - for (Object o : (Object[])value){ - if (!first){ - append(", "); - } - annotationConstant(o); - first = false; - } - append("}"); - }else if (value instanceof Class){ - appendType((Class)value).append(".class"); - }else if (value instanceof Number || value instanceof Boolean){ - append(value.toString()); - }else if (value instanceof Enum){ - Enum enumValue = (Enum)value; - if (classes.contains(enumValue.getClass().getName()) - || packages.contains(enumValue.getClass().getPackage().getName())){ - append(enumValue.name()); - }else{ - append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); - } - }else if (value instanceof String){ - String escaped = StringEscapeUtils.escapeJava(value.toString()); - append(QUOTE + escaped.replace("\\/", "/") + QUOTE); - }else{ - throw new IllegalArgumentException("Unsupported annotation value : " + value); - } - } - - private JavaWriter appendType(Class type) throws IOException{ - if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ + private void annotationConstant(Object value) throws IOException { + if (value.getClass().isArray()) { + append("{"); + boolean first = true; + for (Object o : (Object[]) value) { + if (!first) { + append(", "); + } + annotationConstant(o); + first = false; + } + append("}"); + } else if (value instanceof Class) { + appendType((Class) value).append(".class"); + } else if (value instanceof Number || value instanceof Boolean) { + append(value.toString()); + } else if (value instanceof Enum) { + Enum enumValue = (Enum) value; + if (classes.contains(enumValue.getClass().getName()) + || packages.contains(enumValue.getClass().getPackage().getName())) { + append(enumValue.name()); + } else { + append(enumValue.getDeclaringClass().getName() + DOT + enumValue.name()); + } + } else if (value instanceof String) { + String escaped = StringEscapeUtils.escapeJava(value.toString()); + append(QUOTE + escaped.replace("\\/", "/") + QUOTE); + } else { + throw new IllegalArgumentException("Unsupported annotation value : " + value); + } + } + + private JavaWriter appendType(Class type) throws IOException { + if (classes.contains(type.getName()) || packages.contains(type.getPackage().getName())) { append(type.getSimpleName()); - }else{ + } else { append(type.getName()); } return this; } @Override - public JavaWriter beginClass(Type type) throws IOException{ + public JavaWriter beginClass(Type type) throws IOException { return beginClass(type, null); } @Override - public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException{ + public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException { packages.add(type.getPackageName()); beginLine(PUBLIC_CLASS + type.getGenericName(false, packages, classes)); - if (superClass != null){ + if (superClass != null) { append(EXTENDS + superClass.getGenericName(false, packages, classes)); } - if (interfaces.length > 0){ + if (interfaces.length > 0) { append(IMPLEMENTS); - for (int i = 0; i < interfaces.length; i++){ - if (i > 0){ + for (int i = 0; i < interfaces.length; i++) { + if (i > 0) { append(COMMA); } append(interfaces[i].getGenericName(false, packages, classes)); @@ -205,14 +204,16 @@ public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) thr } @Override - public JavaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginConstructor(Collection parameters, + Transformer transformer) throws IOException { types.push(types.peek()); - beginLine(PUBLIC + types.peek().getSimpleName()).params(parameters, transformer).append(" {").nl(); + beginLine(PUBLIC + types.peek().getSimpleName()).params(parameters, transformer) + .append(" {").nl(); return goIn(); } @Override - public JavaWriter beginConstructor(Parameter... parameters) throws IOException{ + public JavaWriter beginConstructor(Parameter... parameters) throws IOException { types.push(types.peek()); beginLine(PUBLIC + types.peek().getSimpleName()).params(parameters).append(" {").nl(); return goIn(); @@ -222,10 +223,10 @@ public JavaWriter beginConstructor(Parameter... parameters) throws IOException{ public JavaWriter beginInterface(Type type, Type... interfaces) throws IOException { packages.add(type.getPackageName()); beginLine(PUBLIC_INTERFACE + type.getGenericName(false, packages, classes)); - if (interfaces.length > 0){ + if (interfaces.length > 0) { append(EXTENDS); - for (int i = 0; i < interfaces.length; i++){ - if (i > 0){ + for (int i = 0; i < interfaces.length; i++) { + if (i > 0) { append(COMMA); } append(interfaces[i].getGenericName(false, packages, classes)); @@ -237,34 +238,42 @@ public JavaWriter beginInterface(Type type, Type... interfaces) throws IOExcepti return this; } - private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ + private JavaWriter beginMethod(String modifiers, Type returnType, String methodName, + Parameter... args) throws IOException { types.push(types.peek()); - beginLine(modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName).params(args).append(" {").nl(); + beginLine( + modifiers + returnType.getGenericName(true, packages, classes) + SPACE + methodName) + .params(args).append(" {").nl(); return goIn(); } @Override - public JavaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public JavaWriter beginPublicMethod(Type returnType, String methodName, + Collection parameters, Transformer transformer) throws IOException { return beginMethod(PUBLIC, returnType, methodName, transform(parameters, transformer)); } @Override - public JavaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException{ + public JavaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) + throws IOException { return beginMethod(PUBLIC, returnType, methodName, args); } @Override - public JavaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { - return beginMethod(PUBLIC_STATIC, returnType, methodName, transform(parameters, transformer)); + public JavaWriter beginStaticMethod(Type returnType, String methodName, + Collection parameters, Transformer transformer) throws IOException { + return beginMethod(PUBLIC_STATIC, returnType, methodName, + transform(parameters, transformer)); } @Override - public JavaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException{ + public JavaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) + throws IOException { return beginMethod(PUBLIC_STATIC, returnType, methodName, args); } @Override - public JavaWriter end() throws IOException{ + public JavaWriter end() throws IOException { types.pop(); goOut(); return line("}").nl(); @@ -275,12 +284,17 @@ public JavaWriter field(Type type, String name) throws IOException { return line(type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); } - private JavaWriter field(String modifier, Type type, String name) throws IOException{ - return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON).nl(); + private JavaWriter field(String modifier, Type type, String name) throws IOException { + return line( + modifier + type.getGenericName(true, packages, classes) + SPACE + name + SEMICOLON) + .nl(); } - private JavaWriter field(String modifier, Type type, String name, String value) throws IOException{ - return line(modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + value + SEMICOLON).nl(); + private JavaWriter field(String modifier, Type type, String name, String value) + throws IOException { + return line( + modifier + type.getGenericName(true, packages, classes) + SPACE + name + ASSIGN + + value + SEMICOLON).nl(); } @Override @@ -294,8 +308,8 @@ public String getRawName(Type type) { } @Override - public JavaWriter imports(Class... imports) throws IOException{ - for (Class cl : imports){ + public JavaWriter imports(Class... imports) throws IOException { + for (Class cl : imports) { classes.add(cl.getName()); line(IMPORT + cl.getName() + SEMICOLON); } @@ -305,7 +319,7 @@ public JavaWriter imports(Class... imports) throws IOException{ @Override public JavaWriter imports(Package... imports) throws IOException { - for (Package p : imports){ + for (Package p : imports) { packages.add(p.getName()); line(IMPORT + p.getName() + ".*;"); } @@ -314,8 +328,8 @@ public JavaWriter imports(Package... imports) throws IOException { } @Override - public JavaWriter importClasses(String... imports) throws IOException{ - for (String cl : imports){ + public JavaWriter importClasses(String... imports) throws IOException { + for (String cl : imports) { classes.add(cl); line(IMPORT + cl + SEMICOLON); } @@ -325,7 +339,7 @@ public JavaWriter importClasses(String... imports) throws IOException{ @Override public JavaWriter importPackages(String... imports) throws IOException { - for (String p : imports){ + for (String p : imports) { packages.add(p); line(IMPORT + p + ".*;"); } @@ -336,23 +350,24 @@ public JavaWriter importPackages(String... imports) throws IOException { @Override public JavaWriter javadoc(String... lines) throws IOException { line("/**"); - for (String line : lines){ + for (String line : lines) { line(" * " + line); } return line(" */"); } @Override - public JavaWriter packageDecl(String packageName) throws IOException{ + public JavaWriter packageDecl(String packageName) throws IOException { packages.add(packageName); return line(PACKAGE + packageName + SEMICOLON).nl(); } - private JavaWriter params(Collection parameters, Transformer transformer) throws IOException{ + private JavaWriter params(Collection parameters, Transformer transformer) + throws IOException { append("("); boolean first = true; - for (T param : parameters){ - if (!first){ + for (T param : parameters) { + if (!first) { append(COMMA); } param(transformer.transform(param)); @@ -362,10 +377,10 @@ private JavaWriter params(Collection parameters, Transformer return this; } - private JavaWriter params(Parameter... params) throws IOException{ + private JavaWriter params(Parameter... params) throws IOException { append("("); - for (int i = 0; i < params.length; i++){ - if (i > 0){ + for (int i = 0; i < params.length; i++) { + if (i > 0) { append(COMMA); } param(params[i]); @@ -374,7 +389,7 @@ private JavaWriter params(Parameter... params) throws IOException{ return this; } - private JavaWriter param(Parameter parameter) throws IOException{ + private JavaWriter param(Parameter parameter) throws IOException { append(parameter.getType().getGenericName(true, packages, classes)); append(" "); append(parameter.getName()); @@ -442,26 +457,26 @@ public JavaWriter publicStaticFinal(Type type, String name, String value) throws } @Override - public JavaWriter staticimports(Class... imports) throws IOException{ - for (Class cl : imports){ + public JavaWriter staticimports(Class... imports) throws IOException { + for (Class cl : imports) { line(IMPORT_STATIC + cl.getName() + ".*;"); } return this; } @Override - public JavaWriter suppressWarnings(String type) throws IOException{ - return line("@SuppressWarnings(\"" + type +"\")"); + public JavaWriter suppressWarnings(String type) throws IOException { + return line("@SuppressWarnings(\"" + type + "\")"); } - private Parameter[] transform(Collection parameters, Transformer transformer){ + private Parameter[] transform(Collection parameters, + Transformer transformer) { Parameter[] rv = new Parameter[parameters.size()]; int i = 0; - for (T value : parameters){ + for (T value : parameters) { rv[i++] = transformer.transform(value); } return rv; } - } diff --git a/src/main/java/com/mysema/codegen/LocationAndKind.java b/src/main/java/com/mysema/codegen/LocationAndKind.java index 779e8a6207..b172426434 100644 --- a/src/main/java/com/mysema/codegen/LocationAndKind.java +++ b/src/main/java/com/mysema/codegen/LocationAndKind.java @@ -14,14 +14,14 @@ * LocationAndKind defines a pair of Location and Kind * * @author tiwe - * + * */ public class LocationAndKind { - + private final Kind kind; - + private final Location location; - + public LocationAndKind(Location location, Kind kind) { this.location = location; this.kind = kind; @@ -29,28 +29,24 @@ public LocationAndKind(Location location, Kind kind) { @Override public boolean equals(Object obj) { - if (obj == this){ + if (obj == this) { return true; - }else if (obj instanceof LocationAndKind){ - LocationAndKind other = (LocationAndKind)obj; - return location.equals(other.location) && kind.equals(other.kind); - }else{ + } else if (obj instanceof LocationAndKind) { + LocationAndKind other = (LocationAndKind) obj; + return location.equals(other.location) && kind.equals(other.kind); + } else { return false; - } + } } @Override public int hashCode() { - return kind.hashCode() * 31 + location.hashCode(); + return kind.hashCode() * 31 + location.hashCode(); } @Override public String toString() { - return kind.toString() + "@" + location.toString(); + return kind.toString() + "@" + location.toString(); } - - - - - + } diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index b6eb3225e2..3b108dc0c3 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -21,47 +21,50 @@ import javax.tools.JavaFileObject.Kind; import javax.tools.StandardLocation; - /** * MemClassLoader is a mmemory based implementation of the ClassLoader interface * * @author tiwe - * + * */ public final class MemClassLoader extends ClassLoader { - - private static final LocationAndKind CLASS_KEY = new LocationAndKind(StandardLocation.CLASS_OUTPUT,Kind.CLASS); - - private static final LocationAndKind OTHER_KEY = new LocationAndKind(StandardLocation.CLASS_OUTPUT,Kind.OTHER); - - private static final LocationAndKind SOURCE_KEY = new LocationAndKind(StandardLocation.CLASS_OUTPUT,Kind.SOURCE); - + + private static final LocationAndKind CLASS_KEY = new LocationAndKind( + StandardLocation.CLASS_OUTPUT, Kind.CLASS); + + private static final LocationAndKind OTHER_KEY = new LocationAndKind( + StandardLocation.CLASS_OUTPUT, Kind.OTHER); + + private static final LocationAndKind SOURCE_KEY = new LocationAndKind( + StandardLocation.CLASS_OUTPUT, Kind.SOURCE); + private final Map> memFileSystem; - - public MemClassLoader(ClassLoader parent, Map> ramFileSystem) { + + public MemClassLoader(ClassLoader parent, + Map> ramFileSystem) { super(parent); this.memFileSystem = ramFileSystem; } - + @Override protected Class findClass(String name) throws ClassNotFoundException { JavaFileObject jfo = memFileSystem.get(CLASS_KEY).get(name); if (jfo != null) { - byte[] bytes = ((MemJavaFileObject)jfo).getByteArray(); + byte[] bytes = ((MemJavaFileObject) jfo).getByteArray(); return defineClass(name, bytes, 0, bytes.length); - }else{ - return super.findClass(name); - } + } else { + return super.findClass(name); + } } - + @Override protected URL findResource(String name) { URL retValue = super.findResource(name); - if(retValue != null) { + if (retValue != null) { return retValue; } else { JavaFileObject jfo = getFileObject(name); - if(jfo != null) { + if (jfo != null) { try { return jfo.toUri().toURL(); } catch (MalformedURLException ex) { @@ -72,44 +75,44 @@ protected URL findResource(String name) { } } } - + private JavaFileObject getFileObject(String n) { LocationAndKind key; - String name; - if(n.endsWith(Kind.CLASS.extension)) { - name = n.replace('.','/') + Kind.CLASS.extension; + String name; + if (n.endsWith(Kind.CLASS.extension)) { + name = n.replace('.', '/') + Kind.CLASS.extension; key = CLASS_KEY; - } else if(n.endsWith(Kind.SOURCE.extension)) { - name = n.replace('.','/') + Kind.SOURCE.extension; + } else if (n.endsWith(Kind.SOURCE.extension)) { + name = n.replace('.', '/') + Kind.SOURCE.extension; key = SOURCE_KEY; - }else{ + } else { name = n; key = OTHER_KEY; } - if(memFileSystem.containsKey(key)) { - return memFileSystem.get(key).get(name); - }else{ + if (memFileSystem.containsKey(key)) { + return memFileSystem.get(key).get(name); + } else { return null; - } + } } @Override public InputStream getResourceAsStream(String name) { JavaFileObject jfo = getFileObject(name); if (jfo != null) { - byte[] bytes = ((MemJavaFileObject)jfo).getByteArray(); + byte[] bytes = ((MemJavaFileObject) jfo).getByteArray(); return new ByteArrayInputStream(bytes); - }else{ - return null; - } + } else { + return null; + } } @Override public Enumeration getResources(String name) throws IOException { - List retValue; + List retValue; retValue = Collections.list(super.getResources(name)); JavaFileObject jfo = getFileObject(name); - if (jfo != null){ + if (jfo != null) { retValue.add(jfo.toUri().toURL()); } return Collections.enumeration(retValue); diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java index a7174f404f..c5765ed612 100644 --- a/src/main/java/com/mysema/codegen/MemFileManager.java +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -22,88 +22,90 @@ import javax.tools.StandardLocation; import javax.tools.JavaFileObject.Kind; - - /** - * MemFileManager is a memory based implementation of the JavaFileManager interface + * MemFileManager is a memory based implementation of the JavaFileManager + * interface * * @author tiwe - * + * */ public class MemFileManager extends ForwardingJavaFileManager { - + private final ClassLoader classLoader; - + private final Map> ramFileSystem; - + private final String urlPrefix; - + public MemFileManager(ClassLoader parent, StandardJavaFileManager sjfm) { super(sjfm); - ramFileSystem = new HashMap>(); - Map classLoaderContent = new HashMap(); - ramFileSystem.put(new LocationAndKind(StandardLocation.CLASS_OUTPUT, Kind.CLASS),classLoaderContent); + ramFileSystem = new HashMap>(); + Map classLoaderContent = new HashMap(); + ramFileSystem.put(new LocationAndKind(StandardLocation.CLASS_OUTPUT, Kind.CLASS), + classLoaderContent); classLoader = new MemClassLoader(parent, ramFileSystem); urlPrefix = MemFileSystemRegistry.DEFAULT.getUrlPrefix(this); } - + @Override public ClassLoader getClassLoader(JavaFileManager.Location location) { return classLoader; } @Override - public FileObject getFileForInput(JavaFileManager.Location location, String packageName, String relativeName) throws IOException { + public FileObject getFileForInput(JavaFileManager.Location location, String packageName, + String relativeName) throws IOException { throw new UnsupportedOperationException(); } - + @Override - public FileObject getFileForOutput(JavaFileManager.Location location, String packageName, String relativeName, FileObject sibling) throws IOException { + public FileObject getFileForOutput(JavaFileManager.Location location, String packageName, + String relativeName, FileObject sibling) throws IOException { String name = null; - if("".equals(packageName)) { + if ("".equals(packageName)) { name = relativeName; } else { - name = packageName.replace('.','/') + "/" + relativeName; + name = packageName.replace('.', '/') + "/" + relativeName; } LocationAndKind key = new LocationAndKind(location, Kind.OTHER); - if(ramFileSystem.containsKey(key)) { + if (ramFileSystem.containsKey(key)) { JavaFileObject jfo = ramFileSystem.get(key).get(name); - if(jfo != null) { + if (jfo != null) { return jfo; } } JavaFileObject jfo = new MemJavaFileObject(urlPrefix, name, Kind.OTHER); - register(key,jfo); + register(key, jfo); return jfo; } - + @Override - public JavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, JavaFileObject.Kind kind) throws IOException { + public JavaFileObject getJavaFileForInput(JavaFileManager.Location location, String className, + JavaFileObject.Kind kind) throws IOException { throw new UnsupportedOperationException(); } @Override - public JavaFileObject getJavaFileForOutput(Location location, - String name, Kind kind, FileObject sibling) - throws IOException { + public JavaFileObject getJavaFileForOutput(Location location, String name, Kind kind, + FileObject sibling) throws IOException { JavaFileObject javaFileObject = null; - LocationAndKind key = new LocationAndKind(location,kind); + LocationAndKind key = new LocationAndKind(location, kind); - if(ramFileSystem.containsKey(key)) { + if (ramFileSystem.containsKey(key)) { javaFileObject = ramFileSystem.get(key).get(name); - if(javaFileObject != null) { + if (javaFileObject != null) { return javaFileObject; } } - if(kind == Kind.SOURCE) { + if (kind == Kind.SOURCE) { javaFileObject = new MemSourceFileObject(name); } else { javaFileObject = new MemJavaFileObject(urlPrefix, name, kind); - } - register(key,javaFileObject); + } + register(key, javaFileObject); return javaFileObject; } - + @Override public String inferBinaryName(Location loc, JavaFileObject javaFileObject) { String result; @@ -119,32 +121,32 @@ public String inferBinaryName(Location loc, JavaFileObject javaFileObject) { public boolean isSameFile(FileObject a, FileObject b) { return a.equals(b); } - + @Override - public Iterable list(Location location, String pkg, - Set kinds, boolean recurse) throws IOException { - + public Iterable list(Location location, String pkg, Set kinds, + boolean recurse) throws IOException { + List result = new ArrayList(); - for(JavaFileObject f : super.list(location, pkg, kinds, recurse)) { + for (JavaFileObject f : super.list(location, pkg, kinds, recurse)) { result.add(f); } - if(location == StandardLocation.CLASS_PATH) { + if (location == StandardLocation.CLASS_PATH) { location = StandardLocation.CLASS_OUTPUT; } - for(Kind kind : kinds) { - LocationAndKind key = new LocationAndKind(location,kind); - if(ramFileSystem.containsKey(key)) { + for (Kind kind : kinds) { + LocationAndKind key = new LocationAndKind(location, kind); + if (ramFileSystem.containsKey(key)) { Map locatedFiles = ramFileSystem.get(key); - for (Map.Entry entry : locatedFiles.entrySet()){ + for (Map.Entry entry : locatedFiles.entrySet()) { String name = entry.getKey(); String packageName = ""; - if (name.indexOf('.') > -1){ - packageName = name.substring(0,name.lastIndexOf('.')); + if (name.indexOf('.') > -1) { + packageName = name.substring(0, name.lastIndexOf('.')); } - if(recurse ? packageName.startsWith(pkg) : packageName.equals(pkg)) { + if (recurse ? packageName.startsWith(pkg) : packageName.equals(pkg)) { JavaFileObject candidate = entry.getValue(); - if(kinds.contains(candidate.getKind())) { + if (kinds.contains(candidate.getKind())) { result.add(candidate); } } @@ -155,7 +157,7 @@ public Iterable list(Location location, String pkg, } private void register(LocationAndKind key, JavaFileObject javaFileObject) { - if(!ramFileSystem.containsKey(key)) { + if (!ramFileSystem.containsKey(key)) { ramFileSystem.put(key, new HashMap()); } ramFileSystem.get(key).put(javaFileObject.getName(), javaFileObject); diff --git a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java index 7bb0cae078..07bb787101 100644 --- a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java +++ b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java @@ -16,47 +16,47 @@ /** * @author tiwe - * + * */ public final class MemFileSystemRegistry { - + public static final MemFileSystemRegistry DEFAULT = new MemFileSystemRegistry(); - - private final Map jfm2prefix = new WeakHashMap(); - - private Map> prefix2jfm = new WeakHashMap>(); - + + private final Map jfm2prefix = new WeakHashMap(); + + private Map> prefix2jfm = new WeakHashMap>(); + private final String protocolName; - + private int sequence = 0; - + private MemFileSystemRegistry() { String pkgName = MemFileSystemRegistry.class.getPackage().getName(); protocolName = pkgName.substring(pkgName.lastIndexOf('.') + 1); String pkgs = System.getProperty("java.protocol.handler.pkgs"); - String parentPackage = pkgName.substring(0,pkgName.lastIndexOf('.')); + String parentPackage = pkgName.substring(0, pkgName.lastIndexOf('.')); pkgs = pkgs == null ? parentPackage : pkgs + "|" + parentPackage; - System.setProperty("java.protocol.handler.pkgs",pkgs); + System.setProperty("java.protocol.handler.pkgs", pkgs); } - + public JavaFileManager getFileSystem(URL url) { String prefix = url.getProtocol() + "://" + url.getHost() + "/"; - if(prefix2jfm.containsKey(prefix)) { + if (prefix2jfm.containsKey(prefix)) { return prefix2jfm.get(prefix).get(); } else { return null; } } - + public String getUrlPrefix(JavaFileManager jfm) { - if(jfm2prefix.containsKey(jfm)) { + if (jfm2prefix.containsKey(jfm)) { return jfm2prefix.get(jfm); } else { String result = protocolName + "://jfm" + (sequence++) + "/"; - jfm2prefix.put(jfm,result); + jfm2prefix.put(jfm, result); prefix2jfm.put(result, new WeakReference(jfm)); return result; } } - + } diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index adcdaff468..ec7b8057c0 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -21,50 +21,50 @@ * MemJavaFileObject defines an in memory compiled Java file * * @author tiwe - * + * */ public class MemJavaFileObject extends SimpleJavaFileObject { - + private ByteArrayOutputStream baos; - + private final String name; - + public MemJavaFileObject(String urlPrefix, String name, Kind kind) { super(URI.create(urlPrefix + name + kind.extension), kind); this.name = name; } - + @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException { - if(baos == null){ + if (baos == null) { throw new FileNotFoundException(name); } return new String(baos.toByteArray()); } - + @Override public String getName() { return name; } - - public byte[] getByteArray(){ + + public byte[] getByteArray() { return baos.toByteArray(); } @Override public InputStream openInputStream() throws IOException { - if(baos == null){ + if (baos == null) { throw new FileNotFoundException(name); } return new ByteArrayInputStream(baos.toByteArray()); } - + @Override public OutputStream openOutputStream() throws IOException { - if (baos == null){ + if (baos == null) { baos = new ByteArrayOutputStream(); } return baos; } - + } diff --git a/src/main/java/com/mysema/codegen/MemSourceFileObject.java b/src/main/java/com/mysema/codegen/MemSourceFileObject.java index 08f5f97961..e10bc2289d 100644 --- a/src/main/java/com/mysema/codegen/MemSourceFileObject.java +++ b/src/main/java/com/mysema/codegen/MemSourceFileObject.java @@ -17,31 +17,31 @@ * MemSourceFileObject defines a in-memory Java source file object * * @author tiwe - * + * */ public class MemSourceFileObject extends SimpleJavaFileObject { - + private static URI toUri(String fqname) { - return URI.create("file:///" + fqname.replace(".","/") + ".java"); + return URI.create("file:///" + fqname.replace(".", "/") + ".java"); } - + private final StringBuilder contents; - + public MemSourceFileObject(String fullName) { - super(toUri(fullName),JavaFileObject.Kind.SOURCE); + super(toUri(fullName), JavaFileObject.Kind.SOURCE); contents = new StringBuilder(1000); } - + public MemSourceFileObject(String fullName, String content) { this(fullName); - contents.append(content); + contents.append(content); } @Override public CharSequence getCharContent(boolean ignoreEncodingErrors) { return contents; } - + @Override public Writer openWriter() { return new Writer() { @@ -52,14 +52,16 @@ public Writer append(CharSequence csq) throws IOException { } @Override - public void close(){} + public void close() { + } @Override - public void flush() {} + public void flush() { + } @Override public void write(char[] cbuf, int off, int len) throws IOException { - contents.append(cbuf,off,len); + contents.append(cbuf, off, len); } }; } diff --git a/src/main/java/com/mysema/codegen/MethodEvaluator.java b/src/main/java/com/mysema/codegen/MethodEvaluator.java index dff31b482c..f1f83cd810 100644 --- a/src/main/java/com/mysema/codegen/MethodEvaluator.java +++ b/src/main/java/com/mysema/codegen/MethodEvaluator.java @@ -8,15 +8,15 @@ /** * @author tiwe - * + * * @param */ public final class MethodEvaluator implements Evaluator { - + private final Method method; - + private final Object object; - + private final Class projectionType; MethodEvaluator(Method method, Object object, Class projectionType) { diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 319bb8318a..e10de47030 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -25,13 +25,13 @@ /** * @author tiwe - * + * */ public class ScalaWriter extends AbstractCodeWriter { - private static final Set PRIMITIVE_TYPES = new HashSet( - Arrays.asList("boolean", "byte","char","int","long","short","double","float")); - + private static final Set PRIMITIVE_TYPES = new HashSet(Arrays.asList("boolean", + "byte", "char", "int", "long", "short", "double", "float")); + private static final String DEF = "def "; private static final String EXTENDS = " extends "; @@ -57,7 +57,7 @@ public class ScalaWriter extends AbstractCodeWriter { private static final String PUBLIC_CLASS = "class "; private static final String PUBLIC_OBJECT = "object "; - + private static final String CASE_CLASS = "case class "; private static final String VAR = "var "; @@ -65,7 +65,7 @@ public class ScalaWriter extends AbstractCodeWriter { private static final String VAL = "val "; private static final String TRAIT = "trait "; - + private final Set classes = new HashSet(); private final Set packages = new HashSet(); @@ -74,11 +74,11 @@ public class ScalaWriter extends AbstractCodeWriter { private final boolean compact; - public ScalaWriter(Appendable appendable){ + public ScalaWriter(Appendable appendable) { this(appendable, false); } - public ScalaWriter(Appendable appendable, boolean compact){ + public ScalaWriter(Appendable appendable, boolean compact) { super(appendable, 2); this.classes.add("java.lang.String"); this.classes.add("java.lang.Object"); @@ -91,7 +91,7 @@ public ScalaWriter(Appendable appendable, boolean compact){ public ScalaWriter annotation(Annotation annotation) throws IOException { beginLine().append("@").appendType(annotation.annotationType()); Method[] methods = annotation.annotationType().getDeclaredMethods(); - if (methods.length == 1 && methods[0].getName().equals("value")){ + if (methods.length == 1 && methods[0].getName().equals("value")) { try { Object value = methods[0].invoke(annotation); append("("); @@ -104,22 +104,22 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { } catch (InvocationTargetException e) { throw new CodegenException(e); } - }else{ + } else { boolean first = true; - for (Method method : methods){ + for (Method method : methods) { try { Object value = method.invoke(annotation); if (value == null - || value.equals(method.getDefaultValue()) - || (value.getClass().isArray() - && Arrays.equals((Object[])value, (Object[])method.getDefaultValue()))){ + || value.equals(method.getDefaultValue()) + || (value.getClass().isArray() && Arrays.equals((Object[]) value, + (Object[]) method.getDefaultValue()))) { continue; - }else if (!first){ + } else if (!first) { append(COMMA); - }else{ + } else { append("("); } - append(escape(method.getName())+"="); + append(escape(method.getName()) + "="); annotationConstant(value); } catch (IllegalArgumentException e) { throw new CodegenException(e); @@ -130,7 +130,7 @@ public ScalaWriter annotation(Annotation annotation) throws IOException { } first = false; } - if (!first){ + if (!first) { append(")"); } } @@ -143,45 +143,46 @@ public ScalaWriter annotation(Class annotation) throws IOE } @SuppressWarnings("unchecked") - private void annotationConstant(Object value) throws IOException{ - if (value.getClass().isArray()){ + private void annotationConstant(Object value) throws IOException { + if (value.getClass().isArray()) { append("Array("); boolean first = true; - for (Object o : (Object[])value){ - if (!first){ + for (Object o : (Object[]) value) { + if (!first) { append(", "); } annotationConstant(o); first = false; } append(")"); - }else if (value instanceof Class){ + } else if (value instanceof Class) { append("classOf["); - appendType((Class)value); + appendType((Class) value); append("]"); - }else if (value instanceof Number || value instanceof Boolean){ + } else if (value instanceof Number || value instanceof Boolean) { append(value.toString()); - }else if (value instanceof Enum){ - Enum enumValue = (Enum)value; + } else if (value instanceof Enum) { + Enum enumValue = (Enum) value; if (classes.contains(enumValue.getClass().getName()) - || packages.contains(enumValue.getClass().getPackage().getName())){ + || packages.contains(enumValue.getClass().getPackage().getName())) { append(enumValue.name()); - }else{ - append(enumValue.getDeclaringClass().getName()+DOT+enumValue.name()); + } else { + append(enumValue.getDeclaringClass().getName() + DOT + enumValue.name()); } - }else if (value instanceof String){ + } else if (value instanceof String) { append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); - }else{ + } else { throw new IllegalArgumentException("Unsupported annotation value : " + value); } } - private ScalaWriter appendType(Class type) throws IOException{ + private ScalaWriter appendType(Class type) throws IOException { if (type.isPrimitive()) { append(StringUtils.capitalize(type.getName())); - } else if (type.getPackage() == null || classes.contains(type.getName()) || packages.contains(type.getPackage().getName())){ + } else if (type.getPackage() == null || classes.contains(type.getName()) + || packages.contains(type.getPackage().getName())) { append(type.getSimpleName()); - }else{ + } else { append(type.getName()); } return this; @@ -192,7 +193,7 @@ public ScalaWriter beginObject(String header) throws IOException { goIn(); return this; } - + public ScalaWriter beginClass(String header) throws IOException { line(PUBLIC_CLASS, header, " {"); goIn(); @@ -205,27 +206,28 @@ public ScalaWriter beginClass(Type type) throws IOException { } @Override - public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException { + public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) + throws IOException { packages.add(type.getPackageName()); beginLine(PUBLIC_CLASS, getGenericName(false, type)); - if (superClass != null){ + if (superClass != null) { append(EXTENDS + getGenericName(false, superClass)); } - if (interfaces.length > 0){ - if (superClass == null){ + if (interfaces.length > 0) { + if (superClass == null) { append(EXTENDS); append(getGenericName(false, interfaces[0])); append(WITH); - for (int i = 1; i < interfaces.length; i++){ - if (i > 1){ + for (int i = 1; i < interfaces.length; i++) { + if (i > 1) { append(COMMA); } append(getGenericName(false, interfaces[i])); } - }else{ + } else { append(WITH); - for (int i = 0; i < interfaces.length; i++){ - if (i > 0){ + for (int i = 0; i < interfaces.length; i++) { + if (i > 0) { append(COMMA); } append(getGenericName(false, interfaces[i])); @@ -239,7 +241,8 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) th } @Override - public ScalaWriter beginConstructor(Collection parameters, Transformer transformer) throws IOException { + public ScalaWriter beginConstructor(Collection parameters, + Transformer transformer) throws IOException { beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); return goIn(); } @@ -251,17 +254,16 @@ public ScalaWriter beginConstructor(Parameter... params) throws IOException { } @Override - public ScalaWriter beginInterface(Type type, Type... interfaces) - throws IOException { + public ScalaWriter beginInterface(Type type, Type... interfaces) throws IOException { packages.add(type.getPackageName()); beginLine(TRAIT + getGenericName(false, type)); - if (interfaces.length > 0){ + if (interfaces.length > 0) { append(EXTENDS); append(getGenericName(false, interfaces[0])); - if (interfaces.length > 1){ + if (interfaces.length > 1) { append(WITH); - for (int i = 1; i < interfaces.length; i++){ - if (i > 1){ + for (int i = 1; i < interfaces.length; i++) { + if (i > 1) { append(COMMA); } append(getGenericName(false, interfaces[i])); @@ -275,36 +277,42 @@ public ScalaWriter beginInterface(Type type, Type... interfaces) return this; } - private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, Parameter... args) throws IOException{ - if (returnType.equals(Types.VOID)){ + private ScalaWriter beginMethod(String modifiers, Type returnType, String methodName, + Parameter... args) throws IOException { + if (returnType.equals(Types.VOID)) { beginLine(modifiers + escape(methodName)).params(args).append(" {").nl(); - }else{ - beginLine(modifiers + escape(methodName)).params(args).append(": " + getGenericName(true, returnType)).append(" {").nl(); + } else { + beginLine(modifiers + escape(methodName)).params(args) + .append(": " + getGenericName(true, returnType)).append(" {").nl(); } return goIn(); } @Override - public ScalaWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public ScalaWriter beginPublicMethod(Type returnType, String methodName, + Collection parameters, Transformer transformer) throws IOException { return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); } @Override - public ScalaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException{ + public ScalaWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) + throws IOException { return beginMethod(DEF, returnType, methodName, args); } @Override - public ScalaWriter beginStaticMethod(Type returnType, String methodName, Collection parameters, Transformer transformer) throws IOException { + public ScalaWriter beginStaticMethod(Type returnType, String methodName, + Collection parameters, Transformer transformer) throws IOException { return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); } @Override - public ScalaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException{ + public ScalaWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) + throws IOException { return beginMethod(DEF, returnType, methodName, args); } - + public ScalaWriter caseClass(String header, Parameter... parameters) throws IOException { beginLine(CASE_CLASS, header).params(parameters).nl(); return this; @@ -321,33 +329,34 @@ public ScalaWriter field(Type type, String name) throws IOException { return compact ? this : nl(); } - private ScalaWriter field(String modifier, Type type, String name) throws IOException{ + private ScalaWriter field(String modifier, Type type, String name) throws IOException { line(modifier + escape(name) + ": " + getGenericName(true, type)); return compact ? this : nl(); } - private ScalaWriter field(String modifier, Type type, String name, String value) throws IOException{ + private ScalaWriter field(String modifier, Type type, String name, String value) + throws IOException { line(modifier + escape(name) + ": " + getGenericName(true, type) + ASSIGN + value); return compact ? this : nl(); } @Override public String getGenericName(boolean asArgType, Type type) { - if (type.getParameters().isEmpty()){ + if (type.getParameters().isEmpty()) { return getRawName(type); - }else{ + } else { StringBuilder builder = new StringBuilder(); builder.append(getRawName(type)); builder.append("["); boolean first = true; String fullName = type.getFullName(); - for (Type parameter : type.getParameters()){ - if (!first){ + for (Type parameter : type.getParameters()) { + if (!first) { builder.append(", "); } - if (parameter == null || parameter.getFullName().equals(fullName)){ + if (parameter == null || parameter.getFullName().equals(fullName)) { builder.append("_"); - }else{ + } else { builder.append(getGenericName(false, parameter)); } first = false; @@ -365,30 +374,30 @@ public String getRawName(Type type) { } String packageName = type.getPackageName(); String rv = fullName; - if (type.isPrimitive() && packageName.isEmpty()){ + if (type.isPrimitive() && packageName.isEmpty()) { rv = Character.toUpperCase(rv.charAt(0)) + rv.substring(1); - } - if (packages.contains(packageName) || classes.contains(fullName)){ - if (packageName.length() > 0){ - rv = fullName.substring(packageName.length()+1); + } + if (packages.contains(packageName) || classes.contains(fullName)) { + if (packageName.length() > 0) { + rv = fullName.substring(packageName.length() + 1); } } - if (rv.endsWith("[]")){ - rv = rv.substring(0, rv.length()-2); + if (rv.endsWith("[]")) { + rv = rv.substring(0, rv.length() - 2); if (PRIMITIVE_TYPES.contains(rv)) { rv = StringUtils.capitalize(rv); - } else if (classes.contains(rv)){ - rv = rv.substring(packageName.length()+1); + } else if (classes.contains(rv)) { + rv = rv.substring(packageName.length() + 1); } return "Array[" + rv + "]"; - }else{ + } else { return rv; } } @Override - public ScalaWriter imports(Class... imports) throws IOException{ - for (Class cl : imports){ + public ScalaWriter imports(Class... imports) throws IOException { + for (Class cl : imports) { classes.add(cl.getName()); line(IMPORT + cl.getName()); } @@ -398,7 +407,7 @@ public ScalaWriter imports(Class... imports) throws IOException{ @Override public ScalaWriter imports(Package... imports) throws IOException { - for (Package p : imports){ + for (Package p : imports) { packages.add(p.getName()); line(IMPORT + p.getName() + "._"); } @@ -407,8 +416,8 @@ public ScalaWriter imports(Package... imports) throws IOException { } @Override - public ScalaWriter importClasses(String... imports) throws IOException{ - for (String cl : imports){ + public ScalaWriter importClasses(String... imports) throws IOException { + for (String cl : imports) { classes.add(cl); line(IMPORT + cl); } @@ -418,7 +427,7 @@ public ScalaWriter importClasses(String... imports) throws IOException{ @Override public ScalaWriter importPackages(String... imports) throws IOException { - for (String p : imports){ + for (String p : imports) { packages.add(p); line(IMPORT + p + "._"); } @@ -429,7 +438,7 @@ public ScalaWriter importPackages(String... imports) throws IOException { @Override public ScalaWriter javadoc(String... lines) throws IOException { line("/**"); - for (String line : lines){ + for (String line : lines) { line(" * " + line); } return line(" */"); @@ -441,11 +450,12 @@ public ScalaWriter packageDecl(String packageName) throws IOException { return line(PACKAGE + packageName).nl(); } - private ScalaWriter params(Collection parameters, Transformer transformer) throws IOException{ + private ScalaWriter params(Collection parameters, Transformer transformer) + throws IOException { append("("); boolean first = true; - for (T param : parameters){ - if (!first){ + for (T param : parameters) { + if (!first) { append(COMMA); } param(transformer.transform(param)); @@ -455,10 +465,10 @@ private ScalaWriter params(Collection parameters, Transformer 0){ + for (int i = 0; i < params.length; i++) { + if (i > 0) { append(COMMA); } param(params[i]); @@ -467,8 +477,7 @@ private ScalaWriter params(Parameter... params) throws IOException{ return this; } - - private ScalaWriter param(Parameter parameter) throws IOException{ + private ScalaWriter param(Parameter parameter) throws IOException { append(escape(parameter.getName())); append(": "); append(getGenericName(true, parameter.getType())); @@ -537,7 +546,7 @@ public ScalaWriter publicStaticFinal(Type type, String name, String value) throw @Override public ScalaWriter staticimports(Class... imports) throws IOException { - for (Class cl : imports){ + for (Class cl : imports) { line(IMPORT_STATIC + cl.getName() + "._;"); } return this; @@ -545,13 +554,14 @@ public ScalaWriter staticimports(Class... imports) throws IOException { @Override public ScalaWriter suppressWarnings(String type) throws IOException { - return line("@SuppressWarnings(\"" + type +"\")"); + return line("@SuppressWarnings(\"" + type + "\")"); } - private Parameter[] transform(Collection parameters, Transformer transformer){ + private Parameter[] transform(Collection parameters, + Transformer transformer) { Parameter[] rv = new Parameter[parameters.size()]; int i = 0; - for (T value : parameters){ + for (T value : parameters) { rv[i++] = transformer.transform(value); } return rv; @@ -559,7 +569,7 @@ private Parameter[] transform(Collection parameters, Transformer 0){ + for (URL url : ((URLClassLoader) classLoader).getURLs()) { + if (path.length() > 0) { path.append(File.pathSeparator); } - String decodedPath = URLDecoder.decode(url.getPath(),"UTF-8"); + String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8"); path.append(new File(decodedPath).getAbsolutePath()); } - return path.toString(); - }catch(UnsupportedEncodingException e){ + return path.toString(); + } catch (UnsupportedEncodingException e) { throw new CodegenException(e); - } + } } - + private final ClassLoader classLoader; - - private String classPath; - + + private String classPath; + private final JavaCompiler compiler; - - public SimpleCompiler(){ + + public SimpleCompiler() { this(ToolProvider.getSystemJavaCompiler(), Thread.currentThread().getContextClassLoader()); } - - public SimpleCompiler(JavaCompiler compiler, ClassLoader classLoader){ + + public SimpleCompiler(JavaCompiler compiler, ClassLoader classLoader) { this.compiler = compiler; this.classLoader = classLoader; } - - private String getClasspath(){ - if (classPath == null){ - if (classLoader instanceof URLClassLoader){ - classPath = getClassPath((URLClassLoader)classLoader); - }else{ + + private String getClasspath() { + if (classPath == null) { + if (classLoader instanceof URLClassLoader) { + classPath = getClassPath((URLClassLoader) classLoader); + } else { throw new IllegalArgumentException("Unsupported ClassLoader " + classLoader); - } + } } - return classPath; + return classPath; } @Override @@ -85,8 +85,8 @@ public Set getSourceVersions() { @Override public StandardJavaFileManager getStandardFileManager( - DiagnosticListener diagnosticListener, - Locale locale, Charset charset) { + DiagnosticListener diagnosticListener, Locale locale, + Charset charset) { return compiler.getStandardFileManager(diagnosticListener, locale, charset); } @@ -95,7 +95,8 @@ public CompilationTask getTask(Writer out, JavaFileManager fileManager, DiagnosticListener diagnosticListener, Iterable options, Iterable classes, Iterable compilationUnits) { - return compiler.getTask(out, fileManager, diagnosticListener, options, classes, compilationUnits); + return compiler.getTask(out, fileManager, diagnosticListener, options, classes, + compilationUnits); } @Override @@ -105,19 +106,19 @@ public int isSupportedOption(String option) { @Override public int run(InputStream in, OutputStream out, OutputStream err, String... arguments) { - for (String a : arguments){ - if (a.equals("-classpath")){ + for (String a : arguments) { + if (a.equals("-classpath")) { return compiler.run(in, out, err, arguments); } } - + // no classpath given List args = new ArrayList(arguments.length + 2); args.add("-classpath"); args.add(getClasspath()); - for (String arg : arguments){ + for (String arg : arguments) { args.add(arg); - } + } return compiler.run(in, out, err, args.toArray(new String[args.size()])); } diff --git a/src/main/java/com/mysema/codegen/Symbols.java b/src/main/java/com/mysema/codegen/Symbols.java index d6c9371db6..83b65d0718 100644 --- a/src/main/java/com/mysema/codegen/Symbols.java +++ b/src/main/java/com/mysema/codegen/Symbols.java @@ -9,12 +9,12 @@ * Defines general String constants * * @author tiwe - * + * */ public final class Symbols { - + public static final String ASSIGN = " = "; - + public static final String COMMA = ", "; public static final String DOT = "."; @@ -44,6 +44,7 @@ public final class Symbols { public static final String THIS = "this"; public static final String UNCHECKED = "unchecked"; - - private Symbols(){} + + private Symbols() { + } } diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 897d2dd44b..7c016864c7 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -15,7 +15,7 @@ /** * @author tiwe - * + * * @param */ public class ClassType implements Type { @@ -37,10 +37,11 @@ public ClassType(Class javaClass, Type... parameters) { } public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { - this(category, javaClass, primitiveClass, Collections.emptyList()); + this(category, javaClass, primitiveClass, Collections. emptyList()); } - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass, List parameters) { + public ClassType(TypeCategory category, Class javaClass, Class primitiveClass, + List parameters) { this.category = category; this.javaClass = javaClass; this.primitiveClass = primitiveClass; @@ -58,31 +59,32 @@ public ClassType(TypeCategory category, Class clazz, Type... parameters) { @Override public Type as(TypeCategory c) { - if (category == c){ + if (category == c) { return this; - }else{ + } else { return new ClassType(c, javaClass); } } @Override public Type asArrayType() { - if (arrayType == null){ - String fullName = ClassUtils.getFullName(javaClass)+"[]"; - String simpleName = javaClass.getSimpleName()+"[]"; - arrayType = new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, false, false); + if (arrayType == null) { + String fullName = ClassUtils.getFullName(javaClass) + "[]"; + String simpleName = javaClass.getSimpleName() + "[]"; + arrayType = new SimpleType(TypeCategory.ARRAY, fullName, getPackageName(), simpleName, + false, false); } return arrayType; } @Override - public boolean equals(Object o){ - if (o == this){ + public boolean equals(Object o) { + if (o == this) { return true; - }else if (o instanceof Type){ - Type t = (Type)o; + } else if (o instanceof Type) { + Type t = (Type) o; return t.getFullName().equals(className) && t.getParameters().equals(parameters); - }else{ + } else { return false; } } @@ -94,7 +96,7 @@ public TypeCategory getCategory() { @Override public Type getComponentType() { Class clazz = javaClass.getComponentType(); - if (clazz != null && componentType == null){ + if (clazz != null && componentType == null) { componentType = new ClassType(TypeCategory.SIMPLE, clazz); } return componentType; @@ -107,25 +109,26 @@ public String getFullName() { @Override public String getGenericName(boolean asArgType) { - return getGenericName(asArgType, Collections.singleton("java.lang"), Collections.emptySet()); + return getGenericName(asArgType, Collections.singleton("java.lang"), + Collections. emptySet()); } @Override public String getGenericName(boolean asArgType, Set packages, Set classes) { - if (parameters.isEmpty()){ + if (parameters.isEmpty()) { return ClassUtils.getName(javaClass, packages, classes); - }else{ + } else { StringBuilder builder = new StringBuilder(); builder.append(ClassUtils.getName(javaClass, packages, classes)); builder.append("<"); boolean first = true; - for (Type parameter : parameters){ - if (!first){ + for (Type parameter : parameters) { + if (!first) { builder.append(", "); } - if (parameter == null || parameter.getFullName().equals(getFullName())){ + if (parameter == null || parameter.getFullName().equals(getFullName())) { builder.append("?"); - }else{ + } else { builder.append(parameter.getGenericName(false, packages, classes)); } first = false; @@ -165,7 +168,7 @@ public String getSimpleName() { } @Override - public int hashCode(){ + public int hashCode() { return className.hashCode(); } @@ -180,9 +183,8 @@ public boolean isPrimitive() { } @Override - public String toString(){ + public String toString() { return getGenericName(true); } - } diff --git a/src/main/java/com/mysema/codegen/model/Constructor.java b/src/main/java/com/mysema/codegen/model/Constructor.java index 1e0509b48a..c46d6f4b71 100644 --- a/src/main/java/com/mysema/codegen/model/Constructor.java +++ b/src/main/java/com/mysema/codegen/model/Constructor.java @@ -9,7 +9,7 @@ /** * @author tiwe - * + * */ public final class Constructor { @@ -20,12 +20,12 @@ public Constructor(Collection params) { } @Override - public boolean equals(Object o){ - if (o == this){ + public boolean equals(Object o) { + if (o == this) { return true; - }else if (o instanceof Constructor){ - return ((Constructor)o).parameters.equals(parameters); - }else{ + } else if (o instanceof Constructor) { + return ((Constructor) o).parameters.equals(parameters); + } else { return false; } } @@ -35,7 +35,7 @@ public Collection getParameters() { } @Override - public int hashCode(){ + public int hashCode() { return parameters.hashCode(); } diff --git a/src/main/java/com/mysema/codegen/model/Parameter.java b/src/main/java/com/mysema/codegen/model/Parameter.java index 97e619291e..69121e07b3 100644 --- a/src/main/java/com/mysema/codegen/model/Parameter.java +++ b/src/main/java/com/mysema/codegen/model/Parameter.java @@ -5,10 +5,9 @@ */ package com.mysema.codegen.model; - /** * Parameter represents a parameter in a Constructor - * + * * @author tiwe * @version $Id$ */ @@ -25,11 +24,11 @@ public Parameter(String name, Type type) { @Override public boolean equals(Object o) { - if (o == this){ + if (o == this) { return true; - }else if (o instanceof Parameter){ + } else if (o instanceof Parameter) { return type.equals(((Parameter) o).type); - }else{ + } else { return false; } } @@ -38,7 +37,7 @@ public String getName() { return name; } - public Type getType(){ + public Type getType() { return type; } @@ -48,7 +47,7 @@ public int hashCode() { } @Override - public String toString(){ + public String toString() { return type + " " + name; } } diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index be03655f92..034e82856d 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -5,17 +5,28 @@ */ package com.mysema.codegen.model; +import java.lang.reflect.Array; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; - /** * @author tiwe */ public class SimpleType implements Type { + private static final Map> PRIMITIVES = new HashMap>(); + + static { + for (Class cl : Arrays.>asList(byte.class, int.class, long.class, short.class, + float.class, double.class, boolean.class, char.class)) { + PRIMITIVES.put(cl.getName(), cl); + } + } + private final TypeCategory category; private final String fullName, outerClassName, packageName, simpleName, localName; @@ -25,37 +36,40 @@ public class SimpleType implements Type { private final boolean primitiveClass, finalClass; private Type arrayType, componentType; + + private transient Class javaClass; public SimpleType(String fullName, String packageName, String simpleName, Type... parameters) { - this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Arrays.asList(parameters)); + this(TypeCategory.SIMPLE, fullName, packageName, simpleName, false, false, Arrays + .asList(parameters)); } - public SimpleType(String simpleName){ + public SimpleType(String simpleName) { this(TypeCategory.SIMPLE, simpleName, "", simpleName, false, false); } public SimpleType(Type type, List parameters) { this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), - type.isPrimitive(), type.isFinal(), parameters); + type.isPrimitive(), type.isFinal(), parameters); } public SimpleType(Type type, Type... parameters) { this(type.getCategory(), type.getFullName(), type.getPackageName(), type.getSimpleName(), - type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); + type.isPrimitive(), type.isFinal(), Arrays.asList(parameters)); } - public SimpleType(TypeCategory category, String fullName, String packageName, String simpleName, - boolean primitiveClass, boolean finalClass, List parameters) { + public SimpleType(TypeCategory category, String fullName, String packageName, + String simpleName, boolean primitiveClass, boolean finalClass, List parameters) { this.category = category; this.fullName = fullName; this.packageName = packageName; this.simpleName = simpleName; - if (packageName.length() > 0){ - this.localName = fullName.substring(packageName.length()+1); - }else{ + if (packageName.length() > 0) { + this.localName = fullName.substring(packageName.length() + 1); + } else { this.localName = fullName; } - if (fullName.substring(packageName.length()+1).contains(".")) { + if (fullName.substring(packageName.length() + 1).contains(".")) { this.outerClassName = fullName.substring(0, fullName.lastIndexOf('.')); } else { this.outerClassName = fullName; @@ -65,38 +79,40 @@ public SimpleType(TypeCategory category, String fullName, String packageName, St this.parameters = parameters; } - public SimpleType(TypeCategory typeCategory, String fullName, String packageName, String simpleName, boolean p, boolean f, Type... parameters) { - this(typeCategory, fullName, packageName, simpleName, p, f, Arrays - .asList(parameters)); + public SimpleType(TypeCategory typeCategory, String fullName, String packageName, + String simpleName, boolean p, boolean f, Type... parameters) { + this(typeCategory, fullName, packageName, simpleName, p, f, Arrays.asList(parameters)); } @Override public Type as(TypeCategory c) { - if (category != c){ - return new SimpleType(c, fullName, packageName, simpleName, primitiveClass, finalClass, parameters); - }else{ + if (category != c) { + return new SimpleType(c, fullName, packageName, simpleName, primitiveClass, finalClass, + parameters); + } else { return this; } } @Override public Type asArrayType() { - if (arrayType == null){ - String newFullName = getFullName()+"[]"; - String newSimpleName = getSimpleName()+"[]"; - arrayType = new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), newSimpleName, false, false); + if (arrayType == null) { + String newFullName = getFullName() + "[]"; + String newSimpleName = getSimpleName() + "[]"; + arrayType = new SimpleType(TypeCategory.ARRAY, newFullName, getPackageName(), + newSimpleName, false, false); } return arrayType; } @Override - public boolean equals(Object o){ - if (o == this){ + public boolean equals(Object o) { + if (o == this) { return true; - }else if (o instanceof Type){ - Type t = (Type)o; + } else if (o instanceof Type) { + Type t = (Type) o; return t.getFullName().equals(fullName) && t.getParameters().equals(parameters); - }else{ + } else { return false; } } @@ -107,14 +123,15 @@ public TypeCategory getCategory() { @Override public Type getComponentType() { - if (fullName.endsWith("[]")){ - if (componentType == null){ - String newFullName = fullName.substring(0, fullName.length()-2); - String newSimpleName = simpleName.substring(0, simpleName.length()-2); - componentType = new SimpleType(TypeCategory.SIMPLE, newFullName, getPackageName(), newSimpleName, false, false); + if (fullName.endsWith("[]")) { + if (componentType == null) { + String newFullName = fullName.substring(0, fullName.length() - 2); + String newSimpleName = simpleName.substring(0, simpleName.length() - 2); + componentType = new SimpleType(TypeCategory.SIMPLE, newFullName, getPackageName(), + newSimpleName, false, false); } return componentType; - }else{ + } else { return null; } } @@ -126,25 +143,26 @@ public String getFullName() { @Override public String getGenericName(boolean asArgType) { - return getGenericName(asArgType, Collections.singleton("java.lang"), Collections.emptySet()); + return getGenericName(asArgType, Collections.singleton("java.lang"), + Collections. emptySet()); } @Override public String getGenericName(boolean asArgType, Set packages, Set classes) { - if (parameters.isEmpty()){ + if (parameters.isEmpty()) { return getRawName(packages, classes); - }else{ + } else { StringBuilder builder = new StringBuilder(); builder.append(getRawName(packages, classes)); builder.append("<"); boolean first = true; - for (Type parameter : parameters){ - if (!first){ + for (Type parameter : parameters) { + if (!first) { builder.append(", "); } - if (parameter == null || parameter.getFullName().equals(fullName)){ + if (parameter == null || parameter.getFullName().equals(fullName)) { builder.append("?"); - }else{ + } else { builder.append(parameter.getGenericName(false, packages, classes)); } first = false; @@ -154,6 +172,31 @@ public String getGenericName(boolean asArgType, Set packages, Set getJavaClass() { + if (javaClass == null) { + String className; + if (packageName.length() > 0) { + className = packageName + "." + localName.replace('.', '$'); + } else { + className = localName.replace('.', '$'); + } + try { + if (className.endsWith("[]")) { + Class component = getComponentType().getJavaClass(); + javaClass = Array.newInstance(component, 0).getClass(); + } else if (PRIMITIVES.containsKey(className)) { + javaClass = PRIMITIVES.get(className); + } else { + javaClass = Class.forName(className); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + return javaClass; + } + @Override public String getPackageName() { return packageName; @@ -171,9 +214,10 @@ public String getPrimitiveName() { @Override public String getRawName(Set packages, Set classes) { - if (packages.contains(packageName) || classes.contains(fullName) || classes.contains(outerClassName)){ + if (packages.contains(packageName) || classes.contains(fullName) + || classes.contains(outerClassName)) { return localName; - }else{ + } else { return fullName; } } @@ -184,7 +228,7 @@ public String getSimpleName() { } @Override - public int hashCode(){ + public int hashCode() { return fullName.hashCode(); } @@ -199,9 +243,8 @@ public boolean isPrimitive() { } @Override - public String toString(){ + public String toString() { return getGenericName(true); } - } diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index 59a8f82177..72875fba9f 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -12,33 +12,35 @@ * @author tiwe */ public interface Type { - + Type as(TypeCategory category); - + Type asArrayType(); - + Type getComponentType(); - + TypeCategory getCategory(); - + String getFullName(); - + String getGenericName(boolean asArgType); String getGenericName(boolean asArgType, Set packages, Set classes); - + + Class getJavaClass(); + String getPackageName(); List getParameters(); - + String getPrimitiveName(); - + String getRawName(Set packages, Set classes); - + String getSimpleName(); boolean isFinal(); - + boolean isPrimitive(); - + } \ No newline at end of file diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index c8e771ea49..906c847bb0 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -10,15 +10,15 @@ /** * TypeAdapter is a basic adapter implementation for the Type interface - * + * * @author tiwe - * + * */ -public class TypeAdapter implements Type{ +public class TypeAdapter implements Type { protected final Type type; - public TypeAdapter(Type type){ + public TypeAdapter(Type type) { this.type = type; } @@ -38,7 +38,7 @@ public Type getComponentType() { } @Override - public boolean equals(Object o){ + public boolean equals(Object o) { return type.equals(o); } @@ -62,6 +62,11 @@ public String getGenericName(boolean asArgType, Set packages, Set getJavaClass() { + return type.getJavaClass(); + } + @Override public String getPackageName() { return type.getPackageName(); @@ -87,12 +92,12 @@ public String getSimpleName() { return type.getSimpleName(); } - protected Type getType(){ + protected Type getType() { return type; } @Override - public int hashCode(){ + public int hashCode() { return type.hashCode(); } diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java index aa5dd678fe..cf15ecebc6 100644 --- a/src/main/java/com/mysema/codegen/model/TypeCategory.java +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -10,9 +10,9 @@ /** * TypeCategory defines the expression type used for a Field - * + * * @author tiwe - * + * */ public enum TypeCategory { /** @@ -54,14 +54,9 @@ public enum TypeCategory { /** * */ - DATETIME(COMPARABLE, - java.util.Calendar.class.getName(), - java.util.Date.class.getName(), - java.sql.Timestamp.class.getName(), - "org.joda.time.LocalDateTime", - "org.joda.time.Instant", - "org.joda.time.DateTime", - "org.joda.time.DateMidnight"), + DATETIME(COMPARABLE, java.util.Calendar.class.getName(), java.util.Date.class.getName(), + java.sql.Timestamp.class.getName(), "org.joda.time.LocalDateTime", + "org.joda.time.Instant", "org.joda.time.DateTime", "org.joda.time.DateMidnight"), /** * */ @@ -69,8 +64,8 @@ public enum TypeCategory { /** * */ - CUSTOM(null), - + CUSTOM(null), + /** * */ @@ -93,10 +88,10 @@ public enum TypeCategory { private final Set types; - TypeCategory(TypeCategory superType, String... types){ + TypeCategory(TypeCategory superType, String... types) { this.superType = superType; this.types = new HashSet(types.length); - for (String type : types){ + for (String type : types) { this.types.add(type); } } @@ -105,33 +100,33 @@ public TypeCategory getSuperType() { return superType; } - public boolean supports(Class cl){ + public boolean supports(Class cl) { return supports(cl.getName()); } - public boolean supports(String className){ + public boolean supports(String className) { return types.contains(className); } /** * transitive and reflexive subCategoryOf check - * + * * @param ancestor * @return */ - public boolean isSubCategoryOf(TypeCategory ancestor){ - if (this == ancestor){ + public boolean isSubCategoryOf(TypeCategory ancestor) { + if (this == ancestor) { return true; - }else if (superType == null){ + } else if (superType == null) { return false; - }else{ + } else { return superType == ancestor || superType.isSubCategoryOf(ancestor); } } - public static TypeCategory get(String className){ - for (TypeCategory category : values()){ - if (category.supports(className)){ + public static TypeCategory get(String className) { + for (TypeCategory category : values()) { + if (category.supports(className)) { return category; } } diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 53e4043346..c637dc771f 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -10,12 +10,11 @@ import org.apache.commons.lang3.StringUtils; - /** * @author tiwe - * + * */ -public class TypeExtends extends TypeAdapter{ +public class TypeExtends extends TypeAdapter { private final String varName; @@ -30,25 +29,26 @@ public TypeExtends(Type type) { } @Override - public String getGenericName(boolean asArgType){ - return getGenericName(asArgType, Collections.emptySet(),Collections.emptySet()); + public String getGenericName(boolean asArgType) { + return getGenericName(asArgType, Collections. emptySet(), + Collections. emptySet()); } @Override - public String getGenericName(boolean asArgType, Set packages, Set classes){ - if (!asArgType){ - if (type.equals(Types.OBJECT)){ + public String getGenericName(boolean asArgType, Set packages, Set classes) { + if (!asArgType) { + if (type.equals(Types.OBJECT)) { return "?"; - }else{ + } else { String genericName = super.getGenericName(true, packages, classes); return StringUtils.isEmpty(genericName) ? "?" : "? extends " + genericName; } - }else{ + } else { return super.getGenericName(asArgType, packages, classes); } } - public String getVarName(){ + public String getVarName() { return varName; } diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index 26a1a6c7f7..bf1a61d1be 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -8,14 +8,13 @@ import java.util.Collections; import java.util.Set; - /** * TypeSuper is a Type for type variables and wildcard types - * + * * @author tiwe - * + * */ -public class TypeSuper extends TypeAdapter{ +public class TypeSuper extends TypeAdapter { private final Type superType; @@ -32,22 +31,23 @@ public TypeSuper(Type type) { this.superType = type; this.varName = null; } - + @Override - public String getGenericName(boolean asArgType){ - return getGenericName(asArgType, Collections.emptySet(),Collections.emptySet()); + public String getGenericName(boolean asArgType) { + return getGenericName(asArgType, Collections. emptySet(), + Collections. emptySet()); } @Override - public String getGenericName(boolean asArgType, Set packages, Set classes){ - if (!asArgType){ + public String getGenericName(boolean asArgType, Set packages, Set classes) { + if (!asArgType) { return "? super " + superType.getGenericName(true, packages, classes); - }else{ + } else { return super.getGenericName(asArgType, packages, classes); } } - - public String getVarName(){ + + public String getVarName() { return varName; } } diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 91e34d9b2c..d0da451e1f 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -16,7 +16,7 @@ /** * @author tiwe - * + * */ public final class Types { @@ -24,11 +24,14 @@ public final class Types { public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY, Object[].class); - public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC, BigDecimal.class); + public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC, + BigDecimal.class); - public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC, BigInteger.class); + public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC, + BigInteger.class); - public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN, Boolean.class, boolean.class); + public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN, Boolean.class, + boolean.class); public static final ClassType BOOLEAN_P = new ClassType(TypeCategory.BOOLEAN, boolean.class); @@ -36,25 +39,31 @@ public final class Types { public static final ClassType BYTE_P = new ClassType(TypeCategory.NUMERIC, byte.class); - public static final ClassType CHARACTER = new ClassType(TypeCategory.COMPARABLE, Character.class, char.class); + public static final ClassType CHARACTER = new ClassType(TypeCategory.COMPARABLE, + Character.class, char.class); public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE, char.class); - public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); + public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, + Collection.class, OBJECT); - public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC, Double.class, double.class); + public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC, Double.class, + double.class); public static final ClassType DOUBLE_P = new ClassType(TypeCategory.NUMERIC, double.class); - public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC, Float.class, float.class); + public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC, Float.class, + float.class); public static final ClassType FLOAT_P = new ClassType(TypeCategory.NUMERIC, float.class); - public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class, int.class); + public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class, + int.class); public static final ClassType INT = new ClassType(TypeCategory.NUMERIC, int.class); - public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, OBJECT); + public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, + OBJECT); public static final ClassType LIST = new ClassType(TypeCategory.LIST, List.class, OBJECT); @@ -68,7 +77,8 @@ public final class Types { public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); - public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC, Short.class, short.class); + public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC, Short.class, + short.class); public static final ClassType SHORT_P = new ClassType(TypeCategory.NUMERIC, short.class); @@ -78,12 +88,16 @@ public final class Types { public static final ClassType VOID = new ClassType(TypeCategory.SIMPLE, void.class); - public static final SimpleType DATE_TIME = new SimpleType(TypeCategory.DATETIME, "org.joda.time.DateTime", "org.joda.time", "DateTime", false, false); + public static final SimpleType DATE_TIME = new SimpleType(TypeCategory.DATETIME, + "org.joda.time.DateTime", "org.joda.time", "DateTime", false, false); - public static final SimpleType LOCAL_DATE = new SimpleType(TypeCategory.DATE, "org.joda.time.LocalDate", "org.joda.time", "LocalDate", false, false); + public static final SimpleType LOCAL_DATE = new SimpleType(TypeCategory.DATE, + "org.joda.time.LocalDate", "org.joda.time", "LocalDate", false, false); - public static final SimpleType LOCAL_TIME = new SimpleType(TypeCategory.TIME, "org.joda.time.LocalTime", "org.joda.time", "LocalTime", false, false); + public static final SimpleType LOCAL_TIME = new SimpleType(TypeCategory.TIME, + "org.joda.time.LocalTime", "org.joda.time", "LocalTime", false, false); - private Types(){} + private Types() { + } } diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 958eee69d1..877b27859e 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -13,29 +13,28 @@ /** * @author tiwe - * + * */ public final class ClassUtils { - public static String getName(Class cl){ - return getName(cl, Collections.singleton("java.lang"), Collections.emptySet()); + public static String getName(Class cl) { + return getName(cl, Collections.singleton("java.lang"), Collections. emptySet()); } - public static String getFullName(Class cl) { - if (cl.isArray()){ + if (cl.isArray()) { return getFullName(cl.getComponentType()) + "[]"; - }else{ - return cl.getName().replace('$', '.'); + } else { + return cl.getCanonicalName(); } } - public static String getPackageName(Class cl){ - if (cl.isArray()){ + public static String getPackageName(Class cl) { + if (cl.isArray()) { return getPackageName(cl.getComponentType()); - }else if (cl.getPackage() != null){ + } else if (cl.getPackage() != null) { return cl.getPackage().getName(); - }else{ + } else { return ""; } } @@ -45,33 +44,34 @@ public static String getName(Class cl, Set packages, Set clas return getName(cl.getComponentType(), packages, classes) + "[]"; } else if (cl.getPackage() == null || packages.contains(cl.getPackage().getName()) - || classes.contains(cl.getName()) - || classes.contains(cl.getName().substring(0, cl.getName().lastIndexOf('.')))) { - if (cl.getPackage() != null){ - String localName = cl.getName().substring(cl.getPackage().getName().length()+1); - return localName.replace('$', '.'); - }else{ - return cl.getName().replace('$', '.'); + || classes.contains(cl.getCanonicalName()) + || classes.contains(cl.getCanonicalName().substring(0, + cl.getName().lastIndexOf('.')))) { + if (cl.getPackage() != null) { + return cl.getCanonicalName().substring(cl.getPackage().getName().length() + 1); + } else { + return cl.getCanonicalName(); } } else { - return cl.getName().replace('$', '.'); + return cl.getCanonicalName(); } } - public static Class normalize(Class clazz){ - if (List.class.isAssignableFrom(clazz)){ + public static Class normalize(Class clazz) { + if (List.class.isAssignableFrom(clazz)) { return List.class; - }else if (Set.class.isAssignableFrom(clazz)){ + } else if (Set.class.isAssignableFrom(clazz)) { return Set.class; - }else if (Collection.class.isAssignableFrom(clazz)){ + } else if (Collection.class.isAssignableFrom(clazz)) { return Collection.class; - }else if (Map.class.isAssignableFrom(clazz)){ + } else if (Map.class.isAssignableFrom(clazz)) { return Map.class; - }else{ + } else { return clazz; } } - private ClassUtils(){} + private ClassUtils() { + } } diff --git a/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java b/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java index f28d84ad69..8f10f49ca5 100644 --- a/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java +++ b/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java @@ -6,60 +6,16 @@ public final class ScalaSyntaxUtils { - private ScalaSyntaxUtils(){} - - private static final Set reserved = new HashSet(Arrays.asList( - "abstract", - "do", - "finally", - "import", - "object", - "return", - "trait", - "var", - "_", - ":", - "case", - "else", - "for", - "lazy", - "override", - "sealed", - "try", - "while", - "=", - "=>", - "<-", - "catch", - "extends", - "forSome", - "match", - "package", - "super", - "true", - "with", - "<:", - "class", - "false", - "if", - "new", - "private", - "this", - "type", - "yield", - "<%", - ">:", - "def", - "final", - "implicit", - "null", - "protected", - "throw", - "val", - "#", - "@" - )); - + private ScalaSyntaxUtils() { + } + + private static final Set reserved = new HashSet(Arrays.asList("abstract", "do", + "finally", "import", "object", "return", "trait", "var", "_", ":", "case", "else", + "for", "lazy", "override", "sealed", "try", "while", "=", "=>", "<-", "catch", + "extends", "forSome", "match", "package", "super", "true", "with", "<:", "class", + "false", "if", "new", "private", "this", "type", "yield", "<%", ">:", "def", "final", + "implicit", "null", "protected", "throw", "val", "#", "@")); + public static boolean isReserved(String token) { return reserved.contains(token); } diff --git a/src/main/java/com/mysema/codegen/support/package-info.java b/src/main/java/com/mysema/codegen/support/package-info.java index 6c8bf5fca8..fbd912574a 100644 --- a/src/main/java/com/mysema/codegen/support/package-info.java +++ b/src/main/java/com/mysema/codegen/support/package-info.java @@ -5,3 +5,4 @@ */ package com.mysema.codegen.support; + diff --git a/src/test/java/NestedTest.java b/src/test/java/NestedTest.java index fabad55485..9a240e2b77 100644 --- a/src/test/java/NestedTest.java +++ b/src/test/java/NestedTest.java @@ -5,7 +5,6 @@ import com.mysema.codegen.model.ClassType; import com.mysema.codegen.support.ClassUtils; - public class NestedTest { public static class Inner { @@ -13,13 +12,13 @@ public static class Inner { } @Test - public void ClassUtils_getName(){ + public void ClassUtils_getName() { String name = ClassUtils.getName(NestedTest.Inner.class); assertEquals("NestedTest.Inner", name); } @Test - public void ClassType_getName(){ + public void ClassType_getName() { assertEquals("NestedTest.Inner", new ClassType(NestedTest.Inner.class).getFullName()); } diff --git a/src/test/java/com/mysema/codegen/Annotation.java b/src/test/java/com/mysema/codegen/Annotation.java index 02172d75de..3a98acb587 100644 --- a/src/test/java/com/mysema/codegen/Annotation.java +++ b/src/test/java/com/mysema/codegen/Annotation.java @@ -11,14 +11,14 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target( { TYPE }) +@Target({ TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface Annotation { - + boolean prop1() default false; - + boolean prop2(); - + Class clazz(); } diff --git a/src/test/java/com/mysema/codegen/Annotation2.java b/src/test/java/com/mysema/codegen/Annotation2.java index f569d7ef7b..33173631dd 100644 --- a/src/test/java/com/mysema/codegen/Annotation2.java +++ b/src/test/java/com/mysema/codegen/Annotation2.java @@ -9,10 +9,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target( { TYPE }) +@Target({ TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface Annotation2 { - - String value(); + + String value(); } \ No newline at end of file diff --git a/src/test/java/com/mysema/codegen/Annotation2Impl.java b/src/test/java/com/mysema/codegen/Annotation2Impl.java index 8eff139abe..f61fd01f33 100644 --- a/src/test/java/com/mysema/codegen/Annotation2Impl.java +++ b/src/test/java/com/mysema/codegen/Annotation2Impl.java @@ -3,14 +3,14 @@ import java.lang.annotation.Annotation; @SuppressWarnings("all") -public class Annotation2Impl implements Annotation2{ +public class Annotation2Impl implements Annotation2 { private final String value; - + public Annotation2Impl(String value) { this.value = value; } - + @Override public String value() { return value; diff --git a/src/test/java/com/mysema/codegen/Annotation3.java b/src/test/java/com/mysema/codegen/Annotation3.java index 2cb3357f5d..9a7b83c55b 100644 --- a/src/test/java/com/mysema/codegen/Annotation3.java +++ b/src/test/java/com/mysema/codegen/Annotation3.java @@ -12,10 +12,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target( { TYPE }) +@Target({ TYPE }) @Retention(RetentionPolicy.RUNTIME) public @interface Annotation3 { - - ElementType type(); + + ElementType type(); } diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index 1212391b06..6cdf58df44 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -17,57 +17,61 @@ @Annotation2("Hello") @Annotation3(type = ElementType.ANNOTATION_TYPE) public class AnnotationTest { - - + private StringWriter w = new StringWriter(); private CodeWriter writer = new JavaWriter(w); - + @Test - public void ClassAnnotation() throws IOException{ + public void ClassAnnotation() throws IOException { writer.annotation(getClass().getAnnotation(Annotation.class)); - assertEquals("@com.mysema.codegen.Annotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", w.toString().trim()); + assertEquals( + "@com.mysema.codegen.Annotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", + w.toString().trim()); } - + @Test - public void ClassAnnotation2() throws IOException{ + public void ClassAnnotation2() throws IOException { writer.annotation(getClass().getAnnotation(Annotation2.class)); assertEquals("@com.mysema.codegen.Annotation2(\"Hello\")", w.toString().trim()); } - + @Test - public void ClassAnnotation3() throws IOException{ + public void ClassAnnotation3() throws IOException { writer.annotation(getClass().getAnnotation(Annotation3.class)); - assertEquals("@com.mysema.codegen.Annotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", w.toString().trim()); + assertEquals( + "@com.mysema.codegen.Annotation3(type=java.lang.annotation.ElementType.ANNOTATION_TYPE)", + w.toString().trim()); } - + @Test - public void MethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { + public void MethodAnnotation() throws IOException, SecurityException, NoSuchMethodException { writer.annotation(getClass().getMethod("MethodAnnotation").getAnnotation(Test.class)); assertEquals("@org.junit.Test", w.toString().trim()); } - + @Test - public void Min() throws IOException{ + public void Min() throws IOException { writer.annotation(new MinImpl(10)); assertEquals("@javax.validation.constraints.Min(value=10)", w.toString().trim()); } - + @Test - public void Max() throws IOException{ + public void Max() throws IOException { writer.annotation(new MaxImpl(10)); assertEquals("@javax.validation.constraints.Max(value=10)", w.toString().trim()); } - + @Test - public void NotNull() throws IOException{ + public void NotNull() throws IOException { writer.annotation(new NotNullImpl()); assertEquals("@javax.validation.constraints.NotNull", w.toString().trim()); } @Test - public void Uri_Value() throws IOException{ + public void Uri_Value() throws IOException { writer.annotation(new Annotation2Impl("http://www.example.com#")); - assertEquals("@com.mysema.codegen.Annotation2(\"http://www.example.com#\")", w.toString().trim()); + assertEquals("@com.mysema.codegen.Annotation2(\"http://www.example.com#\")", w.toString() + .trim()); } - + } diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index 1f59568b10..b6ac331b27 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -19,15 +19,15 @@ import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; - public class ComplexEvaluationTest { - - private EvaluatorFactory factory = new EvaluatorFactory((URLClassLoader) getClass().getClassLoader()); - + + private EvaluatorFactory factory = new EvaluatorFactory((URLClassLoader) getClass() + .getClassLoader()); + @Test @SuppressWarnings("unchecked") - public void Complex(){ - ClassType resultType = new ClassType(TypeCategory.LIST,List.class, Types.STRING); + public void Complex() { + ClassType resultType = new ClassType(TypeCategory.LIST, List.class, Types.STRING); StringBuilder source = new StringBuilder(); source.append("java.util.List rv = new java.util.ArrayList();\n"); source.append("for (String a : a_){\n"); @@ -38,19 +38,15 @@ public void Complex(){ source.append(" }\n"); source.append("}\n"); source.append("return rv;"); - - Evaluator evaluator = factory.createEvaluator( - source.toString(), - resultType, - new String[]{"a_","b_"}, - new Type[]{resultType, resultType}, - new Class[]{List.class,List.class}, - Collections.emptyMap()); - - List a_ = Arrays.asList("1","2","3","4"); - List b_ = Arrays.asList("2","4","6","8"); - - assertEquals(Arrays.asList("2","4"), evaluator.evaluate(a_, b_)); + + Evaluator evaluator = factory.createEvaluator(source.toString(), resultType, + new String[] { "a_", "b_" }, new Type[] { resultType, resultType }, new Class[] { + List.class, List.class }, Collections. emptyMap()); + + List a_ = Arrays.asList("1", "2", "3", "4"); + List b_ = Arrays.asList("2", "4", "6", "8"); + + assertEquals(Arrays.asList("2", "4"), evaluator.evaluate(a_, b_)); } } diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java index 43ba1d9396..f7d3b27a29 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java @@ -19,98 +19,106 @@ import org.junit.Before; import org.junit.Test; - public class EvaluatorFactoryTest { - + public static class TestEntity { private final String name; - public TestEntity(String name){ + public TestEntity(String name) { this.name = name; } - + public String getName() { return name; } - + } - + private EvaluatorFactory factory; - - private List names = Arrays.asList("a","b"); - - private List> ints = Arrays.>asList(int.class, int.class); - - private List> strings = Arrays.>asList(String.class, String.class); - - private List> string_int = Arrays.>asList(String.class, int.class); - + + private List names = Arrays.asList("a", "b"); + + private List> ints = Arrays.> asList(int.class, int.class); + + private List> strings = Arrays.> asList(String.class, String.class); + + private List> string_int = Arrays.> asList(String.class, int.class); + @Before - public void setUp() throws IOException{ + public void setUp() throws IOException { factory = new EvaluatorFactory((URLClassLoader) getClass().getClassLoader()); } - + @Test - public void Simple(){ - for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")){ + public void Simple() { + for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")) { long start = System.currentTimeMillis(); - evaluate(expr, boolean.class, names, strings, Arrays.asList("a","b"), Collections.emptyMap()); + evaluate(expr, boolean.class, names, strings, Arrays.asList("a", "b"), + Collections. emptyMap()); long duration = System.currentTimeMillis() - start; System.err.println(expr + " took " + duration + "ms\n"); } - - for (String expr : Arrays.asList("a != b", "a < b", "a > b", "a <= b", "a >= b")){ + + for (String expr : Arrays.asList("a != b", "a < b", "a > b", "a <= b", "a >= b")) { long start = System.currentTimeMillis(); - evaluate(expr, boolean.class, names, ints, Arrays.asList(0,1), Collections.emptyMap()); + evaluate(expr, boolean.class, names, ints, Arrays.asList(0, 1), + Collections. emptyMap()); long duration = System.currentTimeMillis() - start; System.err.println(expr + " took " + duration + "ms\n"); - } + } } - + @Test - public void Results(){ + public void Results() { // String + String test("a + b", String.class, names, strings, Arrays.asList("Hello ", "World"), "Hello World"); - + // String + int - test("a.substring(b)", String.class, names, string_int, Arrays.asList("Hello World", 6), "World"); - + test("a.substring(b)", String.class, names, string_int, + Arrays. asList("Hello World", 6), "World"); + // int + int - test("a + b", int.class, names, ints, Arrays.asList(1,2), 3); + test("a + b", int.class, names, ints, Arrays.asList(1, 2), 3); } - + @Test - public void WithConstants(){ - Map constants = new HashMap(); + public void WithConstants() { + Map constants = new HashMap(); constants.put("x", "Hello World"); - List> types = Arrays.>asList(String.class); + List> types = Arrays.> asList(String.class); List names = Arrays.asList("a"); - assertEquals(Boolean.TRUE, evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello World"), constants)); - assertEquals(Boolean.FALSE, evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello"), constants)); + assertEquals( + Boolean.TRUE, + evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello World"), + constants)); + assertEquals( + Boolean.FALSE, + evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello"), + constants)); } - + @Test - public void CustomType(){ - test("a.getName()", String.class, - Collections.singletonList("a"), Collections.>singletonList(TestEntity.class), - Arrays.asList(new TestEntity("Hello World")), "Hello World"); + public void CustomType() { + test("a.getName()", String.class, Collections.singletonList("a"), + Collections.> singletonList(TestEntity.class), + Arrays.asList(new TestEntity("Hello World")), "Hello World"); } - - private void test(String source, Class projectionType, List names, List> types, List args, Object expectedResult){ - Assert.assertEquals(expectedResult, evaluate(source, projectionType, names, types, args, Collections.emptyMap())); + + private void test(String source, Class projectionType, List names, + List> types, List args, Object expectedResult) { + Assert.assertEquals( + expectedResult, + evaluate(source, projectionType, names, types, args, + Collections. emptyMap())); } - - private Object evaluate(String source, Class projectionType, List names, List> types, List args, Map constants) { - Evaluator evaluator = factory.createEvaluator( - "return " + source + ";", - projectionType, - names.toArray(new String[names.size()]), - types.toArray(new Class[types.size()]), + + private Object evaluate(String source, Class projectionType, List names, + List> types, List args, Map constants) { + Evaluator evaluator = factory.createEvaluator("return " + source + ";", projectionType, + names.toArray(new String[names.size()]), types.toArray(new Class[types.size()]), constants); return evaluator.evaluate(args.toArray()); } - - } diff --git a/src/test/java/com/mysema/codegen/InnerClassesTest.java b/src/test/java/com/mysema/codegen/InnerClassesTest.java index 502d1f2986..6a4c11d1e6 100644 --- a/src/test/java/com/mysema/codegen/InnerClassesTest.java +++ b/src/test/java/com/mysema/codegen/InnerClassesTest.java @@ -10,22 +10,23 @@ import com.mysema.codegen.model.Type; public class InnerClassesTest { - + public static class Entity { - + } - + @Test public void DirectParameter() throws IOException { Type entityType = new ClassType(Entity.class); - Type type = new SimpleType("com.mysema.codegen.gen.QEntity", "com.mysema.codegen.gen", "QEntity", entityType); - + Type type = new SimpleType("com.mysema.codegen.gen.QEntity", "com.mysema.codegen.gen", + "QEntity", entityType); + StringWriter str = new StringWriter(); JavaWriter writer = new JavaWriter(str); writer.beginClass(type); writer.end(); - + System.err.println(str.toString()); } - + } diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index edd6d982b3..21952cf19b 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -29,7 +29,7 @@ public class JavaWriterTest { - private static final Transformer transformer = new Transformer(){ + private static final Transformer transformer = new Transformer() { @Override public Parameter transform(Parameter input) { return input; @@ -42,32 +42,39 @@ public Parameter transform(Parameter input) { private Type testType, testType2, testSuperType, testInterface1, testInterface2; - private static void match(String resource, String text) throws IOException{ + private static void match(String resource, String text) throws IOException { // TODO : try to compile ? - String expected = IOUtils.toString(JavaWriterTest.class.getResourceAsStream(resource),"UTF-8").replace("\r\n", "\n").trim(); + String expected = IOUtils + .toString(JavaWriterTest.class.getResourceAsStream(resource), "UTF-8") + .replace("\r\n", "\n").trim(); String actual = text.trim(); assertEquals(expected, actual); } @Before - public void setUp(){ + public void setUp() { w = new StringWriter(); writer = new JavaWriter(w); testType = new ClassType(JavaWriterTest.class); - testType2 = new SimpleType("com.mysema.codegen.Test","com.mysema.codegen","Test"); - testSuperType = new SimpleType("com.mysema.codegen.Superclass","com.mysema.codegen","Superclass"); - testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); - testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); + testType2 = new SimpleType("com.mysema.codegen.Test", "com.mysema.codegen", "Test"); + testSuperType = new SimpleType("com.mysema.codegen.Superclass", "com.mysema.codegen", + "Superclass"); + testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1", "com.mysema.codegen", + "TestInterface1"); + testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2", "com.mysema.codegen", + "TestInterface2"); } @Test - public void Arrays() throws IOException{ + public void Arrays() throws IOException { writer.beginClass(new SimpleType("Main")); writer.field(Types.STRING.asArrayType(), "stringArray"); - writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); + writer.beginPublicMethod(Types.VOID, "main", + new Parameter("args", Types.STRING.asArrayType())); writer.line("//"); writer.end(); - writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args",new ClassType(TypeCategory.ARRAY,String[].class))); + writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args", new ClassType( + TypeCategory.ARRAY, String[].class))); writer.line("//"); writer.end(); writer.end(); @@ -79,7 +86,7 @@ public void Arrays() throws IOException{ } @Test - public void Primitive_Arrays(){ + public void Primitive_Arrays() { ClassType byteArray = new ClassType(byte[].class); assertEquals("byte[]", writer.getRawName(byteArray)); } @@ -99,7 +106,7 @@ public void Basic() throws IOException { } @Test - public void Extends() throws IOException{ + public void Extends() throws IOException { writer.beginClass(testType2, testSuperType); writer.end(); @@ -107,15 +114,15 @@ public void Extends() throws IOException{ } @Test - public void Implements() throws IOException{ - writer.beginClass(testType2, null, testInterface1,testInterface2); + public void Implements() throws IOException { + writer.beginClass(testType2, null, testInterface1, testInterface2); writer.end(); match("/testImplements", w.toString()); } @Test - public void Interface() throws IOException{ + public void Interface() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface(testType); @@ -125,7 +132,7 @@ public void Interface() throws IOException{ } @Test - public void Interface2() throws IOException{ + public void Interface2() throws IOException { writer.beginInterface(testType2, testInterface1); writer.end(); @@ -133,15 +140,16 @@ public void Interface2() throws IOException{ } @Test - public void Interface3() throws IOException{ + public void Interface3() throws IOException { writer.beginInterface(testType, testType2, testInterface1, testInterface2); writer.end(); - assertTrue(w.toString().contains("public interface JavaWriterTest extends Test, TestInterface1, TestInterface2 {")); + assertTrue(w.toString().contains( + "public interface JavaWriterTest extends Test, TestInterface1, TestInterface2 {")); } @Test - public void Javadoc() throws IOException{ + public void Javadoc() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.javadoc("JavaWriterTest is a test class"); @@ -151,9 +159,8 @@ public void Javadoc() throws IOException{ match("/testJavadoc", w.toString()); } - @Test - public void Annotations() throws IOException{ + public void Annotations() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class); writer.annotation(Entity.class); @@ -167,26 +174,29 @@ public void Annotations() throws IOException{ } @Test - public void Annotations2() throws IOException{ + public void Annotations2() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); writer.annotation(Entity.class); writer.beginClass(testType); - writer.annotation(new Test(){ + writer.annotation(new Test() { @Override public Class expected() { // TODO Auto-generated method stub return null; } + @Override public long timeout() { return 0; } + @Override public Class annotationType() { return Test.class; - }}); + } + }); writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); @@ -195,12 +205,13 @@ public Class annotationType() { } @Test - public void Annotation_With_ArrayMethod() throws IOException{ - Target annotation = new Target(){ + public void Annotation_With_ArrayMethod() throws IOException { + Target annotation = new Target() { @Override public ElementType[] value() { - return new ElementType[]{ElementType.FIELD, ElementType.METHOD}; + return new ElementType[] { ElementType.FIELD, ElementType.METHOD }; } + @Override public Class annotationType() { return Target.class; @@ -213,17 +224,17 @@ public Class annotationType() { } @Test - public void Fields() throws IOException{ + public void Fields() throws IOException { writer.beginClass(testType); // private writer.privateField(Types.STRING, "privateField"); writer.privateStaticFinal(Types.STRING, "privateStaticFinal", "\"val\""); // protected - writer.protectedField(Types.STRING,"protectedField"); + writer.protectedField(Types.STRING, "protectedField"); // field - writer.field(Types.STRING,"field"); + writer.field(Types.STRING, "field"); // public - writer.publicField(Types.STRING,"publicField"); + writer.publicField(Types.STRING, "publicField"); writer.publicStaticFinal(Types.STRING, "publicStaticFinal", "\"val\""); writer.publicFinal(Types.STRING, "publicFinalField"); writer.publicFinal(Types.STRING, "publicFinalField2", "\"val\""); @@ -234,7 +245,7 @@ public void Fields() throws IOException{ } @Test - public void Methods() throws IOException{ + public void Methods() throws IOException { writer.beginClass(testType); // private @@ -243,11 +254,13 @@ public void Methods() throws IOException{ // method // public - writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); + writer.beginPublicMethod(Types.STRING, "publicMethod", + Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); + writer.beginStaticMethod(Types.STRING, "staticMethod", + Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); @@ -257,23 +270,25 @@ public void Methods() throws IOException{ } @Test - public void Constructors() throws IOException{ - writer.beginClass(testType); + public void Constructors() throws IOException { + writer.beginClass(testType); - writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); - writer.end(); + writer.beginConstructor( + Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), + transformer); + writer.end(); - writer.beginConstructor(new Parameter("a", Types.STRING)); - writer.end(); + writer.beginConstructor(new Parameter("a", Types.STRING)); + writer.end(); - writer.end(); + writer.end(); match("/testConstructors", w.toString()); } @Test - public void Inner_Classes() throws IOException{ + public void Inner_Classes() throws IOException { writer.beginClass(testType); writer.beginClass(testType2); @@ -288,31 +303,29 @@ public void Inner_Classes() throws IOException{ } @Test - public void Imports() throws IOException{ - writer.staticimports(Arrays.class); + public void Imports() throws IOException { + writer.staticimports(Arrays.class); match("/testImports", w.toString()); } - @Test - public void Imports2() throws IOException{ - writer.importPackages("java.lang.reflect","java.util"); + public void Imports2() throws IOException { + writer.importPackages("java.lang.reflect", "java.util"); match("/testImports2", w.toString()); } @Test - public void Imports3() throws IOException{ + public void Imports3() throws IOException { writer.importClasses("java.util.Locale"); assertTrue(w.toString().contains("import java.util.Locale;")); } - @Test - public void SuppressWarnings() throws IOException{ - writer.suppressWarnings("unused"); + public void SuppressWarnings() throws IOException { + writer.suppressWarnings("unused"); writer.privateField(Types.STRING, "test"); match("/testSuppressWarnings", w.toString()); diff --git a/src/test/java/com/mysema/codegen/MaxImpl.java b/src/test/java/com/mysema/codegen/MaxImpl.java index e7917a2e8e..a7ad869148 100644 --- a/src/test/java/com/mysema/codegen/MaxImpl.java +++ b/src/test/java/com/mysema/codegen/MaxImpl.java @@ -7,13 +7,13 @@ /** * @author tiwe - * + * */ @SuppressWarnings("all") -public class MaxImpl implements Max{ - +public class MaxImpl implements Max { + private final long value; - + public MaxImpl(long value) { this.value = value; } diff --git a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java index 07f752efa6..5fe05bce40 100644 --- a/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemJavaFileObjectTest.java @@ -18,17 +18,17 @@ public class MemJavaFileObjectTest { @Test public void getCharContent() throws IOException { - MemJavaFileObject obj = new MemJavaFileObject("mem","Test",Kind.SOURCE); + MemJavaFileObject obj = new MemJavaFileObject("mem", "Test", Kind.SOURCE); Writer writer = obj.openWriter(); writer.write("Hello World"); writer.flush(); writer.close(); assertEquals("Hello World", obj.getCharContent(true).toString()); } - + @Test public void openInputStream() throws IOException { - MemJavaFileObject obj = new MemJavaFileObject("mem","Test",Kind.SOURCE); + MemJavaFileObject obj = new MemJavaFileObject("mem", "Test", Kind.SOURCE); obj.openWriter().write("test"); obj.openInputStream().close(); } diff --git a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java index b06807e23b..5a87ab11c0 100644 --- a/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java +++ b/src/test/java/com/mysema/codegen/MemSourceFileObjectTest.java @@ -12,9 +12,9 @@ import org.junit.Test; public class MemSourceFileObjectTest { - + @Test - public void Simple(){ + public void Simple() { MemSourceFileObject obj = new MemSourceFileObject("Test", "Hello World"); assertEquals("Hello World", obj.getCharContent(true).toString()); } @@ -25,7 +25,7 @@ public void OpenWriter() throws IOException { obj.openWriter().write("Hello World"); assertEquals("Hello World", obj.getCharContent(true).toString()); } - + @Test public void OpenWriter2() throws IOException { MemSourceFileObject obj = new MemSourceFileObject("Test"); diff --git a/src/test/java/com/mysema/codegen/MinImpl.java b/src/test/java/com/mysema/codegen/MinImpl.java index a3058dcd17..e693918837 100644 --- a/src/test/java/com/mysema/codegen/MinImpl.java +++ b/src/test/java/com/mysema/codegen/MinImpl.java @@ -7,13 +7,13 @@ /** * @author tiwe - * + * */ @SuppressWarnings("all") -public class MinImpl implements Min{ - +public class MinImpl implements Min { + private final long value; - + public MinImpl(long value) { this.value = value; } diff --git a/src/test/java/com/mysema/codegen/NotNullImpl.java b/src/test/java/com/mysema/codegen/NotNullImpl.java index be70489145..b433cb1cbf 100644 --- a/src/test/java/com/mysema/codegen/NotNullImpl.java +++ b/src/test/java/com/mysema/codegen/NotNullImpl.java @@ -7,10 +7,10 @@ /** * @author tiwe - * + * */ @SuppressWarnings("all") -public class NotNullImpl implements NotNull{ +public class NotNullImpl implements NotNull { @Override public Class[] groups() { diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index fb5a7a4d68..564ab5018b 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -26,10 +26,9 @@ import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; - public class ScalaWriterTest { - private static final Transformer transformer = new Transformer(){ + private static final Transformer transformer = new Transformer() { @Override public Parameter transform(Parameter input) { return input; @@ -43,41 +42,46 @@ public Parameter transform(Parameter input) { private Type testType, testType2, testSuperType, testInterface1, testInterface2; @Before - public void setUp(){ + public void setUp() { testType = new ClassType(JavaWriterTest.class); - testType2 = new SimpleType("com.mysema.codegen.Test","com.mysema.codegen","Test"); - testSuperType = new SimpleType("com.mysema.codegen.Superclass","com.mysema.codegen","Superclass"); - testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1","com.mysema.codegen","TestInterface1"); - testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2","com.mysema.codegen","TestInterface2"); + testType2 = new SimpleType("com.mysema.codegen.Test", "com.mysema.codegen", "Test"); + testSuperType = new SimpleType("com.mysema.codegen.Superclass", "com.mysema.codegen", + "Superclass"); + testInterface1 = new SimpleType("com.mysema.codegen.TestInterface1", "com.mysema.codegen", + "TestInterface1"); + testInterface2 = new SimpleType("com.mysema.codegen.TestInterface2", "com.mysema.codegen", + "TestInterface2"); } @Test - public void Object() throws IOException{ + public void Object() throws IOException { writer.beginObject("Test"); writer.end(); assertTrue(w.toString().contains("object Test {")); } @Test - public void Class_With_Interfaces() throws IOException{ + public void Class_With_Interfaces() throws IOException { writer.beginClass(testType, testType2, testInterface1); assertTrue(w.toString().contains("class JavaWriterTest extends Test with TestInterface1 {")); } @Test - public void Interface_With_Superinterfaces() throws IOException{ + public void Interface_With_Superinterfaces() throws IOException { writer.beginInterface(testType, testType2, testInterface1); assertTrue(w.toString().contains("trait JavaWriterTest extends Test with TestInterface1 {")); } @Test - public void CustomHeader() throws IOException{ -// class QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path){ -// val id = createNumber("ID", classOf[Integer]); -// val company = createNumber("COMPANY", classOf[Integer]); -// val idKey = createPrimaryKey(id); -// val companyKey: ForeignKey[QCompany] = createForeignKey(company, "ID"); -// } + public void CustomHeader() throws IOException { + // class QDepartment(path: String) extends + // RelationalPathBase[QDepartment](classOf[QDepartment], path){ + // val id = createNumber("ID", classOf[Integer]); + // val company = createNumber("COMPANY", classOf[Integer]); + // val idKey = createPrimaryKey(id); + // val companyKey: ForeignKey[QCompany] = createForeignKey(company, + // "ID"); + // } writer.beginClass("QDepartment(path: String) extends RelationalPathBase[QDepartment](classOf[QDepartment], path)"); writer.publicFinal(Types.OBJECT, "id", "createNumber(\"ID\", classOf[Integer])"); writer.publicFinal(Types.OBJECT, "company", "createNumber(\"COMPANY\", classOf[Integer])"); @@ -89,12 +93,12 @@ public void CustomHeader() throws IOException{ } @Test - public void BeanAccessors() throws IOException{ + public void BeanAccessors() throws IOException { writer.beginClass(new SimpleType("Person")); writer.beginPublicMethod(Types.STRING, "getName"); writer.line("\"Daniel Spiewak\""); writer.end(); - writer.beginPublicMethod(Types.VOID, "setName", new Parameter("name",Types.STRING)); + writer.beginPublicMethod(Types.VOID, "setName", new Parameter("name", Types.STRING)); writer.line("//"); writer.end(); writer.end(); @@ -103,14 +107,16 @@ public void BeanAccessors() throws IOException{ } @Test - public void Arrays() throws IOException{ -// def main(args: Array[String]) { + public void Arrays() throws IOException { + // def main(args: Array[String]) { writer.beginClass(new SimpleType("Main")); writer.field(Types.STRING.asArrayType(), "stringArray"); - writer.beginPublicMethod(Types.VOID, "main", new Parameter("args",Types.STRING.asArrayType())); + writer.beginPublicMethod(Types.VOID, "main", + new Parameter("args", Types.STRING.asArrayType())); writer.line("//"); writer.end(); - writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args",new ClassType(TypeCategory.ARRAY,String[].class))); + writer.beginPublicMethod(Types.VOID, "main2", new Parameter("args", new ClassType( + TypeCategory.ARRAY, String[].class))); writer.line("//"); writer.end(); writer.end(); @@ -120,17 +126,17 @@ public void Arrays() throws IOException{ assertTrue(w.toString().contains("def main(args: Array[String])")); assertTrue(w.toString().contains("def main2(args: Array[String])")); } - + @Test public void Arrays2() throws IOException { writer.field(Types.BYTE_P.asArrayType(), "byteArray"); - + System.out.println(w); assertTrue(w.toString().contains("var byteArray: Array[Byte]")); } @Test - public void Trait() throws IOException{ + public void Trait() throws IOException { // trait MyTrait writer.beginInterface(new SimpleType("MyTrait")); writer.line("//"); @@ -141,8 +147,8 @@ public void Trait() throws IOException{ } @Test - public void Field() throws IOException{ -// private val people: List[Person] + public void Field() throws IOException { + // private val people: List[Person] writer.imports(List.class); writer.beginClass(new SimpleType("Main")); writer.privateFinal(new SimpleType(Types.LIST, new SimpleType("Person")), "people"); @@ -167,7 +173,7 @@ public void Basic() throws IOException { } @Test - public void Extends() throws IOException{ + public void Extends() throws IOException { writer.beginClass(testType2, testSuperType); writer.end(); @@ -175,15 +181,15 @@ public void Extends() throws IOException{ } @Test - public void Implements() throws IOException{ - writer.beginClass(testType2, null, testInterface1,testInterface2); + public void Implements() throws IOException { + writer.beginClass(testType2, null, testInterface1, testInterface2); writer.end(); System.out.println(w); } @Test - public void Interface() throws IOException{ + public void Interface() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.beginInterface(testType); @@ -193,7 +199,7 @@ public void Interface() throws IOException{ } @Test - public void Interface2() throws IOException{ + public void Interface2() throws IOException { writer.beginInterface(testType2, testInterface1); writer.end(); @@ -201,7 +207,7 @@ public void Interface2() throws IOException{ } @Test - public void Javadoc() throws IOException{ + public void Javadoc() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class, Test.class); writer.javadoc("JavaWriterTest is a test class"); @@ -212,11 +218,11 @@ public void Javadoc() throws IOException{ } @Test - public void AnnotationConstant() throws IOException{ - Max annotation = new MaxImpl(0l){ + public void AnnotationConstant() throws IOException { + Max annotation = new MaxImpl(0l) { @Override public Class[] groups() { - return new Class[]{Object.class, String.class, int.class}; + return new Class[] { Object.class, String.class, int.class }; } }; writer.annotation(annotation); @@ -225,12 +231,13 @@ public Class[] groups() { } @Test - public void Annotation_With_ArrayMethod() throws IOException{ - Target annotation = new Target(){ + public void Annotation_With_ArrayMethod() throws IOException { + Target annotation = new Target() { @Override public ElementType[] value() { - return new ElementType[]{ElementType.FIELD, ElementType.METHOD}; + return new ElementType[] { ElementType.FIELD, ElementType.METHOD }; } + @Override public Class annotationType() { return Target.class; @@ -243,7 +250,7 @@ public Class annotationType() { } @Test - public void Annotations() throws IOException{ + public void Annotations() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class, StringWriter.class); writer.annotation(Entity.class); @@ -257,26 +264,29 @@ public void Annotations() throws IOException{ } @Test - public void Annotations2() throws IOException{ + public void Annotations2() throws IOException { writer.packageDecl("com.mysema.codegen"); writer.imports(IOException.class.getPackage(), StringWriter.class.getPackage()); writer.annotation(Entity.class); writer.beginClass(testType); - writer.annotation(new Test(){ + writer.annotation(new Test() { @Override public Class expected() { // TODO Auto-generated method stub return null; } + @Override public long timeout() { return 0; } + @Override public Class annotationType() { return Test.class; - }}); + } + }); writer.beginPublicMethod(Types.VOID, "test"); writer.end(); writer.end(); @@ -285,17 +295,17 @@ public Class annotationType() { } @Test - public void Fields() throws IOException{ + public void Fields() throws IOException { writer.beginClass(testType); // private writer.privateField(Types.STRING, "privateField"); writer.privateStaticFinal(Types.STRING, "privateStaticFinal", "\"val\""); // protected - writer.protectedField(Types.STRING,"protectedField"); + writer.protectedField(Types.STRING, "protectedField"); // field - writer.field(Types.STRING,"field"); + writer.field(Types.STRING, "field"); // public - writer.publicField(Types.STRING,"publicField"); + writer.publicField(Types.STRING, "publicField"); writer.publicStaticFinal(Types.STRING, "publicStaticFinal", "\"val\""); writer.publicFinal(Types.STRING, "publicFinalField"); writer.publicFinal(Types.STRING, "publicFinalField2", "\"val\""); @@ -306,7 +316,7 @@ public void Fields() throws IOException{ } @Test - public void Methods() throws IOException{ + public void Methods() throws IOException { writer.beginClass(testType); // private @@ -315,11 +325,13 @@ public void Methods() throws IOException{ // method // public - writer.beginPublicMethod(Types.STRING, "publicMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); + writer.beginPublicMethod(Types.STRING, "publicMethod", + Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); - writer.beginStaticMethod(Types.STRING, "staticMethod", Arrays.asList(new Parameter("a", Types.STRING)), transformer); + writer.beginStaticMethod(Types.STRING, "staticMethod", + Arrays.asList(new Parameter("a", Types.STRING)), transformer); writer.line("return null;"); writer.end(); @@ -329,10 +341,12 @@ public void Methods() throws IOException{ } @Test - public void Constructors() throws IOException{ + public void Constructors() throws IOException { writer.beginClass(testType); - writer.beginConstructor(Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), transformer); + writer.beginConstructor( + Arrays.asList(new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)), + transformer); writer.end(); writer.beginConstructor(new Parameter("a", Types.STRING)); @@ -343,29 +357,30 @@ public void Constructors() throws IOException{ System.out.println(w); } - + @Test public void CaseClass() throws IOException { - writer.caseClass("TestType", new Parameter("a", Types.STRING), new Parameter("b", Types.STRING)); - + writer.caseClass("TestType", new Parameter("a", Types.STRING), new Parameter("b", + Types.STRING)); + System.out.println(w); assertEquals("case class TestType(a: String, b: String)\n", w.toString()); } - + @Test public void Primitive() throws IOException { writer.beginClass(testType); - + writer.beginConstructor(new Parameter("a", Types.INT)); writer.end(); - + writer.end(); - + System.out.println(w); - + assertTrue(w.toString().contains("public JavaWriterTest(a: Int) {")); } - + @Test public void Primive_Types() throws IOException { writer.field(Types.BOOLEAN_P, "field"); @@ -376,8 +391,9 @@ public void Primive_Types() throws IOException { writer.field(Types.SHORT_P, "field"); writer.field(Types.DOUBLE_P, "field"); writer.field(Types.FLOAT_P, "field"); - - for (String type : Arrays.asList("boolean", "byte","char","int","long","short","double","float")) { + + for (String type : Arrays.asList("boolean", "byte", "char", "int", "long", "short", + "double", "float")) { assertTrue(w.toString().contains("field: " + StringUtils.capitalize(type))); } } @@ -385,22 +401,22 @@ public void Primive_Types() throws IOException { @Test public void ReservedWords() throws IOException { writer.beginClass(testType); - + writer.beginConstructor(new Parameter("type", Types.INT)); writer.end(); - + writer.publicField(testType, "class"); - + writer.beginPublicMethod(testType, "var"); writer.end(); - + writer.end(); - + System.out.println(w); - + assertTrue(w.toString().contains("`type`: Int")); assertTrue(w.toString().contains("`class`: JavaWriterTest")); assertTrue(w.toString().contains("`var`(): JavaWriterTest")); } - + } diff --git a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java index 2c65178ebe..f1433d02e9 100644 --- a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java +++ b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java @@ -17,9 +17,9 @@ import org.junit.Test; public class SimpleCompilerTest { - + @After - public void tearDown(){ + public void tearDown() { new File("src/test/java/com/mysema/codegen/SimpleCompilerTest.class").delete(); } @@ -32,8 +32,9 @@ public void Run() { options.add("-s"); options.add("target/out"); options.add("src/test/java/com/mysema/codegen/SimpleCompilerTest.java"); - int compilationResult = compiler.run(null, null, null, options.toArray(new String[options.size()])); - if(compilationResult != 0){ + int compilationResult = compiler.run(null, null, null, + options.toArray(new String[options.size()])); + if (compilationResult != 0) { Assert.fail("Compilation Failed"); } } diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index b3bd03ea2a..fd020bc44a 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -14,77 +14,85 @@ import org.junit.Test; - public class ClassTypeTest { public class Inner { - + } - + private final ClassType stringType = new ClassType(TypeCategory.STRING, String.class); -// @Test -// public void asArrayType(){ -// assertEquals(stringType, stringType.asArrayType().getParameter(0)); -// } + // @Test + // public void asArrayType(){ + // assertEquals(stringType, stringType.asArrayType().getParameter(0)); + // } @Test - public void InnerClass_Name(){ - assertEquals("com.mysema.codegen.model.ClassTypeTest.Inner", new ClassType(Inner.class).getFullName()); - assertEquals("com.mysema.codegen.model.ClassTypeTest.Inner[]", new ClassType(Inner.class).asArrayType().getFullName()); + public void InnerClass_Name() { + assertEquals("com.mysema.codegen.model.ClassTypeTest.Inner", + new ClassType(Inner.class).getFullName()); + assertEquals("com.mysema.codegen.model.ClassTypeTest.Inner[]", new ClassType(Inner.class) + .asArrayType().getFullName()); } - + @Test - public void ArrayType(){ - Type type = new ClassType(TypeCategory.ARRAY,String[].class); + public void ArrayType() { + Type type = new ClassType(TypeCategory.ARRAY, String[].class); assertEquals("java.lang", type.getPackageName()); } @Test - public void ArrayType_Equals_SimpleType(){ - Type type = new ClassType(TypeCategory.ARRAY,String[].class); + public void ArrayType_Equals_SimpleType() { + Type type = new ClassType(TypeCategory.ARRAY, String[].class); Type type2 = new SimpleType("java.lang.String[]", "java.lang", "String[]"); assertEquals(type, type2); } @Test - public void As(){ + public void As() { assertEquals(TypeCategory.COMPARABLE, stringType.as(TypeCategory.COMPARABLE).getCategory()); } @Test - public void GetParameters(){ + public void GetParameters() { ClassType mapType = new ClassType(TypeCategory.MAP, Map.class, stringType, stringType); assertEquals(2, mapType.getParameters().size()); assertEquals(stringType, mapType.getParameters().get(0)); assertEquals(stringType, mapType.getParameters().get(1)); -// assertEquals(stringType, mapType.getSelfOrValueType()); + // assertEquals(stringType, mapType.getSelfOrValueType()); assertFalse(mapType.isPrimitive()); } @Test - public void GetComponentType(){ - assertEquals("java.lang.String", new ClassType(String[].class).getComponentType().getFullName()); + public void GetComponentType() { + assertEquals("java.lang.String", new ClassType(String[].class).getComponentType() + .getFullName()); } @Test - public void Primitive_Arrays(){ + public void Primitive_Arrays() { ClassType byteArray = new ClassType(byte[].class); - assertEquals("byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + assertEquals( + "byte[]", + byteArray.getRawName(Collections.singleton("java.lang"), + Collections. emptySet())); assertEquals("byte[]", byteArray.getSimpleName()); assertEquals("byte[]", byteArray.getFullName()); } @Test - public void Array(){ + public void Array() { ClassType byteArray = new ClassType(Byte[].class); - assertEquals("Byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + assertEquals( + "Byte[]", + byteArray.getRawName(Collections.singleton("java.lang"), + Collections. emptySet())); assertEquals("Byte[]", byteArray.getSimpleName()); assertEquals("java.lang.Byte[]", byteArray.getFullName()); } @Test - public void IsPrimitive(){ + public void IsPrimitive() { assertTrue(Types.CHAR.isPrimitive()); assertTrue(Types.DOUBLE_P.isPrimitive()); assertTrue(Types.FLOAT_P.isPrimitive()); @@ -94,12 +102,12 @@ public void IsPrimitive(){ } @Test - public void GetPrimitiveName(){ - assertEquals("char", Types.CHARACTER.getPrimitiveName()); + public void GetPrimitiveName() { + assertEquals("char", Types.CHARACTER.getPrimitiveName()); assertEquals("double", Types.DOUBLE.getPrimitiveName()); - assertEquals("float", Types.FLOAT.getPrimitiveName()); - assertEquals("int", Types.INTEGER.getPrimitiveName()); - assertEquals("long", Types.LONG.getPrimitiveName()); - assertEquals("short", Types.SHORT.getPrimitiveName()); + assertEquals("float", Types.FLOAT.getPrimitiveName()); + assertEquals("int", Types.INTEGER.getPrimitiveName()); + assertEquals("long", Types.LONG.getPrimitiveName()); + assertEquals("short", Types.SHORT.getPrimitiveName()); } } diff --git a/src/test/java/com/mysema/codegen/model/ConstructorTest.java b/src/test/java/com/mysema/codegen/model/ConstructorTest.java index 3070283236..e762a2e435 100644 --- a/src/test/java/com/mysema/codegen/model/ConstructorTest.java +++ b/src/test/java/com/mysema/codegen/model/ConstructorTest.java @@ -19,9 +19,11 @@ public class ConstructorTest { @Test - public void test(){ - Parameter firstName = new Parameter("firstName", new ClassType(TypeCategory.STRING, String.class)); - Parameter lastName = new Parameter("lastName", new ClassType(TypeCategory.STRING, String.class)); + public void test() { + Parameter firstName = new Parameter("firstName", new ClassType(TypeCategory.STRING, + String.class)); + Parameter lastName = new Parameter("lastName", new ClassType(TypeCategory.STRING, + String.class)); Constructor c1 = new Constructor(Arrays.asList(firstName, lastName)); Constructor c2 = new Constructor(Arrays.asList(firstName, lastName)); assertEquals(c1, c1); diff --git a/src/test/java/com/mysema/codegen/model/ParameterTest.java b/src/test/java/com/mysema/codegen/model/ParameterTest.java index a624930bed..0997388f1d 100644 --- a/src/test/java/com/mysema/codegen/model/ParameterTest.java +++ b/src/test/java/com/mysema/codegen/model/ParameterTest.java @@ -17,10 +17,11 @@ public class ParameterTest { @Test - public void test(){ + public void test() { Parameter param1 = new Parameter("test", new ClassType(TypeCategory.STRING, String.class)); Parameter param2 = new Parameter("test2", new ClassType(TypeCategory.STRING, String.class)); - Parameter param3 = new Parameter("test2", new ClassType(TypeCategory.NUMERIC, Integer.class)); + Parameter param3 = new Parameter("test2", + new ClassType(TypeCategory.NUMERIC, Integer.class)); assertTrue(param1.equals(param2)); assertFalse(param1.equals(param3)); diff --git a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java index c841c91dd7..510079a466 100644 --- a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java @@ -8,29 +8,53 @@ public class SimpleTypeTest { + public static class Inner { + + } + @Test - public void PrimitiveArray(){ + public void PrimitiveArray() { Type byteArray = new ClassType(byte[].class); Type byteArray2 = new SimpleType(byteArray, byteArray.getParameters()); - assertEquals("byte[]", byteArray.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); - assertEquals("byte[]", byteArray2.getRawName(Collections.singleton("java.lang"), Collections.emptySet())); + assertEquals( + "byte[]", + byteArray.getRawName(Collections.singleton("java.lang"), + Collections. emptySet())); + assertEquals( + "byte[]", + byteArray2.getRawName(Collections.singleton("java.lang"), + Collections. emptySet())); } @Test - public void Array_FullName(){ + public void Array_FullName() { Type type = new SimpleType(new ClassType(String[].class)); assertEquals("java.lang.String[]", type.getFullName()); } @Test - public void GetComponenType(){ + public void GetComponentType() { Type type = new SimpleType(new ClassType(String[].class)); assertEquals("java.lang.String", type.getComponentType().getFullName()); } @Test - public void getRawName(){ - assertEquals("String", new SimpleType(Types.STRING).getRawName(Collections.emptySet(), Collections.singleton(Types.STRING.getFullName()))); + public void GetRawName() { + assertEquals("String", new SimpleType(Types.STRING).getRawName( + Collections. emptySet(), Collections.singleton(Types.STRING.getFullName()))); + } + + @Test + public void GetJavaClass_For_Array() { + System.out.println(Inner.class.getName()); + assertEquals(byte[].class, new ClassType(byte[].class).getJavaClass()); + assertEquals(byte[].class, new SimpleType(new ClassType(byte[].class)).getJavaClass()); + } + + @Test + public void GetJavaClass_For_InnerClass() { + assertEquals(Inner.class, new ClassType(Inner.class).getJavaClass()); + assertEquals(Inner.class, new SimpleType(new ClassType(Inner.class)).getJavaClass()); } } diff --git a/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java b/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java index 508e7ff040..35aaa31136 100644 --- a/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java @@ -7,7 +7,7 @@ public class TypeAdapterTest { @Test - public void Delegation(){ + public void Delegation() { Type inner = Types.OBJECT; Type type = new TypeAdapter(inner); assertEquals(inner.getCategory(), type.getCategory()); diff --git a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java index 81f96c97b4..fb6e35a8e4 100644 --- a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java @@ -26,7 +26,7 @@ public void IsSubCategoryOf() { } @Test - public void Get(){ + public void Get() { assertEquals(TypeCategory.BOOLEAN, TypeCategory.get(Boolean.class.getName())); assertEquals(TypeCategory.STRING, TypeCategory.get(String.class.getName())); assertEquals(TypeCategory.DATE, TypeCategory.get(Date.class.getName())); diff --git a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java index ac87b4b329..7033e94cf5 100644 --- a/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeExtendsTest.java @@ -7,22 +7,24 @@ public class TypeExtendsTest { @Test - public void GetVarName(){ + public void GetVarName() { assertEquals("var", new TypeExtends("var", Types.COLLECTION).getVarName()); } @Test public void GetGenericName() { - assertEquals("? extends java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(false)); + assertEquals("? extends java.util.Collection", new TypeExtends( + Types.COLLECTION).getGenericName(false)); } @Test - public void GetGenericName_As_ArgType(){ - assertEquals("java.util.Collection", new TypeExtends(Types.COLLECTION).getGenericName(true)); + public void GetGenericName_As_ArgType() { + assertEquals("java.util.Collection", + new TypeExtends(Types.COLLECTION).getGenericName(true)); } @Test - public void GetGenericName_With_Object(){ + public void GetGenericName_With_Object() { assertEquals("?", new TypeExtends(Types.OBJECT).getGenericName(false)); } diff --git a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java index ae55f72c29..d5c47caf97 100644 --- a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java @@ -7,7 +7,7 @@ public class TypeSuperTest { @Test - public void GetVarName(){ + public void GetVarName() { assertEquals("var", new TypeSuper("var", Types.STRING).getVarName()); } diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index bf296ba95a..e9f798b348 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -21,90 +21,90 @@ public class TypeTest { private Set packages = Collections.singleton("java.lang"); - + private Set classes = Collections.emptySet(); - - private ClassType locale = new ClassType(TypeCategory.SIMPLE,Locale.class); - + + private ClassType locale = new ClassType(TypeCategory.SIMPLE, Locale.class); + private Type string = Types.STRING; - + private Type string2 = new SimpleType(string); - + private Type locale2 = new SimpleType(locale); - + private Type stringList = new ClassType(TypeCategory.LIST, List.class, Types.STRING); - + private Type stringList2 = new SimpleType(Types.LIST, Types.STRING); - + private Type stringMap = new ClassType(TypeCategory.MAP, Map.class, Types.STRING, Types.STRING); - + private Type stringMap2 = new SimpleType(Types.MAP, Types.STRING, Types.STRING); - + @Test - public void arrayType(){ - assertEquals("Object[]",Types.OBJECTS.getGenericName(true).toString()); + public void arrayType() { + assertEquals("Object[]", Types.OBJECTS.getGenericName(true).toString()); } - + @Test - public void Equals(){ + public void Equals() { assertEquals(locale, locale2); assertEquals(locale2, locale); assertEquals(stringList, stringList2); assertEquals(stringList2, stringList); } - + @Test - public void Hashcode(){ + public void Hashcode() { assertEquals(locale.hashCode(), locale2.hashCode()); assertEquals(stringList.hashCode(), stringList2.hashCode()); } - + @Test public void GetGenericNameBoolean() { - assertEquals("java.util.Locale",locale.getGenericName(true)); - assertEquals("java.util.Locale",locale2.getGenericName(true)); - assertEquals("java.util.List",stringList.getGenericName(true)); - assertEquals("java.util.List",stringList2.getGenericName(true)); + assertEquals("java.util.Locale", locale.getGenericName(true)); + assertEquals("java.util.Locale", locale2.getGenericName(true)); + assertEquals("java.util.List", stringList.getGenericName(true)); + assertEquals("java.util.List", stringList2.getGenericName(true)); assertEquals("java.util.Map", stringMap.getGenericName(true)); assertEquals("java.util.Map", stringMap2.getGenericName(true)); - + assertEquals("String", string.getGenericName(true)); assertEquals("String", string2.getGenericName(true)); } @Test public void GetRawName() { - assertEquals("java.util.Locale",locale.getRawName(packages, classes)); - assertEquals("java.util.Locale",locale2.getRawName(packages, classes)); - assertEquals("java.util.List",stringList.getRawName(packages, classes)); - assertEquals("java.util.List",stringList2.getRawName(packages, classes)); - + assertEquals("java.util.Locale", locale.getRawName(packages, classes)); + assertEquals("java.util.Locale", locale2.getRawName(packages, classes)); + assertEquals("java.util.List", stringList.getRawName(packages, classes)); + assertEquals("java.util.List", stringList2.getRawName(packages, classes)); + assertEquals("String", string.getRawName(packages, classes)); assertEquals("String", string2.getRawName(packages, classes)); } @Test public void GetGenericNameBooleanSetOfStringSetOfString() { - assertEquals("java.util.Locale",locale.getGenericName(true, packages, classes)); - assertEquals("java.util.Locale",locale2.getGenericName(true, packages, classes)); - assertEquals("java.util.List",stringList.getGenericName(true,packages, classes)); - assertEquals("java.util.List",stringList2.getGenericName(true,packages, classes)); + assertEquals("java.util.Locale", locale.getGenericName(true, packages, classes)); + assertEquals("java.util.Locale", locale2.getGenericName(true, packages, classes)); + assertEquals("java.util.List", stringList.getGenericName(true, packages, classes)); + assertEquals("java.util.List", stringList2.getGenericName(true, packages, classes)); } @Test public void GetFullName() { - assertEquals("java.util.Locale",locale.getFullName()); - assertEquals("java.util.Locale",locale2.getFullName()); - assertEquals("java.util.List",stringList.getFullName()); - assertEquals("java.util.List",stringList2.getFullName()); + assertEquals("java.util.Locale", locale.getFullName()); + assertEquals("java.util.Locale", locale2.getFullName()); + assertEquals("java.util.List", stringList.getFullName()); + assertEquals("java.util.List", stringList2.getFullName()); } @Test public void GetPackageName() { - assertEquals("java.util",locale.getPackageName()); - assertEquals("java.util",locale2.getPackageName()); - assertEquals("java.util",stringList.getPackageName()); - assertEquals("java.util",stringList2.getPackageName()); + assertEquals("java.util", locale.getPackageName()); + assertEquals("java.util", locale2.getPackageName()); + assertEquals("java.util", stringList.getPackageName()); + assertEquals("java.util", stringList2.getPackageName()); } @Test @@ -117,15 +117,15 @@ public void GetParameters() { @Test public void GetSimpleName() { - assertEquals("Locale",locale.getSimpleName()); - assertEquals("Locale",locale2.getSimpleName()); - assertEquals("List",stringList.getSimpleName()); - assertEquals("List",stringList2.getSimpleName()); + assertEquals("Locale", locale.getSimpleName()); + assertEquals("Locale", locale2.getSimpleName()); + assertEquals("List", stringList.getSimpleName()); + assertEquals("List", stringList2.getSimpleName()); } @Test public void GetJavaClass() { - assertEquals(Locale.class,locale.getJavaClass()); + assertEquals(Locale.class, locale.getJavaClass()); } @Test @@ -133,7 +133,7 @@ public void IsFinal() { assertTrue(locale.isFinal()); assertTrue(locale2.isFinal()); assertFalse(stringList.isFinal()); - + assertTrue(Types.STRING.isFinal()); assertTrue(Types.LONG.isFinal()); } @@ -170,10 +170,10 @@ public void GetPrimitiveName() { @Test public void ToString() { - assertEquals("java.util.Locale",locale.toString()); - assertEquals("java.util.Locale",locale2.toString()); - assertEquals("java.util.List",stringList.toString()); - assertEquals("java.util.List",stringList2.toString()); + assertEquals("java.util.Locale", locale.toString()); + assertEquals("java.util.Locale", locale2.toString()); + assertEquals("java.util.List", stringList.toString()); + assertEquals("java.util.List", stringList2.toString()); } @Test diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index 667becb5bd..af9ecb426d 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -22,12 +22,13 @@ public class ClassUtilsTest { - - @Test public void GetName() { assertEquals("int", ClassUtils.getName(int.class)); - assertEquals("int", ClassUtils.getName(int.class, Collections.emptySet(), Collections.emptySet())); + assertEquals( + "int", + ClassUtils.getName(int.class, Collections. emptySet(), + Collections. emptySet())); assertEquals("Object", ClassUtils.getName(Object.class)); assertEquals("Object[]", ClassUtils.getName(Object[].class)); assertEquals("int", ClassUtils.getName(int.class)); @@ -38,7 +39,7 @@ public void GetName() { } @Test - public void Normalize(){ + public void Normalize() { assertEquals(List.class, ClassUtils.normalize(ArrayList.class)); assertEquals(Set.class, ClassUtils.normalize(HashSet.class)); assertEquals(Map.class, ClassUtils.normalize(HashMap.class)); From 19e37e049409ea5b9826e5a57055c176342222d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 13 Mar 2012 21:15:48 +0200 Subject: [PATCH 0171/1968] model simplifications --- pom.xml | 2 +- .../com/mysema/codegen/model/ClassType.java | 33 ++++-------- .../com/mysema/codegen/model/SimpleType.java | 11 ++-- .../java/com/mysema/codegen/model/Type.java | 2 +- .../com/mysema/codegen/model/TypeAdapter.java | 8 +-- .../java/com/mysema/codegen/model/Types.java | 54 +++++++++++-------- .../mysema/codegen/model/ClassTypeTest.java | 18 +++---- .../mysema/codegen/model/SimpleTypeTest.java | 9 ++++ .../mysema/codegen/model/TypeAdapterTest.java | 2 +- .../com/mysema/codegen/model/TypeTest.java | 14 ++--- 10 files changed, 81 insertions(+), 72 deletions(-) diff --git a/pom.xml b/pom.xml index d74c880fbc..7a724b9120 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.9 + 0.4.10 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 7c016864c7..dfcb8122a2 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -28,35 +28,24 @@ public class ClassType implements Type { private final List parameters; - private final Class primitiveClass; - private Type arrayType, componentType; public ClassType(Class javaClass, Type... parameters) { - this(TypeCategory.SIMPLE, javaClass, null, Arrays.asList(parameters)); + this(TypeCategory.SIMPLE, javaClass, Arrays.asList(parameters)); } - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass) { - this(category, javaClass, primitiveClass, Collections. emptyList()); + public ClassType(TypeCategory category, Class clazz, Type... parameters) { + this(category, clazz, Arrays.asList(parameters)); } - public ClassType(TypeCategory category, Class javaClass, Class primitiveClass, - List parameters) { + public ClassType(TypeCategory category, Class clazz, List parameters) { this.category = category; - this.javaClass = javaClass; - this.primitiveClass = primitiveClass; + this.javaClass = clazz; this.parameters = parameters; this.className = ClassUtils.getFullName(javaClass); } - public ClassType(TypeCategory category, Class javaClass, List parameters) { - this(category, javaClass, null, parameters); - } - - public ClassType(TypeCategory category, Class clazz, Type... parameters) { - this(category, clazz, null, Arrays.asList(parameters)); - } - + @Override public Type as(TypeCategory c) { if (category == c) { @@ -152,10 +141,10 @@ public List getParameters() { return parameters; } - @Override - public String getPrimitiveName() { - return primitiveClass != null ? primitiveClass.getName() : null; - } +// @Override +// public String getPrimitiveName() { +// return primitiveClass != null ? primitiveClass.getName() : null; +// } @Override public String getRawName(Set packages, Set classes) { @@ -179,7 +168,7 @@ public boolean isFinal() { @Override public boolean isPrimitive() { - return javaClass.isPrimitive() || primitiveClass != null; + return javaClass.isPrimitive(); } @Override diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 034e82856d..991a2c4802 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -207,10 +207,13 @@ public List getParameters() { return parameters; } - @Override - public String getPrimitiveName() { - return null; - } +// @Override +// public String getPrimitiveName() { +// if (primitiveClass) { +// return fullName; +// } +// return null; +// } @Override public String getRawName(Set packages, Set classes) { diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index 72875fba9f..82efd7de2c 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -33,7 +33,7 @@ public interface Type { List getParameters(); - String getPrimitiveName(); + //String getPrimitiveName(); String getRawName(Set packages, Set classes); diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index 906c847bb0..5592607494 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -77,10 +77,10 @@ public List getParameters() { return type.getParameters(); } - @Override - public String getPrimitiveName() { - return type.getPrimitiveName(); - } +// @Override +// public String getPrimitiveName() { +// return type.getPrimitiveName(); +// } @Override public String getRawName(Set packages, Set classes) { diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index d0da451e1f..753a9de3ae 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -9,6 +9,8 @@ import java.math.BigInteger; import java.net.URI; import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -19,57 +21,50 @@ * */ public final class Types { - + + public static final Map PRIMITIVES; + public static final ClassType OBJECT = new ClassType(TypeCategory.SIMPLE, Object.class); public static final ClassType OBJECTS = new ClassType(TypeCategory.ARRAY, Object[].class); - public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC, - BigDecimal.class); + public static final ClassType BIG_DECIMAL = new ClassType(TypeCategory.NUMERIC, BigDecimal.class); - public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC, - BigInteger.class); + public static final ClassType BIG_INTEGER = new ClassType(TypeCategory.NUMERIC, BigInteger.class); - public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN, Boolean.class, - boolean.class); + public static final ClassType BOOLEAN = new ClassType(TypeCategory.BOOLEAN, Boolean.class); public static final ClassType BOOLEAN_P = new ClassType(TypeCategory.BOOLEAN, boolean.class); - public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC, Byte.class, byte.class); + public static final ClassType BYTE = new ClassType(TypeCategory.NUMERIC, Byte.class); public static final ClassType BYTE_P = new ClassType(TypeCategory.NUMERIC, byte.class); - public static final ClassType CHARACTER = new ClassType(TypeCategory.COMPARABLE, - Character.class, char.class); + public static final ClassType CHARACTER = new ClassType(TypeCategory.COMPARABLE, Character.class); public static final ClassType CHAR = new ClassType(TypeCategory.COMPARABLE, char.class); - public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, - Collection.class, OBJECT); + public static final ClassType COLLECTION = new ClassType(TypeCategory.COLLECTION, Collection.class, OBJECT); - public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC, Double.class, - double.class); + public static final ClassType DOUBLE = new ClassType(TypeCategory.NUMERIC, Double.class); public static final ClassType DOUBLE_P = new ClassType(TypeCategory.NUMERIC, double.class); - public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC, Float.class, - float.class); + public static final ClassType FLOAT = new ClassType(TypeCategory.NUMERIC, Float.class); public static final ClassType FLOAT_P = new ClassType(TypeCategory.NUMERIC, float.class); - public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class, - int.class); + public static final ClassType INTEGER = new ClassType(TypeCategory.NUMERIC, Integer.class); public static final ClassType INT = new ClassType(TypeCategory.NUMERIC, int.class); - public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, - OBJECT); + public static final ClassType ITERABLE = new ClassType(TypeCategory.SIMPLE, Iterable.class, OBJECT); public static final ClassType LIST = new ClassType(TypeCategory.LIST, List.class, OBJECT); public static final ClassType LOCALE = new ClassType(TypeCategory.SIMPLE, Locale.class); - public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC, Long.class, long.class); + public static final ClassType LONG = new ClassType(TypeCategory.NUMERIC, Long.class); public static final ClassType LONG_P = new ClassType(TypeCategory.NUMERIC, long.class); @@ -77,8 +72,7 @@ public final class Types { public static final ClassType SET = new ClassType(TypeCategory.SET, Set.class, OBJECT); - public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC, Short.class, - short.class); + public static final ClassType SHORT = new ClassType(TypeCategory.NUMERIC, Short.class); public static final ClassType SHORT_P = new ClassType(TypeCategory.NUMERIC, short.class); @@ -97,6 +91,20 @@ public final class Types { public static final SimpleType LOCAL_TIME = new SimpleType(TypeCategory.TIME, "org.joda.time.LocalTime", "org.joda.time", "LocalTime", false, false); + static { + Map primitives = new HashMap(); + primitives.put(BOOLEAN, BOOLEAN_P); + primitives.put(BYTE, BYTE_P); + primitives.put(CHARACTER, CHAR); + primitives.put(DOUBLE, DOUBLE_P); + primitives.put(FLOAT, FLOAT_P); + primitives.put(INTEGER, INT); + primitives.put(LONG, LONG_P); + primitives.put(SHORT, SHORT_P); + PRIMITIVES = Collections.unmodifiableMap(primitives); + } + + private Types() { } diff --git a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java index fd020bc44a..05b2759097 100644 --- a/src/test/java/com/mysema/codegen/model/ClassTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/ClassTypeTest.java @@ -101,13 +101,13 @@ public void IsPrimitive() { assertTrue(Types.SHORT_P.isPrimitive()); } - @Test - public void GetPrimitiveName() { - assertEquals("char", Types.CHARACTER.getPrimitiveName()); - assertEquals("double", Types.DOUBLE.getPrimitiveName()); - assertEquals("float", Types.FLOAT.getPrimitiveName()); - assertEquals("int", Types.INTEGER.getPrimitiveName()); - assertEquals("long", Types.LONG.getPrimitiveName()); - assertEquals("short", Types.SHORT.getPrimitiveName()); - } +// @Test +// public void GetPrimitiveName() { +// assertEquals("char", Types.CHARACTER.getPrimitiveName()); +// assertEquals("double", Types.DOUBLE.getPrimitiveName()); +// assertEquals("float", Types.FLOAT.getPrimitiveName()); +// assertEquals("int", Types.INTEGER.getPrimitiveName()); +// assertEquals("long", Types.LONG.getPrimitiveName()); +// assertEquals("short", Types.SHORT.getPrimitiveName()); +// } } diff --git a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java index 510079a466..eebe1e9fd9 100644 --- a/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java +++ b/src/test/java/com/mysema/codegen/model/SimpleTypeTest.java @@ -56,5 +56,14 @@ public void GetJavaClass_For_InnerClass() { assertEquals(Inner.class, new ClassType(Inner.class).getJavaClass()); assertEquals(Inner.class, new SimpleType(new ClassType(Inner.class)).getJavaClass()); } + +// @Test +// public void GetPrimitiveName() { +// assertEquals("int", Types.INT.getPrimitiveName()); +// assertEquals("int", new SimpleType(Types.INT).getPrimitiveName()); +// +// assertEquals("int", Types.INTEGER.getPrimitiveName()); +// assertEquals("int", new SimpleType(Types.INTEGER).getPrimitiveName()); +// } } diff --git a/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java b/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java index 35aaa31136..56daa9f29a 100644 --- a/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeAdapterTest.java @@ -16,7 +16,7 @@ public void Delegation() { assertEquals(inner.getGenericName(true), type.getGenericName(true)); assertEquals(inner.getPackageName(), type.getPackageName()); assertEquals(inner.getParameters(), type.getParameters()); - assertEquals(inner.getPrimitiveName(), type.getPrimitiveName()); +// assertEquals(inner.getPrimitiveName(), type.getPrimitiveName()); assertEquals(inner.getSimpleName(), type.getSimpleName()); assertEquals(inner.isFinal(), type.isFinal()); assertEquals(inner.isPrimitive(), type.isPrimitive()); diff --git a/src/test/java/com/mysema/codegen/model/TypeTest.java b/src/test/java/com/mysema/codegen/model/TypeTest.java index e9f798b348..8d0d0d41b7 100644 --- a/src/test/java/com/mysema/codegen/model/TypeTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeTest.java @@ -160,13 +160,13 @@ public void As() { assertEquals(TypeCategory.SIMPLE, stringList2.as(TypeCategory.SIMPLE).getCategory()); } - @Test - public void GetPrimitiveName() { - assertNull(locale.getPrimitiveName()); - assertNull(locale2.getPrimitiveName()); - assertNull(stringList.getPrimitiveName()); - assertNull(stringList2.getPrimitiveName()); - } +// @Test +// public void GetPrimitiveName() { +// assertNull(locale.getPrimitiveName()); +// assertNull(locale2.getPrimitiveName()); +// assertNull(stringList.getPrimitiveName()); +// assertNull(stringList2.getPrimitiveName()); +// } @Test public void ToString() { From 6d49f9b3b665f4ceaa67076f572c210af6b985f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 14 Mar 2012 20:57:06 +0200 Subject: [PATCH 0172/1968] removed commented code --- src/main/java/com/mysema/codegen/model/ClassType.java | 5 ----- src/main/java/com/mysema/codegen/model/SimpleType.java | 8 -------- src/main/java/com/mysema/codegen/model/Type.java | 2 -- src/main/java/com/mysema/codegen/model/TypeAdapter.java | 5 ----- 4 files changed, 20 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index dfcb8122a2..03947ef652 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -141,11 +141,6 @@ public List getParameters() { return parameters; } -// @Override -// public String getPrimitiveName() { -// return primitiveClass != null ? primitiveClass.getName() : null; -// } - @Override public String getRawName(Set packages, Set classes) { return ClassUtils.getName(javaClass, packages, classes); diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 991a2c4802..73ae908f94 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -207,14 +207,6 @@ public List getParameters() { return parameters; } -// @Override -// public String getPrimitiveName() { -// if (primitiveClass) { -// return fullName; -// } -// return null; -// } - @Override public String getRawName(Set packages, Set classes) { if (packages.contains(packageName) || classes.contains(fullName) diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index 82efd7de2c..a49373142c 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -33,8 +33,6 @@ public interface Type { List getParameters(); - //String getPrimitiveName(); - String getRawName(Set packages, Set classes); String getSimpleName(); diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index 5592607494..6d85907125 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -77,11 +77,6 @@ public List getParameters() { return type.getParameters(); } -// @Override -// public String getPrimitiveName() { -// return type.getPrimitiveName(); -// } - @Override public String getRawName(Set packages, Set classes) { return type.getRawName(packages, classes); From 1b777cdaa71f93cd2da5419bd09e25a4e379d240 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 18 Apr 2012 22:59:21 +0300 Subject: [PATCH 0173/1968] migrated codegen to use Guava --- pom.xml | 29 ++++++------------- .../mysema/codegen/AbstractCodeWriter.java | 4 +-- .../java/com/mysema/codegen/CodeWriter.java | 9 +++--- .../java/com/mysema/codegen/JavaWriter.java | 20 ++++++------- .../java/com/mysema/codegen/ScalaWriter.java | 21 ++++++-------- .../com/mysema/codegen/model/TypeExtends.java | 4 +-- .../com/mysema/codegen/JavaWriterTest.java | 12 ++++---- .../com/mysema/codegen/ScalaWriterTest.java | 7 ++--- .../codegen/support/ClassUtilsTest.java | 4 +-- template.mf | 7 ++--- 10 files changed, 48 insertions(+), 69 deletions(-) diff --git a/pom.xml b/pom.xml index 7a724b9120..743763a0cf 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.4.10 + 0.4.11 Codegen Code generation and compilation for Java @@ -19,20 +19,16 @@ 4.01 3.0.1 + 11.0.2 - - net.sourceforge.collections - collections-generic - ${commons.collections.version} - - org.apache.commons - commons-lang3 - ${commons.lang.version} + com.google.guava + guava + 11.0.2 - + junit @@ -47,17 +43,10 @@ - org.apache.commons - commons-io - 1.3.2 + javax.validation + validation-api + 1.0.CR3 test - - - - javax.validation - validation-api - 1.0.CR3 - test diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index bc9d7ce17d..0ffd85a63f 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -7,7 +7,7 @@ import java.io.IOException; -import org.apache.commons.lang3.StringUtils; +import com.google.common.base.Strings; /** * @author tiwe @@ -34,7 +34,7 @@ public AbstractCodeWriter(Appendable appendable, int spaces) { } this.appendable = appendable; this.spaces = spaces; - this.spacesString = StringUtils.leftPad("", spaces); + this.spacesString = Strings.repeat(" ", spaces); } @Override diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index f139574780..2bf61cd4bf 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -9,8 +9,7 @@ import java.lang.annotation.Annotation; import java.util.Collection; -import org.apache.commons.collections15.Transformer; - +import com.google.common.base.Function; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; @@ -34,7 +33,7 @@ public interface CodeWriter extends Appendable { CodeWriter beginClass(Type type, Type superClass, Type... interfaces) throws IOException; - CodeWriter beginConstructor(Collection params, Transformer transformer) throws IOException; + CodeWriter beginConstructor(Collection params, Function transformer) throws IOException; CodeWriter beginConstructor(Parameter... params) throws IOException; @@ -43,12 +42,12 @@ public interface CodeWriter extends Appendable { CodeWriter beginLine(String... segments) throws IOException; CodeWriter beginPublicMethod(Type returnType, String methodName, Collection parameters, - Transformer transformer) throws IOException; + Function transformer) throws IOException; CodeWriter beginPublicMethod(Type returnType, String methodName, Parameter... args) throws IOException; CodeWriter beginStaticMethod(Type type, String name, Collection params, - Transformer transformer) throws IOException; + Function transformer) throws IOException; CodeWriter beginStaticMethod(Type returnType, String methodName, Parameter... args) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 95e2b01e79..413fdcde7b 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -22,9 +22,7 @@ import java.util.Set; import java.util.Stack; -import org.apache.commons.collections15.Transformer; -import org.apache.commons.lang3.StringEscapeUtils; - +import com.google.common.base.Function; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; @@ -160,7 +158,7 @@ private void annotationConstant(Object value) throws IOException { append(enumValue.getDeclaringClass().getName() + DOT + enumValue.name()); } } else if (value instanceof String) { - String escaped = StringEscapeUtils.escapeJava(value.toString()); + String escaped = StringUtils.escapeJava(value.toString()); append(QUOTE + escaped.replace("\\/", "/") + QUOTE); } else { throw new IllegalArgumentException("Unsupported annotation value : " + value); @@ -205,7 +203,7 @@ public JavaWriter beginClass(Type type, Type superClass, Type... interfaces) thr @Override public JavaWriter beginConstructor(Collection parameters, - Transformer transformer) throws IOException { + Function transformer) throws IOException { types.push(types.peek()); beginLine(PUBLIC + types.peek().getSimpleName()).params(parameters, transformer) .append(" {").nl(); @@ -249,7 +247,7 @@ private JavaWriter beginMethod(String modifiers, Type returnType, String methodN @Override public JavaWriter beginPublicMethod(Type returnType, String methodName, - Collection parameters, Transformer transformer) throws IOException { + Collection parameters, Function transformer) throws IOException { return beginMethod(PUBLIC, returnType, methodName, transform(parameters, transformer)); } @@ -261,7 +259,7 @@ public JavaWriter beginPublicMethod(Type returnType, String methodName, Paramete @Override public JavaWriter beginStaticMethod(Type returnType, String methodName, - Collection parameters, Transformer transformer) throws IOException { + Collection parameters, Function transformer) throws IOException { return beginMethod(PUBLIC_STATIC, returnType, methodName, transform(parameters, transformer)); } @@ -362,7 +360,7 @@ public JavaWriter packageDecl(String packageName) throws IOException { return line(PACKAGE + packageName + SEMICOLON).nl(); } - private JavaWriter params(Collection parameters, Transformer transformer) + private JavaWriter params(Collection parameters, Function transformer) throws IOException { append("("); boolean first = true; @@ -370,7 +368,7 @@ private JavaWriter params(Collection parameters, Transformer Parameter[] transform(Collection parameters, - Transformer transformer) { + Function transformer) { Parameter[] rv = new Parameter[parameters.size()]; int i = 0; for (T value : parameters) { - rv[i++] = transformer.transform(value); + rv[i++] = transformer.apply(value); } return rv; } diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index e10de47030..9d0e5b2ab2 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -14,10 +14,7 @@ import java.util.HashSet; import java.util.Set; -import org.apache.commons.collections15.Transformer; -import org.apache.commons.lang3.StringEscapeUtils; -import org.apache.commons.lang3.StringUtils; - +import com.google.common.base.Function; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.Types; @@ -170,7 +167,7 @@ private void annotationConstant(Object value) throws IOException { append(enumValue.getDeclaringClass().getName() + DOT + enumValue.name()); } } else if (value instanceof String) { - append(QUOTE + StringEscapeUtils.escapeJava(value.toString()) + QUOTE); + append(QUOTE + StringUtils.escapeJava(value.toString()) + QUOTE); } else { throw new IllegalArgumentException("Unsupported annotation value : " + value); } @@ -242,7 +239,7 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) @Override public ScalaWriter beginConstructor(Collection parameters, - Transformer transformer) throws IOException { + Function transformer) throws IOException { beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); return goIn(); } @@ -291,7 +288,7 @@ private ScalaWriter beginMethod(String modifiers, Type returnType, String method @Override public ScalaWriter beginPublicMethod(Type returnType, String methodName, - Collection parameters, Transformer transformer) throws IOException { + Collection parameters, Function transformer) throws IOException { return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); } @@ -303,7 +300,7 @@ public ScalaWriter beginPublicMethod(Type returnType, String methodName, Paramet @Override public ScalaWriter beginStaticMethod(Type returnType, String methodName, - Collection parameters, Transformer transformer) throws IOException { + Collection parameters, Function transformer) throws IOException { return beginMethod(DEF, returnType, methodName, transform(parameters, transformer)); } @@ -450,7 +447,7 @@ public ScalaWriter packageDecl(String packageName) throws IOException { return line(PACKAGE + packageName).nl(); } - private ScalaWriter params(Collection parameters, Transformer transformer) + private ScalaWriter params(Collection parameters, Function transformer) throws IOException { append("("); boolean first = true; @@ -458,7 +455,7 @@ private ScalaWriter params(Collection parameters, Transformer Parameter[] transform(Collection parameters, - Transformer transformer) { + Function transformer) { Parameter[] rv = new Parameter[parameters.size()]; int i = 0; for (T value : parameters) { - rv[i++] = transformer.transform(value); + rv[i++] = transformer.apply(value); } return rv; } diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index c637dc771f..5f805a53a4 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -8,7 +8,7 @@ import java.util.Collections; import java.util.Set; -import org.apache.commons.lang3.StringUtils; +import com.google.common.base.Strings; /** * @author tiwe @@ -41,7 +41,7 @@ public String getGenericName(boolean asArgType, Set packages, Set transformer = new Transformer() { + private static final Function transformer = new Function() { @Override - public Parameter transform(Parameter input) { + public Parameter apply(Parameter input) { return input; } }; @@ -44,8 +45,7 @@ public Parameter transform(Parameter input) { private static void match(String resource, String text) throws IOException { // TODO : try to compile ? - String expected = IOUtils - .toString(JavaWriterTest.class.getResourceAsStream(resource), "UTF-8") + String expected = Resources.toString(JavaWriterTest.class.getResource(resource), Charsets.UTF_8) .replace("\r\n", "\n").trim(); String actual = text.trim(); assertEquals(expected, actual); diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 564ab5018b..ac326c4751 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -14,11 +14,10 @@ import javax.validation.constraints.Max; -import org.apache.commons.collections15.Transformer; -import org.apache.commons.lang3.StringUtils; import org.junit.Before; import org.junit.Test; +import com.google.common.base.Function; import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.SimpleType; @@ -28,9 +27,9 @@ public class ScalaWriterTest { - private static final Transformer transformer = new Transformer() { + private static final Function transformer = new Function() { @Override - public Parameter transform(Parameter input) { + public Parameter apply(Parameter input) { return input; } }; diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index af9ecb426d..3b6c6b6166 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -8,7 +8,6 @@ import static org.junit.Assert.assertEquals; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -17,7 +16,6 @@ import java.util.Map; import java.util.Set; -import org.apache.commons.collections15.Bag; import org.junit.Test; public class ClassUtilsTest { @@ -43,7 +41,7 @@ public void Normalize() { assertEquals(List.class, ClassUtils.normalize(ArrayList.class)); assertEquals(Set.class, ClassUtils.normalize(HashSet.class)); assertEquals(Map.class, ClassUtils.normalize(HashMap.class)); - assertEquals(Collection.class, ClassUtils.normalize(Bag.class)); +// assertEquals(Collection.class, ClassUtils.normalize(Bag.class)); } } diff --git a/template.mf b/template.mf index 8ab2a5bc00..2b838ec97b 100644 --- a/template.mf +++ b/template.mf @@ -3,7 +3,6 @@ Bundle-Name: Codegen Bundle-Vendor: Mysema Bundle-ManifestVersion: 2 Import-Template: - javax.annotation.*;version="0", - org.apache.commons.collections15.*;version="${commons.collections.version}", - org.apache.commons.lang3.*;version="${commons.lang.version}", - javax.tools.*;version="0" + javax.annotation.*;version="0", + javax.tools.*;version="0", + com.google.common.*;version="${guava.version}" From 2630c8a42d2434515d3929bdf8c2b6dd622500d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 16 Jun 2012 17:56:01 +0300 Subject: [PATCH 0174/1968] improved handling of manifest only classpaths --- pom.xml | 4 +- .../com/mysema/codegen/SimpleCompiler.java | 37 ++++++++++++---- .../java/com/mysema/codegen/StringUtils.java | 26 ++++++++++++ .../com/mysema/codegen/AnnotationTest.java | 8 ++-- .../mysema/codegen/SimpleCompilerTest.java | 42 ++++++++++++++++++- .../mysema/codegen/SurefireBooterTest.java | 25 +++++++++++ 6 files changed, 126 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/StringUtils.java create mode 100644 src/test/java/com/mysema/codegen/SurefireBooterTest.java diff --git a/pom.xml b/pom.xml index 743763a0cf..c3f879339d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.mysema.codegen codegen - 0.4.11 + 0.5.0 Codegen Code generation and compilation for Java com.mysema.home mysema-source - 0.2.0 + 0.2.2 jar diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index 4b47cb30f8..9239d5a88c 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -6,6 +6,7 @@ package com.mysema.codegen; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; @@ -18,6 +19,7 @@ import java.util.List; import java.util.Locale; import java.util.Set; +import java.util.jar.Manifest; import javax.lang.model.SourceVersion; import javax.tools.DiagnosticListener; @@ -27,6 +29,8 @@ import javax.tools.StandardJavaFileManager; import javax.tools.ToolProvider; +import com.google.common.base.Joiner; + /** * SimpleCompiler provides a convenience wrapper of the JavaCompiler interface * with automatic classpath generation @@ -36,19 +40,33 @@ */ public class SimpleCompiler implements JavaCompiler { - public static String getClassPath(URLClassLoader classLoader) { + private static final Joiner pathJoiner = Joiner.on(File.pathSeparator); + + public static String getClassPath(URLClassLoader cl) { try { - StringBuilder path = new StringBuilder(); - for (URL url : ((URLClassLoader) classLoader).getURLs()) { - if (path.length() > 0) { - path.append(File.pathSeparator); + List paths = new ArrayList(); + if (cl.getURLs().length == 1 && cl.getURLs()[0].getPath().contains("surefirebooter")) { + // extract MANIFEST.MF Class-Path entry, since the Java Compiler doesn't handle + // manifest only jars in the classpath correctly + URL url = cl.findResource("META-INF/MANIFEST.MF"); + Manifest manifest = new Manifest(url.openStream()); + String classpath = (String) manifest.getMainAttributes().getValue("Class-Path"); + for (String entry : classpath.split(" ")) { + URL entryUrl = new URL(entry); + String decodedPath = URLDecoder.decode(entryUrl.getPath(), "UTF-8"); + paths.add(new File(decodedPath).getAbsolutePath()); } - String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8"); - path.append(new File(decodedPath).getAbsolutePath()); - } - return path.toString(); + } else { + for (URL url : cl.getURLs()) { + String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8"); + paths.add(new File(decodedPath).getAbsolutePath()); + } + } + return pathJoiner.join(paths); } catch (UnsupportedEncodingException e) { throw new CodegenException(e); + } catch (IOException e) { + throw new CodegenException(e); } } @@ -119,6 +137,7 @@ public int run(InputStream in, OutputStream out, OutputStream err, String... arg for (String arg : arguments) { args.add(arg); } + System.err.println(args); return compiler.run(in, out, err, args.toArray(new String[args.size()])); } diff --git a/src/main/java/com/mysema/codegen/StringUtils.java b/src/main/java/com/mysema/codegen/StringUtils.java new file mode 100644 index 0000000000..47a0ccae2b --- /dev/null +++ b/src/main/java/com/mysema/codegen/StringUtils.java @@ -0,0 +1,26 @@ +package com.mysema.codegen; + +import com.google.common.base.CaseFormat; + +public final class StringUtils { + + public static String capitalize(String str) { + return CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_CAMEL, str); + } + + public static String uncapitalize(String str) { + return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, str); + } + + public static String escapeJava(String str) { + str = str.replace("\\", "\\\\"); + str = str.replace("\"", "\\\""); + str = str.replace("\r", "\\\r"); + str = str.replace("\t", "\\\t"); + str = str.replace("\n", "\\\n"); + return str; + } + + private StringUtils() {} + +} diff --git a/src/test/java/com/mysema/codegen/AnnotationTest.java b/src/test/java/com/mysema/codegen/AnnotationTest.java index 6cdf58df44..96a763a93a 100644 --- a/src/test/java/com/mysema/codegen/AnnotationTest.java +++ b/src/test/java/com/mysema/codegen/AnnotationTest.java @@ -6,6 +6,7 @@ package com.mysema.codegen; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.StringWriter; @@ -24,9 +25,10 @@ public class AnnotationTest { @Test public void ClassAnnotation() throws IOException { writer.annotation(getClass().getAnnotation(Annotation.class)); - assertEquals( - "@com.mysema.codegen.Annotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)", - w.toString().trim()); + String option1 = "@com.mysema.codegen.Annotation(clazz=com.mysema.codegen.AnnotationTest.class, prop2=false)"; + String option2 = "@com.mysema.codegen.Annotation(prop2=false, clazz=com.mysema.codegen.AnnotationTest.class)"; + String serialized = w.toString().trim(); + assertTrue(serialized.equals(option1) || serialized.equals(option2)); } @Test diff --git a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java index f1433d02e9..fa0fc4f6ad 100644 --- a/src/test/java/com/mysema/codegen/SimpleCompilerTest.java +++ b/src/test/java/com/mysema/codegen/SimpleCompilerTest.java @@ -6,14 +6,21 @@ package com.mysema.codegen; import java.io.File; +import java.io.UnsupportedEncodingException; +import java.net.URL; +import java.net.URLClassLoader; +import java.net.URLDecoder; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import javax.tools.JavaCompiler; +import javax.tools.ToolProvider; import junit.framework.Assert; import org.junit.After; +import org.junit.Ignore; import org.junit.Test; public class SimpleCompilerTest { @@ -24,13 +31,43 @@ public void tearDown() { } @Test - public void Run() { + @Ignore + public void Run() throws UnsupportedEncodingException { new File("target/out").mkdir(); + JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); + URLClassLoader classLoader = (URLClassLoader)Thread.currentThread().getContextClassLoader(); + + // create classpath + StringBuilder path = new StringBuilder(); + for (URL url : ((URLClassLoader) classLoader).getURLs()) { + if (path.length() > 0) { + path.append(File.pathSeparator); + } + String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8"); + path.append(new File(decodedPath).getAbsolutePath()); + } + System.err.println(path); + + // compile + List options = Arrays.asList( + "-classpath", path.toString(), + "-s", "target/out", + "src/test/java/com/mysema/codegen/SimpleCompilerTest.java"); + int compilationResult = compiler.run(null, null, null, + options.toArray(new String[options.size()])); + if (compilationResult != 0) { + Assert.fail("Compilation Failed"); + } + } + + @Test + public void Run2() { + new File("target/out2").mkdir(); JavaCompiler compiler = new SimpleCompiler(); System.out.println(compiler.getClass().getName()); List options = new ArrayList(3); options.add("-s"); - options.add("target/out"); + options.add("target/out2"); options.add("src/test/java/com/mysema/codegen/SimpleCompilerTest.java"); int compilationResult = compiler.run(null, null, null, options.toArray(new String[options.size()])); @@ -38,5 +75,6 @@ public void Run() { Assert.fail("Compilation Failed"); } } + } diff --git a/src/test/java/com/mysema/codegen/SurefireBooterTest.java b/src/test/java/com/mysema/codegen/SurefireBooterTest.java new file mode 100644 index 0000000000..64240559b4 --- /dev/null +++ b/src/test/java/com/mysema/codegen/SurefireBooterTest.java @@ -0,0 +1,25 @@ +package com.mysema.codegen; + +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.jar.Manifest; + +import org.junit.Test; + +public class SurefireBooterTest { + + @Test + public void test() throws IOException { + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if (classLoader instanceof URLClassLoader) { + URLClassLoader cl = (URLClassLoader) classLoader; + if (cl.getURLs().length == 1 && cl.getURLs()[0].getPath().contains("surefirebooter")) { + URL url = cl.findResource("META-INF/MANIFEST.MF"); + Manifest manifest = new Manifest(url.openStream()); + System.out.println(manifest.getMainAttributes().getValue("Class-Path")); + } + } + } + +} From 92cbdaf86744684a22173871360c12380c55093b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 24 Jun 2012 20:50:28 +0300 Subject: [PATCH 0175/1968] fixed logging --- pom.xml | 2 +- src/main/java/com/mysema/codegen/SimpleCompiler.java | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c3f879339d..ae01288f5b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.0 + 0.5.1 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index 9239d5a88c..b4d62d3a2b 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -137,7 +137,6 @@ public int run(InputStream in, OutputStream out, OutputStream err, String... arg for (String arg : arguments) { args.add(arg); } - System.err.println(args); return compiler.run(in, out, err, args.toArray(new String[args.size()])); } From 6bdaa71de490b53a0212f1f32a09ce69a8420204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 30 Jul 2012 23:38:06 +0300 Subject: [PATCH 0176/1968] added Eclipse JDT based compilation --- pom.xml | 12 +- .../codegen/AbstractEvaluatorFactory.java | 119 +++++++ .../mysema/codegen/ECJEvaluatorFactory.java | 320 ++++++++++++++++++ .../com/mysema/codegen/EvaluatorFactory.java | 174 +--------- .../mysema/codegen/JDKEvaluatorFactory.java | 96 ++++++ .../mysema/codegen/ComplexEvaluationTest.java | 117 ++++++- .../codegen/ECJEvaluatorFactoryTest.java | 123 +++++++ ...Test.java => JDKEvaluatorFactoryTest.java} | 4 +- .../java/com/mysema/codegen/support/Cat.java | 159 +++++++++ template.mf | 1 + 10 files changed, 960 insertions(+), 165 deletions(-) create mode 100644 src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java create mode 100644 src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java create mode 100644 src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java create mode 100644 src/test/java/com/mysema/codegen/ECJEvaluatorFactoryTest.java rename src/test/java/com/mysema/codegen/{EvaluatorFactoryTest.java => JDKEvaluatorFactoryTest.java} (94%) create mode 100644 src/test/java/com/mysema/codegen/support/Cat.java diff --git a/pom.xml b/pom.xml index ae01288f5b..15dfd3acbb 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.1 + 0.5.2 Codegen Code generation and compilation for Java @@ -20,6 +20,7 @@ 4.01 3.0.1 11.0.2 + 3.7.2 @@ -28,6 +29,12 @@ guava 11.0.2 + + + org.eclipse.jdt.core.compiler + ecj + ${ecj.version} + @@ -47,7 +54,8 @@ validation-api 1.0.CR3 test - + + diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java new file mode 100644 index 0000000000..2a1af1f417 --- /dev/null +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2012 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.Map; + +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; + +/** + * @author tiwe + * + */ +public abstract class AbstractEvaluatorFactory implements EvaluatorFactory{ + + protected ClassLoader loader; + + /** + * @param source + * @param projection + * @param names + * @param types + * @param id + * @param constants + * @throws IOException + */ + protected abstract void compile(String source, ClassType projection, String[] names, Type[] types, + String id, Map constants) throws IOException; + + + @Override + public Evaluator createEvaluator(String source, Class projectionType, + String[] names, Class[] classes, Map constants) { + Type[] types = new Type[classes.length]; + for (int i = 0; i < types.length; i++) { + types[i] = new ClassType(TypeCategory.SIMPLE, classes[i]); + } + return createEvaluator(source, new ClassType(TypeCategory.SIMPLE, projectionType), names, + types, classes, constants); + } + + + /** + * Create a new Evaluator instance + * + * @param + * projection type + * @param source + * expression in Java source code form + * @param projection + * type of the source expression + * @param names + * names of the arguments + * @param types + * types of the arguments + * @param constants + * @return + */ + @SuppressWarnings("unchecked") + @Override + public Evaluator createEvaluator(String source, ClassType projection, String[] names, + Type[] types, Class[] classes, Map constants) { + try { + String id = toId(source, projection.getJavaClass(), types); + Class clazz; + try { + clazz = loader.loadClass(id); + } catch (ClassNotFoundException e) { + compile(source, projection, names, types, id, constants); + // reload + clazz = loader.loadClass(id); + } + + Object object = !constants.isEmpty() ? clazz.newInstance() : null; + + for (Map.Entry entry : constants.entrySet()) { + Field field = clazz.getField(entry.getKey()); + field.set(object, entry.getValue()); + } + + Method method = clazz.getMethod("eval", classes); + return new MethodEvaluator(method, object, (Class) projection.getJavaClass()); + } catch (ClassNotFoundException e) { + throw new CodegenException(e); + } catch (SecurityException e) { + throw new CodegenException(e); + } catch (NoSuchMethodException e) { + throw new CodegenException(e); + } catch (NoSuchFieldException e) { + throw new CodegenException(e); + } catch (InstantiationException e) { + throw new CodegenException(e); + } catch (IOException e) { + throw new CodegenException(e); + } catch (IllegalAccessException e) { + throw new CodegenException(e); + } + + } + + + protected String toId(String source, Class returnType, Type... types) { + StringBuilder b = new StringBuilder("Q"); + b.append("_").append(source.hashCode()); + b.append("_").append(returnType.getName().hashCode()); + for (Type type : types) { + b.append("_").append(type.getFullName().hashCode()); + } + return b.toString().replace('-', '0'); + } + +} diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java new file mode 100644 index 0000000000..f8436beb91 --- /dev/null +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -0,0 +1,320 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringWriter; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.StringTokenizer; + +import javax.tools.JavaFileObject; +import javax.tools.StandardLocation; + +import org.eclipse.jdt.core.compiler.CategorizedProblem; +import org.eclipse.jdt.core.compiler.CharOperation; +import org.eclipse.jdt.internal.compiler.ClassFile; +import org.eclipse.jdt.internal.compiler.CompilationResult; +import org.eclipse.jdt.internal.compiler.Compiler; +import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies; +import org.eclipse.jdt.internal.compiler.ICompilerRequestor; +import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy; +import org.eclipse.jdt.internal.compiler.IProblemFactory; +import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; +import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException; +import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; +import org.eclipse.jdt.internal.compiler.env.INameEnvironment; +import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer; +import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; +import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory; +import org.eclipse.jdt.internal.compiler.tool.EclipseFileManager; + +import com.google.common.base.Joiner; +import com.google.common.base.Strings; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.ByteStreams; +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.SimpleType; +import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; +import com.mysema.codegen.support.ClassUtils; + +/** + * EvaluatorFactory is a factory implementation for creating Evaluator instances + * + * @author tiwe + * + */ +public class ECJEvaluatorFactory extends AbstractEvaluatorFactory { + + private final MemFileManager fileManager; + + private final ClassLoader parentClassLoader; + + private final List problemList = Lists.newArrayList(); + + private final CompilerOptions compilerOptions; + + public static CompilerOptions getDefaultCompilerOptions() { + String javaSpecVersion = System.getProperty("java.specification.version"); + Map settings = Maps.newHashMap(); + settings.put(CompilerOptions.OPTION_Source, javaSpecVersion); + settings.put(CompilerOptions.OPTION_TargetPlatform, javaSpecVersion); + settings.put(CompilerOptions.OPTION_ReportDeprecation, CompilerOptions.IGNORE); + return new CompilerOptions(settings); + } + + public ECJEvaluatorFactory(ClassLoader parent) { + this(parent, getDefaultCompilerOptions()); + } + + public ECJEvaluatorFactory(ClassLoader parent, CompilerOptions compilerOptions) { + this.parentClassLoader = parent; + this.fileManager = new MemFileManager(parent, new EclipseFileManager(Locale.getDefault(), Charset.defaultCharset())); + this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); + this.compilerOptions = compilerOptions; + } + + protected void compile(String source, ClassType projectionType, String[] names, Type[] types, + String id, Map constants) throws IOException { + // create source + StringWriter writer = new StringWriter(); + JavaWriter javaw = new JavaWriter(writer); + SimpleType idType = new SimpleType(id, "", id); + javaw.beginClass(idType, null); + Parameter[] params = new Parameter[names.length]; + for (int i = 0; i < params.length; i++) { + params[i] = new Parameter(names[i], types[i]); + } + + for (Map.Entry entry : constants.entrySet()) { + Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); + javaw.publicField(type, entry.getKey()); + } + + if (constants.isEmpty()) { + javaw.beginStaticMethod(projectionType, "eval", params); + } else { + javaw.beginPublicMethod(projectionType, "eval", params); + } + javaw.append(source); + javaw.end(); + javaw.end(); + + // compile + final char[] targetContents = writer.toString().toCharArray(); + final String targetName = idType.getFullName(); + final ICompilationUnit[] targetCompilationUnits = new ICompilationUnit[] { new ICompilationUnit() { + @Override + public char[] getContents() { + return targetContents; + } + + @Override + public char[] getMainTypeName() { + int dot = targetName.lastIndexOf('.'); + if (dot > 0) + return targetName.substring(dot + 1).toCharArray(); + else + return targetName.toCharArray(); + } + + @Override + public char[][] getPackageName() { + StringTokenizer tok = new StringTokenizer(targetName, "."); + char[][] result = new char[tok.countTokens() - 1][]; + for (int j = 0; j < result.length; j++) { + result[j] = tok.nextToken().toCharArray(); + } + return result; + } + + @Override + public char[] getFileName() { + return CharOperation.concat(targetName.toCharArray(), ".java".toCharArray()); + } + } }; + + INameEnvironment env = new INameEnvironment() { + + private String join(char[][] compoundName, char separator) { + if (compoundName == null) { + return ""; + } else { + List parts = Lists.newArrayListWithCapacity(compoundName.length); + for (char[] part: compoundName) { + parts.add(new String(part)); + } + return Joiner.on(separator).join(parts); + } + } + + @Override + public NameEnvironmentAnswer findType(char[][] compoundTypeName) { + return findType(join(compoundTypeName, '.')); + } + + @Override + public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) { + return findType(CharOperation.arrayConcat(packageName, typeName)); + } + + private boolean isClass(String result) { + if (Strings.isNullOrEmpty(result)) + return false; + + // if it's the class we're compiling, then of course it's a class + if (result.equals(targetName)) { + return true; + } + InputStream is = null; + try { + // if this is a class we've already compiled, it's a class + is = loader.getResourceAsStream(result); + if (is == null) { + // use our normal class loader now... + String resourceName = result.replace('.', '/') + ".class"; + is = parentClassLoader.getResourceAsStream(resourceName); + if (is == null && !result.contains(".")) { + // we couldn't find the class, and it has no package; is it a core class? + is = parentClassLoader.getResourceAsStream("java/lang/" + resourceName); + } + } + if (is == null) { + return false; // if it's a class, we sure couldn't load it + } else { + return true; // we actually loaded the class, so it must be one + } + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException ex) {} + } + } + } + + @Override + public boolean isPackage(char[][] parentPackageName, char[] packageName) { + // if the parent is a class, the child can't be a package + String parent = join(parentPackageName, '.'); + if (isClass(parent)) + return false; + + // if the child is a class, it's not a package + String qualifiedName = (parent.isEmpty() ? "" : parent + ".") + new String(packageName); + return !isClass(qualifiedName); + } + + @Override + public void cleanup() { + } + + private NameEnvironmentAnswer findType(String className) { + String resourceName = className.replace('.', '/') + ".class"; + InputStream is = null; + try { + // we're only asking ECJ to compile a single class; we shouldn't need this + if (className.equals(targetName)) { + return new NameEnvironmentAnswer(targetCompilationUnits[0], null); + } + + is = loader.getResourceAsStream(resourceName); + if (is == null) { + is = parentClassLoader.getResourceAsStream(resourceName); + } + + if (is != null) { + ClassFileReader cfr = new ClassFileReader(ByteStreams.toByteArray(is), className.toCharArray(), true); + return new NameEnvironmentAnswer(cfr, null); + } else { + return null; + } + } catch (ClassFormatException ex) { + throw new RuntimeException(ex); + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + if (is != null) { + try { + is.close(); + } catch (IOException e) {} + } + } + + } + }; + + ICompilerRequestor requestor = new ICompilerRequestor() { + + @Override + public void acceptResult(CompilationResult result) { + if (result.hasErrors()) { + for (CategorizedProblem problem: result.getProblems()) { + if (problem.isError()) { + problemList.add(problem.getMessage()); + } + } + } else { + for (ClassFile clazz: result.getClassFiles()) { + try { + MemJavaFileObject jfo = (MemJavaFileObject) fileManager + .getJavaFileForOutput(StandardLocation.CLASS_OUTPUT, + new String(clazz.fileName()), JavaFileObject.Kind.CLASS, null); + OutputStream os = jfo.openOutputStream(); + os.write(clazz.getBytes()); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + } + }; + + problemList.clear(); + + IErrorHandlingPolicy policy = DefaultErrorHandlingPolicies.exitAfterAllProblems(); + IProblemFactory problemFactory = new DefaultProblemFactory(Locale.getDefault()); + + try { + //Compiler compiler = new Compiler(env, policy, getCompilerOptions(), requestor, problemFactory, true); + Compiler compiler = new Compiler(env, policy, compilerOptions, requestor, problemFactory); + compiler.compile(targetCompilationUnits); + if (!problemList.isEmpty()) { + StringBuilder sb = new StringBuilder(); + for (String problem: problemList) { + sb.append("\t").append(problem).append("\n"); + } + throw new CodegenException("Compilation of " + id + " failed:\n" + source + "\n" + sb.toString()); + } + } catch (RuntimeException ex) { + // if we encountered an IOException, unbox and throw it; + // if we encountered a ClassFormatException, box it as an IOException and throw it + // otherwise, it's a legit RuntimeException, + // not one of our checked exceptions boxed as unchecked; just rethrow + Throwable cause = ex.getCause(); + if (cause != null) { + if (cause instanceof IOException) + throw (IOException)cause; + else if (cause instanceof ClassFormatException) + throw new IOException(cause); + } + throw ex; + } + } + + public CompilerOptions getCompilerOptions() { + return compilerOptions; + } + + +} diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index f75d9fde6a..85e4212e2e 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -1,180 +1,38 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * To change this template, choose Tools | Templates + * and open the template in the editor. */ package com.mysema.codegen; -import java.io.IOException; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.io.Writer; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.URLClassLoader; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.tools.JavaCompiler; -import javax.tools.SimpleJavaFileObject; -import javax.tools.StandardLocation; -import javax.tools.ToolProvider; -import javax.tools.JavaCompiler.CompilationTask; - import com.mysema.codegen.model.ClassType; -import com.mysema.codegen.model.Parameter; -import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; -import com.mysema.codegen.model.TypeCategory; -import com.mysema.codegen.support.ClassUtils; +import java.util.Map; /** - * EvaluatorFactory is a factory implementation for creating Evaluator instances - * - * @author tiwe - * + * + * @author pgrant */ -public class EvaluatorFactory { - - private final MemFileManager fileManager; - - private final String classpath; - - private final List compilationOptions; - - private final JavaCompiler compiler; - - private final ClassLoader loader; - - public EvaluatorFactory(URLClassLoader parent) { - this(parent, ToolProvider.getSystemJavaCompiler()); - } - - public EvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { - this.fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); - this.compiler = compiler; - this.classpath = SimpleCompiler.getClassPath(parent); - this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); - this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); - } - - private void compile(String source, Type projectionType, String[] names, Type[] types, - String id, Map constants) throws IOException { - // create source - StringWriter writer = new StringWriter(); - JavaWriter javaw = new JavaWriter(writer); - SimpleType idType = new SimpleType(id, "", id); - javaw.beginClass(idType, null); - Parameter[] params = new Parameter[names.length]; - for (int i = 0; i < params.length; i++) { - params[i] = new Parameter(names[i], types[i]); - } +public interface EvaluatorFactory { - for (Map.Entry entry : constants.entrySet()) { - Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); - javaw.publicField(type, entry.getKey()); - } - - if (constants.isEmpty()) { - javaw.beginStaticMethod(projectionType, "eval", params); - } else { - javaw.beginPublicMethod(projectionType, "eval", params); - } - javaw.append(source); - javaw.end(); - javaw.end(); - - // compile - SimpleJavaFileObject javaFileObject = new MemSourceFileObject(id, writer.toString()); - Writer out = new StringWriter(); - - CompilationTask task = compiler.getTask(out, fileManager, null, compilationOptions, null, - Collections.singletonList(javaFileObject)); - if (!task.call().booleanValue()) { - throw new CodegenException("Compilation of " + source + " failed.\n" + out.toString()); - } - - } - - public Evaluator createEvaluator(String source, Class projectionType, - String[] names, Class[] classes, Map constants) { - Type[] types = new Type[classes.length]; - for (int i = 0; i < types.length; i++) { - types[i] = new ClassType(TypeCategory.SIMPLE, classes[i]); - } - return createEvaluator(source, new ClassType(TypeCategory.SIMPLE, projectionType), names, - types, classes, constants); - } + Evaluator createEvaluator(String source, Class projectionType, String[] names, Class[] classes, Map constants); /** * Create a new Evaluator instance - * + * * @param - * projection type + * projection type * @param source - * expression in Java source code form + * expression in Java source code form * @param projection - * type of the source expression + * type of the source expression * @param names - * names of the arguments + * names of the arguments * @param types - * types of the arguments + * types of the arguments * @param constants * @return */ - @SuppressWarnings("unchecked") - public Evaluator createEvaluator(String source, ClassType projection, String[] names, - Type[] types, Class[] classes, Map constants) { - try { - String id = toId(source, projection.getJavaClass(), types); - Class clazz; - try { - clazz = loader.loadClass(id); - } catch (ClassNotFoundException e) { - compile(source, projection, names, types, id, constants); - // reload - clazz = loader.loadClass(id); - } - - Object object = !constants.isEmpty() ? clazz.newInstance() : null; - - for (Map.Entry entry : constants.entrySet()) { - Field field = clazz.getField(entry.getKey()); - field.set(object, entry.getValue()); - } - - Method method = clazz.getMethod("eval", classes); - return new MethodEvaluator(method, object, (Class) projection.getJavaClass()); - } catch (ClassNotFoundException e) { - throw new CodegenException(e); - } catch (SecurityException e) { - throw new CodegenException(e); - } catch (NoSuchMethodException e) { - throw new CodegenException(e); - } catch (NoSuchFieldException e) { - throw new CodegenException(e); - } catch (UnsupportedEncodingException e) { - throw new CodegenException(e); - } catch (IOException e) { - throw new CodegenException(e); - } catch (InstantiationException e) { - throw new CodegenException(e); - } catch (IllegalAccessException e) { - throw new CodegenException(e); - } - - } - - protected String toId(String source, Class returnType, Type... types) { - StringBuilder b = new StringBuilder("Q"); - b.append("_").append(source.hashCode()); - b.append("_").append(returnType.getName().hashCode()); - for (Type type : types) { - b.append("_").append(type.getFullName().hashCode()); - } - return b.toString().replace('-', '0'); - } - + @SuppressWarnings(value = "unchecked") + Evaluator createEvaluator(String source, ClassType projection, String[] names, Type[] types, Class[] classes, Map constants); + } diff --git a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java new file mode 100644 index 0000000000..60231c44ea --- /dev/null +++ b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import java.io.IOException; +import java.io.StringWriter; +import java.io.Writer; +import java.net.URLClassLoader; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import javax.tools.JavaCompiler; +import javax.tools.JavaCompiler.CompilationTask; +import javax.tools.SimpleJavaFileObject; +import javax.tools.StandardLocation; +import javax.tools.ToolProvider; + +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.SimpleType; +import com.mysema.codegen.model.Type; +import com.mysema.codegen.model.TypeCategory; +import com.mysema.codegen.support.ClassUtils; + +/** + * JDKEvaluatorFactory is a factory implementation for creating Evaluator instances + * + * @author tiwe + * + */ +public class JDKEvaluatorFactory extends AbstractEvaluatorFactory { + + private final MemFileManager fileManager; + + private final String classpath; + + private final List compilationOptions; + + private final JavaCompiler compiler; + + public JDKEvaluatorFactory(URLClassLoader parent) { + this(parent, ToolProvider.getSystemJavaCompiler()); + } + + public JDKEvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { + this.fileManager = new MemFileManager(parent, compiler.getStandardFileManager(null, null, null)); + this.compiler = compiler; + this.classpath = SimpleCompiler.getClassPath(parent); + this.loader = fileManager.getClassLoader(StandardLocation.CLASS_OUTPUT); + this.compilationOptions = Arrays.asList("-classpath", classpath, "-g:none"); + } + + protected void compile(String source, ClassType projectionType, String[] names, Type[] types, + String id, Map constants) throws IOException { + // create source + StringWriter writer = new StringWriter(); + JavaWriter javaw = new JavaWriter(writer); + SimpleType idType = new SimpleType(id, "", id); + javaw.beginClass(idType, null); + Parameter[] params = new Parameter[names.length]; + for (int i = 0; i < params.length; i++) { + params[i] = new Parameter(names[i], types[i]); + } + + for (Map.Entry entry : constants.entrySet()) { + Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); + javaw.publicField(type, entry.getKey()); + } + + if (constants.isEmpty()) { + javaw.beginStaticMethod(projectionType, "eval", params); + } else { + javaw.beginPublicMethod(projectionType, "eval", params); + } + javaw.append(source); + javaw.end(); + javaw.end(); + + // compile + SimpleJavaFileObject javaFileObject = new MemSourceFileObject(id, writer.toString()); + Writer out = new StringWriter(); + + CompilationTask task = compiler.getTask(out, fileManager, null, compilationOptions, null, + Collections.singletonList(javaFileObject)); + if (!task.call().booleanValue()) { + throw new CodegenException("Compilation of " + source + " failed.\n" + out.toString()); + } + + } + +} diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index b6ac331b27..6a9d552946 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -7,7 +7,6 @@ import static org.junit.Assert.*; -import java.net.URLClassLoader; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -18,11 +17,11 @@ import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; +import com.mysema.codegen.support.Cat; public class ComplexEvaluationTest { - private EvaluatorFactory factory = new EvaluatorFactory((URLClassLoader) getClass() - .getClassLoader()); + private EvaluatorFactory factory = new ECJEvaluatorFactory(getClass().getClassLoader()); @Test @SuppressWarnings("unchecked") @@ -49,4 +48,116 @@ public void Complex() { assertEquals(Arrays.asList("2", "4"), evaluator.evaluate(a_, b_)); } + @Test + @SuppressWarnings("unchecked") + public void ComplexClassLoading() { + ClassType resultType = new ClassType(TypeCategory.LIST, List.class, Types.OBJECTS); + StringBuilder source = new StringBuilder(); + source.append("java.util.List rv = new java.util.ArrayList();\n"); + source.append("for (com.mysema.codegen.support.Cat cat : (java.util.List)cat_){\n"); + source.append("for (com.mysema.codegen.support.Cat otherCat : (java.util.List)otherCat_){\n"); + source.append("rv.add(new Object[]{cat,otherCat});\n"); + source.append("}\n"); + source.append("}\n"); + source.append("return rv;\n"); + + Cat fuzzy = new Cat("fuzzy"); + Cat spot = new Cat("spot"); + Cat mittens = new Cat("mittens"); + Cat sparkles = new Cat("sparkles"); + + List a_ = Arrays.asList(fuzzy, spot); + List b_ = Arrays.asList(mittens, sparkles); + + ClassType argType = new ClassType(TypeCategory.LIST, List.class, new ClassType(Cat.class)); + Evaluator evaluator = factory.createEvaluator(source.toString(), resultType, + new String[] { "cat_", "otherCat_" }, new Type[] { argType, argType }, new Class[] { + List.class, List.class }, Collections. emptyMap()); + + Object[][] expResults = { {fuzzy, mittens}, {fuzzy, sparkles}, {spot, mittens}, {spot, sparkles} }; + List result = evaluator.evaluate(a_, b_); + assertEquals(expResults.length, result.size()); + + for (int i = 0; i < expResults.length; i++) { + assertEquals(expResults[i].length, result.get(i).length); + for (int j = 0; j < expResults[i].length; j++) { + assertEquals(expResults[i][j], result.get(i)[j]); + } + } + } + + @Test(expected=CodegenException.class) + @SuppressWarnings("unchecked") + public void ComplexClassLoadingFailure() { + ClassType resultType = new ClassType(TypeCategory.LIST, List.class, Types.STRING); + StringBuilder source = new StringBuilder(); + source.append("java.util.List rv = (java.util.List) new java.util.ArrayList();\n"); + source.append("for (String a : a_){\n"); + source.append(" for (String b : b_){\n"); + source.append(" if (a.equals(b)){\n"); + source.append(" rv.add(a);\n"); + source.append(" }\n"); + source.append(" }\n"); + source.append("}\n"); + source.append("return rv;"); + + Evaluator evaluator = factory.createEvaluator(source.toString(), resultType, + new String[] { "a_", "b_" }, new Type[] { resultType, resultType }, new Class[] { + List.class, List.class }, Collections. emptyMap()); + + List a_ = Arrays.asList("1", "2", "3", "4"); + List b_ = Arrays.asList("2", "4", "6", "8"); + + assertEquals(Arrays.asList("2", "4"), evaluator.evaluate(a_, b_)); + } + + @Test + @SuppressWarnings("unchecked") + public void ComplexPrimitiveType() { + ClassType resultType = new ClassType(TypeCategory.LIST, List.class, Types.BOOLEAN); + StringBuilder source = new StringBuilder(); + source.append("java.util.List rv = new java.util.ArrayList();\n"); + source.append("for (boolean a : a_){\n"); + source.append(" for (boolean b : b_){\n"); + source.append(" if (a == b){\n"); + source.append(" rv.add(a);\n"); + source.append(" }\n"); + source.append(" }\n"); + source.append("}\n"); + source.append("return rv;"); + + Evaluator evaluator = factory.createEvaluator(source.toString(), resultType, + new String[] { "a_", "b_" }, new Type[] { resultType, resultType }, new Class[] { + List.class, List.class }, Collections. emptyMap()); + + List a_ = Arrays.asList(true, true, true); + List b_ = Arrays.asList(false, false, true); + + assertEquals(Arrays.asList(true, true, true), evaluator.evaluate(a_, b_)); + } + + @Test + @SuppressWarnings("unchecked") + public void ComplexEmbeddedClass() { + ClassType resultType = new ClassType(TypeCategory.LIST, List.class, Types.BOOLEAN); + StringBuilder source = new StringBuilder(); + source.append("java.util.List rv = new java.util.ArrayList();\n"); + source.append("for (boolean a : a_){\n"); + source.append(" for (boolean b : b_){\n"); + source.append(" if (a == b && new TestEmbedded().DO_RETURN()){\n"); + source.append(" rv.add(a);\n"); + source.append(" }\n"); + source.append(" }\n"); + source.append("}\n"); + source.append("return rv;} private static class TestEmbedded { public TestEmbedded() {} public boolean DO_RETURN() { return true; } "); + + Evaluator evaluator = factory.createEvaluator(source.toString(), resultType, + new String[] { "a_", "b_" }, new Type[] { resultType, resultType }, new Class[] { + List.class, List.class }, Collections. emptyMap()); + + List a_ = Arrays.asList(true, true, true); + List b_ = Arrays.asList(false, false, true); + + assertEquals(Arrays.asList(true, true, true), evaluator.evaluate(a_, b_)); + } } diff --git a/src/test/java/com/mysema/codegen/ECJEvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/ECJEvaluatorFactoryTest.java new file mode 100644 index 0000000000..a3f33c5d92 --- /dev/null +++ b/src/test/java/com/mysema/codegen/ECJEvaluatorFactoryTest.java @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2010 Mysema Ltd. + * All rights reserved. + * + */ +package com.mysema.codegen; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class ECJEvaluatorFactoryTest { + + public static class TestEntity { + + private final String name; + + public TestEntity(String name) { + this.name = name; + } + + public String getName() { + return name; + } + + } + + private EvaluatorFactory factory; + + private List names = Arrays.asList("a", "b"); + + private List> ints = Arrays.> asList(int.class, int.class); + + private List> strings = Arrays.> asList(String.class, String.class); + + private List> string_int = Arrays.> asList(String.class, int.class); + + @Before + public void setUp() throws IOException { + factory = new ECJEvaluatorFactory(getClass().getClassLoader()); + } + + @Test + public void Simple() { + for (String expr : Arrays.asList("a.equals(b)", "a.startsWith(b)", "a.equalsIgnoreCase(b)")) { + long start = System.currentTimeMillis(); + evaluate(expr, boolean.class, names, strings, Arrays.asList("a", "b"), + Collections. emptyMap()); + long duration = System.currentTimeMillis() - start; + System.err.println(expr + " took " + duration + "ms\n"); + } + + for (String expr : Arrays.asList("a != b", "a < b", "a > b", "a <= b", "a >= b")) { + long start = System.currentTimeMillis(); + evaluate(expr, boolean.class, names, ints, Arrays.asList(0, 1), + Collections. emptyMap()); + long duration = System.currentTimeMillis() - start; + System.err.println(expr + " took " + duration + "ms\n"); + } + } + + @Test + public void Results() { + // String + String + test("a + b", String.class, names, strings, Arrays.asList("Hello ", "World"), "Hello World"); + + // String + int + test("a.substring(b)", String.class, names, string_int, + Arrays. asList("Hello World", 6), "World"); + + // int + int + test("a + b", int.class, names, ints, Arrays.asList(1, 2), 3); + } + + @Test + public void WithConstants() { + Map constants = new HashMap(); + constants.put("x", "Hello World"); + List> types = Arrays.> asList(String.class); + List names = Arrays.asList("a"); + assertEquals( + Boolean.TRUE, + evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello World"), + constants)); + assertEquals( + Boolean.FALSE, + evaluate("a.equals(x)", boolean.class, names, types, Arrays.asList("Hello"), + constants)); + } + + @Test + public void CustomType() { + test("a.getName()", String.class, Collections.singletonList("a"), + Collections.> singletonList(TestEntity.class), + Arrays.asList(new TestEntity("Hello World")), "Hello World"); + } + + private void test(String source, Class projectionType, List names, + List> types, List args, Object expectedResult) { + Assert.assertEquals( + expectedResult, + evaluate(source, projectionType, names, types, args, + Collections. emptyMap())); + } + + private Object evaluate(String source, Class projectionType, List names, + List> types, List args, Map constants) { + Evaluator evaluator = factory.createEvaluator("return " + source + ";", projectionType, + names.toArray(new String[names.size()]), types.toArray(new Class[types.size()]), + constants); + return evaluator.evaluate(args.toArray()); + } + +} diff --git a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java b/src/test/java/com/mysema/codegen/JDKEvaluatorFactoryTest.java similarity index 94% rename from src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java rename to src/test/java/com/mysema/codegen/JDKEvaluatorFactoryTest.java index f7d3b27a29..b12fb8f736 100644 --- a/src/test/java/com/mysema/codegen/EvaluatorFactoryTest.java +++ b/src/test/java/com/mysema/codegen/JDKEvaluatorFactoryTest.java @@ -19,7 +19,7 @@ import org.junit.Before; import org.junit.Test; -public class EvaluatorFactoryTest { +public class JDKEvaluatorFactoryTest { public static class TestEntity { @@ -47,7 +47,7 @@ public String getName() { @Before public void setUp() throws IOException { - factory = new EvaluatorFactory((URLClassLoader) getClass().getClassLoader()); + factory = new JDKEvaluatorFactory((URLClassLoader) getClass().getClassLoader()); } @Test diff --git a/src/test/java/com/mysema/codegen/support/Cat.java b/src/test/java/com/mysema/codegen/support/Cat.java new file mode 100644 index 0000000000..367f79f7e1 --- /dev/null +++ b/src/test/java/com/mysema/codegen/support/Cat.java @@ -0,0 +1,159 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.mysema.codegen.support; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Map; + +public class Cat { + + private int breed; + + private java.sql.Date dateField; + + public enum Color { + BLUE, GREEN, BROWN + } + private Color eyecolor; + + private List kittens; + + private Cat[] kittenArray; + + private Map kittensByName; + + private Cat mate; + + private String stringAsSimple; + + private java.sql.Time timeField; + + private String name; + + public void setName(String name) { + this.name = name; + } + + private Date birthdate; + private int id; + + public Cat() { + this.kittensByName = Collections.emptyMap(); + } + + public Cat(String name) { + Cat kitten = new Cat(); + this.kittens = Arrays.asList(kitten); + this.kittenArray = new Cat[]{kitten}; + this.kittensByName = Collections.singletonMap("Kitty", kitten); + this.name = name; + } + + public Cat(String name, String kittenName){ + this(name); + kittens.get(0).setName(kittenName); + } + + public Cat(String name, int id) { + this(name); + this.id = id; + } + + public Cat(String name, int id, Date birthdate) { + this(name, id); + this.birthdate = new Date(birthdate.getTime()); + this.dateField = new java.sql.Date(birthdate.getTime()); + this.timeField = new java.sql.Time(birthdate.getTime()); + } + + public int getBreed() { + return breed; + } + + public java.sql.Date getDateField() { + return dateField; + } + + public Color getEyecolor() { + return eyecolor; + } + + public List getKittens() { + return kittens; + } + + public Map getKittensByName() { + return kittensByName; + } + + public Cat getMate() { + return mate; + } + + public String getStringAsSimple() { + return stringAsSimple; + } + + public java.sql.Time getTimeField() { + return timeField; + } + + public void setBreed(int breed) { + this.breed = breed; + } + + public void setDateField(java.sql.Date dateField) { + this.dateField = new java.sql.Date(dateField.getTime()); + } + + public void setEyecolor(Color eyecolor) { + this.eyecolor = eyecolor; + } + + public void setKittens(List kittens) { + this.kittens = kittens; + } + + public void setKittensByName(Map kittensByName) { + this.kittensByName = kittensByName; + } + + public void setMate(Cat mate) { + this.mate = mate; + } + + public void setStringAsSimple(String stringAsSimple) { + this.stringAsSimple = stringAsSimple; + } + + public void setTimeField(java.sql.Time timeField) { + this.timeField = timeField; + } + + public Cat[] getKittenArray() { + return kittenArray; + } + + public void setKittenArray(Cat[] kittenArray) { + this.kittenArray = kittenArray.clone(); + } + + public String toString() { + return name; + } + +} diff --git a/template.mf b/template.mf index 2b838ec97b..adc2cf5b19 100644 --- a/template.mf +++ b/template.mf @@ -5,4 +5,5 @@ Bundle-ManifestVersion: 2 Import-Template: javax.annotation.*;version="0", javax.tools.*;version="0", + org.eclipse.jdt.*;version="3.7.2", com.google.common.*;version="${guava.version}" From f1710fa0608ff428afb45d1b127092dfa65281e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 4 Sep 2012 12:40:14 +0300 Subject: [PATCH 0177/1968] improved super handling --- pom.xml | 2 +- src/main/java/com/mysema/codegen/model/TypeSuper.java | 7 ++++++- .../java/com/mysema/codegen/model/TypeSuperTest.java | 9 +++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 15dfd3acbb..a998697a2a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.2 + 0.5.3 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index bf1a61d1be..47ee0f0468 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -41,7 +41,12 @@ public String getGenericName(boolean asArgType) { @Override public String getGenericName(boolean asArgType, Set packages, Set classes) { if (!asArgType) { - return "? super " + superType.getGenericName(true, packages, classes); + if (superType instanceof TypeExtends) { + return "?"; + } else { + return "? super " + superType.getGenericName(true, packages, classes); + } + } else { return super.getGenericName(asArgType, packages, classes); } diff --git a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java index d5c47caf97..5030a12210 100644 --- a/src/test/java/com/mysema/codegen/model/TypeSuperTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeSuperTest.java @@ -20,5 +20,14 @@ public void GetGenericName() { public void GetGenericName_As_ArgType() { assertEquals("java.lang.Object", new TypeSuper(Types.STRING).getGenericName(true)); } + + @Test + public void Comparable() { + // T extends Comparable + Type comparable = new ClassType(Comparable.class); + Type type = new TypeExtends("T", + new SimpleType(comparable, new TypeSuper(new TypeExtends("T", comparable)))); + assertEquals("? extends java.lang.Comparable", type.getGenericName(false)); + } } From 725b1ecd6f223589fe69da5fcd5d46f4c119e951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 5 Sep 2012 18:09:03 +0300 Subject: [PATCH 0178/1968] changed parent, artifactId and added scm data --- pom.xml | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index a998697a2a..7abf5cc07f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,15 +7,30 @@ 0.5.3 Codegen Code generation and compilation for Java + com.mysema.home mysema-source - 0.2.2 + 0.3.0 + jar 2010 + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + scm:git:git@github.com:mysema/codegen.git + git@github.com:mysema/codegen.git + + 4.01 3.0.1 @@ -87,6 +102,7 @@ + com.springsource.repository.bundles.release http://repository.springsource.com/maven/bundles/release - + --> From 430135aa6fdeb1d57d15096127fb5eb7e3b60d68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 14 Sep 2012 10:28:21 +0300 Subject: [PATCH 0179/1968] fixed raw name handling for inner classes in Scala --- pom.xml | 2 +- .../java/com/mysema/codegen/ScalaWriter.java | 5 +++++ .../com/mysema/codegen/InnerClassesTest.java | 20 +++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7abf5cc07f..dc3d62fe5a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.3 + 0.5.4 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 9d0e5b2ab2..cf789d292d 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -370,6 +370,11 @@ public String getRawName(Type type) { fullName = StringUtils.capitalize(fullName); } String packageName = type.getPackageName(); + if (packageName != null && packageName.length() > 0) { + fullName = packageName + "." + fullName.substring(packageName.length()+1).replace('.', '$'); + } else { + fullName = fullName.replace('.', '$'); + } String rv = fullName; if (type.isPrimitive() && packageName.isEmpty()) { rv = Character.toUpperCase(rv.charAt(0)) + rv.substring(1); diff --git a/src/test/java/com/mysema/codegen/InnerClassesTest.java b/src/test/java/com/mysema/codegen/InnerClassesTest.java index 6a4c11d1e6..b01139fa30 100644 --- a/src/test/java/com/mysema/codegen/InnerClassesTest.java +++ b/src/test/java/com/mysema/codegen/InnerClassesTest.java @@ -1,5 +1,7 @@ package com.mysema.codegen; +import static org.junit.Assert.*; + import java.io.IOException; import java.io.StringWriter; @@ -28,5 +30,23 @@ public void DirectParameter() throws IOException { System.err.println(str.toString()); } + + @Test + public void Java() { + StringWriter str = new StringWriter(); + JavaWriter writer = new JavaWriter(str); + + assertEquals("com.mysema.codegen.InnerClassesTest.Entity", + writer.getRawName(new ClassType(Entity.class))); + } + + @Test + public void Scala() { + StringWriter str = new StringWriter(); + ScalaWriter writer = new ScalaWriter(str); + + assertEquals("com.mysema.codegen.InnerClassesTest$Entity", + writer.getRawName(new ClassType(Entity.class))); + } } From 1c406677e1f9a655047aacdb7e9151479187ab20 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Sun, 21 Oct 2012 21:58:56 +0200 Subject: [PATCH 0180/1968] Normalize dynamically created classes by CGLIB to their canonical form This fixes following issue (occuring in QueryDSL): Q_2045977532_1275614662_1275614662.java:3: error: cannot find symbol public example.ExampleClass$$EnhancerByMockitoWithCGLIB$$45c738ca a1; ^ symbol: class ExampleClass$$EnhancerByMockitoWithCGLIB$$45c738ca location: package example As this class is dynamically generated, it can't be found at compile-time. Because it basically is a proxy for the underlying object, use its super class as normalized form, which solves the compile error. --- .../java/com/mysema/codegen/support/ClassUtils.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 877b27859e..9ecf7d17a3 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -66,9 +66,15 @@ public static Class normalize(Class clazz) { return Collection.class; } else if (Map.class.isAssignableFrom(clazz)) { return Map.class; - } else { - return clazz; + // check for CGLIB generated classes + } else if (clazz.getName().contains("$$")) { + Class zuper = clazz.getSuperclass(); + if (zuper != null && !Object.class.equals(zuper)) { + return zuper; + } } + + return clazz; } private ClassUtils() { From 489e6e9b7e925c08e62c7efe1912cb76cc9a5088 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 22 Oct 2012 08:35:51 +0300 Subject: [PATCH 0181/1968] updated version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dc3d62fe5a..c5e6185045 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.4 + 0.5.5 Codegen Code generation and compilation for Java From 351b70f7d20694cd0dad6964bedb7d30c3000d4e Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 22 Oct 2012 20:02:48 +0200 Subject: [PATCH 0182/1968] Fix AbstractEvaluatorFactory.toId() not taking into account constants' types AbstractEvaluatorFactory ignored the types of constants when generating a classname. As these generated classes get cached, this could result in stack traces like these: java.lang.IllegalArgumentException: Can not set com.mysema.codegen.ComplexEvaluationTest$SuperCat field Q_0606084786_65821278_65821278.a1 to com.mysema.codegen.support.Cat at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164) at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168) at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) at java.lang.reflect.Field.set(Field.java:680) at com.mysema.codegen.AbstractEvaluatorFactory.createEvaluator(AbstractEvaluatorFactory.java:86) --- .../codegen/AbstractEvaluatorFactory.java | 8 +++- .../mysema/codegen/ComplexEvaluationTest.java | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index 2a1af1f417..d359ca1c2f 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -13,6 +13,7 @@ import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; +import java.util.Collection; /** * @author tiwe @@ -68,7 +69,7 @@ public Evaluator createEvaluator(String source, Class projec public Evaluator createEvaluator(String source, ClassType projection, String[] names, Type[] types, Class[] classes, Map constants) { try { - String id = toId(source, projection.getJavaClass(), types); + String id = toId(source, projection.getJavaClass(), types, constants.values()); Class clazz; try { clazz = loader.loadClass(id); @@ -106,13 +107,16 @@ public Evaluator createEvaluator(String source, ClassType projection, Str } - protected String toId(String source, Class returnType, Type... types) { + protected String toId(String source, Class returnType, Type[] types, Collection constants) { StringBuilder b = new StringBuilder("Q"); b.append("_").append(source.hashCode()); b.append("_").append(returnType.getName().hashCode()); for (Type type : types) { b.append("_").append(type.getFullName().hashCode()); } + for (Object constant : constants) { + b.append("_").append(constant.getClass().getName().hashCode()); + } return b.toString().replace('-', '0'); } diff --git a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java index 6a9d552946..12af85400a 100644 --- a/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java +++ b/src/test/java/com/mysema/codegen/ComplexEvaluationTest.java @@ -160,4 +160,49 @@ public void ComplexEmbeddedClass() { assertEquals(Arrays.asList(true, true, true), evaluator.evaluate(a_, b_)); } + + public static class SuperCat extends Cat { + private SuperCat(String name) { + super(name); + } + } + + @Test + public void ComplexDifferentConstants() { + ClassType resultType = new ClassType(TypeCategory.LIST, List.class, new ClassType(Cat.class)); + String source = new StringBuilder() + .append("java.util.List rv = new java.util.ArrayList();\n") + .append("for (com.mysema.codegen.support.Cat cat : (java.util.List)cat_){\n") + .append("if (cat.equals(a1)) {\n") + .append("rv.add(cat);\n") + .append("}\n") + .append("}\n") + .append("return rv;\n") + .toString(); + + List cats = Arrays.asList(new Cat("fuzzy"), new Cat("spot")); + String[] names = new String[] { "cat_" }; + Type[] types = new Type[] { new ClassType(TypeCategory.LIST, List.class, new ClassType(Cat.class)) }; + Class[] classes = new Class[] { List.class }; + + // first pass + factory.createEvaluator( + source, + resultType, + names, + types, + classes, + Collections.singletonMap("a1", (Object) new SuperCat("superMittens")) + ).evaluate(cats); + + // second pass + factory.createEvaluator( + source, + resultType, + names, + types, + classes, + Collections.singletonMap("a1", (Object) new Cat("normalMittens")) + ).evaluate(cats); + } } From d0c21f6ba0bd02243265c9b95d1954ab005a4197 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 1 Nov 2012 21:36:10 +0200 Subject: [PATCH 0183/1968] updated version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c5e6185045..e114565281 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.5 + 0.5.6 Codegen Code generation and compilation for Java From 0cbed2c7572e5b9dd34c10206fbecda7e72135b2 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Thu, 22 Nov 2012 23:45:18 +0100 Subject: [PATCH 0184/1968] Fix codegen when using SureFire Booter combined with JaCoCo When using codegen with SureFire Booter + JaCoCo, codegen was unable to determine the correct classpath, as its check for SureFire Booter was too strict (both the surefirebooter and jacoco jars were on the cp, while the code was only expecting surefirebooter). Fix this in a more generic way by checking all classloader URLs for surefirebooter. --- .../java/com/mysema/codegen/SimpleCompiler.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index b4d62d3a2b..ff91c8fa4f 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -41,11 +41,21 @@ public class SimpleCompiler implements JavaCompiler { private static final Joiner pathJoiner = Joiner.on(File.pathSeparator); - + + private static boolean isSureFireBooter(URLClassLoader cl) { + for (URL url : cl.getURLs()) { + if (url.getPath().contains("surefirebooter")) { + return true; + } + } + + return false; + } + public static String getClassPath(URLClassLoader cl) { try { List paths = new ArrayList(); - if (cl.getURLs().length == 1 && cl.getURLs()[0].getPath().contains("surefirebooter")) { + if (isSureFireBooter(cl)) { // extract MANIFEST.MF Class-Path entry, since the Java Compiler doesn't handle // manifest only jars in the classpath correctly URL url = cl.findResource("META-INF/MANIFEST.MF"); From 439dbe5a31f7caa6f8d850879b1a0e7faeb1b870 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 25 Nov 2012 00:24:59 +0200 Subject: [PATCH 0185/1968] updated version to 0.5.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e114565281..0aae483f77 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.6 + 0.5.7 Codegen Code generation and compilation for Java From f8cb7b97a5abed893a0f5e5590dec6dafcd6204c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 18 Dec 2012 23:53:14 +0200 Subject: [PATCH 0186/1968] improve reflection usage --- .../codegen/AbstractEvaluatorFactory.java | 3 +- .../mysema/codegen/support/ClassUtils.java | 51 ++++++++++--------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index d359ca1c2f..6d0746db7d 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -108,7 +108,8 @@ public Evaluator createEvaluator(String source, ClassType projection, Str protected String toId(String source, Class returnType, Type[] types, Collection constants) { - StringBuilder b = new StringBuilder("Q"); + StringBuilder b = new StringBuilder(128); + b.append("Q"); b.append("_").append(source.hashCode()); b.append("_").append(returnType.getName().hashCode()); for (Type type : types) { diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 9ecf7d17a3..19d5acce1e 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -17,43 +17,49 @@ */ public final class ClassUtils { + private static final Set JAVA_LANG = Collections.singleton("java.lang"); + public static String getName(Class cl) { - return getName(cl, Collections.singleton("java.lang"), Collections. emptySet()); + return getName(cl, JAVA_LANG, Collections. emptySet()); } public static String getFullName(Class cl) { - if (cl.isArray()) { - return getFullName(cl.getComponentType()) + "[]"; - } else { - return cl.getCanonicalName(); - } + return cl.getCanonicalName(); } public static String getPackageName(Class cl) { - if (cl.isArray()) { - return getPackageName(cl.getComponentType()); - } else if (cl.getPackage() != null) { - return cl.getPackage().getName(); + while (cl.isArray()) { + cl = cl.getComponentType(); + } + final String name = cl.getName(); + final int i = name.lastIndexOf('.'); + if (i > 0) { + return name.substring(0, i); } else { return ""; } } - + public static String getName(Class cl, Set packages, Set classes) { if (cl.isArray()) { return getName(cl.getComponentType(), packages, classes) + "[]"; - } else if (cl.getPackage() == null - || packages.contains(cl.getPackage().getName()) - || classes.contains(cl.getCanonicalName()) - || classes.contains(cl.getCanonicalName().substring(0, - cl.getName().lastIndexOf('.')))) { - if (cl.getPackage() != null) { - return cl.getCanonicalName().substring(cl.getPackage().getName().length() + 1); - } else { - return cl.getCanonicalName(); - } + } + if (cl.getName().indexOf('$') > 0) { + return getName(cl.getDeclaringClass(), packages, classes) + "." + cl.getSimpleName(); + } + final String canonicalName = cl.getName(); + final int i = canonicalName.lastIndexOf('.'); + if (i == -1) { + return canonicalName; } else { - return cl.getCanonicalName(); + final String packageName = canonicalName.substring(0, i); + if (packages.contains(packageName) + || classes.contains(canonicalName) + || classes.contains(canonicalName.substring(0, canonicalName.lastIndexOf('.')))) { + return canonicalName.substring(packageName.length() + 1); + } else { + return canonicalName; + } } } @@ -73,7 +79,6 @@ public static Class normalize(Class clazz) { return zuper; } } - return clazz; } From d7177866361b00055f711433bc52bd5c993c58ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Dec 2012 00:19:10 +0200 Subject: [PATCH 0187/1968] improve reflection usage --- .../codegen/AbstractEvaluatorFactory.java | 30 +++++++++++-------- .../mysema/codegen/support/ClassUtils.java | 10 ++++++- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index 6d0746db7d..30cc76f7fd 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -8,12 +8,13 @@ import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Collection; import java.util.Map; +import java.util.WeakHashMap; import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; -import java.util.Collection; /** * @author tiwe @@ -21,6 +22,8 @@ */ public abstract class AbstractEvaluatorFactory implements EvaluatorFactory{ + private final Map> cache = new WeakHashMap>(); + protected ClassLoader loader; /** @@ -70,17 +73,22 @@ public Evaluator createEvaluator(String source, ClassType projection, Str Type[] types, Class[] classes, Map constants) { try { String id = toId(source, projection.getJavaClass(), types, constants.values()); - Class clazz; - try { - clazz = loader.loadClass(id); - } catch (ClassNotFoundException e) { - compile(source, projection, names, types, id, constants); - // reload - clazz = loader.loadClass(id); + Class clazz = cache.get(id); + + if (clazz == null) { + try { + clazz = loader.loadClass(id); + } catch (ClassNotFoundException e) { + compile(source, projection, names, types, id, constants); + // reload + clazz = loader.loadClass(id); + } + cache.put(id, clazz); } - + Object object = !constants.isEmpty() ? clazz.newInstance() : null; - + + // TODO : improve this for (Map.Entry entry : constants.entrySet()) { Field field = clazz.getField(entry.getKey()); field.set(object, entry.getValue()); @@ -103,10 +111,8 @@ public Evaluator createEvaluator(String source, ClassType projection, Str } catch (IllegalAccessException e) { throw new CodegenException(e); } - } - protected String toId(String source, Class returnType, Type[] types, Collection constants) { StringBuilder b = new StringBuilder(128); b.append("Q"); diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 19d5acce1e..f14439c3c2 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -24,7 +24,15 @@ public static String getName(Class cl) { } public static String getFullName(Class cl) { - return cl.getCanonicalName(); +// return cl.getCanonicalName(); + if (cl.isArray()) { + return getFullName(cl.getComponentType()) + "[]"; + } + final String name = cl.getName(); + if (name.indexOf('$') > 0) { + return getFullName(cl.getDeclaringClass()) + "." + cl.getSimpleName(); + } + return name; } public static String getPackageName(Class cl) { From 61f1aa4614da9110340e1883c4190d0816b61591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Dec 2012 10:40:12 +0200 Subject: [PATCH 0188/1968] add copyright headers --- .../mysema/codegen/AbstractCodeWriter.java | 14 +++++++--- .../codegen/AbstractEvaluatorFactory.java | 14 +++++++--- .../java/com/mysema/codegen/CodeWriter.java | 12 +++++++-- .../com/mysema/codegen/CodegenException.java | 12 +++++++-- .../mysema/codegen/ECJEvaluatorFactory.java | 12 +++++++-- .../java/com/mysema/codegen/Evaluator.java | 12 +++++++-- .../com/mysema/codegen/EvaluatorFactory.java | 27 ++++++++++++++++--- .../mysema/codegen/JDKEvaluatorFactory.java | 12 +++++++-- .../java/com/mysema/codegen/JavaWriter.java | 14 +++++++--- .../com/mysema/codegen/LocationAndKind.java | 14 +++++++--- .../com/mysema/codegen/MemClassLoader.java | 14 +++++++--- .../com/mysema/codegen/MemFileManager.java | 14 +++++++--- .../mysema/codegen/MemFileSystemRegistry.java | 14 +++++++--- .../com/mysema/codegen/MemJavaFileObject.java | 14 +++++++--- .../mysema/codegen/MemSourceFileObject.java | 13 ++++++--- .../com/mysema/codegen/MethodEvaluator.java | 12 ++++++++- .../java/com/mysema/codegen/ScalaWriter.java | 13 +++++++++ .../com/mysema/codegen/SimpleCompiler.java | 12 +++++++-- .../java/com/mysema/codegen/StringUtils.java | 13 +++++++++ src/main/java/com/mysema/codegen/Symbols.java | 12 +++++++-- .../com/mysema/codegen/model/ClassType.java | 14 +++++++--- .../com/mysema/codegen/model/Constructor.java | 14 +++++++--- .../com/mysema/codegen/model/Parameter.java | 14 +++++++--- .../com/mysema/codegen/model/SimpleType.java | 14 +++++++--- .../java/com/mysema/codegen/model/Type.java | 14 +++++++--- .../com/mysema/codegen/model/TypeAdapter.java | 14 +++++++--- .../mysema/codegen/model/TypeCategory.java | 14 +++++++--- .../com/mysema/codegen/model/TypeExtends.java | 14 +++++++--- .../com/mysema/codegen/model/TypeSuper.java | 14 +++++++--- .../java/com/mysema/codegen/model/Types.java | 14 +++++++--- .../mysema/codegen/model/package-info.java | 8 ------ .../java/com/mysema/codegen/package-info.java | 11 -------- .../mysema/codegen/support/ClassUtils.java | 14 +++++++--- .../codegen/support/ScalaSyntaxUtils.java | 20 ++++++++++++-- 34 files changed, 362 insertions(+), 105 deletions(-) delete mode 100644 src/main/java/com/mysema/codegen/model/package-info.java delete mode 100644 src/main/java/com/mysema/codegen/package-info.java diff --git a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java index 0ffd85a63f..88adb83655 100644 --- a/src/main/java/com/mysema/codegen/AbstractCodeWriter.java +++ b/src/main/java/com/mysema/codegen/AbstractCodeWriter.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index 30cc76f7fd..9faac369ef 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2012 Mysema Ltd. - * All rights reserved. - * + * Copyright 2012, Mysema Ltd + * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index 2bf61cd4bf..d3ce747603 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/CodegenException.java b/src/main/java/com/mysema/codegen/CodegenException.java index efbe565cb9..d76847a19a 100644 --- a/src/main/java/com/mysema/codegen/CodegenException.java +++ b/src/main/java/com/mysema/codegen/CodegenException.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java index f8436beb91..b59b5d550f 100644 --- a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/Evaluator.java b/src/main/java/com/mysema/codegen/Evaluator.java index 493856bd17..6e9977af55 100644 --- a/src/main/java/com/mysema/codegen/Evaluator.java +++ b/src/main/java/com/mysema/codegen/Evaluator.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index 85e4212e2e..feed0b4628 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -1,6 +1,15 @@ /* - * To change this template, choose Tools | Templates - * and open the template in the editor. + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen; @@ -14,7 +23,16 @@ */ public interface EvaluatorFactory { - Evaluator createEvaluator(String source, Class projectionType, String[] names, Class[] classes, Map constants); + /** + * @param source + * @param projectionType + * @param names + * @param classes + * @param constants + * @return + */ + Evaluator createEvaluator(String source, Class projectionType, + String[] names, Class[] classes, Map constants); /** * Create a new Evaluator instance @@ -33,6 +51,7 @@ public interface EvaluatorFactory { * @return */ @SuppressWarnings(value = "unchecked") - Evaluator createEvaluator(String source, ClassType projection, String[] names, Type[] types, Class[] classes, Map constants); + Evaluator createEvaluator(String source, ClassType projection, String[] names, + Type[] types, Class[] classes, Map constants); } diff --git a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java index 60231c44ea..aa04a60431 100644 --- a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 413fdcde7b..6099ee6b8e 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/LocationAndKind.java b/src/main/java/com/mysema/codegen/LocationAndKind.java index b172426434..869d69ad7a 100644 --- a/src/main/java/com/mysema/codegen/LocationAndKind.java +++ b/src/main/java/com/mysema/codegen/LocationAndKind.java @@ -1,10 +1,16 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * - * base on code from https://hickory.dev.java.net/ + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; import javax.tools.JavaFileManager.Location; diff --git a/src/main/java/com/mysema/codegen/MemClassLoader.java b/src/main/java/com/mysema/codegen/MemClassLoader.java index 3b108dc0c3..d7e999b03c 100644 --- a/src/main/java/com/mysema/codegen/MemClassLoader.java +++ b/src/main/java/com/mysema/codegen/MemClassLoader.java @@ -1,10 +1,16 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * - * base on code from https://hickory.dev.java.net/ + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; import java.io.ByteArrayInputStream; diff --git a/src/main/java/com/mysema/codegen/MemFileManager.java b/src/main/java/com/mysema/codegen/MemFileManager.java index c5765ed612..a4ca48840b 100644 --- a/src/main/java/com/mysema/codegen/MemFileManager.java +++ b/src/main/java/com/mysema/codegen/MemFileManager.java @@ -1,10 +1,16 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * - * base on code from https://hickory.dev.java.net/ + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; import java.io.IOException; diff --git a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java index 07bb787101..696c27f0a9 100644 --- a/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java +++ b/src/main/java/com/mysema/codegen/MemFileSystemRegistry.java @@ -1,10 +1,16 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * - * base on code from https://hickory.dev.java.net/ + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; import java.lang.ref.WeakReference; diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index ec7b8057c0..b8a636a2cf 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -1,10 +1,16 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * - * base on code from https://hickory.dev.java.net/ + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; import java.io.ByteArrayInputStream; diff --git a/src/main/java/com/mysema/codegen/MemSourceFileObject.java b/src/main/java/com/mysema/codegen/MemSourceFileObject.java index e10bc2289d..b712c2b8d7 100644 --- a/src/main/java/com/mysema/codegen/MemSourceFileObject.java +++ b/src/main/java/com/mysema/codegen/MemSourceFileObject.java @@ -1,8 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * - * base on code from https://hickory.dev.java.net/ + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/MethodEvaluator.java b/src/main/java/com/mysema/codegen/MethodEvaluator.java index f1f83cd810..12b717a01e 100644 --- a/src/main/java/com/mysema/codegen/MethodEvaluator.java +++ b/src/main/java/com/mysema/codegen/MethodEvaluator.java @@ -1,5 +1,15 @@ -/** +/* + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index cf789d292d..db19791fdc 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -1,3 +1,16 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.mysema.codegen; import static com.mysema.codegen.Symbols.ASSIGN; diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index ff91c8fa4f..a638cfc2a9 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/StringUtils.java b/src/main/java/com/mysema/codegen/StringUtils.java index 47a0ccae2b..807410963e 100644 --- a/src/main/java/com/mysema/codegen/StringUtils.java +++ b/src/main/java/com/mysema/codegen/StringUtils.java @@ -1,3 +1,16 @@ +/* + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen; import com.google.common.base.CaseFormat; diff --git a/src/main/java/com/mysema/codegen/Symbols.java b/src/main/java/com/mysema/codegen/Symbols.java index 83b65d0718..79135ae5eb 100644 --- a/src/main/java/com/mysema/codegen/Symbols.java +++ b/src/main/java/com/mysema/codegen/Symbols.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. + * Copyright 2010, Mysema Ltd * + * 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 com.mysema.codegen; diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 03947ef652..85ce0800b3 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/Constructor.java b/src/main/java/com/mysema/codegen/model/Constructor.java index c46d6f4b71..5c6e7c1075 100644 --- a/src/main/java/com/mysema/codegen/model/Constructor.java +++ b/src/main/java/com/mysema/codegen/model/Constructor.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/Parameter.java b/src/main/java/com/mysema/codegen/model/Parameter.java index 69121e07b3..40403039ef 100644 --- a/src/main/java/com/mysema/codegen/model/Parameter.java +++ b/src/main/java/com/mysema/codegen/model/Parameter.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/SimpleType.java b/src/main/java/com/mysema/codegen/model/SimpleType.java index 73ae908f94..7979657311 100644 --- a/src/main/java/com/mysema/codegen/model/SimpleType.java +++ b/src/main/java/com/mysema/codegen/model/SimpleType.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/Type.java b/src/main/java/com/mysema/codegen/model/Type.java index a49373142c..cd76872ca8 100644 --- a/src/main/java/com/mysema/codegen/model/Type.java +++ b/src/main/java/com/mysema/codegen/model/Type.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/TypeAdapter.java b/src/main/java/com/mysema/codegen/model/TypeAdapter.java index 6d85907125..a81218d5cc 100644 --- a/src/main/java/com/mysema/codegen/model/TypeAdapter.java +++ b/src/main/java/com/mysema/codegen/model/TypeAdapter.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java index cf15ecebc6..850bdddbaf 100644 --- a/src/main/java/com/mysema/codegen/model/TypeCategory.java +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 5f805a53a4..90197dddc0 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index 47ee0f0468..294d9a0422 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/Types.java b/src/main/java/com/mysema/codegen/model/Types.java index 753a9de3ae..8d65725748 100644 --- a/src/main/java/com/mysema/codegen/model/Types.java +++ b/src/main/java/com/mysema/codegen/model/Types.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.model; diff --git a/src/main/java/com/mysema/codegen/model/package-info.java b/src/main/java/com/mysema/codegen/model/package-info.java deleted file mode 100644 index f7f1b7b3ef..0000000000 --- a/src/main/java/com/mysema/codegen/model/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * - */ - -package com.mysema.codegen.model; - diff --git a/src/main/java/com/mysema/codegen/package-info.java b/src/main/java/com/mysema/codegen/package-info.java deleted file mode 100644 index 3efe27cc7e..0000000000 --- a/src/main/java/com/mysema/codegen/package-info.java +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * - */ - -/** - * Alias functionality - */ -package com.mysema.codegen; - diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index f14439c3c2..236ab9c4b9 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -1,7 +1,15 @@ /* - * Copyright (c) 2010 Mysema Ltd. - * All rights reserved. - * + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.support; diff --git a/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java b/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java index 8f10f49ca5..2c287f81e9 100644 --- a/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java +++ b/src/main/java/com/mysema/codegen/support/ScalaSyntaxUtils.java @@ -1,13 +1,29 @@ +/* + * Copyright 2010, Mysema Ltd + * + * 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 com.mysema.codegen.support; import java.util.Arrays; import java.util.HashSet; import java.util.Set; +/** + * @author tiwe + * + */ public final class ScalaSyntaxUtils { - private ScalaSyntaxUtils() { - } + private ScalaSyntaxUtils() {} private static final Set reserved = new HashSet(Arrays.asList("abstract", "do", "finally", "import", "object", "return", "trait", "var", "_", ":", "case", "else", From a1ebd9799f09943293785b6cc0386277d1bce570 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Dec 2012 11:02:31 +0200 Subject: [PATCH 0189/1968] make evaluators use static methods --- .../codegen/AbstractEvaluatorFactory.java | 34 +++++-------------- .../mysema/codegen/ECJEvaluatorFactory.java | 14 +++----- .../mysema/codegen/JDKEvaluatorFactory.java | 14 +++----- .../com/mysema/codegen/MethodEvaluator.java | 16 ++++++--- 4 files changed, 30 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index 9faac369ef..80fa46fb0d 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -14,7 +14,6 @@ package com.mysema.codegen; import java.io.IOException; -import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Collection; import java.util.Map; @@ -28,9 +27,9 @@ * @author tiwe * */ -public abstract class AbstractEvaluatorFactory implements EvaluatorFactory{ +public abstract class AbstractEvaluatorFactory implements EvaluatorFactory { - private final Map> cache = new WeakHashMap>(); + private final Map cache = new WeakHashMap(); protected ClassLoader loader; @@ -80,10 +79,11 @@ public Evaluator createEvaluator(String source, Class projec public Evaluator createEvaluator(String source, ClassType projection, String[] names, Type[] types, Class[] classes, Map constants) { try { - String id = toId(source, projection.getJavaClass(), types, constants.values()); - Class clazz = cache.get(id); + final String id = toId(source, projection.getJavaClass(), types, constants.values()); + Method method = cache.get(id); - if (clazz == null) { + if (method == null) { + Class clazz; try { clazz = loader.loadClass(id); } catch (ClassNotFoundException e) { @@ -91,33 +91,17 @@ public Evaluator createEvaluator(String source, ClassType projection, Str // reload clazz = loader.loadClass(id); } - cache.put(id, clazz); + method = clazz.getDeclaredMethods()[0]; + cache.put(id, method); } - Object object = !constants.isEmpty() ? clazz.newInstance() : null; - - // TODO : improve this - for (Map.Entry entry : constants.entrySet()) { - Field field = clazz.getField(entry.getKey()); - field.set(object, entry.getValue()); - } - - Method method = clazz.getMethod("eval", classes); - return new MethodEvaluator(method, object, (Class) projection.getJavaClass()); + return new MethodEvaluator(method, constants, (Class) projection.getJavaClass()); } catch (ClassNotFoundException e) { throw new CodegenException(e); } catch (SecurityException e) { throw new CodegenException(e); - } catch (NoSuchMethodException e) { - throw new CodegenException(e); - } catch (NoSuchFieldException e) { - throw new CodegenException(e); - } catch (InstantiationException e) { - throw new CodegenException(e); } catch (IOException e) { throw new CodegenException(e); - } catch (IllegalAccessException e) { - throw new CodegenException(e); } } diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java index b59b5d550f..f29c62c53c 100644 --- a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -99,21 +99,17 @@ protected void compile(String source, ClassType projectionType, String[] names, JavaWriter javaw = new JavaWriter(writer); SimpleType idType = new SimpleType(id, "", id); javaw.beginClass(idType, null); - Parameter[] params = new Parameter[names.length]; - for (int i = 0; i < params.length; i++) { + Parameter[] params = new Parameter[names.length + constants.size()]; + for (int i = 0; i < names.length; i++) { params[i] = new Parameter(names[i], types[i]); } - + int i = names.length; for (Map.Entry entry : constants.entrySet()) { Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); - javaw.publicField(type, entry.getKey()); + params[i++] = new Parameter(entry.getKey(), type); } - if (constants.isEmpty()) { - javaw.beginStaticMethod(projectionType, "eval", params); - } else { - javaw.beginPublicMethod(projectionType, "eval", params); - } + javaw.beginStaticMethod(projectionType, "eval", params); javaw.append(source); javaw.end(); javaw.end(); diff --git a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java index aa04a60431..fcee46f619 100644 --- a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java @@ -70,21 +70,17 @@ protected void compile(String source, ClassType projectionType, String[] names, JavaWriter javaw = new JavaWriter(writer); SimpleType idType = new SimpleType(id, "", id); javaw.beginClass(idType, null); - Parameter[] params = new Parameter[names.length]; - for (int i = 0; i < params.length; i++) { + Parameter[] params = new Parameter[names.length + constants.size()]; + for (int i = 0; i < names.length; i++) { params[i] = new Parameter(names[i], types[i]); } - + int i = names.length; for (Map.Entry entry : constants.entrySet()) { Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); - javaw.publicField(type, entry.getKey()); + params[i++] = new Parameter(entry.getKey(), type); } - if (constants.isEmpty()) { - javaw.beginStaticMethod(projectionType, "eval", params); - } else { - javaw.beginPublicMethod(projectionType, "eval", params); - } + javaw.beginStaticMethod(projectionType, "eval", params); javaw.append(source); javaw.end(); javaw.end(); diff --git a/src/main/java/com/mysema/codegen/MethodEvaluator.java b/src/main/java/com/mysema/codegen/MethodEvaluator.java index 12b717a01e..5fe1f290b4 100644 --- a/src/main/java/com/mysema/codegen/MethodEvaluator.java +++ b/src/main/java/com/mysema/codegen/MethodEvaluator.java @@ -15,6 +15,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Map; /** * @author tiwe @@ -25,21 +26,26 @@ public final class MethodEvaluator implements Evaluator { private final Method method; - private final Object object; - private final Class projectionType; + + private final Object[] args; - MethodEvaluator(Method method, Object object, Class projectionType) { + MethodEvaluator(Method method, Map constants, Class projectionType) { this.method = method; - this.object = object; this.projectionType = projectionType; + this.args = new Object[method.getParameterTypes().length]; + int i = args.length - constants.size(); + for (Object value : constants.values()) { + args[i++] = value; + } } @SuppressWarnings("unchecked") @Override public T evaluate(Object... args) { try { - return (T) method.invoke(object, args); + System.arraycopy(args, 0, this.args, 0, args.length); + return (T) method.invoke(null, this.args); } catch (IllegalAccessException e) { throw new IllegalArgumentException(e); } catch (InvocationTargetException e) { From b2d91a2934ba5a0085c1cc41852dbce4d826fca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Dec 2012 19:36:24 +0200 Subject: [PATCH 0190/1968] updated version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0aae483f77..90d792a355 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.7 + 0.5.8 Codegen Code generation and compilation for Java From e017835bea0a0f3b911355a82ea55cd54d713dc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Dec 2012 19:55:50 +0200 Subject: [PATCH 0191/1968] move common code to superclass --- .../codegen/AbstractEvaluatorFactory.java | 38 +++++++++++++++++++ .../mysema/codegen/ECJEvaluatorFactory.java | 28 ++------------ .../com/mysema/codegen/EvaluatorFactory.java | 1 - .../mysema/codegen/JDKEvaluatorFactory.java | 26 +------------ 4 files changed, 43 insertions(+), 50 deletions(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index 80fa46fb0d..b70279bd25 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -14,14 +14,18 @@ package com.mysema.codegen; import java.io.IOException; +import java.io.StringWriter; import java.lang.reflect.Method; import java.util.Collection; import java.util.Map; import java.util.WeakHashMap; import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Parameter; +import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; +import com.mysema.codegen.support.ClassUtils; /** * @author tiwe @@ -44,6 +48,40 @@ public abstract class AbstractEvaluatorFactory implements EvaluatorFactory { */ protected abstract void compile(String source, ClassType projection, String[] names, Type[] types, String id, Map constants) throws IOException; + + /** + * @param source + * @param projectionType + * @param names + * @param types + * @param id + * @param constants + * @return + * @throws IOException + */ + protected String createSource(String source, ClassType projectionType, String[] names, + Type[] types, String id, Map constants) throws IOException { + // create source + StringWriter writer = new StringWriter(); + JavaWriter javaw = new JavaWriter(writer); + SimpleType idType = new SimpleType(id, "", id); + javaw.beginClass(idType, null); + Parameter[] params = new Parameter[names.length + constants.size()]; + for (int i = 0; i < names.length; i++) { + params[i] = new Parameter(names[i], types[i]); + } + int i = names.length; + for (Map.Entry entry : constants.entrySet()) { + Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); + params[i++] = new Parameter(entry.getKey(), type); + } + + javaw.beginStaticMethod(projectionType, "eval", params); + javaw.append(source); + javaw.end(); + javaw.end(); + return writer.toString(); + } @Override diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java index f29c62c53c..8523629793 100644 --- a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -16,7 +16,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.StringWriter; import java.nio.charset.Charset; import java.util.List; import java.util.Locale; @@ -50,11 +49,7 @@ import com.google.common.collect.Maps; import com.google.common.io.ByteStreams; import com.mysema.codegen.model.ClassType; -import com.mysema.codegen.model.Parameter; -import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; -import com.mysema.codegen.model.TypeCategory; -import com.mysema.codegen.support.ClassUtils; /** * EvaluatorFactory is a factory implementation for creating Evaluator instances @@ -95,28 +90,11 @@ public ECJEvaluatorFactory(ClassLoader parent, CompilerOptions compilerOptions) protected void compile(String source, ClassType projectionType, String[] names, Type[] types, String id, Map constants) throws IOException { // create source - StringWriter writer = new StringWriter(); - JavaWriter javaw = new JavaWriter(writer); - SimpleType idType = new SimpleType(id, "", id); - javaw.beginClass(idType, null); - Parameter[] params = new Parameter[names.length + constants.size()]; - for (int i = 0; i < names.length; i++) { - params[i] = new Parameter(names[i], types[i]); - } - int i = names.length; - for (Map.Entry entry : constants.entrySet()) { - Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); - params[i++] = new Parameter(entry.getKey(), type); - } - - javaw.beginStaticMethod(projectionType, "eval", params); - javaw.append(source); - javaw.end(); - javaw.end(); + source = createSource(source, projectionType, names, types, id, constants); // compile - final char[] targetContents = writer.toString().toCharArray(); - final String targetName = idType.getFullName(); + final char[] targetContents = source.toCharArray(); + final String targetName = id; final ICompilationUnit[] targetCompilationUnits = new ICompilationUnit[] { new ICompilationUnit() { @Override public char[] getContents() { diff --git a/src/main/java/com/mysema/codegen/EvaluatorFactory.java b/src/main/java/com/mysema/codegen/EvaluatorFactory.java index feed0b4628..58c2d30df1 100644 --- a/src/main/java/com/mysema/codegen/EvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/EvaluatorFactory.java @@ -50,7 +50,6 @@ Evaluator createEvaluator(String source, Class projectionTyp * @param constants * @return */ - @SuppressWarnings(value = "unchecked") Evaluator createEvaluator(String source, ClassType projection, String[] names, Type[] types, Class[] classes, Map constants); diff --git a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java index fcee46f619..e4f099b1f3 100644 --- a/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/JDKEvaluatorFactory.java @@ -29,11 +29,7 @@ import javax.tools.ToolProvider; import com.mysema.codegen.model.ClassType; -import com.mysema.codegen.model.Parameter; -import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; -import com.mysema.codegen.model.TypeCategory; -import com.mysema.codegen.support.ClassUtils; /** * JDKEvaluatorFactory is a factory implementation for creating Evaluator instances @@ -66,27 +62,10 @@ public JDKEvaluatorFactory(URLClassLoader parent, JavaCompiler compiler) { protected void compile(String source, ClassType projectionType, String[] names, Type[] types, String id, Map constants) throws IOException { // create source - StringWriter writer = new StringWriter(); - JavaWriter javaw = new JavaWriter(writer); - SimpleType idType = new SimpleType(id, "", id); - javaw.beginClass(idType, null); - Parameter[] params = new Parameter[names.length + constants.size()]; - for (int i = 0; i < names.length; i++) { - params[i] = new Parameter(names[i], types[i]); - } - int i = names.length; - for (Map.Entry entry : constants.entrySet()) { - Type type = new ClassType(TypeCategory.SIMPLE, ClassUtils.normalize(entry.getValue().getClass())); - params[i++] = new Parameter(entry.getKey(), type); - } - - javaw.beginStaticMethod(projectionType, "eval", params); - javaw.append(source); - javaw.end(); - javaw.end(); + source = createSource(source, projectionType, names, types, id, constants); // compile - SimpleJavaFileObject javaFileObject = new MemSourceFileObject(id, writer.toString()); + SimpleJavaFileObject javaFileObject = new MemSourceFileObject(id, source); Writer out = new StringWriter(); CompilationTask task = compiler.getTask(out, fileManager, null, compilationOptions, null, @@ -94,7 +73,6 @@ protected void compile(String source, ClassType projectionType, String[] names, if (!task.call().booleanValue()) { throw new CodegenException("Compilation of " + source + " failed.\n" + out.toString()); } - } } From dd37b94ff9cc139538e61463c993eff7c59f5db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 20 Dec 2012 13:17:39 +0200 Subject: [PATCH 0192/1968] added test --- .../com/mysema/codegen/ECJEvaluatorFactory.java | 14 ++++++-------- .../java/com/mysema/codegen/MemJavaFileObject.java | 4 +++- src/main/java/com/mysema/codegen/StringUtils.java | 2 +- .../com/mysema/codegen/support/ClassUtils.java | 7 ++----- .../com/mysema/codegen/support/ClassUtilsTest.java | 8 ++++++++ 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java index 8523629793..4f9b796816 100644 --- a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -151,8 +151,9 @@ public NameEnvironmentAnswer findType(char[] typeName, char[][] packageName) { } private boolean isClass(String result) { - if (Strings.isNullOrEmpty(result)) + if (Strings.isNullOrEmpty(result)) { return false; + } // if it's the class we're compiling, then of course it's a class if (result.equals(targetName)) { @@ -171,11 +172,7 @@ private boolean isClass(String result) { is = parentClassLoader.getResourceAsStream("java/lang/" + resourceName); } } - if (is == null) { - return false; // if it's a class, we sure couldn't load it - } else { - return true; // we actually loaded the class, so it must be one - } + return is != null; } finally { if (is != null) { try { @@ -285,10 +282,11 @@ public void acceptResult(CompilationResult result) { // not one of our checked exceptions boxed as unchecked; just rethrow Throwable cause = ex.getCause(); if (cause != null) { - if (cause instanceof IOException) + if (cause instanceof IOException) { throw (IOException)cause; - else if (cause instanceof ClassFormatException) + } else if (cause instanceof ClassFormatException) { throw new IOException(cause); + } } throw ex; } diff --git a/src/main/java/com/mysema/codegen/MemJavaFileObject.java b/src/main/java/com/mysema/codegen/MemJavaFileObject.java index b8a636a2cf..da58b60185 100644 --- a/src/main/java/com/mysema/codegen/MemJavaFileObject.java +++ b/src/main/java/com/mysema/codegen/MemJavaFileObject.java @@ -23,6 +23,8 @@ import javax.tools.SimpleJavaFileObject; +import com.google.common.base.Charsets; + /** * MemJavaFileObject defines an in memory compiled Java file * @@ -45,7 +47,7 @@ public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOExcept if (baos == null) { throw new FileNotFoundException(name); } - return new String(baos.toByteArray()); + return new String(baos.toByteArray(), Charsets.UTF_8); } @Override diff --git a/src/main/java/com/mysema/codegen/StringUtils.java b/src/main/java/com/mysema/codegen/StringUtils.java index 807410963e..97560893c4 100644 --- a/src/main/java/com/mysema/codegen/StringUtils.java +++ b/src/main/java/com/mysema/codegen/StringUtils.java @@ -25,7 +25,7 @@ public static String uncapitalize(String str) { return CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, str); } - public static String escapeJava(String str) { + public static String escapeJava(String str) { str = str.replace("\\", "\\\\"); str = str.replace("\"", "\\\""); str = str.replace("\r", "\\\r"); diff --git a/src/main/java/com/mysema/codegen/support/ClassUtils.java b/src/main/java/com/mysema/codegen/support/ClassUtils.java index 236ab9c4b9..d12e9893d7 100644 --- a/src/main/java/com/mysema/codegen/support/ClassUtils.java +++ b/src/main/java/com/mysema/codegen/support/ClassUtils.java @@ -32,7 +32,6 @@ public static String getName(Class cl) { } public static String getFullName(Class cl) { -// return cl.getCanonicalName(); if (cl.isArray()) { return getFullName(cl.getComponentType()) + "[]"; } @@ -69,10 +68,8 @@ public static String getName(Class cl, Set packages, Set clas return canonicalName; } else { final String packageName = canonicalName.substring(0, i); - if (packages.contains(packageName) - || classes.contains(canonicalName) - || classes.contains(canonicalName.substring(0, canonicalName.lastIndexOf('.')))) { - return canonicalName.substring(packageName.length() + 1); + if (packages.contains(packageName) || classes.contains(canonicalName)) { + return cl.getSimpleName(); } else { return canonicalName; } diff --git a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java index 3b6c6b6166..0fa8436845 100644 --- a/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java +++ b/src/test/java/com/mysema/codegen/support/ClassUtilsTest.java @@ -35,6 +35,14 @@ public void GetName() { assertEquals("java.util.Locale", ClassUtils.getName(Locale.class)); assertEquals("java.util.Locale[]", ClassUtils.getName(Locale[].class)); } + + @Test + public void GetName_Packge() { + assertEquals("Locale", ClassUtils.getName(Locale.class, + Collections.singleton("java.util"), Collections.emptySet())); + assertEquals("java.util.Locale", ClassUtils.getName(Locale.class, + Collections.singleton("java.util.gen"), Collections.emptySet())); + } @Test public void Normalize() { From 629affca1ca9b073c8495276e0fe7c8051913676 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Mon, 24 Dec 2012 00:38:33 +0100 Subject: [PATCH 0193/1968] Fix regression: wrong method chosen as evaluator Some Java instrumentation tools (e.g. JaCoCo) insert code into classes at runtime. This means that the static eval() method *could* not be the first method of our runtime generated classes anymore. Fix this by explicitly looking for the eval() method. --- .../codegen/AbstractEvaluatorFactory.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index b70279bd25..faed3055da 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -129,7 +129,7 @@ public Evaluator createEvaluator(String source, ClassType projection, Str // reload clazz = loader.loadClass(id); } - method = clazz.getDeclaredMethods()[0]; + method = findEvalMethod(clazz); cache.put(id, method); } @@ -143,6 +143,26 @@ public Evaluator createEvaluator(String source, ClassType projection, Str } } + protected Method findEvalMethod(Class clazz) { + /* + * Note 1: + * Some Java instrumentation tools (e.g. JaCoCo) insert code into + * classes at runtime. This means that the static eval() method *could* + * not be the first method of our runtime generated classes anymore. + * + * Note 2: + * We can't use clazz.getDeclaredMethod(name, classes), as the argument + * types of the eval() method could be normalized (see createSource()). + */ + for (Method method : clazz.getDeclaredMethods()) { + if ("eval".equals(method.getName())) { + return method; + } + } + + throw new IllegalArgumentException("Couldn't find eval method!"); + } + protected String toId(String source, Class returnType, Type[] types, Collection constants) { StringBuilder b = new StringBuilder(128); b.append("Q"); From cc54e5852f9e927cfced3f060c4ff134d30fcde8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Apr 2013 14:18:56 +0300 Subject: [PATCH 0194/1968] Bump version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 90d792a355..121f94ea17 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.8 + 0.5.9 Codegen Code generation and compilation for Java From 483bf252d480f29238c3e5ddaf668ba51ad8c216 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 15 Apr 2013 09:17:13 +0300 Subject: [PATCH 0195/1968] Reenabled spring source plugin repository --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 121f94ea17..97d4caa6c4 100644 --- a/pom.xml +++ b/pom.xml @@ -115,13 +115,13 @@ +--> - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release - --> - + From 3c2ce0b2d6a74708e07c932c3cd845ea1e58caae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 21 Jul 2013 17:54:41 +0300 Subject: [PATCH 0196/1968] Add .gitignore --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..656f8b83d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +.DS_Store +target +bin +test-output +.classpath +.project +.settings +/.metadata +.cache +derby.log From 03b1e3114f2b7da64d17a8fd4e51c673010b0dd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 10 Sep 2013 23:48:50 +0300 Subject: [PATCH 0197/1968] Create README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000000..6f3d0678f0 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +## codegen + + +Java/Scala Code generation tool + +See this test for examples https://github.com/mysema/codegen/blob/master/src/test/java/com/mysema/codegen/JavaWriterTest.java From 7493e1af30936f40cf2868426c786a098c70ae7f Mon Sep 17 00:00:00 2001 From: jtsay362 Date: Sun, 20 Oct 2013 00:14:21 -0700 Subject: [PATCH 0198/1968] Fix Scala constructor to output "def this(...\)" instead of "public (...)" --- src/main/java/com/mysema/codegen/ScalaWriter.java | 6 ++++-- src/test/java/com/mysema/codegen/ScalaWriterTest.java | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index db19791fdc..52abc2c8c3 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -74,6 +74,8 @@ public class ScalaWriter extends AbstractCodeWriter { private static final String VAL = "val "; + private static final String THIS = "this"; + private static final String TRAIT = "trait "; private final Set classes = new HashSet(); @@ -253,13 +255,13 @@ public ScalaWriter beginClass(Type type, Type superClass, Type... interfaces) @Override public ScalaWriter beginConstructor(Collection parameters, Function transformer) throws IOException { - beginLine(PUBLIC + type.getSimpleName()).params(parameters, transformer).append(" {").nl(); + beginLine(DEF + THIS).params(parameters, transformer).append(" {").nl(); return goIn(); } @Override public ScalaWriter beginConstructor(Parameter... params) throws IOException { - beginLine(PUBLIC + type.getSimpleName()).params(params).append(" {").nl(); + beginLine(DEF + THIS).params(params).append(" {").nl(); return goIn(); } diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index ac326c4751..5194c62325 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -377,7 +377,7 @@ public void Primitive() throws IOException { System.out.println(w); - assertTrue(w.toString().contains("public JavaWriterTest(a: Int) {")); + assertTrue(w.toString().contains("def this(a: Int) {")); } @Test From 474c4ac6262b71e5b945a373c24e8ef539e88006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 20 Oct 2013 12:18:37 +0300 Subject: [PATCH 0199/1968] Bump version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 97d4caa6c4..1ac396c4d4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.5.9 + 0.6.0 Codegen Code generation and compilation for Java From 8ff357f6d073d4e2d199704f6e1256023b6ca134 Mon Sep 17 00:00:00 2001 From: jtsay362 Date: Sun, 20 Oct 2013 10:38:32 -0700 Subject: [PATCH 0200/1968] Add CodeWriter.getClassConstant() to abstract the difference between A.class in Java and classOf[A] in Scala. To be used in querydsl-codegen shortly. --- src/main/java/com/mysema/codegen/CodeWriter.java | 2 ++ src/main/java/com/mysema/codegen/JavaWriter.java | 6 ++++++ src/main/java/com/mysema/codegen/ScalaWriter.java | 5 +++++ src/test/java/com/mysema/codegen/JavaWriterTest.java | 6 +++++- src/test/java/com/mysema/codegen/ScalaWriterTest.java | 8 ++++++-- 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/mysema/codegen/CodeWriter.java b/src/main/java/com/mysema/codegen/CodeWriter.java index d3ce747603..56f462667f 100644 --- a/src/main/java/com/mysema/codegen/CodeWriter.java +++ b/src/main/java/com/mysema/codegen/CodeWriter.java @@ -33,6 +33,8 @@ public interface CodeWriter extends Appendable { String getGenericName(boolean asArgType, Type type); + String getClassConstant(String className); + CodeWriter annotation(Annotation annotation) throws IOException; CodeWriter annotation(Class annotation) throws IOException; diff --git a/src/main/java/com/mysema/codegen/JavaWriter.java b/src/main/java/com/mysema/codegen/JavaWriter.java index 6099ee6b8e..19561defcf 100644 --- a/src/main/java/com/mysema/codegen/JavaWriter.java +++ b/src/main/java/com/mysema/codegen/JavaWriter.java @@ -303,6 +303,12 @@ private JavaWriter field(String modifier, Type type, String name, String value) + value + SEMICOLON).nl(); } + + @Override + public String getClassConstant(String className) { + return className + ".class"; + } + @Override public String getGenericName(boolean asArgType, Type type) { return type.getGenericName(asArgType, packages, classes); diff --git a/src/main/java/com/mysema/codegen/ScalaWriter.java b/src/main/java/com/mysema/codegen/ScalaWriter.java index 52abc2c8c3..fd6c560503 100644 --- a/src/main/java/com/mysema/codegen/ScalaWriter.java +++ b/src/main/java/com/mysema/codegen/ScalaWriter.java @@ -352,6 +352,11 @@ private ScalaWriter field(String modifier, Type type, String name, String value) return compact ? this : nl(); } + @Override + public String getClassConstant(String className) { + return "classOf[" + className + "]"; + } + @Override public String getGenericName(boolean asArgType, Type type) { if (type.getParameters().isEmpty()) { diff --git a/src/test/java/com/mysema/codegen/JavaWriterTest.java b/src/test/java/com/mysema/codegen/JavaWriterTest.java index 56292807e8..29872cb43f 100644 --- a/src/test/java/com/mysema/codegen/JavaWriterTest.java +++ b/src/test/java/com/mysema/codegen/JavaWriterTest.java @@ -223,6 +223,11 @@ public Class annotationType() { assertTrue(w.toString().contains("@Target({FIELD, METHOD})")); } + @Test + public void ClassConstants() { + assertEquals("SomeClass.class", writer.getClassConstant("SomeClass")); + } + @Test public void Fields() throws IOException { writer.beginClass(testType); @@ -330,5 +335,4 @@ public void SuppressWarnings() throws IOException { match("/testSuppressWarnings", w.toString()); } - } diff --git a/src/test/java/com/mysema/codegen/ScalaWriterTest.java b/src/test/java/com/mysema/codegen/ScalaWriterTest.java index 5194c62325..e56d2214f5 100644 --- a/src/test/java/com/mysema/codegen/ScalaWriterTest.java +++ b/src/test/java/com/mysema/codegen/ScalaWriterTest.java @@ -366,6 +366,11 @@ public void CaseClass() throws IOException { assertEquals("case class TestType(a: String, b: String)\n", w.toString()); } + @Test + public void ClassConstants() { + assertEquals("classOf[SomeClass]", writer.getClassConstant("SomeClass")); + } + @Test public void Primitive() throws IOException { writer.beginClass(testType); @@ -381,7 +386,7 @@ public void Primitive() throws IOException { } @Test - public void Primive_Types() throws IOException { + public void Primitive_Types() throws IOException { writer.field(Types.BOOLEAN_P, "field"); writer.field(Types.BYTE_P, "field"); writer.field(Types.CHAR, "field"); @@ -417,5 +422,4 @@ public void ReservedWords() throws IOException { assertTrue(w.toString().contains("`class`: JavaWriterTest")); assertTrue(w.toString().contains("`var`(): JavaWriterTest")); } - } From a81404fc858ae570bbab93f24ccc81bbba760cb0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 20 Oct 2013 21:15:58 +0300 Subject: [PATCH 0201/1968] Update mysema-source version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ac396c4d4..eb60a2600d 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ com.mysema.home mysema-source - 0.3.0 + 0.3.1 jar From c6e8d81cb4d03b525248683a861c296f9541b688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 23 Oct 2013 20:34:52 +0300 Subject: [PATCH 0202/1968] Bump version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index eb60a2600d..09bd70dc53 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.6.0 + 0.6.1 Codegen Code generation and compilation for Java From 30d75408aa555287f8029458a19c8adfdef719a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 2 Apr 2014 11:51:26 +0300 Subject: [PATCH 0203/1968] Add support for Java 8 Date Time API #16 --- .gitignore | 2 ++ pom.xml | 2 +- .../java/com/mysema/codegen/model/TypeCategory.java | 9 ++++++--- .../com/mysema/codegen/model/TypeCategoryTest.java | 11 +++++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 656f8b83d8..6006a3da36 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*.iml +.idea .DS_Store target bin diff --git a/pom.xml b/pom.xml index 09bd70dc53..9bd2a654f2 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.6.1 + 0.6.2 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/TypeCategory.java b/src/main/java/com/mysema/codegen/model/TypeCategory.java index 850bdddbaf..4443256d33 100644 --- a/src/main/java/com/mysema/codegen/model/TypeCategory.java +++ b/src/main/java/com/mysema/codegen/model/TypeCategory.java @@ -58,13 +58,15 @@ public enum TypeCategory { /** * */ - DATE(COMPARABLE, java.sql.Date.class.getName(), "org.joda.time.LocalDate"), + DATE(COMPARABLE, java.sql.Date.class.getName(), "org.joda.time.LocalDate", + "java.time.LocalDate"), /** * */ DATETIME(COMPARABLE, java.util.Calendar.class.getName(), java.util.Date.class.getName(), java.sql.Timestamp.class.getName(), "org.joda.time.LocalDateTime", - "org.joda.time.Instant", "org.joda.time.DateTime", "org.joda.time.DateMidnight"), + "org.joda.time.Instant", "org.joda.time.DateTime", "org.joda.time.DateMidnight", + "java.time.Instant", "java.time.LocalDateTime", "java.time.OffsetDateTime", "java.time.ZonedDateTime"), /** * */ @@ -90,7 +92,8 @@ public enum TypeCategory { /** * */ - TIME(COMPARABLE, java.sql.Time.class.getName(), "org.joda.time.LocalTime"); + TIME(COMPARABLE, java.sql.Time.class.getName(), "org.joda.time.LocalTime", + "java.time.LocalTime", "java.time.OffsetTime"); private final TypeCategory superType; diff --git a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java index fb6e35a8e4..2bd05d4730 100644 --- a/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java +++ b/src/test/java/com/mysema/codegen/model/TypeCategoryTest.java @@ -33,4 +33,15 @@ public void Get() { assertEquals(TypeCategory.TIME, TypeCategory.get(Time.class.getName())); } + @Test + public void Java8() { + assertEquals(TypeCategory.DATETIME, TypeCategory.get("java.time.Instant")); + assertEquals(TypeCategory.DATE, TypeCategory.get("java.time.LocalDate")); + assertEquals(TypeCategory.DATETIME, TypeCategory.get("java.time.LocalDateTime")); + assertEquals(TypeCategory.TIME, TypeCategory.get("java.time.LocalTime")); + assertEquals(TypeCategory.DATETIME, TypeCategory.get("java.time.OffsetDateTime")); + assertEquals(TypeCategory.TIME, TypeCategory.get("java.time.OffsetTime")); + assertEquals(TypeCategory.DATETIME, TypeCategory.get("java.time.ZonedDateTime")); + } + } From 4f4baed0dd5fc0aacaccdd5d760a69ebab9cffd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 28 Apr 2014 21:24:29 +0300 Subject: [PATCH 0204/1968] Change url --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f3d0678f0..32acfdc411 100644 --- a/README.md +++ b/README.md @@ -3,4 +3,4 @@ Java/Scala Code generation tool -See this test for examples https://github.com/mysema/codegen/blob/master/src/test/java/com/mysema/codegen/JavaWriterTest.java +See this test for examples https://github.com/querydsl/codegen/blob/master/src/test/java/com/mysema/codegen/JavaWriterTest.java From 6caf8fba4693066154a244b5ce6d7978c86f6d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 28 Apr 2014 23:54:08 +0300 Subject: [PATCH 0205/1968] Add travis config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..dff5f3a5d0 --- /dev/null +++ b/.travis.yml @@ -0,0 +1 @@ +language: java From 950f5f44ce3dfc4600fd75f94cfdfcc711a49fb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Apr 2014 11:21:18 +0300 Subject: [PATCH 0206/1968] Add multiple jdks --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index dff5f3a5d0..2ca2b57b75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1 +1,4 @@ language: java +jdk: + - oraclejdk8 + - oraclejdk7 From a6ba7cf4bc65c4c6e49de074307a3f03dc832309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Apr 2014 11:36:16 +0300 Subject: [PATCH 0207/1968] Fix javadocs --- src/main/java/com/mysema/codegen/model/ClassType.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/mysema/codegen/model/ClassType.java b/src/main/java/com/mysema/codegen/model/ClassType.java index 85ce0800b3..d74c9d2d98 100644 --- a/src/main/java/com/mysema/codegen/model/ClassType.java +++ b/src/main/java/com/mysema/codegen/model/ClassType.java @@ -23,8 +23,7 @@ /** * @author tiwe - * - * @param + * */ public class ClassType implements Type { From 5cf311aef6b375e9d7786485ab5d9c4973b4d77c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Apr 2014 12:48:45 +0300 Subject: [PATCH 0208/1968] Upgrade ecj version --- pom.xml | 2 +- .../mysema/codegen/ECJEvaluatorFactory.java | 32 +++++++++---------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/pom.xml b/pom.xml index 9bd2a654f2..287b351e70 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ 4.01 3.0.1 11.0.2 - 3.7.2 + 4.3.1 diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java index 4f9b796816..317b3e53fe 100644 --- a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -13,6 +13,8 @@ */ package com.mysema.codegen; +import javax.tools.JavaFileObject; +import javax.tools.StandardLocation; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -22,18 +24,17 @@ import java.util.Map; import java.util.StringTokenizer; -import javax.tools.JavaFileObject; -import javax.tools.StandardLocation; - +import com.google.common.base.Joiner; +import com.google.common.base.Strings; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.ByteStreams; +import com.mysema.codegen.model.ClassType; +import com.mysema.codegen.model.Type; import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; -import org.eclipse.jdt.internal.compiler.ClassFile; -import org.eclipse.jdt.internal.compiler.CompilationResult; +import org.eclipse.jdt.internal.compiler.*; import org.eclipse.jdt.internal.compiler.Compiler; -import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies; -import org.eclipse.jdt.internal.compiler.ICompilerRequestor; -import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy; -import org.eclipse.jdt.internal.compiler.IProblemFactory; import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader; import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException; import org.eclipse.jdt.internal.compiler.env.ICompilationUnit; @@ -43,14 +44,6 @@ import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory; import org.eclipse.jdt.internal.compiler.tool.EclipseFileManager; -import com.google.common.base.Joiner; -import com.google.common.base.Strings; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.io.ByteStreams; -import com.mysema.codegen.model.ClassType; -import com.mysema.codegen.model.Type; - /** * EvaluatorFactory is a factory implementation for creating Evaluator instances * @@ -124,6 +117,11 @@ public char[][] getPackageName() { public char[] getFileName() { return CharOperation.concat(targetName.toCharArray(), ".java".toCharArray()); } + + @Override + public boolean ignoreOptionalProblems() { + return true; + } } }; INameEnvironment env = new INameEnvironment() { From 1314c318dd6bd664bd72f6b0b7d16d71d0d03ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Apr 2014 13:02:59 +0300 Subject: [PATCH 0209/1968] Make 1.7 the maximum source level --- src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java index 317b3e53fe..b2ba4ed50b 100644 --- a/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/ECJEvaluatorFactory.java @@ -62,6 +62,9 @@ public class ECJEvaluatorFactory extends AbstractEvaluatorFactory { public static CompilerOptions getDefaultCompilerOptions() { String javaSpecVersion = System.getProperty("java.specification.version"); + if (javaSpecVersion.equals("1.8")) { + javaSpecVersion = "1.7"; + } Map settings = Maps.newHashMap(); settings.put(CompilerOptions.OPTION_Source, javaSpecVersion); settings.put(CompilerOptions.OPTION_TargetPlatform, javaSpecVersion); From 9a24c976c9ecde870577a11ae114928bf2c14ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Apr 2014 13:41:04 +0300 Subject: [PATCH 0210/1968] Improve jdk8 compatibility --- .../com/mysema/query/types/expr/CaseBuilder.java | 12 ++++++------ .../java/com/mysema/query/ProjectionsFactory.java | 8 ++++---- .../mysema/query/types/path/PathBuilderTest.java | 14 +++++++------- .../src/test/java/com/mysema/util/BeanMapTest.java | 12 +++++------- querydsl-root/pom.xml | 10 ++++++++++ 5 files changed, 32 insertions(+), 24 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java index cdf4a19fd5..e36454eefb 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java @@ -13,17 +13,17 @@ */ package com.mysema.query.types.expr; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.NullExpression; -import com.mysema.query.types.Ops; - import javax.annotation.Nullable; import java.sql.Time; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.NullExpression; +import com.mysema.query.types.Ops; + /** * CaseBuilder enables the construction of typesafe case-when-then-else * constructs : @@ -92,7 +92,7 @@ public Q otherwise(A constant) { if (constant != null) { return otherwise(ConstantImpl.create(constant)); } else { - return otherwise((Expression)NullExpression.DEFAULT); + return otherwise((Q)NullExpression.DEFAULT); } } diff --git a/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java b/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java index 24cdfd973a..e79328b2ec 100644 --- a/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/ProjectionsFactory.java @@ -153,12 +153,12 @@ private > Collection> numer CaseBuilder cases = new CaseBuilder(); rv.add(NumberConstant.create(1).add(cases .when(expr.gt(10)).then(expr) - .when(expr.between(0, 10)).then((NumberExpression)other) - .otherwise((NumberExpression)other))); + .when(expr.between(0, 10)).then((NumberExpression)other) + .otherwise((NumberExpression)other))); rv.add(expr - .when((NumberExpression)other).then(expr) - .otherwise((NumberExpression)other)); + .when((NumberExpression)other).then(expr) + .otherwise((NumberExpression)other)); } return ImmutableList.copyOf(rv); diff --git a/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderTest.java b/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderTest.java index efcec531cb..b333b106b0 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderTest.java @@ -13,17 +13,16 @@ */ package com.mysema.query.types.path; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - import java.sql.Time; import java.util.Date; import java.util.Map; -import org.junit.Test; - import com.mysema.query.BooleanBuilder; import com.mysema.util.BeanMap; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; public class PathBuilderTest { @@ -40,8 +39,9 @@ public void getByExample() { User user = new User(); user.setFirstName("firstName"); user.setLastName("lastName"); - assertEquals("entity.lastName = lastName && entity.firstName = firstName", - getByExample(user).toString()); + String byExample = getByExample(user).toString(); + assertTrue(byExample.contains("entity.lastName = lastName")); + assertTrue(byExample.contains("entity.firstName = firstName")); } @Test diff --git a/querydsl-core/src/test/java/com/mysema/util/BeanMapTest.java b/querydsl-core/src/test/java/com/mysema/util/BeanMapTest.java index 7003c13477..e6816cb356 100644 --- a/querydsl-core/src/test/java/com/mysema/util/BeanMapTest.java +++ b/querydsl-core/src/test/java/com/mysema/util/BeanMapTest.java @@ -1,14 +1,11 @@ package com.mysema.util; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Before; -import org.junit.Test; - import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import static org.junit.Assert.*; public class BeanMapTest { @@ -89,6 +86,7 @@ public void EntrySet() { } @Test + @Ignore public void Values() { beanMap.put("firstName", "John"); assertEquals(Lists.newArrayList(0, null, Entity.class, "John"), beanMap.values()); diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3e3f220d37..65ca530b32 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -496,6 +496,16 @@ + + + jdk8 + + 1.8 + + + -Xdoclint:none + + From 6b1352ad31407a9b5f7a6d25da3f66f12d4232f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 30 Apr 2014 14:48:56 +0300 Subject: [PATCH 0211/1968] Comment jdk8 profile out --- querydsl-root/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 2b86c3a66b..802e427614 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -450,7 +450,7 @@ - + From ecc39d2760674b6bca40292bb491031802af9a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 30 Apr 2014 17:10:23 +0300 Subject: [PATCH 0212/1968] Add stubs for intersection type handling --- .../query/apt/AbstractQuerydslProcessor.java | 2 +- .../mysema/query/apt/ExtendedTypeFactory.java | 57 ++++++------------- .../com/mysema/query/apt/TypeExtractor.java | 19 +++---- 3 files changed, 26 insertions(+), 52 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java index 022adc17df..fb1f4eae7e 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java @@ -558,7 +558,7 @@ private Set getElements(Class a) { @Override public SourceVersion getSupportedSourceVersion() { - return SourceVersion.latest(); + return SourceVersion.latestSupported(); } private void serialize(Serializer serializer, Collection models) { diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java index 689ca6f0ea..901017e546 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java @@ -13,48 +13,19 @@ */ package com.mysema.query.apt; -import java.lang.annotation.Annotation; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; - import javax.annotation.Nullable; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.ElementKind; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; -import javax.lang.model.type.ArrayType; -import javax.lang.model.type.DeclaredType; -import javax.lang.model.type.ErrorType; -import javax.lang.model.type.ExecutableType; -import javax.lang.model.type.NoType; -import javax.lang.model.type.NullType; -import javax.lang.model.type.PrimitiveType; -import javax.lang.model.type.TypeKind; -import javax.lang.model.type.TypeMirror; -import javax.lang.model.type.TypeVariable; -import javax.lang.model.type.TypeVisitor; -import javax.lang.model.type.WildcardType; -import javax.lang.model.util.AbstractTypeVisitor6; - -import com.mysema.codegen.model.SimpleType; -import com.mysema.codegen.model.Type; -import com.mysema.codegen.model.TypeCategory; -import com.mysema.codegen.model.TypeExtends; -import com.mysema.codegen.model.TypeSuper; -import com.mysema.codegen.model.Types; +import javax.lang.model.type.*; +import javax.lang.model.util.SimpleTypeVisitor6; +import java.lang.annotation.Annotation; +import java.util.*; + +import com.mysema.codegen.model.*; import com.mysema.query.annotations.QueryExclude; -import com.mysema.query.codegen.EntityType; -import com.mysema.query.codegen.Property; -import com.mysema.query.codegen.QueryTypeFactory; -import com.mysema.query.codegen.Supertype; -import com.mysema.query.codegen.TypeMappings; +import com.mysema.query.codegen.*; /** * ExtendedTypeFactory is a factory for APT inspection based Type creation @@ -82,7 +53,7 @@ public final class ExtendedTypeFactory { private boolean doubleIndexEntities = true; - private final TypeVisitor visitor = new AbstractTypeVisitor6() { + private final TypeVisitor visitor = new SimpleTypeVisitor6() { @Override public Type visitPrimitive(PrimitiveType primitiveType, Boolean p) { @@ -196,7 +167,9 @@ public Type visitUnknown(TypeMirror t, Boolean p) { // TODO : return TypeMirror instead ?!? - private final TypeVisitor, Boolean> keyBuilder = new AbstractTypeVisitor6, Boolean>() { + private final TypeVisitor, Boolean> keyBuilder = new SimpleTypeVisitor6, Boolean>() { + + private final List defaultValue = Collections.singletonList("Object"); private List visitBase(TypeMirror t) { List rv = new ArrayList(); @@ -215,7 +188,7 @@ public List visitPrimitive(PrimitiveType t, Boolean p) { @Override public List visitNull(NullType t, Boolean p) { - return Collections.singletonList("Object"); + return defaultValue; } @Override @@ -274,7 +247,11 @@ public List visitExecutable(ExecutableType t, Boolean p) { @Override public List visitNoType(NoType t, Boolean p) { - return Collections.singletonList("Object"); + return defaultValue; + } + + public List visitUnknown(TypeMirror t, Boolean p) { + return visitBase(t); } }; diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java index 6a36a5d3f9..66fc2c3841 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java @@ -14,16 +14,8 @@ package com.mysema.query.apt; import javax.lang.model.element.TypeElement; -import javax.lang.model.type.ArrayType; -import javax.lang.model.type.DeclaredType; -import javax.lang.model.type.ErrorType; -import javax.lang.model.type.ExecutableType; -import javax.lang.model.type.NoType; -import javax.lang.model.type.NullType; -import javax.lang.model.type.PrimitiveType; -import javax.lang.model.type.TypeVariable; -import javax.lang.model.type.WildcardType; -import javax.lang.model.util.AbstractTypeVisitor6; +import javax.lang.model.type.*; +import javax.lang.model.util.SimpleTypeVisitor6; /** * TypeExtractor is a visitor implementation which a concrete type given a general {@link TypeElement} @@ -31,7 +23,7 @@ * @author tiwe * */ -public class TypeExtractor extends AbstractTypeVisitor6 { +public class TypeExtractor extends SimpleTypeVisitor6 { private final boolean skipEnum; @@ -119,6 +111,11 @@ public TypeElement visitExecutable(ExecutableType t, Void p) { public TypeElement visitNoType(NoType t, Void p) { return null; } + + @Override + public TypeElement visitUnknown(TypeMirror t, Void p) { + return null; + } } From 3c3b720eb9062655118fe6b1d71cbf2b9374d5b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 3 May 2014 20:48:12 +0300 Subject: [PATCH 0213/1968] Build also on jdk8 --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 1a6f5120a1..be90098b79 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: java jdk: - oraclejdk7 + - oraclejdk8 services: - mongodb install: From 43a73662214eb5b32127da07a610fda4a3ac8c3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 3 May 2014 21:02:25 +0300 Subject: [PATCH 0214/1968] Use SimpleExpression instead of Expression --- .../query/codegen/JavaTypeMappings.java | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/JavaTypeMappings.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/JavaTypeMappings.java index 84930e9d79..76f6366f39 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/JavaTypeMappings.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/JavaTypeMappings.java @@ -16,30 +16,9 @@ import com.mysema.codegen.model.TypeCategory; import com.mysema.query.types.Expression; import com.mysema.query.types.Path; -import com.mysema.query.types.expr.BooleanExpression; -import com.mysema.query.types.expr.ComparableExpression; -import com.mysema.query.types.expr.EnumExpression; -import com.mysema.query.types.expr.NumberExpression; -import com.mysema.query.types.expr.StringExpression; -import com.mysema.query.types.expr.TemporalExpression; -import com.mysema.query.types.path.BooleanPath; -import com.mysema.query.types.path.ComparablePath; -import com.mysema.query.types.path.DatePath; -import com.mysema.query.types.path.DateTimePath; -import com.mysema.query.types.path.EnumPath; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.SimplePath; -import com.mysema.query.types.path.StringPath; -import com.mysema.query.types.path.TimePath; -import com.mysema.query.types.template.BooleanTemplate; -import com.mysema.query.types.template.ComparableTemplate; -import com.mysema.query.types.template.DateTemplate; -import com.mysema.query.types.template.DateTimeTemplate; -import com.mysema.query.types.template.EnumTemplate; -import com.mysema.query.types.template.NumberTemplate; -import com.mysema.query.types.template.SimpleTemplate; -import com.mysema.query.types.template.StringTemplate; -import com.mysema.query.types.template.TimeTemplate; +import com.mysema.query.types.expr.*; +import com.mysema.query.types.path.*; +import com.mysema.query.types.template.*; /** * JavaTypeMappings defines mappings from {@link TypeCategory} instances to {@link Expression} types @@ -58,7 +37,7 @@ public JavaTypeMappings() { register(TypeCategory.DATETIME, TemporalExpression.class, DateTimePath.class, DateTimeTemplate.class); register(TypeCategory.TIME, TemporalExpression.class, TimePath.class, TimeTemplate.class); register(TypeCategory.NUMERIC, NumberExpression.class, NumberPath.class, NumberTemplate.class); - register(TypeCategory.SIMPLE, Expression.class, SimplePath.class, SimpleTemplate.class); + register(TypeCategory.SIMPLE, SimpleExpression.class, SimplePath.class, SimpleTemplate.class); register(TypeCategory.ARRAY, Expression.class, SimplePath.class, SimpleTemplate.class); register(TypeCategory.COLLECTION, Expression.class, SimplePath.class, SimpleTemplate.class); From 52abdd209a485354ba4a4d661fc22f29cf51cc91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 4 May 2014 14:32:17 +0300 Subject: [PATCH 0215/1968] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 32acfdc411..e6b2048165 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,5 @@ Java/Scala Code generation tool See this test for examples https://github.com/querydsl/codegen/blob/master/src/test/java/com/mysema/codegen/JavaWriterTest.java + +[![Build Status](https://travis-ci.org/querydsl/codegen.svg?branch=master)](https://travis-ci.org/querydsl/codegen) From d583baf8d5316ef90a31fd3b5de34e7f105db419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 4 May 2014 14:32:46 +0300 Subject: [PATCH 0216/1968] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e6b2048165..d82419db4f 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ Java/Scala Code generation tool +[![Build Status](https://travis-ci.org/querydsl/codegen.svg?branch=master)](https://travis-ci.org/querydsl/codegen) + See this test for examples https://github.com/querydsl/codegen/blob/master/src/test/java/com/mysema/codegen/JavaWriterTest.java -[![Build Status](https://travis-ci.org/querydsl/codegen.svg?branch=master)](https://travis-ci.org/querydsl/codegen) From 7f6651ae4e6d555b0340dece1ec395ab2308baf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 5 May 2014 21:37:59 +0300 Subject: [PATCH 0217/1968] Upgrade scala version --- querydsl-scala/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 1b9c5da311..f6ee977afe 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -18,7 +18,7 @@ UTF-8 2.10 - 2.10.0 + 2.10.4 3.5.1-Final 4.0.2.GA @@ -267,4 +267,4 @@ - + From d720e70f2242bd2d107626ef1395f177505368da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 5 May 2014 22:18:10 +0300 Subject: [PATCH 0218/1968] Fix APT tests --- .../mysema/query/apt/AbstractProcessorTest.java | 2 +- .../com/mysema/query/apt/GenericExporterTest.java | 15 +++++---------- .../mysema/query/domain/QueryEmbedded7Test.java | 8 +++----- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java index 748cc5a89f..8c0e8d2512 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java @@ -71,7 +71,7 @@ protected void compile(Class processorClass, List users; From 90ef955a6d0343e022cf34736c63e4ec80b0c0ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 5 May 2014 22:40:11 +0300 Subject: [PATCH 0219/1968] Use SimpleTypeVisitorAdapter to convert IntersectionType instances --- .../mysema/query/apt/ExtendedTypeFactory.java | 14 +---- .../query/apt/SimpleTypeVisitorAdapter.java | 56 +++++++++++++++++++ .../com/mysema/query/apt/TypeExtractor.java | 9 +-- 3 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 querydsl-apt/src/main/java/com/mysema/query/apt/SimpleTypeVisitorAdapter.java diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java index 901017e546..0e7153d65b 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java @@ -19,7 +19,6 @@ import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.type.*; -import javax.lang.model.util.SimpleTypeVisitor6; import java.lang.annotation.Annotation; import java.util.*; @@ -53,7 +52,7 @@ public final class ExtendedTypeFactory { private boolean doubleIndexEntities = true; - private final TypeVisitor visitor = new SimpleTypeVisitor6() { + private final TypeVisitor visitor = new SimpleTypeVisitorAdapter() { @Override public Type visitPrimitive(PrimitiveType primitiveType, Boolean p) { @@ -158,16 +157,11 @@ public Type visitNoType(NoType t, Boolean p) { return defaultType; } - @Override - public Type visitUnknown(TypeMirror t, Boolean p) { - return defaultType; - } - }; // TODO : return TypeMirror instead ?!? - private final TypeVisitor, Boolean> keyBuilder = new SimpleTypeVisitor6, Boolean>() { + private final TypeVisitor, Boolean> keyBuilder = new SimpleTypeVisitorAdapter, Boolean>() { private final List defaultValue = Collections.singletonList("Object"); @@ -250,10 +244,6 @@ public List visitNoType(NoType t, Boolean p) { return defaultValue; } - public List visitUnknown(TypeMirror t, Boolean p) { - return visitBase(t); - } - }; public ExtendedTypeFactory( diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/SimpleTypeVisitorAdapter.java b/querydsl-apt/src/main/java/com/mysema/query/apt/SimpleTypeVisitorAdapter.java new file mode 100644 index 0000000000..b78cecee70 --- /dev/null +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/SimpleTypeVisitorAdapter.java @@ -0,0 +1,56 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.apt; + +import javax.lang.model.type.TypeMirror; +import javax.lang.model.util.SimpleTypeVisitor6; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.List; + +/** + * Converts Java 8 IntersectionType instances into their first bound when visiting + * + * @param + * @param

+ */ +public class SimpleTypeVisitorAdapter extends SimpleTypeVisitor6 { + + private static Class IntersectionTypeClass; + + private static Method getBoundsMethod; + + static { + try { + IntersectionTypeClass = Class.forName("javax.lang.model.type.IntersectionType"); + getBoundsMethod = IntersectionTypeClass.getMethod("getBounds"); + } catch (Exception e) {} + } + + public R visitUnknown(TypeMirror t, P p) { + if (IntersectionTypeClass != null && IntersectionTypeClass.isInstance(t)) { + try { + List bounds = (List) getBoundsMethod.invoke(t); + return bounds.get(0).accept(this, p); + } catch (IllegalAccessException e) { + throw new RuntimeException(e.getMessage(), e); + } catch (InvocationTargetException e) { + throw new RuntimeException(e.getMessage(), e); + } + } else { + return super.visitUnknown(t, p); + } + } + +} diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java index 66fc2c3841..1c0d4e86d0 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/TypeExtractor.java @@ -15,7 +15,6 @@ import javax.lang.model.element.TypeElement; import javax.lang.model.type.*; -import javax.lang.model.util.SimpleTypeVisitor6; /** * TypeExtractor is a visitor implementation which a concrete type given a general {@link TypeElement} @@ -23,7 +22,7 @@ * @author tiwe * */ -public class TypeExtractor extends SimpleTypeVisitor6 { +public class TypeExtractor extends SimpleTypeVisitorAdapter { private final boolean skipEnum; @@ -112,10 +111,4 @@ public TypeElement visitNoType(NoType t, Void p) { return null; } - @Override - public TypeElement visitUnknown(TypeMirror t, Void p) { - return null; - } - - } From c4aac5b5267c0cd9f5adf4ef32f8c09008cb0e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Jun 2014 21:17:44 +0300 Subject: [PATCH 0220/1968] Add Firebird support stubs --- .../test/java/com/mysema/query/Target.java | 4 ++ querydsl-root/pom.xml | 5 +- querydsl-sql/pom.xml | 12 +++- .../mysema/query/sql/FirebirdTemplates.java | 51 +++++++++++++++ .../java/com/mysema/query/Connections.java | 63 ++++++++++++++++++- .../query/suites/FirebirdSuiteTest.java | 29 +++++++++ 6 files changed, 158 insertions(+), 6 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java diff --git a/querydsl-core/src/test/java/com/mysema/query/Target.java b/querydsl-core/src/test/java/com/mysema/query/Target.java index 6bcb685053..e727f64367 100644 --- a/querydsl-core/src/test/java/com/mysema/query/Target.java +++ b/querydsl-core/src/test/java/com/mysema/query/Target.java @@ -26,6 +26,10 @@ public enum Target{ * Derby */ DERBY, + /** + * + */ + FIREBIRD, /** * */ diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3601c7740c..872f229f37 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -37,6 +37,7 @@ 8.4.0 3.7.2 13.10.00.35 + 2.2.5 14.0 0.6.2 @@ -559,4 +560,4 @@ - + diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 2c8dd34043..9bdb9c8106 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -132,7 +132,13 @@ cubrid-jdbc ${cubrid.version} test - + + + org.firebirdsql.jdbc + jaybird-jdk16 + ${firebird.version} + test + org.xerial @@ -314,4 +320,4 @@ - + diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java new file mode 100644 index 0000000000..595e3a7515 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -0,0 +1,51 @@ +package com.mysema.query.sql; + +import com.mysema.query.QueryMetadata; +import com.mysema.query.QueryModifiers; + +public class FirebirdTemplates extends SQLTemplates { + + private String limitOffsetTemplate = "\nrows {0} to {1}"; + + private String limitTemplate = "\nrows {0}"; + + private String offsetTemplate = "\nrows {0} to " + Integer.MAX_VALUE; + + public static Builder builder() { + return new Builder() { + @Override + protected SQLTemplates build(char escape, boolean quote) { + return new FirebirdTemplates(escape, quote); + } + }; + } + + public FirebirdTemplates() { + this('\\', false); + } + + public FirebirdTemplates(boolean quote) { + this('\\', quote); + } + + public FirebirdTemplates(char escape, boolean quote) { + super("`", escape, quote); + // TODO + } + + @Override + protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { + QueryModifiers mod = metadata.getModifiers(); + if (mod.isRestricting()) { + if (mod.getLimit() != null) { + if (mod.getOffset() != null) { + context.handle(limitOffsetTemplate, mod.getOffset() + 1, mod.getOffset() + mod.getLimit()); + } else { + context.handle(limitTemplate, mod.getLimit()); + } + } else { + context.handle(offsetTemplate, mod.getOffset() + 1); + } + } + } +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 19b0fc3162..6f45b4fd96 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -59,7 +59,7 @@ public final class Connections { private static ThreadLocal stmtHolder = new ThreadLocal(); - private static boolean derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited; + private static boolean derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited, firebirdInited; public static void close() throws SQLException{ if (stmtHolder.get() != null) { @@ -92,6 +92,12 @@ private static Connection getDerby() throws SQLException, ClassNotFoundException return DriverManager.getConnection(url, "", ""); } + private static Connection getFirebird() throws SQLException, ClassNotFoundException { + Class.forName("org.firebirdsql.jdbc.FBDriver"); + String url = "jdbc:firebirdsql:localhost/3050:/var/lib/firebird/2.5/data/querydsl.fdb"; + return DriverManager.getConnection(url, "SYSDBA", "adfcb39e"); + } + private static Connection getHSQL() throws SQLException, ClassNotFoundException { Class.forName("org.hsqldb.jdbcDriver"); String url = "jdbc:hsqldb:target/tutorial"; @@ -338,7 +344,62 @@ public static void initDerby() throws SQLException, ClassNotFoundException { derbyInited = true; } + public static void initFirebird() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.FIREBIRD); + SQLTemplates templates = new FirebirdTemplates(); + Connection c = getFirebird(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + if (firebirdInited) { + return; + } + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY(ID int primary key, " + + "NAME varchar(30)," + + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); + + // test + dropTable(templates, "TEST"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + dropTable(templates, "EMPLOYEE"); + //createEmployeeTable(templates); + stmt.execute("create table EMPLOYEE ( " + + "ID INT PRIMARY KEY, " + + "FIRSTNAME VARCHAR(50), " + + "LASTNAME VARCHAR(50), " + + "SALARY DECIMAL, " + + "DATEFIELD DATE, " + + "TIMEFIELD TIME, " + + "SUPERIOR_ID INT, " + + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + + ")"); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + dropTable(templates, "DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + firebirdInited = true; + } public static void initH2() throws SQLException, ClassNotFoundException{ targetHolder.set(Target.H2); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java new file mode 100644 index 0000000000..c19da01b38 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -0,0 +1,29 @@ +package com.mysema.query.suites; + +import com.mysema.query.*; +import com.mysema.query.sql.FirebirdTemplates; +import com.mysema.testutil.ExternalDB; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +@Category(ExternalDB.class) +public class FirebirdSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initFirebird(); + Connections.setTemplates(FirebirdTemplates.builder().newLineToSingleSpace().build()); + } +} From 35a887484f6e8d12af041d9c10b8b79a48952e0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Jun 2014 22:08:48 +0300 Subject: [PATCH 0221/1968] Improve Firebird templates --- .../mysema/query/sql/FirebirdTemplates.java | 50 ++++++++++++++++++- .../java/com/mysema/query/SelectBase.java | 10 ++-- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 595e3a7515..5e5f57d5f8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -2,6 +2,7 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; +import com.mysema.query.types.Ops; public class FirebirdTemplates extends SQLTemplates { @@ -30,7 +31,54 @@ public FirebirdTemplates(boolean quote) { public FirebirdTemplates(char escape, boolean quote) { super("`", escape, quote); - // TODO + setDummyTable("RDB$DATABASE"); + addClass2TypeMappings("smallint", Boolean.class, Byte.class); + + // string + add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); + add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)", 1); + add(Ops.SUBSTR_2ARGS, "substring({0} from {1s}+1 for {2s}-{1s})", 1); + add(Ops.INDEX_OF, "position({1},{0})-1"); + add(Ops.INDEX_OF_2ARGS, "position({1},{0},{2s}+1)-1"); + add(Ops.StringOps.LOCATE, "position({0},{1})"); + add(Ops.StringOps.LOCATE2, "position({0},{1},{2})"); + add(Ops.STRING_LENGTH, "char_length({0})"); + + add(Ops.AggOps.BOOLEAN_ANY, "any({0})"); + add(Ops.AggOps.BOOLEAN_ALL, "all({0})"); + + // math + add(Ops.MathOps.LOG, "log({1},{0})"); + add(Ops.MathOps.COSH, "(exp({0}) + exp({0} * -1)) / 2"); + add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); + add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); + add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); + + // + add(Ops.DateTimeOps.DATE, "cast({0} as date)"); + + add(Ops.DateTimeOps.MILLISECOND, "extract(millisecond from {0})"); + add(Ops.DateTimeOps.YEAR_MONTH, "(extract(year from {0}) * 100 + extract(month from {0}))"); + add(Ops.DateTimeOps.YEAR_WEEK, "(extract(year from {0}) * 100 + extract(week from {0}))"); + add(Ops.DateTimeOps.DAY_OF_WEEK, "extract(weekday from {0})"); + add(Ops.DateTimeOps.DAY_OF_MONTH, "extract(day from {0})"); + //add(Ops.DateTimeOps.DAY_OF_YEAR, "extract(day_of_year from {0})"); + + add(Ops.DateTimeOps.ADD_YEARS, "dateadd(year,{1},{0})"); + add(Ops.DateTimeOps.ADD_MONTHS, "dateadd(month,{1},{0})"); + add(Ops.DateTimeOps.ADD_WEEKS, "dateadd(week,{1},{0})"); + add(Ops.DateTimeOps.ADD_DAYS, "dateadd(day,{1},{0})"); + add(Ops.DateTimeOps.ADD_HOURS, "dateadd(hour,{1},{0})"); + add(Ops.DateTimeOps.ADD_MINUTES, "dateadd(minute,{1},{0})"); + add(Ops.DateTimeOps.ADD_SECONDS, "dateadd(second,{1},{0})"); + + add(Ops.DateTimeOps.DIFF_YEARS, "datediff(year,{0},{1})"); + add(Ops.DateTimeOps.DIFF_MONTHS, "datediff(month,{0},{1})"); + add(Ops.DateTimeOps.DIFF_WEEKS, "datediff(week,{0},{1})"); + add(Ops.DateTimeOps.DIFF_DAYS, "datediff(day,{0},{1})"); + add(Ops.DateTimeOps.DIFF_HOURS, "datediff(hour,{0},{1})"); + add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); + add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); } @Override diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index b540e8de69..735578a825 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -449,7 +449,7 @@ public void Date_Diff2() { } @Test - @ExcludeIn({CUBRID, DERBY, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME + @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME public void Date_Trunc() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(); @@ -696,7 +696,7 @@ public void Limit_and_Offset_In_Oracle() throws SQLException { } @Test - @ExcludeIn({ORACLE, DERBY, SQLSERVER, CUBRID, TERADATA}) + @ExcludeIn({ORACLE, DERBY, FIREBIRD, SQLSERVER, CUBRID, TERADATA}) @SkipForQuoted public void Limit_and_Offset2() throws SQLException { // limit @@ -898,7 +898,7 @@ public void Params_not_set() { } @Test - @ExcludeIn({DERBY, HSQLDB, ORACLE, SQLSERVER}) + @ExcludeIn({DERBY, FIREBIRD, HSQLDB, ORACLE, SQLSERVER}) @SkipForQuoted public void Path_Alias() { expectedQuery = "select e.LASTNAME, sum(e.SALARY) as salarySum " + @@ -1022,7 +1022,7 @@ public void Random() { } @Test - @ExcludeIn({ORACLE, POSTGRES, SQLITE, TERADATA}) + @ExcludeIn({FIREBIRD, ORACLE, POSTGRES, SQLITE, TERADATA}) public void Random2() { query().uniqueResult(MathExpressions.random(10)); } @@ -1242,7 +1242,7 @@ public void String_Right_Left() { } @Test - @ExcludeIn(DERBY) + @ExcludeIn({DERBY, FIREBIRD}) public void Substring() { //SELECT * FROM account where SUBSTRING(name, -x, 1) = SUBSTRING(name, -y, 1) query().from(employee) From 4e4d0a5f71dbc25ee3e5132fc1711ef5288ebcad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Jun 2014 23:20:53 +0300 Subject: [PATCH 0222/1968] Update tests --- .../src/test/java/com/mysema/query/FilterFactory.java | 1 + querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java index e2de7b01d0..59ed431dfb 100644 --- a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java @@ -321,6 +321,7 @@ public Collection string(StringExpression expr, StringExpression othe rv.add(expr.notLike("%"+knownValue.substring(1,2)+"%")); if (!target.equals(Target.DERBY) + && !target.equals(Target.FIREBIRD) && !target.equals(Target.HSQLDB) && !target.equals(Target.H2) && !target.equals(Target.SQLITE) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 735578a825..302f117947 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -144,13 +144,13 @@ public void Beans() { } @Test - @ExcludeIn({ORACLE, CUBRID, DERBY, SQLSERVER, SQLITE, TERADATA}) + @ExcludeIn({ORACLE, CUBRID, FIREBIRD, DERBY, SQLSERVER, SQLITE, TERADATA}) public void Boolean_All() { assertTrue(query().from(employee).uniqueResult(SQLExpressions.all(employee.firstname.isNotNull()))); } @Test - @ExcludeIn({ORACLE, CUBRID, DERBY, SQLSERVER, SQLITE, TERADATA}) + @ExcludeIn({ORACLE, CUBRID, FIREBIRD, DERBY, SQLSERVER, SQLITE, TERADATA}) public void Boolean_Any() { assertTrue(query().from(employee).uniqueResult(SQLExpressions.any(employee.firstname.isNotNull()))); } From 9d60066d7af916ddcfc5853cdaee9987faef64d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Jun 2014 20:08:32 +0300 Subject: [PATCH 0223/1968] Improve initialization --- .../mysema/query/sql/FirebirdTemplates.java | 2 +- .../java/com/mysema/query/Connections.java | 964 ------------------ 2 files changed, 1 insertion(+), 965 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 5e5f57d5f8..4e1ab2da4b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -30,7 +30,7 @@ public FirebirdTemplates(boolean quote) { } public FirebirdTemplates(char escape, boolean quote) { - super("`", escape, quote); + super("\"", escape, quote); setDummyTable("RDB$DATABASE"); addClass2TypeMappings("smallint", Boolean.class, Byte.class); diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 6f45b4fd96..e69de29bb2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -1,964 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.mysema.query; - -import java.sql.*; -import java.util.Map; -import java.util.Properties; - -import com.google.common.collect.Maps; -import com.mysema.query.ddl.CreateTableClause; -import com.mysema.query.ddl.DropTableClause; -import com.mysema.query.sql.*; -import org.hsqldb.types.Types; - -/** - * @author tiwe - * - */ -public final class Connections { - - public static final int TEST_ROW_COUNT = 100; - - private static ThreadLocal connHolder = new ThreadLocal(); - - private static ThreadLocal targetHolder = new ThreadLocal(); - - private static ThreadLocal templatesHolder = new ThreadLocal(); - - // datetest - private static final String CREATE_TABLE_DATETEST = "create table DATE_TEST(DATE_TEST date)"; - - // survey - private static final String CREATE_TABLE_SURVEY = - "create table SURVEY(ID int auto_increment, NAME varchar(30), NAME2 varchar(30))"; - - // test - private static final String CREATE_TABLE_TEST = "create table TEST(NAME varchar(255))"; - - // timetest - private static final String CREATE_TABLE_TIMETEST = "create table TIME_TEST(TIME_TEST time)"; - - // employee - private static final String INSERT_INTO_EMPLOYEE = "insert into EMPLOYEE " + - "(ID, FIRSTNAME, LASTNAME, SALARY, DATEFIELD, TIMEFIELD, SUPERIOR_ID) " + - "values (?,?,?,?,?,?,?)"; - - private static final String INSERT_INTO_TEST_VALUES = "insert into TEST values(?)"; - - private static ThreadLocal stmtHolder = new ThreadLocal(); - - private static boolean derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited, firebirdInited; - - public static void close() throws SQLException{ - if (stmtHolder.get() != null) { - stmtHolder.get().close(); - } - if (connHolder.get() != null) { - connHolder.get().close(); - } - } - - public static Connection getConnection() { - return connHolder.get(); - } - - public static Target getTarget() { - return targetHolder.get(); - } - - public static SQLTemplates getTemplates() { - return templatesHolder.get(); - } - - public static void setTemplates(SQLTemplates templates) { - templatesHolder.set(templates); - } - - private static Connection getDerby() throws SQLException, ClassNotFoundException { - Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); - String url = "jdbc:derby:target/demoDB;create=true"; - return DriverManager.getConnection(url, "", ""); - } - - private static Connection getFirebird() throws SQLException, ClassNotFoundException { - Class.forName("org.firebirdsql.jdbc.FBDriver"); - String url = "jdbc:firebirdsql:localhost/3050:/var/lib/firebird/2.5/data/querydsl.fdb"; - return DriverManager.getConnection(url, "SYSDBA", "adfcb39e"); - } - - private static Connection getHSQL() throws SQLException, ClassNotFoundException { - Class.forName("org.hsqldb.jdbcDriver"); - String url = "jdbc:hsqldb:target/tutorial"; - return DriverManager.getConnection(url, "sa", ""); - } - - private static Connection getH2() throws SQLException, ClassNotFoundException{ - Class.forName("org.h2.Driver"); - String url = "jdbc:h2:~/dbs/h2-test;LOCK_MODE=0"; - return DriverManager.getConnection(url, "sa", ""); - } - - private static Connection getMySQL() throws SQLException, ClassNotFoundException { - Class.forName("com.mysql.jdbc.Driver"); - String url = "jdbc:mysql://localhost:3306/querydsl"; // ?useLegacyDatetimeCode=false - return DriverManager.getConnection(url, "querydsl", "querydsl"); - } - - private static Connection getOracle() throws SQLException, ClassNotFoundException{ - Class.forName("oracle.jdbc.driver.OracleDriver"); - String url = "jdbc:oracle:thin:@localhost:1521:xe"; - return DriverManager.getConnection(url, "querydsl", "querydsl"); - } - - private static Connection getPostgres() throws ClassNotFoundException, SQLException{ - Class.forName("org.postgresql.Driver"); - String url = "jdbc:postgresql://localhost:5432/querydsl"; - return DriverManager.getConnection(url, "querydsl", "querydsl"); - } - - private static Connection getSQLServer() throws ClassNotFoundException, SQLException{ - Class.forName("net.sourceforge.jtds.jdbc.Driver"); - Properties props = new Properties(); - props.put("user", "querydsl"); - props.put("password", "querydsl"); - props.put("sendTimeAsDatetime", "false"); - String url = "jdbc:jtds:sqlserver://localhost:1433/querydsl"; -// return DriverManager.getConnection(url, "querydsl", "querydsl"); - return DriverManager.getConnection(url, props); - } - - private static Connection getCubrid() throws ClassNotFoundException, SQLException { - Class.forName("cubrid.jdbc.driver.CUBRIDDriver"); - String url = "jdbc:cubrid:localhost:30000:demodb:public::"; - return DriverManager.getConnection(url); - } - - private static Connection getSQLite() throws SQLException, ClassNotFoundException { - //System.setProperty("sqlite.purejava", "true"); - Class.forName("org.sqlite.JDBC"); - return DriverManager.getConnection("jdbc:sqlite:target/sample.db"); - } - - private static Connection getTeradata() throws SQLException, ClassNotFoundException { - Class.forName("com.teradata.jdbc.TeraDriver"); - return DriverManager.getConnection("jdbc:teradata://teradata/dbc", "querydsl", "querydsl"); - } - - private static CreateTableClause createTable(SQLTemplates templates, String table) { - return new CreateTableClause(connHolder.get(), templates, table); - } - - public static void dropTable(SQLTemplates templates, String table) throws SQLException{ - new DropTableClause(connHolder.get(), templates, table).execute(); - } - - public static void dropType(Statement stmt, String type) throws SQLException { - try { - stmt.execute("drop type " + type); - } catch (SQLException e) { - if (!e.getMessage().contains("does not exist")) { - throw e; - } - } - } - - public static Statement getStatement() { - return stmtHolder.get(); - } - - private static void createEmployeeTable(SQLTemplates templates) { - createTable(templates, "EMPLOYEE") - .column("ID", Integer.class).notNull() - .column("FIRSTNAME", String.class).size(50) - .column("LASTNAME", String.class).size(50) - .column("SALARY", Double.class) - .column("DATEFIELD", Date.class) - .column("TIMEFIELD", Time.class) - .column("SUPERIOR_ID", Integer.class) - .primaryKey("PK_EMPLOYEE", "ID") - .foreignKey("FK_SUPERIOR","SUPERIOR_ID").references("EMPLOYEE","ID") - .execute(); - } - - public static Map getSpatialData() { - Map m = Maps.newHashMap(); - // point - m.put(1, "POINT (2 2)"); - m.put(2, "POINT (8 7)"); - m.put(3, "POINT (1 9)"); - m.put(4, "POINT (9 2)"); - m.put(5, "POINT (4 4)"); - // linestring - m.put(6, "LINESTRING (30 10, 10 30)"); - m.put(7, "LINESTRING (30 10, 10 30, 40 40)"); - // polygon - m.put(8, "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10), (20 30, 35 35, 30 20, 20 30))"); - m.put(9, "POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 35 35, 30 20, 20 30))"); - // multipoint - m.put(11, "MULTIPOINT (10 40, 40 30)"); - m.put(11, "MULTIPOINT (10 40, 40 30, 20 20, 30 10)"); - // multilinestring - m.put(12, "MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10))"); - m.put(13, "MULTILINESTRING ((10 10, 20 20, 10 40))"); - // multipolygon - m.put(14, "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"); - m.put(15, "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), " + - "((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), " + - "(30 20, 20 15, 20 25, 30 20)))"); - - // XXX POLYHEDRALSURFACE not supported - - /* GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)) - CIRCULARSTRING(1 5, 6 2, 7 3) - COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)) - CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) - MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2)) - TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0)) - TIN (((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0))) - */ - return m; - } - - public static void initCubrid() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.CUBRID); - //SQLTemplates templates = new MySQLTemplates(); - Connection c = getCubrid(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (cubridInited) { - return; - } - - // survey - stmt.execute("drop table if exists SURVEY"); - stmt.execute("create table SURVEY(ID int auto_increment(16693,2), " + - "NAME varchar(30)," + - "NAME2 varchar(30)," + - "constraint suryey_pk primary key(ID))"); - stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); - - // test - stmt.execute("drop table if exists \"TEST\""); - stmt.execute("create table \"TEST\"(NAME varchar(255))"); - PreparedStatement pstmt = c.prepareStatement("insert into \"TEST\" values(?)"); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - stmt.execute("drop table if exists EMPLOYEE"); - //createEmployeeTable(templates); - stmt.execute("create table EMPLOYEE ( " + - "ID INT PRIMARY KEY AUTO_INCREMENT, " + - "FIRSTNAME VARCHAR(50), " + - "LASTNAME VARCHAR(50), " + - "SALARY DECIMAL, " + - "DATEFIELD DATE, " + - "TIMEFIELD TIME, " + - "SUPERIOR_ID INT, " + - "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + - ")"); - - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - stmt.execute("drop table if exists TIME_TEST"); - stmt.execute("drop table if exists DATE_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - cubridInited = true; - } - - public static void initDerby() throws SQLException, ClassNotFoundException { - targetHolder.set(Target.DERBY); - SQLTemplates templates = new DerbyTemplates(); - Connection c = getDerby(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (derbyInited) { - return; - } - - // types - dropType(stmt, "price restrict"); - stmt.execute("create type price external name 'com.example.Price' language java"); - - // survey - dropTable(templates, "SURVEY"); - stmt.execute("create table SURVEY(" + - "ID int generated by default as identity(start with 1, increment by 1), " + - "NAME varchar(30)," + - "NAME2 varchar(30))"); - stmt.execute("insert into SURVEY values (1,'Hello World','Hello')"); - - // test - dropTable(templates, "TEST"); - stmt.execute(CREATE_TABLE_TEST); - stmt.execute("create index test_name on test(name)"); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - dropTable(templates, "EMPLOYEE"); - - createEmployeeTable(templates); - - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - dropTable(templates, "TIME_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - - dropTable(templates, "DATE_TEST"); - stmt.execute(CREATE_TABLE_DATETEST); - derbyInited = true; - } - - public static void initFirebird() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.FIREBIRD); - SQLTemplates templates = new FirebirdTemplates(); - Connection c = getFirebird(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (firebirdInited) { - return; - } - - // survey - dropTable(templates, "SURVEY"); - stmt.execute("create table SURVEY(ID int primary key, " + - "NAME varchar(30)," + - "NAME2 varchar(30))"); - stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); - - // test - dropTable(templates, "TEST"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - dropTable(templates, "EMPLOYEE"); - //createEmployeeTable(templates); - stmt.execute("create table EMPLOYEE ( " + - "ID INT PRIMARY KEY, " + - "FIRSTNAME VARCHAR(50), " + - "LASTNAME VARCHAR(50), " + - "SALARY DECIMAL, " + - "DATEFIELD DATE, " + - "TIMEFIELD TIME, " + - "SUPERIOR_ID INT, " + - "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + - ")"); - - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - dropTable(templates, "TIME_TEST"); - dropTable(templates, "DATE_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - firebirdInited = true; - } - - public static void initH2() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.H2); - SQLTemplates templates = new H2Templates(); - Connection c = getH2(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (h2Inited) { - return; - } - - stmt.execute("DROP ALIAS IF EXISTS InitGeoDB"); - stmt.execute("CREATE ALIAS InitGeoDB for \"geodb.GeoDB.InitGeoDB\""); - stmt.execute("CALL InitGeoDB()"); - - // shapes - dropTable(templates, "SHAPES"); - stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY blob)"); - for (Map.Entry entry : getSpatialData().entrySet()) { - stmt.execute("insert into SHAPES values(" + entry.getKey() - +", ST_GeomFromText('" + entry.getValue() + "', 4326))"); - } - - // qtest - stmt.execute("drop table QTEST if exists"); - stmt.execute("create table QTEST (ID int IDENTITY(1,1) NOT NULL, C1 int NULL)"); - - // survey - stmt.execute("drop table SURVEY if exists"); - stmt.execute(CREATE_TABLE_SURVEY); - stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello');"); - stmt.execute("alter table SURVEY alter column id int auto_increment"); - - // test - stmt.execute("drop table TEST if exists"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - stmt.execute("drop table EMPLOYEE if exists"); - createEmployeeTable(templates); - stmt.execute("alter table EMPLOYEE alter column id int auto_increment"); - addEmployees(INSERT_INTO_EMPLOYEE); - - - // date_test and time_test - stmt.execute("drop table TIME_TEST if exists"); - stmt.execute("drop table DATE_TEST if exists"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - h2Inited = true; - } - - public static void initHSQL() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.HSQLDB); - SQLTemplates templates = new HSQLDBTemplates(); - Connection c = getHSQL(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (hsqlInited) { - return; - } - - // dual - stmt.execute("drop table DUAL if exists"); - stmt.execute("create table DUAL ( DUMMY varchar(1) )"); - stmt.execute("insert into DUAL (DUMMY) values ('X')"); - - // survey - stmt.execute("drop table SURVEY if exists"); - //stmt.execute(CREATE_TABLE_SURVEY); - stmt.execute("create table SURVEY(" + - "ID int generated by default as identity, " + - "NAME varchar(30)," + - "NAME2 varchar(30))"); - stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello')"); - - // test - stmt.execute("drop table TEST if exists"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - stmt.execute("drop table EMPLOYEE if exists"); - createEmployeeTable(templates); - stmt.execute("alter table EMPLOYEE alter column id int generated by default as identity"); - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - stmt.execute("drop table TIME_TEST if exists"); - stmt.execute("drop table DATE_TEST if exists"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - hsqlInited = true; - } - - public static void initMySQL() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.MYSQL); - //SQLTemplates templates = new MySQLTemplates(); - Connection c = getMySQL(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (mysqlInited) { - return; - } - - // shapes - stmt.execute("drop table if exists SHAPES"); - stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY geometry)"); - for (Map.Entry entry : getSpatialData().entrySet()) { - stmt.execute("insert into SHAPES values(" + entry.getKey() - +", GeomFromText('" + entry.getValue() + "'))"); - } - - // survey - stmt.execute("drop table if exists SURVEY"); - stmt.execute("create table SURVEY(ID int primary key auto_increment, " + - "NAME varchar(30)," + - "NAME2 varchar(30))"); - stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); - - // test - stmt.execute("drop table if exists TEST"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - stmt.execute("drop table if exists EMPLOYEE"); - //createEmployeeTable(templates); - stmt.execute("create table EMPLOYEE ( " + - "ID INT PRIMARY KEY AUTO_INCREMENT, " + - "FIRSTNAME VARCHAR(50), " + - "LASTNAME VARCHAR(50), " + - "SALARY DECIMAL, " + - "DATEFIELD DATE, " + - "TIMEFIELD TIME, " + - "SUPERIOR_ID INT, " + - "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + - ")"); - - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - stmt.execute("drop table if exists TIME_TEST"); - stmt.execute("drop table if exists DATE_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - mysqlInited = true; - } - - public static void initOracle() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.ORACLE); - SQLTemplates templates = new OracleTemplates(); - Connection c = getOracle(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (oracleInited) { - return; - } - - // types - stmt.execute("create or replace type ssn_t as object (ssn_type char(11))"); - - // survey - dropTable(templates, "SURVEY"); - stmt.execute("create table SURVEY (ID number(10,0), " + - "NAME varchar(30 char)," + - "NAME2 varchar(30 char))"); - - try { - stmt.execute("drop sequence survey_seq"); - } catch(SQLException e) { - if (!e.getMessage().contains("sequence does not exist")) { - throw e; - } - } - - stmt.execute("create sequence survey_seq"); - stmt.execute("create or replace trigger survey_trigger\n"+ - "before insert on survey\n"+ - "for each row\n" + - "when (new.id is null)\n"+ - "begin\n"+ - " select survey_seq.nextval into :new.id from dual;\n"+ - "end;\n"); - - stmt.execute("insert into SURVEY values (1,'Hello World','Hello')"); - - // test - dropTable(templates, "TEST"); - stmt.execute("create table TEST(name varchar(255))"); - String sql = "insert into TEST values(?)"; - PreparedStatement pstmt = c.prepareStatement(sql); - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - - // employee - dropTable(templates, "EMPLOYEE"); - stmt.execute("create table EMPLOYEE ( " + - "ID NUMBER(10,0), " + - "FIRSTNAME VARCHAR2(50 CHAR), " + - "LASTNAME VARCHAR2(50 CHAR), " + - "SALARY DOUBLE PRECISION, " + - "DATEFIELD DATE, " + - "TIMEFIELD TIMESTAMP, " + - "SUPERIOR_ID NUMBER(10,0), " + - "CONSTRAINT PK_EMPLOYEE PRIMARY KEY(ID), " + - "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID)" + - ")"); - - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - dropTable(templates, "DATE_TEST"); - stmt.execute("create table date_test(date_test date)"); - oracleInited = true; - } - - public static void initPostgres() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.POSTGRES); - SQLTemplates templates = new PostgresTemplates(true); - // NOTE : unquoted identifiers are converted to lower case in Postgres - Connection c = getPostgres(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (postgresInited) { - return; - } - - // shapes - dropTable(templates, "SHAPES"); -// stmt.execute("create table \"SHAPES\" (\"ID\" int not null primary key, \"GEOMETRY\" geography(POINT,4326))"); - stmt.execute("create table \"SHAPES\" (\"ID\" int not null primary key)"); - stmt.execute("select AddGeometryColumn('SHAPES', 'GEOMETRY', -1, 'GEOMETRY', 2)"); - for (Map.Entry entry : getSpatialData().entrySet()) { - stmt.execute("insert into \"SHAPES\" values(" + entry.getKey() - +", '" + entry.getValue() + "')"); - } - - // types - dropType(stmt, "u_country"); - stmt.execute("create type u_country as enum ('Brazil', 'England', 'Germany')"); - - dropType(stmt, "u_street_type"); - stmt.execute("create type u_street_type as (street VARCHAR(100), number VARCHAR(30))"); - - // arrays - dropTable(templates, "ARRAYTEST"); - stmt.execute("create table \"ARRAYTEST\" (\n" + - "\"ID\" bigint primary key,\n" + - "\"MYARRAY\" varchar(8)[])"); - - // survey - dropTable(templates, "SURVEY"); - try { - stmt.execute("drop sequence SURVEY_SEQ"); - } catch(SQLException e) { - if (!e.getMessage().contains("does not exist")) { - throw e; - } - } - stmt.execute("create sequence SURVEY_SEQ"); - stmt.execute("create table \"SURVEY\"(" + - "\"ID\" int DEFAULT NEXTVAL('SURVEY_SEQ'), " + - "\"NAME\" varchar(30), \"NAME2\" varchar(30))"); - stmt.execute("insert into \"SURVEY\" values (1, 'Hello World', 'Hello')"); - - // test - dropTable(templates, "TEST"); - stmt.execute(quote(CREATE_TABLE_TEST,"TEST","NAME")); - String sql = quote(INSERT_INTO_TEST_VALUES,"TEST"); - PreparedStatement pstmt = c.prepareStatement(sql); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - // stmt.execute("drop table employee if exists"); - dropTable(templates, "EMPLOYEE"); - createEmployeeTable(templates); - addEmployees("insert into \"EMPLOYEE\" " + - "(\"ID\", \"FIRSTNAME\", \"LASTNAME\", \"SALARY\", \"DATEFIELD\", \"TIMEFIELD\", \"SUPERIOR_ID\") " + - "values (?,?,?,?,?,?,?)"); - - // date_test and time_test - dropTable(templates, "TIME_TEST"); - dropTable(templates, "DATE_TEST"); - stmt.execute(quote(CREATE_TABLE_TIMETEST, "TIME_TEST")); - stmt.execute(quote(CREATE_TABLE_DATETEST, "DATE_TEST")); - postgresInited = true; - } - - public static void initSQLite() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.SQLITE); -// SQLTemplates templates = new SQLiteTemplates(); - Connection c = getSQLite(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (sqliteInited) { - return; - } - - // qtest - stmt.execute("drop table if exists QTEST"); - stmt.execute("create table QTEST (ID int IDENTITY(1,1) NOT NULL, C1 int NULL)"); - - // survey - stmt.execute("drop table if exists SURVEY"); - stmt.execute("create table SURVEY(ID int auto_increment, " + - "NAME varchar(30)," + - "NAME2 varchar(30)," + - "constraint suryey_pk primary key(ID))"); - stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); - - // test - stmt.execute("drop table if exists TEST"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - stmt.execute("drop table if exists EMPLOYEE"); - stmt.execute("create table EMPLOYEE ( " + - "ID INT AUTO_INCREMENT, " + - "FIRSTNAME VARCHAR(50), " + - "LASTNAME VARCHAR(50), " + - "SALARY DECIMAL, " + - "DATEFIELD DATE, " + - "TIMEFIELD TIME, " + - "SUPERIOR_ID INT, " + - "CONSTRAINT PK_EMPLOYEE PRIMARY KEY(ID),"+ - "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + - ")"); - addEmployees(INSERT_INTO_EMPLOYEE); - - - // date_test and time_test - stmt.execute("drop table if exists TIME_TEST"); - stmt.execute("drop table if exists DATE_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - sqliteInited = true; - } - - public static void initSQLServer() throws SQLException, ClassNotFoundException { - targetHolder.set(Target.SQLSERVER); - SQLTemplates templates = new SQLServerTemplates(); - Connection c = getSQLServer(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (sqlServerInited) { - return; - } - - dropTable(templates, "SHAPES"); - stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY geometry)"); - for (Map.Entry entry : getSpatialData().entrySet()) { - stmt.execute("insert into SHAPES values(" + entry.getKey() - +", geometry::STGeomFromText('" + entry.getValue() + "', 0))"); - } - - // survey - dropTable(templates, "SURVEY"); - stmt.execute("create table SURVEY(ID int, NAME varchar(30), NAME2 varchar(30))"); - stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello')"); - - // test - dropTable(templates, "TEST"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - dropTable(templates, "EMPLOYEE"); - createEmployeeTable(templates); - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - dropTable(templates, "TIME_TEST"); - dropTable(templates, "DATE_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - sqlServerInited = true; - } - - public static void initTeradata() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.TERADATA); - SQLTemplates templates = new TeradataTemplates(); - Connection c = getTeradata(); - connHolder.set(c); - Statement stmt = c.createStatement(); - stmtHolder.set(stmt); - - if (teradataInited) { - return; - } - - String identity = "GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1)"; - - // shapes - dropTable(templates, "SHAPES"); - stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY ST_GEOMETRY)"); - for (Map.Entry entry : getSpatialData().entrySet()) { - stmt.execute("insert into SHAPES values(" + entry.getKey() - +", '" + entry.getValue() + "')"); - } - - // qtest - dropTable(templates, "QTEST"); - stmt.execute("create table QTEST (ID int " + identity + " NOT NULL, C1 int NULL)"); - - // survey - dropTable(templates, "SURVEY"); - stmt.execute("create table SURVEY(ID int " + identity + ", NAME varchar(30), NAME2 varchar(30))"); - stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello');"); - - // test - dropTable(templates, "TEST"); - stmt.execute(CREATE_TABLE_TEST); - PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); - try{ - for (int i = 0; i < TEST_ROW_COUNT; i++) { - pstmt.setString(1, "name" + i); - pstmt.addBatch(); - } - pstmt.executeBatch(); - }finally{ - pstmt.close(); - } - - // employee - dropTable(templates, "EMPLOYEE"); - stmt.execute("create table EMPLOYEE (\n" + - "ID INTEGER NOT NULL PRIMARY KEY, \n" + - "FIRSTNAME VARCHAR(100),\n" + - "LASTNAME VARCHAR(100),\n" + - "SALARY DOUBLE PRECISION,\n" + - "DATEFIELD DATE,\n" + - "TIMEFIELD TIME,\n" + - "SUPERIOR_ID INTEGER,\n" + - "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID))"); - addEmployees(INSERT_INTO_EMPLOYEE); - - // date_test and time_test - dropTable(templates, "TIME_TEST"); - dropTable(templates, "DATE_TEST"); - stmt.execute(CREATE_TABLE_TIMETEST); - stmt.execute(CREATE_TABLE_DATETEST); - teradataInited = true; - } - - static void addEmployee(String sql, int id, String firstName, String lastName, - double salary, int superiorId) throws SQLException { - PreparedStatement stmt = connHolder.get().prepareStatement(sql); - stmt.setInt(1, id); - stmt.setString(2, firstName); - stmt.setString(3,lastName); - stmt.setDouble(4, salary); - stmt.setDate(5, Constants.date); - stmt.setTime(6, Constants.time); - if (superiorId <= 0) { - stmt.setNull(7, Types.INTEGER); - } else { - stmt.setInt(7, superiorId); - } - stmt.execute(); - stmt.close(); - } - - private static void addEmployees(String sql) throws SQLException { - addEmployee(sql, 1, "Mike", "Smith", 160000, -1); - addEmployee(sql, 2, "Mary", "Smith", 140000, -1); - - // Employee under Mike - addEmployee(sql, 10, "Joe", "Divis", 50000, 1); - addEmployee(sql, 11, "Peter", "Mason", 45000, 1); - addEmployee(sql, 12, "Steve", "Johnson", 40000, 1); - addEmployee(sql, 13, "Jim", "Hood", 35000, 1); - - // Employee under Mike - addEmployee(sql, 20, "Jennifer", "Divis", 60000, 2); - addEmployee(sql, 21, "Helen", "Mason", 50000, 2); - addEmployee(sql, 22, "Daisy", "Johnson", 40000, 2); - addEmployee(sql, 23, "Barbara", "Hood", 30000, 2); - } - - private static String quote(String sql, String... identifiers) { - String rv = sql; - for (String id : identifiers) { - rv = rv.replace(id, "\"" + id + "\""); - } - return rv; - } - - private Connections() {} -} From d02607f27ea83df3b743284373fa94b8e5ea878b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Jun 2014 20:19:56 +0300 Subject: [PATCH 0224/1968] Add firebird config to travis --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index b463661444..4e4b2345bb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,5 +25,10 @@ before_script: - sudo apt-get install cubrid-demodb - /etc/profile.d/cubrid.sh - hostname | sed 's/^/127.0.0.1 /g' | cat - /etc/hosts > /tmp/etchoststemp && sudo mv /tmp/etchoststemp /etc/hosts --force + - sudo apt-get install firebird2.5-superclassic + - cd /usr/share/doc/firebird2.5-examples/examples/empbuild/ + - gunzip employee.fdb.gz + - sudo chown firebird.firebird employee.fdb + - mv employee.fdb /var/lib/firebird/2.5/data/ script: - sh -c 'cd querydsl-root && mvn -B test -Pall,travis' From 77b5b5c9169723815feca19fff0c5fe838785c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Jun 2014 21:43:14 +0300 Subject: [PATCH 0225/1968] Fix templates --- .../mysema/query/MatchingFiltersFactory.java | 20 +- .../mysema/query/sql/FirebirdTemplates.java | 5 + .../java/com/mysema/query/Connections.java | 964 ++++++++++++++++++ 3 files changed, 972 insertions(+), 17 deletions(-) diff --git a/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java b/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java index 1cba70b4cc..92dae4b650 100644 --- a/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java @@ -17,23 +17,8 @@ import java.util.HashSet; import com.google.common.collect.ImmutableList; -import com.mysema.query.types.CollectionExpression; -import com.mysema.query.types.Constant; -import com.mysema.query.types.Expression; -import com.mysema.query.types.MapExpression; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.expr.ArrayExpression; -import com.mysema.query.types.expr.BooleanExpression; -import com.mysema.query.types.expr.CollectionExpressionBase; -import com.mysema.query.types.expr.ComparableExpression; -import com.mysema.query.types.expr.DateExpression; -import com.mysema.query.types.expr.DateTimeExpression; -import com.mysema.query.types.expr.ListExpression; -import com.mysema.query.types.expr.MapExpressionBase; -import com.mysema.query.types.expr.NumberExpression; -import com.mysema.query.types.expr.SimpleExpression; -import com.mysema.query.types.expr.StringExpression; -import com.mysema.query.types.expr.TimeExpression; +import com.mysema.query.types.*; +import com.mysema.query.types.expr.*; import com.mysema.query.types.path.ListPath; /** @@ -260,6 +245,7 @@ public Collection string(StringExpression expr, StringExpression othe if (module != Module.LUCENE) { if (!module.equals(Module.SQL) || (!target.equals(Target.HSQLDB) + && !target.equals(Target.FIREBIRD) && !target.equals(Target.H2) && !target.equals(Target.DERBY) && !target.equals(Target.SQLITE) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 4e1ab2da4b..b057973ba1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -33,6 +33,8 @@ public FirebirdTemplates(char escape, boolean quote) { super("\"", escape, quote); setDummyTable("RDB$DATABASE"); addClass2TypeMappings("smallint", Boolean.class, Byte.class); + addClass2TypeMappings("varchar(256)", String.class); + addClass2TypeMappings("double precision", Double.class); // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); @@ -43,6 +45,7 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.StringOps.LOCATE, "position({0},{1})"); add(Ops.StringOps.LOCATE2, "position({0},{1},{2})"); add(Ops.STRING_LENGTH, "char_length({0})"); + add(Ops.STRING_IS_EMPTY, "char_length({0}) = 0"); add(Ops.AggOps.BOOLEAN_ANY, "any({0})"); add(Ops.AggOps.BOOLEAN_ALL, "all({0})"); @@ -53,6 +56,8 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); + add(Ops.MathOps.DEG, "({0} / pi() * 180.0)"); + add(Ops.MathOps.RAD, "({0} / 180.0 * pi())"); // add(Ops.DateTimeOps.DATE, "cast({0} as date)"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index e69de29bb2..3904decf21 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -0,0 +1,964 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.mysema.query; + +import java.sql.*; +import java.util.Map; +import java.util.Properties; + +import com.google.common.collect.Maps; +import com.mysema.query.ddl.CreateTableClause; +import com.mysema.query.ddl.DropTableClause; +import com.mysema.query.sql.*; +import org.hsqldb.types.Types; + +/** + * @author tiwe + * + */ +public final class Connections { + + public static final int TEST_ROW_COUNT = 100; + + private static ThreadLocal connHolder = new ThreadLocal(); + + private static ThreadLocal targetHolder = new ThreadLocal(); + + private static ThreadLocal templatesHolder = new ThreadLocal(); + + // datetest + private static final String CREATE_TABLE_DATETEST = "create table DATE_TEST(DATE_TEST date)"; + + // survey + private static final String CREATE_TABLE_SURVEY = + "create table SURVEY(ID int auto_increment, NAME varchar(30), NAME2 varchar(30))"; + + // test + private static final String CREATE_TABLE_TEST = "create table TEST(NAME varchar(255))"; + + // timetest + private static final String CREATE_TABLE_TIMETEST = "create table TIME_TEST(TIME_TEST time)"; + + // employee + private static final String INSERT_INTO_EMPLOYEE = "insert into EMPLOYEE " + + "(ID, FIRSTNAME, LASTNAME, SALARY, DATEFIELD, TIMEFIELD, SUPERIOR_ID) " + + "values (?,?,?,?,?,?,?)"; + + private static final String INSERT_INTO_TEST_VALUES = "insert into TEST values(?)"; + + private static ThreadLocal stmtHolder = new ThreadLocal(); + + private static boolean derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited, firebirdInited; + + public static void close() throws SQLException{ + if (stmtHolder.get() != null) { + stmtHolder.get().close(); + } + if (connHolder.get() != null) { + connHolder.get().close(); + } + } + + public static Connection getConnection() { + return connHolder.get(); + } + + public static Target getTarget() { + return targetHolder.get(); + } + + public static SQLTemplates getTemplates() { + return templatesHolder.get(); + } + + public static void setTemplates(SQLTemplates templates) { + templatesHolder.set(templates); + } + + private static Connection getDerby() throws SQLException, ClassNotFoundException { + Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); + String url = "jdbc:derby:target/demoDB;create=true"; + return DriverManager.getConnection(url, "", ""); + } + + private static Connection getFirebird() throws SQLException, ClassNotFoundException { + Class.forName("org.firebirdsql.jdbc.FBDriver"); + String url = "jdbc:firebirdsql:localhost/3050:/var/lib/firebird/2.5/data/querydsl.fdb"; + return DriverManager.getConnection(url, "SYSDBA", "adfcb39e"); + } + + private static Connection getHSQL() throws SQLException, ClassNotFoundException { + Class.forName("org.hsqldb.jdbcDriver"); + String url = "jdbc:hsqldb:target/tutorial"; + return DriverManager.getConnection(url, "sa", ""); + } + + private static Connection getH2() throws SQLException, ClassNotFoundException{ + Class.forName("org.h2.Driver"); + String url = "jdbc:h2:~/dbs/h2-test;LOCK_MODE=0"; + return DriverManager.getConnection(url, "sa", ""); + } + + private static Connection getMySQL() throws SQLException, ClassNotFoundException { + Class.forName("com.mysql.jdbc.Driver"); + String url = "jdbc:mysql://localhost:3306/querydsl"; // ?useLegacyDatetimeCode=false + return DriverManager.getConnection(url, "querydsl", "querydsl"); + } + + private static Connection getOracle() throws SQLException, ClassNotFoundException{ + Class.forName("oracle.jdbc.driver.OracleDriver"); + String url = "jdbc:oracle:thin:@localhost:1521:xe"; + return DriverManager.getConnection(url, "querydsl", "querydsl"); + } + + private static Connection getPostgres() throws ClassNotFoundException, SQLException{ + Class.forName("org.postgresql.Driver"); + String url = "jdbc:postgresql://localhost:5432/querydsl"; + return DriverManager.getConnection(url, "querydsl", "querydsl"); + } + + private static Connection getSQLServer() throws ClassNotFoundException, SQLException{ + Class.forName("net.sourceforge.jtds.jdbc.Driver"); + Properties props = new Properties(); + props.put("user", "querydsl"); + props.put("password", "querydsl"); + props.put("sendTimeAsDatetime", "false"); + String url = "jdbc:jtds:sqlserver://localhost:1433/querydsl"; +// return DriverManager.getConnection(url, "querydsl", "querydsl"); + return DriverManager.getConnection(url, props); + } + + private static Connection getCubrid() throws ClassNotFoundException, SQLException { + Class.forName("cubrid.jdbc.driver.CUBRIDDriver"); + String url = "jdbc:cubrid:localhost:30000:demodb:public::"; + return DriverManager.getConnection(url); + } + + private static Connection getSQLite() throws SQLException, ClassNotFoundException { + //System.setProperty("sqlite.purejava", "true"); + Class.forName("org.sqlite.JDBC"); + return DriverManager.getConnection("jdbc:sqlite:target/sample.db"); + } + + private static Connection getTeradata() throws SQLException, ClassNotFoundException { + Class.forName("com.teradata.jdbc.TeraDriver"); + return DriverManager.getConnection("jdbc:teradata://teradata/dbc", "querydsl", "querydsl"); + } + + private static CreateTableClause createTable(SQLTemplates templates, String table) { + return new CreateTableClause(connHolder.get(), templates, table); + } + + public static void dropTable(SQLTemplates templates, String table) throws SQLException{ + new DropTableClause(connHolder.get(), templates, table).execute(); + } + + public static void dropType(Statement stmt, String type) throws SQLException { + try { + stmt.execute("drop type " + type); + } catch (SQLException e) { + if (!e.getMessage().contains("does not exist")) { + throw e; + } + } + } + + public static Statement getStatement() { + return stmtHolder.get(); + } + + private static void createEmployeeTable(SQLTemplates templates) { + createTable(templates, "EMPLOYEE") + .column("ID", Integer.class).notNull() + .column("FIRSTNAME", String.class).size(50) + .column("LASTNAME", String.class).size(50) + .column("SALARY", Double.class) + .column("DATEFIELD", Date.class) + .column("TIMEFIELD", Time.class) + .column("SUPERIOR_ID", Integer.class) + .primaryKey("PK_EMPLOYEE", "ID") + .foreignKey("FK_SUPERIOR","SUPERIOR_ID").references("EMPLOYEE","ID") + .execute(); + } + + public static Map getSpatialData() { + Map m = Maps.newHashMap(); + // point + m.put(1, "POINT (2 2)"); + m.put(2, "POINT (8 7)"); + m.put(3, "POINT (1 9)"); + m.put(4, "POINT (9 2)"); + m.put(5, "POINT (4 4)"); + // linestring + m.put(6, "LINESTRING (30 10, 10 30)"); + m.put(7, "LINESTRING (30 10, 10 30, 40 40)"); + // polygon + m.put(8, "POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10), (20 30, 35 35, 30 20, 20 30))"); + m.put(9, "POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10), (20 30, 35 35, 30 20, 20 30))"); + // multipoint + m.put(11, "MULTIPOINT (10 40, 40 30)"); + m.put(11, "MULTIPOINT (10 40, 40 30, 20 20, 30 10)"); + // multilinestring + m.put(12, "MULTILINESTRING ((10 10, 20 20, 10 40), (40 40, 30 30, 40 20, 30 10))"); + m.put(13, "MULTILINESTRING ((10 10, 20 20, 10 40))"); + // multipolygon + m.put(14, "MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)), ((15 5, 40 10, 10 20, 5 10, 15 5)))"); + m.put(15, "MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), " + + "((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), " + + "(30 20, 20 15, 20 25, 30 20)))"); + + // XXX POLYHEDRALSURFACE not supported + + /* GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10)) + CIRCULARSTRING(1 5, 6 2, 7 3) + COMPOUNDCURVE(CIRCULARSTRING(0 0,1 1,1 0),(1 0,0 1)) + CURVEPOLYGON(CIRCULARSTRING(-2 0,-1 -1,0 0,1 -1,2 0,0 2,-2 0),(-1 0,0 0.5,1 0,0 1,-1 0)) + MULTICURVE((5 5,3 5,3 3,0 3),CIRCULARSTRING(0 0,2 1,2 2)) + TRIANGLE((0 0 0,0 1 0,1 1 0,0 0 0)) + TIN (((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0))) + */ + return m; + } + + public static void initCubrid() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.CUBRID); + //SQLTemplates templates = new MySQLTemplates(); + Connection c = getCubrid(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (cubridInited) { + return; + } + + // survey + stmt.execute("drop table if exists SURVEY"); + stmt.execute("create table SURVEY(ID int auto_increment(16693,2), " + + "NAME varchar(30)," + + "NAME2 varchar(30)," + + "constraint suryey_pk primary key(ID))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); + + // test + stmt.execute("drop table if exists \"TEST\""); + stmt.execute("create table \"TEST\"(NAME varchar(255))"); + PreparedStatement pstmt = c.prepareStatement("insert into \"TEST\" values(?)"); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + stmt.execute("drop table if exists EMPLOYEE"); + //createEmployeeTable(templates); + stmt.execute("create table EMPLOYEE ( " + + "ID INT PRIMARY KEY AUTO_INCREMENT, " + + "FIRSTNAME VARCHAR(50), " + + "LASTNAME VARCHAR(50), " + + "SALARY DECIMAL, " + + "DATEFIELD DATE, " + + "TIMEFIELD TIME, " + + "SUPERIOR_ID INT, " + + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + + ")"); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + stmt.execute("drop table if exists TIME_TEST"); + stmt.execute("drop table if exists DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + cubridInited = true; + } + + public static void initDerby() throws SQLException, ClassNotFoundException { + targetHolder.set(Target.DERBY); + SQLTemplates templates = new DerbyTemplates(); + Connection c = getDerby(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (derbyInited) { + return; + } + + // types + dropType(stmt, "price restrict"); + stmt.execute("create type price external name 'com.example.Price' language java"); + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY(" + + "ID int generated by default as identity(start with 1, increment by 1), " + + "NAME varchar(30)," + + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello')"); + + // test + dropTable(templates, "TEST"); + stmt.execute(CREATE_TABLE_TEST); + stmt.execute("create index test_name on test(name)"); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + dropTable(templates, "EMPLOYEE"); + + createEmployeeTable(templates); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + + dropTable(templates, "DATE_TEST"); + stmt.execute(CREATE_TABLE_DATETEST); + derbyInited = true; + } + + public static void initFirebird() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.FIREBIRD); + SQLTemplates templates = new FirebirdTemplates(); + Connection c = getFirebird(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (firebirdInited) { + return; + } + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY(ID int primary key, " + + "NAME varchar(30)," + + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); + + // test + dropTable(templates, "TEST"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + dropTable(templates, "EMPLOYEE"); + //createEmployeeTable(templates); + stmt.execute("create table EMPLOYEE ( " + + "ID INT PRIMARY KEY, " + + "FIRSTNAME VARCHAR(50), " + + "LASTNAME VARCHAR(50), " + + "SALARY DECIMAL, " + + "DATEFIELD DATE, " + + "TIMEFIELD TIME, " + + "SUPERIOR_ID INT, " + + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + + ")"); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + dropTable(templates, "DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + firebirdInited = true; + } + + public static void initH2() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.H2); + SQLTemplates templates = new H2Templates(); + Connection c = getH2(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (h2Inited) { + return; + } + + stmt.execute("DROP ALIAS IF EXISTS InitGeoDB"); + stmt.execute("CREATE ALIAS InitGeoDB for \"geodb.GeoDB.InitGeoDB\""); + stmt.execute("CALL InitGeoDB()"); + + // shapes + dropTable(templates, "SHAPES"); + stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY blob)"); + for (Map.Entry entry : getSpatialData().entrySet()) { + stmt.execute("insert into SHAPES values(" + entry.getKey() + +", ST_GeomFromText('" + entry.getValue() + "', 4326))"); + } + + // qtest + stmt.execute("drop table QTEST if exists"); + stmt.execute("create table QTEST (ID int IDENTITY(1,1) NOT NULL, C1 int NULL)"); + + // survey + stmt.execute("drop table SURVEY if exists"); + stmt.execute(CREATE_TABLE_SURVEY); + stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello');"); + stmt.execute("alter table SURVEY alter column id int auto_increment"); + + // test + stmt.execute("drop table TEST if exists"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + stmt.execute("drop table EMPLOYEE if exists"); + createEmployeeTable(templates); + stmt.execute("alter table EMPLOYEE alter column id int auto_increment"); + addEmployees(INSERT_INTO_EMPLOYEE); + + + // date_test and time_test + stmt.execute("drop table TIME_TEST if exists"); + stmt.execute("drop table DATE_TEST if exists"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + h2Inited = true; + } + + public static void initHSQL() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.HSQLDB); + SQLTemplates templates = new HSQLDBTemplates(); + Connection c = getHSQL(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (hsqlInited) { + return; + } + + // dual + stmt.execute("drop table DUAL if exists"); + stmt.execute("create table DUAL ( DUMMY varchar(1) )"); + stmt.execute("insert into DUAL (DUMMY) values ('X')"); + + // survey + stmt.execute("drop table SURVEY if exists"); + //stmt.execute(CREATE_TABLE_SURVEY); + stmt.execute("create table SURVEY(" + + "ID int generated by default as identity, " + + "NAME varchar(30)," + + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello')"); + + // test + stmt.execute("drop table TEST if exists"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + stmt.execute("drop table EMPLOYEE if exists"); + createEmployeeTable(templates); + stmt.execute("alter table EMPLOYEE alter column id int generated by default as identity"); + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + stmt.execute("drop table TIME_TEST if exists"); + stmt.execute("drop table DATE_TEST if exists"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + hsqlInited = true; + } + + public static void initMySQL() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.MYSQL); + //SQLTemplates templates = new MySQLTemplates(); + Connection c = getMySQL(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (mysqlInited) { + return; + } + + // shapes + stmt.execute("drop table if exists SHAPES"); + stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY geometry)"); + for (Map.Entry entry : getSpatialData().entrySet()) { + stmt.execute("insert into SHAPES values(" + entry.getKey() + +", GeomFromText('" + entry.getValue() + "'))"); + } + + // survey + stmt.execute("drop table if exists SURVEY"); + stmt.execute("create table SURVEY(ID int primary key auto_increment, " + + "NAME varchar(30)," + + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); + + // test + stmt.execute("drop table if exists TEST"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + stmt.execute("drop table if exists EMPLOYEE"); + //createEmployeeTable(templates); + stmt.execute("create table EMPLOYEE ( " + + "ID INT PRIMARY KEY AUTO_INCREMENT, " + + "FIRSTNAME VARCHAR(50), " + + "LASTNAME VARCHAR(50), " + + "SALARY DECIMAL, " + + "DATEFIELD DATE, " + + "TIMEFIELD TIME, " + + "SUPERIOR_ID INT, " + + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + + ")"); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + stmt.execute("drop table if exists TIME_TEST"); + stmt.execute("drop table if exists DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + mysqlInited = true; + } + + public static void initOracle() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.ORACLE); + SQLTemplates templates = new OracleTemplates(); + Connection c = getOracle(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (oracleInited) { + return; + } + + // types + stmt.execute("create or replace type ssn_t as object (ssn_type char(11))"); + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY (ID number(10,0), " + + "NAME varchar(30 char)," + + "NAME2 varchar(30 char))"); + + try { + stmt.execute("drop sequence survey_seq"); + } catch(SQLException e) { + if (!e.getMessage().contains("sequence does not exist")) { + throw e; + } + } + + stmt.execute("create sequence survey_seq"); + stmt.execute("create or replace trigger survey_trigger\n"+ + "before insert on survey\n"+ + "for each row\n" + + "when (new.id is null)\n"+ + "begin\n"+ + " select survey_seq.nextval into :new.id from dual;\n"+ + "end;\n"); + + stmt.execute("insert into SURVEY values (1,'Hello World','Hello')"); + + // test + dropTable(templates, "TEST"); + stmt.execute("create table TEST(name varchar(255))"); + String sql = "insert into TEST values(?)"; + PreparedStatement pstmt = c.prepareStatement(sql); + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + + // employee + dropTable(templates, "EMPLOYEE"); + stmt.execute("create table EMPLOYEE ( " + + "ID NUMBER(10,0), " + + "FIRSTNAME VARCHAR2(50 CHAR), " + + "LASTNAME VARCHAR2(50 CHAR), " + + "SALARY DOUBLE PRECISION, " + + "DATEFIELD DATE, " + + "TIMEFIELD TIMESTAMP, " + + "SUPERIOR_ID NUMBER(10,0), " + + "CONSTRAINT PK_EMPLOYEE PRIMARY KEY(ID), " + + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID)" + + ")"); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "DATE_TEST"); + stmt.execute("create table date_test(date_test date)"); + oracleInited = true; + } + + public static void initPostgres() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.POSTGRES); + SQLTemplates templates = new PostgresTemplates(true); + // NOTE : unquoted identifiers are converted to lower case in Postgres + Connection c = getPostgres(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (postgresInited) { + return; + } + + // shapes + dropTable(templates, "SHAPES"); +// stmt.execute("create table \"SHAPES\" (\"ID\" int not null primary key, \"GEOMETRY\" geography(POINT,4326))"); + stmt.execute("create table \"SHAPES\" (\"ID\" int not null primary key)"); + stmt.execute("select AddGeometryColumn('SHAPES', 'GEOMETRY', -1, 'GEOMETRY', 2)"); + for (Map.Entry entry : getSpatialData().entrySet()) { + stmt.execute("insert into \"SHAPES\" values(" + entry.getKey() + +", '" + entry.getValue() + "')"); + } + + // types + dropType(stmt, "u_country"); + stmt.execute("create type u_country as enum ('Brazil', 'England', 'Germany')"); + + dropType(stmt, "u_street_type"); + stmt.execute("create type u_street_type as (street VARCHAR(100), number VARCHAR(30))"); + + // arrays + dropTable(templates, "ARRAYTEST"); + stmt.execute("create table \"ARRAYTEST\" (\n" + + "\"ID\" bigint primary key,\n" + + "\"MYARRAY\" varchar(8)[])"); + + // survey + dropTable(templates, "SURVEY"); + try { + stmt.execute("drop sequence SURVEY_SEQ"); + } catch(SQLException e) { + if (!e.getMessage().contains("does not exist")) { + throw e; + } + } + stmt.execute("create sequence SURVEY_SEQ"); + stmt.execute("create table \"SURVEY\"(" + + "\"ID\" int DEFAULT NEXTVAL('SURVEY_SEQ'), " + + "\"NAME\" varchar(30), \"NAME2\" varchar(30))"); + stmt.execute("insert into \"SURVEY\" values (1, 'Hello World', 'Hello')"); + + // test + dropTable(templates, "TEST"); + stmt.execute(quote(CREATE_TABLE_TEST,"TEST","NAME")); + String sql = quote(INSERT_INTO_TEST_VALUES,"TEST"); + PreparedStatement pstmt = c.prepareStatement(sql); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + // stmt.execute("drop table employee if exists"); + dropTable(templates, "EMPLOYEE"); + createEmployeeTable(templates); + addEmployees("insert into \"EMPLOYEE\" " + + "(\"ID\", \"FIRSTNAME\", \"LASTNAME\", \"SALARY\", \"DATEFIELD\", \"TIMEFIELD\", \"SUPERIOR_ID\") " + + "values (?,?,?,?,?,?,?)"); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + dropTable(templates, "DATE_TEST"); + stmt.execute(quote(CREATE_TABLE_TIMETEST, "TIME_TEST")); + stmt.execute(quote(CREATE_TABLE_DATETEST, "DATE_TEST")); + postgresInited = true; + } + + public static void initSQLite() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.SQLITE); +// SQLTemplates templates = new SQLiteTemplates(); + Connection c = getSQLite(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (sqliteInited) { + return; + } + + // qtest + stmt.execute("drop table if exists QTEST"); + stmt.execute("create table QTEST (ID int IDENTITY(1,1) NOT NULL, C1 int NULL)"); + + // survey + stmt.execute("drop table if exists SURVEY"); + stmt.execute("create table SURVEY(ID int auto_increment, " + + "NAME varchar(30)," + + "NAME2 varchar(30)," + + "constraint suryey_pk primary key(ID))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); + + // test + stmt.execute("drop table if exists TEST"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + stmt.execute("drop table if exists EMPLOYEE"); + stmt.execute("create table EMPLOYEE ( " + + "ID INT AUTO_INCREMENT, " + + "FIRSTNAME VARCHAR(50), " + + "LASTNAME VARCHAR(50), " + + "SALARY DECIMAL, " + + "DATEFIELD DATE, " + + "TIMEFIELD TIME, " + + "SUPERIOR_ID INT, " + + "CONSTRAINT PK_EMPLOYEE PRIMARY KEY(ID),"+ + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + + ")"); + addEmployees(INSERT_INTO_EMPLOYEE); + + + // date_test and time_test + stmt.execute("drop table if exists TIME_TEST"); + stmt.execute("drop table if exists DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + sqliteInited = true; + } + + public static void initSQLServer() throws SQLException, ClassNotFoundException { + targetHolder.set(Target.SQLSERVER); + SQLTemplates templates = new SQLServerTemplates(); + Connection c = getSQLServer(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (sqlServerInited) { + return; + } + + dropTable(templates, "SHAPES"); + stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY geometry)"); + for (Map.Entry entry : getSpatialData().entrySet()) { + stmt.execute("insert into SHAPES values(" + entry.getKey() + +", geometry::STGeomFromText('" + entry.getValue() + "', 0))"); + } + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY(ID int, NAME varchar(30), NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello')"); + + // test + dropTable(templates, "TEST"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + dropTable(templates, "EMPLOYEE"); + createEmployeeTable(templates); + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + dropTable(templates, "DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + sqlServerInited = true; + } + + public static void initTeradata() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.TERADATA); + SQLTemplates templates = new TeradataTemplates(); + Connection c = getTeradata(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (teradataInited) { + return; + } + + String identity = "GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1)"; + + // shapes + dropTable(templates, "SHAPES"); + stmt.execute("create table SHAPES (ID int not null primary key, GEOMETRY ST_GEOMETRY)"); + for (Map.Entry entry : getSpatialData().entrySet()) { + stmt.execute("insert into SHAPES values(" + entry.getKey() + +", '" + entry.getValue() + "')"); + } + + // qtest + dropTable(templates, "QTEST"); + stmt.execute("create table QTEST (ID int " + identity + " NOT NULL, C1 int NULL)"); + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY(ID int " + identity + ", NAME varchar(30), NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1, 'Hello World', 'Hello');"); + + // test + dropTable(templates, "TEST"); + stmt.execute(CREATE_TABLE_TEST); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + dropTable(templates, "EMPLOYEE"); + stmt.execute("create table EMPLOYEE (\n" + + "ID INTEGER NOT NULL PRIMARY KEY, \n" + + "FIRSTNAME VARCHAR(100),\n" + + "LASTNAME VARCHAR(100),\n" + + "SALARY DOUBLE PRECISION,\n" + + "DATEFIELD DATE,\n" + + "TIMEFIELD TIME,\n" + + "SUPERIOR_ID INTEGER,\n" + + "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID))"); + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + dropTable(templates, "DATE_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + stmt.execute(CREATE_TABLE_DATETEST); + teradataInited = true; + } + + static void addEmployee(String sql, int id, String firstName, String lastName, + double salary, int superiorId) throws SQLException { + PreparedStatement stmt = connHolder.get().prepareStatement(sql); + stmt.setInt(1, id); + stmt.setString(2, firstName); + stmt.setString(3,lastName); + stmt.setDouble(4, salary); + stmt.setDate(5, Constants.date); + stmt.setTime(6, Constants.time); + if (superiorId <= 0) { + stmt.setNull(7, Types.INTEGER); + } else { + stmt.setInt(7, superiorId); + } + stmt.execute(); + stmt.close(); + } + + private static void addEmployees(String sql) throws SQLException { + addEmployee(sql, 1, "Mike", "Smith", 160000, -1); + addEmployee(sql, 2, "Mary", "Smith", 140000, -1); + + // Employee under Mike + addEmployee(sql, 10, "Joe", "Divis", 50000, 1); + addEmployee(sql, 11, "Peter", "Mason", 45000, 1); + addEmployee(sql, 12, "Steve", "Johnson", 40000, 1); + addEmployee(sql, 13, "Jim", "Hood", 35000, 1); + + // Employee under Mike + addEmployee(sql, 20, "Jennifer", "Divis", 60000, 2); + addEmployee(sql, 21, "Helen", "Mason", 50000, 2); + addEmployee(sql, 22, "Daisy", "Johnson", 40000, 2); + addEmployee(sql, 23, "Barbara", "Hood", 30000, 2); + } + + private static String quote(String sql, String... identifiers) { + String rv = sql; + for (String id : identifiers) { + rv = rv.replace(id, "\"" + id + "\""); + } + return rv; + } + + private Connections() {} +} \ No newline at end of file From e41de76e2c3ac393f0e8b26b16cb8c094a566a6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Jun 2014 22:04:23 +0300 Subject: [PATCH 0226/1968] Improve travis config --- .travis.yml | 5 +---- firebird.sql | 8 ++++++++ .../src/test/java/com/mysema/query/Connections.java | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 firebird.sql diff --git a/.travis.yml b/.travis.yml index 4e4b2345bb..21dec5fb3b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,9 +26,6 @@ before_script: - /etc/profile.d/cubrid.sh - hostname | sed 's/^/127.0.0.1 /g' | cat - /etc/hosts > /tmp/etchoststemp && sudo mv /tmp/etchoststemp /etc/hosts --force - sudo apt-get install firebird2.5-superclassic - - cd /usr/share/doc/firebird2.5-examples/examples/empbuild/ - - gunzip employee.fdb.gz - - sudo chown firebird.firebird employee.fdb - - mv employee.fdb /var/lib/firebird/2.5/data/ + - sudo isql-fb -r sysdba -pas masterkey -input firebird.sql script: - sh -c 'cd querydsl-root && mvn -B test -Pall,travis' diff --git a/firebird.sql b/firebird.sql new file mode 100644 index 0000000000..95e4d3404c --- /dev/null +++ b/firebird.sql @@ -0,0 +1,8 @@ +SET SQL DIALECT 3; + +SET NAMES UNICODE_FSS; + +CREATE DATABASE '/var/lib/firebird/2.5/data/querydsl.fdb' +USER 'SYSDBA' PASSWORD 'masterkey' +PAGE_SIZE 16384 +DEFAULT CHARACTER SET UNICODE_FSS; diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 3904decf21..80de600c1b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -95,7 +95,7 @@ private static Connection getDerby() throws SQLException, ClassNotFoundException private static Connection getFirebird() throws SQLException, ClassNotFoundException { Class.forName("org.firebirdsql.jdbc.FBDriver"); String url = "jdbc:firebirdsql:localhost/3050:/var/lib/firebird/2.5/data/querydsl.fdb"; - return DriverManager.getConnection(url, "SYSDBA", "adfcb39e"); + return DriverManager.getConnection(url, "SYSDBA", "masterkey"); } private static Connection getHSQL() throws SQLException, ClassNotFoundException { From 8078bd8d943970cade363a2eedf8d3ddcbd08153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Jun 2014 22:06:00 +0300 Subject: [PATCH 0227/1968] Improve firebird install --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 21dec5fb3b..2a4e421e7b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,7 +25,7 @@ before_script: - sudo apt-get install cubrid-demodb - /etc/profile.d/cubrid.sh - hostname | sed 's/^/127.0.0.1 /g' | cat - /etc/hosts > /tmp/etchoststemp && sudo mv /tmp/etchoststemp /etc/hosts --force - - sudo apt-get install firebird2.5-superclassic + - sudo apt-get install firebird2.5-superclassic firebird2.5-examples - sudo isql-fb -r sysdba -pas masterkey -input firebird.sql script: - sh -c 'cd querydsl-root && mvn -B test -Pall,travis' From 121be6febf216a088b0b873c00c3163cfb0112e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Jun 2014 22:45:54 +0300 Subject: [PATCH 0228/1968] Improve config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 2a4e421e7b..d9b1ac6a65 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,6 +26,7 @@ before_script: - /etc/profile.d/cubrid.sh - hostname | sed 's/^/127.0.0.1 /g' | cat - /etc/hosts > /tmp/etchoststemp && sudo mv /tmp/etchoststemp /etc/hosts --force - sudo apt-get install firebird2.5-superclassic firebird2.5-examples + - sudo service firebird2.5-superclassic restart - sudo isql-fb -r sysdba -pas masterkey -input firebird.sql script: - sh -c 'cd querydsl-root && mvn -B test -Pall,travis' From 73f1e9700dfcce2e1b1d5bd17cadb13c649c7135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 17 Jun 2014 21:28:00 +0300 Subject: [PATCH 0229/1968] Extract travis scripts --- .travis.yml | 24 +++++------------------- travis/cubrid.sh | 8 ++++++++ travis/firebird.sh | 6 ++++++ firebird.sql => travis/firebird.sql | 0 travis/mysql.sql | 6 ++++++ travis/postgresql.sql | 5 +++++ 6 files changed, 30 insertions(+), 19 deletions(-) create mode 100755 travis/cubrid.sh create mode 100755 travis/firebird.sh rename firebird.sql => travis/firebird.sql (100%) create mode 100644 travis/mysql.sql create mode 100644 travis/postgresql.sql diff --git a/.travis.yml b/.travis.yml index d9b1ac6a65..01a2912b33 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,25 +8,11 @@ addons: install: - sh -c 'cd querydsl-root && mvn -B -q install -Dmaven.javadoc.skip=true -DskipTests=true' before_script: - - mysql -e "create database querydsl;" -u root - - mysql -e "create database querydsl2;" -u root - - mysql -e "create user 'querydsl'@'localhost' identified by 'querydsl';" -u root - - mysql -e "grant all privileges on querydsl.* to 'querydsl'@'localhost';" -u root - - mysql -e "grant all privileges on querydsl2.* to 'querydsl'@'localhost';" -u root - - psql -c 'create database querydsl;' -U postgres - - psql -c 'create database querydsl2;' -U postgres - - psql -c "create user querydsl with password 'querydsl';" -U postgres - - psql -c 'grant all privileges on database querydsl to querydsl;' -U postgres - - psql -c 'grant all privileges on database querydsl2 to querydsl;' -U postgres + - mysql -u root -e "source travis/mysql.sql" + - psql -U postgres -f travis/postgresql.sql - psql -c 'create extension postgis;' -d querydsl -U postgres - - echo 'yes' | sudo add-apt-repository ppa:cubrid/cubrid - - sudo apt-get update - - sudo apt-get install cubrid - - sudo apt-get install cubrid-demodb - - /etc/profile.d/cubrid.sh - - hostname | sed 's/^/127.0.0.1 /g' | cat - /etc/hosts > /tmp/etchoststemp && sudo mv /tmp/etchoststemp /etc/hosts --force - - sudo apt-get install firebird2.5-superclassic firebird2.5-examples - - sudo service firebird2.5-superclassic restart - - sudo isql-fb -r sysdba -pas masterkey -input firebird.sql + - ./travis/cubrid.sh + - ./travis/firebird.sh script: - sh -c 'cd querydsl-root && mvn -B test -Pall,travis' + diff --git a/travis/cubrid.sh b/travis/cubrid.sh new file mode 100755 index 0000000000..1ad83ca6c9 --- /dev/null +++ b/travis/cubrid.sh @@ -0,0 +1,8 @@ +#!/bin/sh +echo 'yes' | sudo add-apt-repository ppa:cubrid/cubrid +sudo apt-get update +sudo apt-get install cubrid +sudo apt-get install cubrid-demodb +/etc/profile.d/cubrid.sh +hostname | sed 's/^/127.0.0.1 /g' | cat - /etc/hosts > /tmp/etchoststemp && sudo mv /tmp/etchoststemp /etc/hosts --force + diff --git a/travis/firebird.sh b/travis/firebird.sh new file mode 100755 index 0000000000..0b40ec8bbc --- /dev/null +++ b/travis/firebird.sh @@ -0,0 +1,6 @@ +#!/bin/sh +sudo apt-get install firebird2.5-superclassic firebird2.5-examples +sudo service firebird2.5-superclassic restart +PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` +gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey +sudo isql-fb -r sysdba -pas masterkey -input firebird.sql diff --git a/firebird.sql b/travis/firebird.sql similarity index 100% rename from firebird.sql rename to travis/firebird.sql diff --git a/travis/mysql.sql b/travis/mysql.sql new file mode 100644 index 0000000000..b62f71d620 --- /dev/null +++ b/travis/mysql.sql @@ -0,0 +1,6 @@ +create database querydsl; +create database querydsl2; +create user 'querydsl'@'localhost' identified by 'querydsl'; +grant all privileges on querydsl.* to 'querydsl'@'localhost'; +grant all privileges on querydsl2.* to 'querydsl'@'localhost'; + diff --git a/travis/postgresql.sql b/travis/postgresql.sql new file mode 100644 index 0000000000..c172a83e95 --- /dev/null +++ b/travis/postgresql.sql @@ -0,0 +1,5 @@ +create database querydsl; +create database querydsl2; +create user querydsl with password 'querydsl'; +grant all privileges on database querydsl to querydsl; +grant all privileges on database querydsl2 to querydsl; From e89328b21b62d35ca570a2fccb437ddcdfd2c871 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Thu, 19 Jun 2014 11:49:24 +0200 Subject: [PATCH 0230/1968] Making cglib dependency optional --- querydsl-core/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 7f5cb1c160..a4076fa34d 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -43,7 +43,8 @@ cglib cglib - ${cglib.version} + ${cglib.version} + true From 6e3d404610f22f808acc415069e52cd73f99cfd3 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Thu, 19 Jun 2014 12:20:26 +0200 Subject: [PATCH 0231/1968] Clean out querydsl-sql dependencies - make querydsl-spatial optional (in my opinion sql-spatial should be a separate module) - remove com.vividsolutions:jts dependency: I do not know why it is there. All tests run well and compilation ok if I remove it - replace javax.validation to a version that contains OSGi manifest headers - replace javax.inject to the servicemix bundle as it contains OSGi headers - make javax.inject optional - make postgresql dependency optional - make postgis dependency optional - make oracle dependencies optiona --- querydsl-sql/pom.xml | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 2c8dd34043..572f3eeee7 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -29,13 +29,7 @@ com.mysema.querydsl querydsl-spatial ${project.version} - provided - - - com.vividsolutions - jts - 1.10 - provided + true joda-time @@ -45,7 +39,7 @@ javax.validation validation-api - 1.0.0.GA + 1.1.0.Final @@ -55,13 +49,14 @@ org.slf4j slf4j-log4j12 - provided + provided - javax.inject - javax.inject - 1 + org.apache.servicemix.bundles + org.apache.servicemix.bundles.javax-inject + 1_2 + true @@ -88,25 +83,25 @@ org.postgresql postgresql ${postgresql.version} - provided + test org.postgis postgis-jdbc 1.3.3 - provided + true com.oracle ojdbc6 ${oracle.version} - provided + true oracle sdoapi 11.2.0 - provided + true net.sourceforge.jtds @@ -314,4 +309,4 @@ - + From 1cff534dc24839fdc0b0a9e667d5caa841034f9c Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Thu, 19 Jun 2014 15:54:11 +0200 Subject: [PATCH 0232/1968] Putting back vividsolutions dependency with provided scope --- querydsl-sql/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 572f3eeee7..6ab9a4cd3d 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -31,6 +31,12 @@ ${project.version} true + + com.vividsolutions + jts + 1.10 + provided + joda-time joda-time From d17ef5edcb39dc21013657fdf8723fa5ffb5cada Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Jun 2014 21:33:38 +0300 Subject: [PATCH 0233/1968] Remove examples --- travis/firebird.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/travis/firebird.sh b/travis/firebird.sh index 0b40ec8bbc..664288534d 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -1,5 +1,5 @@ #!/bin/sh -sudo apt-get install firebird2.5-superclassic firebird2.5-examples +sudo apt-get install firebird2.5-superclassic sudo service firebird2.5-superclassic restart PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey From 18170440a0d8860bb9b03bdbe86086eb06d4f6b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Jun 2014 22:00:46 +0300 Subject: [PATCH 0234/1968] Fix script --- travis/firebird.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/travis/firebird.sh b/travis/firebird.sh index 664288534d..5aa9bb8c30 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -1,6 +1,6 @@ #!/bin/sh sudo apt-get install firebird2.5-superclassic sudo service firebird2.5-superclassic restart -PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` -gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey -sudo isql-fb -r sysdba -pas masterkey -input firebird.sql +#PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` +#gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey +sudo isql-fb -r sysdba -p masterkey -i travis/firebird.sql From 4e7720f4668d49d5667c085db1a4414d52687af0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Jun 2014 22:25:23 +0300 Subject: [PATCH 0235/1968] Fix script --- travis/firebird.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/travis/firebird.sh b/travis/firebird.sh index 5aa9bb8c30..c9250826f4 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -1,6 +1,9 @@ #!/bin/sh -sudo apt-get install firebird2.5-superclassic -sudo service firebird2.5-superclassic restart +sudo apt-get install firebird2.5-super firebird2.5-dev +sudo sed /ENABLE_FIREBIRD_SERVER=/s/no/yes/ -i /etc/default/firebird2.5 +cat /etc/default/firebird2.5 | grep ENABLE_FIREBIRD_SERVER +sudo service firebird2.5-super start +#sudo service firebird2.5-superclassic restart #PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` #gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey sudo isql-fb -r sysdba -p masterkey -i travis/firebird.sql From 37f54028b83385e494066633e346ab48e833222b Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 19 Jun 2014 21:33:08 +0200 Subject: [PATCH 0236/1968] Add CGLIB dependency to Collections module --- querydsl-collections/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 30d54c410d..8f28969727 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -33,6 +33,13 @@ querydsl-apt ${project.version} + + + cglib + cglib + ${cglib.version} + true + org.slf4j From 602fd50965f66acc58528491f32760191909630b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Jun 2014 22:45:15 +0300 Subject: [PATCH 0237/1968] Fix script --- travis/firebird.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/travis/firebird.sh b/travis/firebird.sh index c9250826f4..f5eedd05d3 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -4,6 +4,6 @@ sudo sed /ENABLE_FIREBIRD_SERVER=/s/no/yes/ -i /etc/default/firebird2.5 cat /etc/default/firebird2.5 | grep ENABLE_FIREBIRD_SERVER sudo service firebird2.5-super start #sudo service firebird2.5-superclassic restart -#PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` -#gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey +PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` +gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey sudo isql-fb -r sysdba -p masterkey -i travis/firebird.sql From f35602049d1085162a2c1df675ae953f0a25a264 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 19 Jun 2014 21:54:17 +0200 Subject: [PATCH 0238/1968] Add CGLIB dependency for the SQL module test --- querydsl-sql/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 2c8dd34043..2ab156c278 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -66,6 +66,12 @@ + cglib + cglib + ${cglib.version} + test + + org.hsqldb hsqldb ${hsqldb.version} From f6c19e5f9b3fa9f706f08d628a64d545ecc514e2 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Thu, 19 Jun 2014 21:56:19 +0200 Subject: [PATCH 0239/1968] Putting javax.inject back in its original form --- querydsl-sql/pom.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 6ab9a4cd3d..f447b89f49 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -59,10 +59,9 @@ - org.apache.servicemix.bundles - org.apache.servicemix.bundles.javax-inject - 1_2 - true + javax.inject + javax.inject + 1 From 6315445bfffca9d1565dbd6e01533ded4585cc21 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 19 Jun 2014 22:26:25 +0200 Subject: [PATCH 0240/1968] Add CGLIB dependency for the JPA module test --- querydsl-jpa/pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 5b0fea7725..88872ae6b4 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -101,7 +101,12 @@ - + + cglib + cglib + ${cglib.version} + test + org.eclipse.persistence eclipselink From 28f76e8331ab7d52ba03897b66a1d08e6926f86a Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Thu, 19 Jun 2014 22:38:19 +0200 Subject: [PATCH 0241/1968] Changed back javax.inject dependency to servicemix bundle --- querydsl-sql/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index f447b89f49..edcc1f6ed7 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -59,9 +59,9 @@ - javax.inject - javax.inject - 1 + org.apache.servicemix.bundles + org.apache.servicemix.bundles.javax-inject + 1_2 From 0772074c259ef11be86fafb0469ee641050ce05f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 19 Jun 2014 23:48:24 +0300 Subject: [PATCH 0242/1968] Fix script --- travis/firebird.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/travis/firebird.sh b/travis/firebird.sh index f5eedd05d3..b60f467751 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -1,9 +1,9 @@ #!/bin/sh -sudo apt-get install firebird2.5-super firebird2.5-dev +sudo apt-get install -qq firebird2.5-super firebird2.5-dev sudo sed /ENABLE_FIREBIRD_SERVER=/s/no/yes/ -i /etc/default/firebird2.5 cat /etc/default/firebird2.5 | grep ENABLE_FIREBIRD_SERVER sudo service firebird2.5-super start #sudo service firebird2.5-superclassic restart -PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` -gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey -sudo isql-fb -r sysdba -p masterkey -i travis/firebird.sql +#PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` +#gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey +sudo isql-fb -r SYSDBA -p masterkey -i travis/firebird.sql -q From 523857ecf3a954a292f7f695f53a5eca93912283 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Thu, 19 Jun 2014 23:21:24 +0200 Subject: [PATCH 0243/1968] Adding cglib as a test dependency to querydsl-lucene3 --- querydsl-lucene3/pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 491b21e846..cc629f802b 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -54,7 +54,13 @@ slf4j-log4j12 - + + + cglib + cglib + ${cglib.version} + test + com.mysema.querydsl querydsl-core From ed1dde7c7e94675eba1c9feb43e68c58ee8a7f16 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Fri, 20 Jun 2014 10:47:39 +0200 Subject: [PATCH 0244/1968] Making cglib as a test dependency instead of optional --- querydsl-collections/pom.xml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 8f28969727..28c3dbff68 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -34,12 +34,6 @@ ${project.version} - - cglib - cglib - ${cglib.version} - true - org.slf4j @@ -65,6 +59,13 @@ ${project.version} test test-jar + + + + cglib + cglib + ${cglib.version} + test From 30d023f8a3a9bfd5b80d4624ebe7829e2a9a0655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 20 Jun 2014 15:26:41 +0300 Subject: [PATCH 0245/1968] Add cast tests --- .../com/mysema/query/sql/MySQLTemplates.java | 7 +++---- .../test/java/com/mysema/query/SelectBase.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index 863fde9a33..41ae585e30 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -52,12 +52,11 @@ public MySQLTemplates(char escape, boolean quote) { setNullsLast(null); addClass2TypeMappings("bool", Boolean.class); - addClass2TypeMappings("int", Integer.class); + addClass2TypeMappings("signed", + Byte.class, Short.class, Integer.class, Long.class); addClass2TypeMappings("decimal", - Double.class, - Float.class, - BigDecimal.class); + Double.class, Float.class, BigDecimal.class); addClass2TypeMappings("char", String.class); add(Ops.CONCAT, "concat({0}, {1})",0); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index b540e8de69..54bf35a928 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -841,6 +841,24 @@ public void Nullif_Constant() { query().from(employee).list(employee.firstname.nullif("xxx")); } + @Test + public void Num_Cast() { + query().from(employee).list(employee.id.castToNum(Long.class)); + query().from(employee).list(employee.id.castToNum(Float.class)); + query().from(employee).list(employee.id.castToNum(Double.class)); + } + + @Test + public void Num_Cast2() { + NumberExpression num = Expressions.numberTemplate(Integer.class, "0"); + query().uniqueResult(num.castToNum(Byte.class)); + query().uniqueResult(num.castToNum(Short.class)); + query().uniqueResult(num.castToNum(Integer.class)); + query().uniqueResult(num.castToNum(Long.class)); + query().uniqueResult(num.castToNum(Float.class)); + query().uniqueResult(num.castToNum(Double.class)); + } + @Test public void Offset_Only() { query().from(employee) From ff8f25c4e6639ca5d89f96462df766f36a886ffc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 20 Jun 2014 15:45:45 +0300 Subject: [PATCH 0246/1968] Add generics test --- .../mysema/query/domain/Generic15Test.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java new file mode 100644 index 0000000000..a789bfb8c6 --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java @@ -0,0 +1,35 @@ +package com.mysema.query.domain; + +import javax.persistence.Entity; +import javax.persistence.MappedSuperclass; + +import org.junit.Test; + +public class Generic15Test { + + @MappedSuperclass + public static abstract class Compound { + } + + @MappedSuperclass + public static abstract class Containable { + + private T compound; + } + + @Entity + public static class MyCompound extends Compound{ + } + + @Entity + public static class MyContainable extends Containable { + + private String additionalField; + } + + @Test + public void test() { + // QMyContainable + QGeneric15Test_MyContainable.myContainable.compound + } +} From b9157726217292084d39cf1c41ad40ff172ffe68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 20 Jun 2014 15:48:21 +0300 Subject: [PATCH 0247/1968] Fix test --- .../src/test/java/com/mysema/query/domain/Generic15Test.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java index a789bfb8c6..79731ca6e4 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java @@ -4,6 +4,7 @@ import javax.persistence.MappedSuperclass; import org.junit.Test; +import static org.junit.Assert.assertEquals; public class Generic15Test { @@ -30,6 +31,6 @@ public static class MyContainable extends Containable { @Test public void test() { // QMyContainable - QGeneric15Test_MyContainable.myContainable.compound + assertEquals(MyCompound.class, QGeneric15Test_MyContainable.myContainable.compound.getType()); } } From 5d18bdef1d0746fbf9811a21242b54ad71a9a4ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 20 Jun 2014 16:35:52 +0300 Subject: [PATCH 0248/1968] Update test --- .../src/test/java/com/mysema/query/domain/Generic15Test.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java index 79731ca6e4..5b2fd39aab 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java @@ -2,6 +2,8 @@ import javax.persistence.Entity; import javax.persistence.MappedSuperclass; +import java.util.HashSet; +import java.util.Set; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -10,6 +12,8 @@ public class Generic15Test { @MappedSuperclass public static abstract class Compound { + + private Set containables = new HashSet(); } @MappedSuperclass From 0fe9592e942a575bd397f341af910beb5f2cbd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 00:43:33 +0300 Subject: [PATCH 0249/1968] Use querydsl user --- .../src/test/java/com/mysema/query/Connections.java | 2 +- travis/firebird.sh | 8 +++++--- travis/firebird.sql | 1 - 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 80de600c1b..40e43da16a 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -95,7 +95,7 @@ private static Connection getDerby() throws SQLException, ClassNotFoundException private static Connection getFirebird() throws SQLException, ClassNotFoundException { Class.forName("org.firebirdsql.jdbc.FBDriver"); String url = "jdbc:firebirdsql:localhost/3050:/var/lib/firebird/2.5/data/querydsl.fdb"; - return DriverManager.getConnection(url, "SYSDBA", "masterkey"); + return DriverManager.getConnection(url, "querydsl", "querydsl"); } private static Connection getHSQL() throws SQLException, ClassNotFoundException { diff --git a/travis/firebird.sh b/travis/firebird.sh index b60f467751..4ec1b2f4c4 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -4,6 +4,8 @@ sudo sed /ENABLE_FIREBIRD_SERVER=/s/no/yes/ -i /etc/default/firebird2.5 cat /etc/default/firebird2.5 | grep ENABLE_FIREBIRD_SERVER sudo service firebird2.5-super start #sudo service firebird2.5-superclassic restart -#PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` -#gsec -user SYSDBA -password $PASSWORD -modify sysdba -pw masterkey -sudo isql-fb -r SYSDBA -p masterkey -i travis/firebird.sql -q +PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` +sudo gsec -user sysdba -pass $PASSWORD -add querydsl -pw querydsl +echo Create database +sudo isql-fb -u querydsl -pas querydsl -i travis/firebird.sql -q +#sudo isql-fb -u sysdba -pas $PASSWORD -i travis/firebird.sql -q diff --git a/travis/firebird.sql b/travis/firebird.sql index 95e4d3404c..67bccb320c 100644 --- a/travis/firebird.sql +++ b/travis/firebird.sql @@ -3,6 +3,5 @@ SET SQL DIALECT 3; SET NAMES UNICODE_FSS; CREATE DATABASE '/var/lib/firebird/2.5/data/querydsl.fdb' -USER 'SYSDBA' PASSWORD 'masterkey' PAGE_SIZE 16384 DEFAULT CHARACTER SET UNICODE_FSS; From 2492194761062d8021a4ca262bcd1dfbc3531697 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 10:29:22 +0300 Subject: [PATCH 0250/1968] Skip SYSDBA.password usage --- travis/firebird.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/travis/firebird.sh b/travis/firebird.sh index 4ec1b2f4c4..d4cd1db2ad 100755 --- a/travis/firebird.sh +++ b/travis/firebird.sh @@ -3,9 +3,10 @@ sudo apt-get install -qq firebird2.5-super firebird2.5-dev sudo sed /ENABLE_FIREBIRD_SERVER=/s/no/yes/ -i /etc/default/firebird2.5 cat /etc/default/firebird2.5 | grep ENABLE_FIREBIRD_SERVER sudo service firebird2.5-super start -#sudo service firebird2.5-superclassic restart -PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` -sudo gsec -user sysdba -pass $PASSWORD -add querydsl -pw querydsl +#PASSWORD=`sudo cat /etc/firebird/2.5/SYSDBA.password | grep PASS | sed -e 's/.*PASSWORD="\([^"]*\)".*/\1/'` +echo Create user +#sudo gsec -user sysdba -pass $PASSWORD -add querydsl -pw querydsl +sudo gsec -user sysdba -pass masterkey -add querydsl -pw querydsl echo Create database sudo isql-fb -u querydsl -pas querydsl -i travis/firebird.sql -q #sudo isql-fb -u sysdba -pas $PASSWORD -i travis/firebird.sql -q From a612f9b62a8f3f712e1d2de2eb9c06dffe91bd5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 11:27:45 +0300 Subject: [PATCH 0251/1968] Add auto increment trigger --- .../src/test/java/com/mysema/query/Connections.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 40e43da16a..864137aaee 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -363,6 +363,19 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ "NAME2 varchar(30))"); stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); + try { + stmt.execute("CREATE GENERATOR survey_gen_id;"); + stmt.execute("CREATE TRIGGER survey_auto_id FOR survey\n" + + "ACTIVE BEFORE INSERT POSITION 0\n" + + "AS\n" + + "BEGIN\n" + + "IF (NEW.id IS NULL) THEN\n" + + "NEW.id = GEN_ID(survey_gen_id,1);\n" + + "END "); + } catch (SQLException e) { + // do nothing + } + // test dropTable(templates, "TEST"); stmt.execute(CREATE_TABLE_TEST); From 06d7f6934a3bbadac335ff52d67016ac4800e39a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 15:41:46 +0300 Subject: [PATCH 0252/1968] Add insert trigger --- .../src/test/java/com/mysema/query/Connections.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 864137aaee..15608394bf 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -404,6 +404,19 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ "CONSTRAINT FK_SUPERIOR FOREIGN KEY(SUPERIOR_ID) REFERENCES EMPLOYEE(ID) " + ")"); + try { + stmt.execute("CREATE GENERATOR employee_gen_id;"); + stmt.execute("CREATE TRIGGER employee_auto_id FOR employee\n" + + "ACTIVE BEFORE INSERT POSITION 0\n" + + "AS\n" + + "BEGIN\n" + + "IF (NEW.id IS NULL) THEN\n" + + "NEW.id = GEN_ID(employee_gen_id,1);\n" + + "END "); + } catch (SQLException e) { + // do nothing + } + addEmployees(INSERT_INTO_EMPLOYEE); // date_test and time_test From c668a591da2c4b084363fa90bebb19937f7acc20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 16:04:13 +0300 Subject: [PATCH 0253/1968] Comment union tests out --- .../src/main/java/com/mysema/query/sql/FirebirdTemplates.java | 3 +++ .../test/java/com/mysema/query/suites/FirebirdSuiteTest.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index b057973ba1..373200cca1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -36,6 +36,9 @@ public FirebirdTemplates(char escape, boolean quote) { addClass2TypeMappings("varchar(256)", String.class); addClass2TypeMappings("double precision", Double.class); + add(SQLOps.UNION, "{0}\nunion\n{1}", 1); + add(SQLOps.UNION_ALL, "{0}\nunion all\n{1}", 1); + // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)", 1); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java index c19da01b38..a3f50fddc1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -18,7 +18,7 @@ public static class Select extends SelectBase {} public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} - public static class Union extends UnionBase {} + //public static class Union extends UnionBase {} public static class Update extends UpdateBase {} @BeforeClass From acdaf830d6ab792c3257d0eace54943467ebe4b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 20:17:13 +0300 Subject: [PATCH 0254/1968] Improve Firebird tests --- .../java/com/mysema/query/Connections.java | 41 +++++++++++-------- .../java/com/mysema/query/InsertBase.java | 2 +- .../java/com/mysema/query/SubqueriesBase.java | 27 ++++-------- 3 files changed, 33 insertions(+), 37 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 15608394bf..f9c37ff20f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -361,21 +361,26 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ stmt.execute("create table SURVEY(ID int primary key, " + "NAME varchar(30)," + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); try { - stmt.execute("CREATE GENERATOR survey_gen_id;"); - stmt.execute("CREATE TRIGGER survey_auto_id FOR survey\n" + - "ACTIVE BEFORE INSERT POSITION 0\n" + - "AS\n" + - "BEGIN\n" + - "IF (NEW.id IS NULL) THEN\n" + - "NEW.id = GEN_ID(survey_gen_id,1);\n" + - "END "); + //stmt.execute("DROP TRIGGER survey_auto_id;"); + stmt.execute("DROP GENERATOR survey_gen_id;"); } catch (SQLException e) { // do nothing } + stmt.execute("CREATE GENERATOR survey_gen_id;"); + stmt.execute("SET GENERATOR survey_gen_id TO 30;"); + stmt.execute("CREATE TRIGGER survey_auto_id FOR survey\n" + + "ACTIVE BEFORE INSERT POSITION 0\n" + + "AS\n" + + "BEGIN\n" + + "IF (NEW.id IS NULL) THEN\n" + + "NEW.id = GEN_ID(survey_gen_id,1);\n" + + "END "); + // test dropTable(templates, "TEST"); stmt.execute(CREATE_TABLE_TEST); @@ -405,18 +410,22 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ ")"); try { - stmt.execute("CREATE GENERATOR employee_gen_id;"); - stmt.execute("CREATE TRIGGER employee_auto_id FOR employee\n" + - "ACTIVE BEFORE INSERT POSITION 0\n" + - "AS\n" + - "BEGIN\n" + - "IF (NEW.id IS NULL) THEN\n" + - "NEW.id = GEN_ID(employee_gen_id,1);\n" + - "END "); + //stmt.execute("DROP TRIGGER employee_auto_id;"); + stmt.execute("DROP GENERATOR employee_gen_id;"); } catch (SQLException e) { // do nothing } + stmt.execute("CREATE GENERATOR employee_gen_id;"); + stmt.execute("SET GENERATOR employee_gen_id TO 30;"); + stmt.execute("CREATE TRIGGER employee_auto_id FOR employee\n" + + "ACTIVE BEFORE INSERT POSITION 0\n" + + "AS\n" + + "BEGIN\n" + + "IF (NEW.id IS NULL) THEN\n" + + "NEW.id = GEN_ID(employee_gen_id,1);\n" + + "END "); + addEmployees(INSERT_INTO_EMPLOYEE); // date_test and time_test diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index b002f4f090..62a02534db 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -163,7 +163,7 @@ public void Insert_Null_Without_Columns() { } @Test - @ExcludeIn({HSQLDB, DERBY}) + @ExcludeIn({FIREBIRD, HSQLDB, DERBY}) public void Insert_Without_Values() { assertEquals(1, insert(survey).execute()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java b/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java index 58d000b4f3..6f3e91edff 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java @@ -1,27 +1,9 @@ package com.mysema.query; -import static com.mysema.query.Constants.employee; -import static com.mysema.query.Constants.employee2; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Constants.survey2; -import static com.mysema.query.Target.CUBRID; -import static com.mysema.query.Target.DERBY; -import static com.mysema.query.Target.H2; -import static com.mysema.query.Target.HSQLDB; -import static com.mysema.query.Target.MYSQL; -import static com.mysema.query.Target.POSTGRES; -import static com.mysema.query.Target.SQLITE; -import static com.mysema.query.Target.SQLSERVER; -import static com.mysema.query.Target.TERADATA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - import java.math.BigDecimal; import java.sql.SQLException; import java.util.List; -import org.junit.Test; - import com.google.common.collect.ImmutableList; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.ForeignKey; @@ -36,11 +18,16 @@ import com.mysema.query.types.path.PathBuilder; import com.mysema.query.types.query.ListSubQuery; import com.mysema.testutil.ExcludeIn; +import org.junit.Test; +import static com.mysema.query.Constants.*; +import static com.mysema.query.Target.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; public class SubqueriesBase extends AbstractBaseTest { @Test - @ExcludeIn({CUBRID, DERBY, H2, HSQLDB, SQLITE, SQLSERVER}) + @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, SQLITE, SQLSERVER}) public void Keys() { QEmployee employee2 = new QEmployee("employee2"); ForeignKey nameKey1 = new ForeignKey(employee, @@ -56,7 +43,7 @@ public void Keys() { } @Test - @ExcludeIn({CUBRID, DERBY, H2, HSQLDB, SQLITE, SQLSERVER}) + @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, SQLITE, SQLSERVER}) public void List_In_Query() { QEmployee employee2 = new QEmployee("employee2"); query().from(employee) From 3a44fe768246beb680acc32ea77c89c64d165078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 20:45:27 +0300 Subject: [PATCH 0255/1968] Add firebird exclusions --- querydsl-sql/src/test/java/com/mysema/query/InsertBase.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index 62a02534db..e3e2302c04 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -261,6 +261,7 @@ public void Insert_with_Special_Options() { } @Test + @ExcludeIn(FIREBIRD) // too slow public void Insert_With_SubQuery() { int count = (int)query().from(survey).count(); assertEquals(count, insert(survey) @@ -304,6 +305,7 @@ public void Insert_With_SubQuery3() { } @Test + @ExcludeIn(FIREBIRD) // too slow public void Insert_With_SubQuery_Params() { Param param = new Param(Integer.class, "param"); SQLSubQuery sq = sq().from(survey2); From 5880dc67dedadadfb1594f158bb5633d6fef70c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 21:06:06 +0300 Subject: [PATCH 0256/1968] Improve union handling --- .../src/main/java/com/mysema/query/sql/FirebirdTemplates.java | 4 +--- .../test/java/com/mysema/query/suites/FirebirdSuiteTest.java | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 373200cca1..90d282e4ce 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -32,13 +32,11 @@ public FirebirdTemplates(boolean quote) { public FirebirdTemplates(char escape, boolean quote) { super("\"", escape, quote); setDummyTable("RDB$DATABASE"); + setUnionsWrapped(false); addClass2TypeMappings("smallint", Boolean.class, Byte.class); addClass2TypeMappings("varchar(256)", String.class); addClass2TypeMappings("double precision", Double.class); - add(SQLOps.UNION, "{0}\nunion\n{1}", 1); - add(SQLOps.UNION_ALL, "{0}\nunion all\n{1}", 1); - // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)", 1); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java index a3f50fddc1..c19da01b38 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -18,7 +18,7 @@ public static class Select extends SelectBase {} public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} - //public static class Union extends UnionBase {} + public static class Union extends UnionBase {} public static class Update extends UpdateBase {} @BeforeClass From f1691dfa6cd7844347f23c014a72655369bc720f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Jun 2014 23:55:23 +0300 Subject: [PATCH 0257/1968] Add exclusions --- querydsl-sql/src/test/java/com/mysema/query/InsertBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index e3e2302c04..c0537524ca 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -319,6 +319,7 @@ public void Insert_With_SubQuery_Params() { } @Test + @ExcludeIn(FIREBIRD) // too slow public void Insert_With_SubQuery_Via_Constructor() { int count = (int)query().from(survey).count(); SQLInsertClause insert = insert(survey, sq().from(survey2)); From f2be35fcdb5e063aadf2d3b9266b2d8a6b19ce6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 22 Jun 2014 18:02:02 +0300 Subject: [PATCH 0258/1968] Add exclusion to semver check --- querydsl-root/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 80c671cd6f..e50938fdc5 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -195,6 +195,9 @@ + + com/mysema/query/apt/TypeExtractor + BACKWARD_COMPATIBLE_USER true true From 19ec7127b0dc414d2ae5fa24df4deddf40aff5db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 22 Jun 2014 18:23:10 +0300 Subject: [PATCH 0259/1968] Add exclusions --- .../java/com/mysema/query/InsertBase.java | 5 ++++- .../test/java/com/mysema/query/UnionBase.java | 22 +++++++------------ 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index c0537524ca..93bd9e19b7 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -271,7 +271,7 @@ public void Insert_With_SubQuery() { } @Test - @ExcludeIn({HSQLDB, CUBRID, DERBY}) + @ExcludeIn({HSQLDB, CUBRID, DERBY, FIREBIRD}) public void Insert_With_SubQuery2() { // insert into modules(name) // select 'MyModule' @@ -329,6 +329,7 @@ public void Insert_With_SubQuery_Via_Constructor() { } @Test + @ExcludeIn(FIREBIRD) // too slow public void Insert_With_SubQuery_Without_Columns() { int count = (int)query().from(survey).count(); assertEquals(count, insert(survey) @@ -338,12 +339,14 @@ public void Insert_With_SubQuery_Without_Columns() { } @Test + @ExcludeIn(FIREBIRD) // too slow public void Insert_Without_Columns() { assertEquals(1, insert(survey).values(4, "Hello", "World").execute()); } @Test + @ExcludeIn(FIREBIRD) // too slow public void InsertBatch_with_Subquery() { SQLInsertClause insert = insert(survey) .columns(survey.id, survey.name) diff --git a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java index 47f897bae7..3c97383f73 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java @@ -1,22 +1,10 @@ package com.mysema.query; -import static com.mysema.query.Constants.employee; -import static com.mysema.query.Target.CUBRID; -import static com.mysema.query.Target.DERBY; -import static com.mysema.query.Target.MYSQL; -import static com.mysema.query.Target.TERADATA; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - import java.io.IOException; import java.sql.SQLException; import java.util.Arrays; import java.util.List; -import org.junit.Test; - import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.sql.domain.Employee; import com.mysema.query.sql.domain.QEmployee; @@ -27,6 +15,10 @@ import com.mysema.query.types.query.SimpleSubQuery; import com.mysema.query.types.template.NumberTemplate; import com.mysema.testutil.ExcludeIn; +import org.junit.Test; +import static com.mysema.query.Constants.employee; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; public class UnionBase extends AbstractBaseTest { @@ -110,7 +102,7 @@ public void Union4() { // FIXME for CUBRID // Teradata: The ORDER BY clause must contain only integer constants. @Test - @ExcludeIn({DERBY, CUBRID, TERADATA}) + @ExcludeIn({DERBY, CUBRID, FIREBIRD, TERADATA}) public void Union5() { /* (select e.ID, e.FIRSTNAME, superior.ID as sup_id, superior.FIRSTNAME as sup_name * from EMPLOYEE e join EMPLOYEE superior on e.SUPERIOR_ID = superior.ID) @@ -131,7 +123,7 @@ public void Union5() { } @Test - @ExcludeIn(TERADATA) // The ORDER BY clause must contain only integer constants. + @ExcludeIn({FIREBIRD, TERADATA}) // The ORDER BY clause must contain only integer constants. @SuppressWarnings("unchecked") public void Union_With_Order() throws SQLException { SubQueryExpression sq1 = sq().from(employee).unique(employee.id); @@ -142,6 +134,7 @@ public void Union_With_Order() throws SQLException { @SuppressWarnings("unchecked") @Test + @ExcludeIn(FIREBIRD) public void Union_Multi_Column_Projection_List() throws IOException{ SubQueryExpression sq1 = sq().from(employee).unique(employee.id.max(), employee.id.max().subtract(1)); SubQueryExpression sq2 = sq().from(employee).unique(employee.id.min(), employee.id.min().subtract(1)); @@ -154,6 +147,7 @@ public void Union_Multi_Column_Projection_List() throws IOException{ @SuppressWarnings("unchecked") @Test + @ExcludeIn(FIREBIRD) public void Union_Multi_Column_Projection_Iterate() throws IOException{ SubQueryExpression sq1 = sq().from(employee).unique(employee.id.max(), employee.id.max().subtract(1)); SubQueryExpression sq2 = sq().from(employee).unique(employee.id.min(), employee.id.min().subtract(1)); From d20b45729482001165047e938bfd28be5c7852f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 22 Jun 2014 20:53:00 +0300 Subject: [PATCH 0260/1968] Add parameter wrapping Add test exclusions --- .../java/com/mysema/query/FilterFactory.java | 4 ++- .../mysema/query/MatchingFiltersFactory.java | 1 + .../mysema/query/sql/FirebirdTemplates.java | 1 + .../com/mysema/query/sql/SQLSerializer.java | 20 ++++++++++++--- .../com/mysema/query/sql/SQLTemplates.java | 25 ++++++++++++++++++- .../java/com/mysema/query/SelectBase.java | 2 +- 6 files changed, 46 insertions(+), 7 deletions(-) diff --git a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java index 59ed431dfb..f6a2fb12a5 100644 --- a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java @@ -293,7 +293,9 @@ public Collection string(StringExpression expr, StringExpression othe rv.add(expr.indexOf(knownValue).gt(0)); rv.add(expr.locate(other).gt(1)); - rv.add(expr.locate("X", 2).gt(1)); + if (!target.equals(Target.FIREBIRD)) { // FIXME + rv.add(expr.locate("X", 2).gt(1)); + } rv.add(expr.locate(knownValue).gt(1)); // if (!module.equals(Module.HQL) && !module.equals(Module.JDOQL) && !module.equals(Module.SQL)) { diff --git a/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java b/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java index 92dae4b650..48f923036f 100644 --- a/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java @@ -76,6 +76,7 @@ public Collection date(DateExpression expr, rv.add(expr.dayOfMonth().eq(other.dayOfMonth())); if (!target.equals(Target.DERBY) && !module.equals(Module.JDO) && !target.equals(Target.ORACLE) + && !target.equals(Target.FIREBIRD) && (!target.equals(Target.POSTGRES) || !module.equals(Module.JPA))) { rv.add(expr.dayOfWeek().eq(other.dayOfWeek ())); rv.add(expr.dayOfYear().eq(other.dayOfYear())); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 90d282e4ce..e3f6201a56 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -33,6 +33,7 @@ public FirebirdTemplates(char escape, boolean quote) { super("\"", escape, quote); setDummyTable("RDB$DATABASE"); setUnionsWrapped(false); + setWrapSelectParameters(true); addClass2TypeMappings("smallint", Boolean.class, Byte.class); addClass2TypeMappings("varchar(256)", String.class); addClass2TypeMappings("double precision", Double.class); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 2c62b1efe0..0f431482ff 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -25,6 +25,8 @@ import com.mysema.query.QueryFlag; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; +import com.mysema.query.sql.types.Null; +import com.mysema.query.support.Expressions; import com.mysema.query.support.SerializerBase; import com.mysema.query.types.*; import com.mysema.query.types.Template.Element; @@ -38,6 +40,8 @@ public class SQLSerializer extends SerializerBase { protected enum Stage {SELECT, FROM, WHERE, GROUP_BY, HAVING, ORDER_BY, MODIFIERS} + private static final Expression Q = Expressions.template(Object.class, "?"); + private static final String COMMA = ", "; private final List> constantPaths = new ArrayList>(); @@ -700,7 +704,7 @@ public void visitConstant(Object constant) { } else if (constant instanceof Collection) { append("("); boolean first = true; - for (Object o : ((Collection)constant)) { + for (Object o : ((Collection) constant)) { if (!first) { append(COMMA); } @@ -713,13 +717,21 @@ public void visitConstant(Object constant) { } append(")"); - int size = ((Collection)constant).size() - 1; - Path lastPath = constantPaths.get(constantPaths.size()-1); + int size = ((Collection) constant).size() - 1; + Path lastPath = constantPaths.get(constantPaths.size() - 1); for (int i = 0; i < size; i++) { constantPaths.add(lastPath); } } else { - append("?"); + if (stage == Stage.SELECT + && !Null.class.isInstance(constant) + && configuration.getTemplates().isWrapSelectParameters()) { + String typeName = templates.getTypeForCast(constant.getClass()); + Expression type = Expressions.constant(typeName); + super.visitOperation(constant.getClass(), SQLOps.CAST, ImmutableList.>of(Q, type)); + } else { + append("?"); + } constants.add(constant); if (constantPaths.size() < constants.size()) { constantPaths.add(null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 5dbe3e6dfd..b6ab3ef686 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -14,6 +14,8 @@ package com.mysema.query.sql; import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.math.BigInteger; import java.sql.Types; import java.util.Arrays; import java.util.List; @@ -31,6 +33,10 @@ import com.mysema.query.QueryModifiers; import com.mysema.query.sql.types.Type; import com.mysema.query.types.*; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.LocalDateTime; +import org.joda.time.LocalTime; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -193,6 +199,8 @@ public SQLTemplates build() { private boolean countViaAnalytics = false; + private boolean wrapSelectParameters = false; + protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { super(escape); this.quoteStr = quoteStr; @@ -343,11 +351,18 @@ protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { class2type.put(Boolean.class, "bit"); class2type.put(Byte.class, "tinyint"); class2type.put(Long.class, "bigint"); + class2type.put(BigInteger.class, "bigint"); + class2type.put(BigDecimal.class, "decimal"); class2type.put(Short.class, "smallint"); class2type.put(String.class, "varchar"); class2type.put(java.sql.Date.class, "date"); class2type.put(java.sql.Time.class, "time"); class2type.put(java.sql.Timestamp.class, "timestamp"); + + class2type.put(LocalDateTime.class, "timestamp"); + class2type.put(LocalDate.class, "date"); + class2type.put(LocalTime.class, "time"); + class2type.put(DateTime.class, "timestamp"); } public String serialize(String literal, int jdbcType) { @@ -564,7 +579,7 @@ public String getTypeForClass(Class cl) { if (class2type.containsKey(clazz)) { return class2type.get(clazz); } else { - throw new IllegalArgumentException("Got not type for " + clazz.getName()); + throw new IllegalArgumentException("Got no type for " + clazz.getName()); } } @@ -656,6 +671,10 @@ public boolean isCountViaAnalytics() { return countViaAnalytics; } + public boolean isWrapSelectParameters() { + return wrapSelectParameters; + } + protected void newLineToSingleSpace() { for (Class cl : Arrays.>asList(getClass(), SQLTemplates.class)) { for (Field field : cl.getDeclaredFields()) { @@ -1010,4 +1029,8 @@ protected void setCountViaAnalytics(boolean countViaAnalytics) { this.countViaAnalytics = countViaAnalytics; } + protected void setWrapSelectParameters(boolean b) { + this.wrapSelectParameters = b; + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 302f117947..b73693ac16 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -782,7 +782,7 @@ protected Pair map(Tuple row) { } @Test - @ExcludeIn(SQLSERVER) // FIXME + @ExcludeIn({FIREBIRD, SQLSERVER}) // FIXME public void Math() { Expression expr = Expressions.numberTemplate(Double.class, "0.5"); From 2811bcd4f5f62beef37a3084049f2ac499d3fe25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 22 Jun 2014 21:19:04 +0300 Subject: [PATCH 0261/1968] Add function declarations --- .../test/java/com/mysema/query/Connections.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index f9c37ff20f..a4d99bda49 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -356,6 +356,23 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ return; } + try { + stmt.execute("DECLARE EXTERNAL FUNCTION ltrim\n" + + " CSTRING(255)\n" + + " RETURNS CSTRING(255) FREE_IT\n" + + " ENTRY_POINT 'IB_UDF_ltrim' MODULE_NAME 'ib_udf'"); + } catch (SQLException e) { + // do nothing + } + try { + stmt.execute("DECLARE EXTERNAL FUNCTION rtrim\n" + + " CSTRING(255) NULL\n" + + " RETURNS CSTRING(255) FREE_IT\n" + + " ENTRY_POINT 'IB_UDF_rtrim' MODULE_NAME 'ib_udf'"); + } catch (SQLException e) { + // do nothing + } + // survey dropTable(templates, "SURVEY"); stmt.execute("create table SURVEY(ID int primary key, " + From 89557d94a29fb806dc212e7b06e2449ebcef7932 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 02:52:27 +0200 Subject: [PATCH 0262/1968] Replacing spring-bundlor with maven-bundle-plugin Some lines are changed as windows/unix enters were mixed in pom files. --- querydsl-apt/pom.xml | 8 ++++---- querydsl-codegen/pom.xml | 8 ++++---- querydsl-collections/pom.xml | 24 +++++++++++----------- querydsl-core/pom.xml | 10 +++++----- querydsl-hibernate-search/pom.xml | 13 ++++++++---- querydsl-jdo/pom.xml | 12 +++++++---- querydsl-jpa-codegen/pom.xml | 8 ++++---- querydsl-jpa/pom.xml | 29 ++++++++++++++------------- querydsl-lucene3/pom.xml | 24 ++++++++++++---------- querydsl-lucene4/pom.xml | 12 +++++++---- querydsl-mongodb/pom.xml | 14 +++++++++---- querydsl-root/pom.xml | 33 +++++++++++++++++++++---------- querydsl-spatial/pom.xml | 8 ++++---- querydsl-sql-codegen/pom.xml | 8 ++++---- querydsl-sql/pom.xml | 17 ++++++++-------- 15 files changed, 133 insertions(+), 95 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index b113fca31c..116f5463a1 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -141,8 +141,8 @@ --> - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -232,4 +232,4 @@ - + diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index de1745e403..32e08541d0 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -54,8 +54,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin org.apache.maven.plugins @@ -83,4 +83,4 @@ - + diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 28c3dbff68..7b0bf2f5d0 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -33,7 +33,7 @@ querydsl-apt ${project.version} - + org.slf4j @@ -59,13 +59,13 @@ ${project.version} test test-jar - - - - cglib - cglib - ${cglib.version} - test + + + + cglib + cglib + ${cglib.version} + test @@ -80,8 +80,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin com.mysema.maven @@ -103,4 +103,4 @@ - + diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index a4076fa34d..f2946ad58e 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -43,7 +43,7 @@ cglib cglib - ${cglib.version} + ${cglib.version} true @@ -78,8 +78,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin com.infradna.tool @@ -141,4 +141,4 @@ 1.11 - + diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 1680faea40..1fd283653b 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -27,6 +27,11 @@ 4.3.0.Final 4.2.0.Final 3.6.2 + + org.apache.lucene.*;version="[3,3.1)", + org.hibernate.*;version="[4,5)", + ${osgi.import.package.root} + @@ -119,8 +124,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin org.apache.maven.plugins @@ -138,4 +143,4 @@ - + diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 4bf79f0d78..2c8b71b258 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -25,6 +25,10 @@ 3.2.0-release 3.2.0-release + + javax.jdo.*;version="[2,4)", + ${osgi.import.package.root} + @@ -130,8 +134,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -289,4 +293,4 @@ - + diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index a04b06c41a..9abfbafa39 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -117,10 +117,10 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin - + diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 88872ae6b4..3c2bb75093 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -26,6 +26,7 @@ 4.3.5.Final 4.3.1.Final 2.5.1 + javax.persistence.*;version="[1.1,3)",${osgi.import.package.root} @@ -43,19 +44,19 @@ asm - provided + true org.hibernate hibernate-entitymanager ${hibernate.version} - provided + true org.hibernate hibernate-validator ${hibernate.validator.version} - provided + true org.slf4j @@ -101,17 +102,17 @@ - - cglib - cglib - ${cglib.version} - test - + + cglib + cglib + ${cglib.version} + test + org.eclipse.persistence eclipselink ${eclipselink.version} - provided + true @@ -215,8 +216,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -361,4 +362,4 @@ - + diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index cc629f802b..6ed4cf96b6 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -24,6 +24,10 @@ 3.6.2 + + org.apache.lucene.*;version="[3,3.1)", + ${osgi.import.package.root} + @@ -54,12 +58,12 @@ slf4j-log4j12 - - - cglib - cglib - ${cglib.version} - test + + + cglib + cglib + ${cglib.version} + test com.mysema.querydsl @@ -86,8 +90,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -109,4 +113,4 @@ - + diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 06f61e4f6a..1ca8ba3835 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -24,6 +24,10 @@ 4.2.1 + + org.apache.lucene.*;version="[4,5)", + ${osgi.import.package.root} + @@ -92,8 +96,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -115,4 +119,4 @@ - + diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index ba74139769..4225d966ec 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -18,6 +18,12 @@ 2.10.0 0.105 + + com.mongodb;version="0.0.0", + org.mongodb.morphia.*;version="0.105", + org.bson.*;version="0.0.0", + ${osgi.import.package.root} + @@ -74,8 +80,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -148,4 +154,4 @@ - + diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3601c7740c..3d1596db42 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -44,6 +44,13 @@ 2.2.2 1.3.2 1.6.1 + + + + com.google.common.*;version=${@}, + * + + ${osgi.import.package.root} @@ -162,20 +169,26 @@ 2.16 - com.springsource.bundlor - com.springsource.bundlor.maven - 1.0.0.RELEASE + org.apache.felix + maven-bundle-plugin + 2.4.0 - bundlor + bundle-manifest + process-classes - bundlor + manifest + true + + + + ${osgi.import.package} + + + - - true - @@ -559,4 +572,4 @@ - + diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 88fc7a49b3..5f8f880b8d 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -40,8 +40,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin org.apache.maven.plugins @@ -72,4 +72,4 @@ 1.11 - + diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index cb5cb44fe1..87326a2f53 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -139,8 +139,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin @@ -219,4 +219,4 @@ - + diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 2dc967cc54..75341467cb 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -17,6 +17,7 @@ 1.11 + org.joda.time.*;version="[1.6,3)",${osgi.import.package.root} @@ -66,12 +67,12 @@ - cglib - cglib - ${cglib.version} - test - - + cglib + cglib + ${cglib.version} + test + + org.hsqldb hsqldb ${hsqldb.version} @@ -217,8 +218,8 @@ - com.springsource.bundlor - com.springsource.bundlor.maven + org.apache.felix + maven-bundle-plugin From df080ea11a31d68c07c32e87a56a43f9d39df6ad Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 03:20:05 +0200 Subject: [PATCH 0263/1968] Code formatting in pom.xml --- querydsl-sql/pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 75341467cb..7282d8927c 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -17,7 +17,10 @@ 1.11 - org.joda.time.*;version="[1.6,3)",${osgi.import.package.root} + + org.joda.time.*;version="[1.6,3)", + ${osgi.import.package.root} + From e69bad8c7699da71dc73c68afdb4b98b1d5fdce8 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 19:38:14 +0200 Subject: [PATCH 0264/1968] Removing template.mf files as they are needed by maven-bundle-plugin. --- querydsl-apt/template.mf | 20 -------------------- querydsl-codegen/template.mf | 13 ------------- querydsl-collections/template.mf | 14 -------------- querydsl-core/template.mf | 10 ---------- querydsl-hibernate-search/template.mf | 10 ---------- querydsl-jdo/template.mf | 12 ------------ querydsl-jpa-codegen/template.mf | 16 ---------------- querydsl-jpa/template.mf | 17 ----------------- querydsl-lucene3/template.mf | 11 ----------- querydsl-lucene4/template.mf | 11 ----------- querydsl-mongodb/template.mf | 15 --------------- querydsl-spatial/template.mf | 9 --------- querydsl-sql-codegen/template.mf | 18 ------------------ querydsl-sql/template.mf | 17 ----------------- 14 files changed, 193 deletions(-) delete mode 100644 querydsl-apt/template.mf delete mode 100644 querydsl-codegen/template.mf delete mode 100644 querydsl-collections/template.mf delete mode 100644 querydsl-core/template.mf delete mode 100644 querydsl-hibernate-search/template.mf delete mode 100644 querydsl-jdo/template.mf delete mode 100644 querydsl-jpa-codegen/template.mf delete mode 100644 querydsl-jpa/template.mf delete mode 100644 querydsl-lucene3/template.mf delete mode 100644 querydsl-lucene4/template.mf delete mode 100644 querydsl-mongodb/template.mf delete mode 100644 querydsl-spatial/template.mf delete mode 100644 querydsl-sql-codegen/template.mf delete mode 100644 querydsl-sql/template.mf diff --git a/querydsl-apt/template.mf b/querydsl-apt/template.mf deleted file mode 100644 index 38f0a7c8ae..0000000000 --- a/querydsl-apt/template.mf +++ /dev/null @@ -1,20 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.apt -Bundle-Name: Querydsl APT -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.codegen.*;version="${codegen.version}", - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - javax.lang.model.*;version="0", - javax.tools.*;version="0", - net.sf.cglib.proxy.*;version="${cglib.version}", - com.google.common.*;version="${guava.version}" -Excluded-Imports: - javax.persistence.*;version="[2.0.0,2.1.0)", - javax.jdo.*;version="[2.0.0,3.0.0)", - org.springframework.roo.*;version="1.2.3", - org.mongodb.morphia.annotations.*;version="0.99" \ No newline at end of file diff --git a/querydsl-codegen/template.mf b/querydsl-codegen/template.mf deleted file mode 100644 index 2aec995362..0000000000 --- a/querydsl-codegen/template.mf +++ /dev/null @@ -1,13 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.codegen -Bundle-Name: Querydsl Codegen -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.codegen.*;version="${codegen.version}";resolution:=optional, - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - net.sf.cglib.proxy.*;version="${cglib.version}", - com.google.common.*;version="${guava.version}" \ No newline at end of file diff --git a/querydsl-collections/template.mf b/querydsl-collections/template.mf deleted file mode 100644 index 1200daf67b..0000000000 --- a/querydsl-collections/template.mf +++ /dev/null @@ -1,14 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.collections -Bundle-Name: Querydsl Collections -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.codegen.*;version="${codegen.version}", - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.tools.*;version="1";resolution:=optional, - org.eclipse.jdt.*;version="3.7.2", - com.google.common.*;version="${guava.version}", - org.hamcrest.*;version="1.3";resolution:=optional diff --git a/querydsl-core/template.mf b/querydsl-core/template.mf deleted file mode 100644 index 9a8e05291e..0000000000 --- a/querydsl-core/template.mf +++ /dev/null @@ -1,10 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.core -Bundle-Name: Querydsl Core -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Excluded-Imports: com.infradna.tool.bridge_method_injector -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - javax.annotation.*;version="0", - net.sf.cglib.proxy.*;version="${cglib.version}";resolution:=optional, - com.google.common.*;version="${guava.version}" diff --git a/querydsl-hibernate-search/template.mf b/querydsl-hibernate-search/template.mf deleted file mode 100644 index 44bb92527f..0000000000 --- a/querydsl-hibernate-search/template.mf +++ /dev/null @@ -1,10 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.hibernate-search -Bundle-Name: Querydsl Hibernate Search -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - org.apache.lucene.*;version="[3.0.0,3.1.0)", - org.hibernate.*;version="[3.0.0,4.0.0)", - org.slf4j.*;version="${slf4j.version}" \ No newline at end of file diff --git a/querydsl-jdo/template.mf b/querydsl-jdo/template.mf deleted file mode 100644 index 6782ed012e..0000000000 --- a/querydsl-jdo/template.mf +++ /dev/null @@ -1,12 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.jdo -Bundle-Name: Querydsl JDO -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - javax.jdo.*;version="[2.0.0,4.0.0)", - com.google.common.*;version="${guava.version}", - org.slf4j.*;version="${slf4j.version}" \ No newline at end of file diff --git a/querydsl-jpa-codegen/template.mf b/querydsl-jpa-codegen/template.mf deleted file mode 100644 index 3ec0530f3e..0000000000 --- a/querydsl-jpa-codegen/template.mf +++ /dev/null @@ -1,16 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.jpa.codegen -Bundle-Name: Querydsl JPA Codegen -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.codegen.*;version="${codegen.version}", - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - javax.persistence.*;version="[2.0.0,2.1.0)", - javax.xml.stream.*;version="0", - org.hibernate.*;version="${hibernate.version}", - org.slf4j.*;version="${slf4j.version}", - com.google.common.*;version="${guava.version}" \ No newline at end of file diff --git a/querydsl-jpa/template.mf b/querydsl-jpa/template.mf deleted file mode 100644 index a4eedfd08b..0000000000 --- a/querydsl-jpa/template.mf +++ /dev/null @@ -1,17 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.jpa -Bundle-Name: Querydsl JPA -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.sql.*;version="${project.version}";resolution:=optional, - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - javax.persistence.*;version="[1.1.0,2.1.0]", - javax.xml.stream.*;version="0", - org.hibernate.*;version="${hibernate.version}";resolution:=optional, - org.eclipse.persistence.*;version="2.4.0";resolution:=optional, - org.slf4j.*;version="${slf4j.version}", - com.google.common.*;version="${guava.version}" \ No newline at end of file diff --git a/querydsl-lucene3/template.mf b/querydsl-lucene3/template.mf deleted file mode 100644 index 1457c332a6..0000000000 --- a/querydsl-lucene3/template.mf +++ /dev/null @@ -1,11 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.lucene -Bundle-Name: Querydsl Lucene -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - javax.annotation.*;version="0", - com.google.common.*;version="${guava.version}", - org.apache.lucene.*;version="[3.0.0,3.1.0)", - org.slf4j.*;version="${slf4j.version}" \ No newline at end of file diff --git a/querydsl-lucene4/template.mf b/querydsl-lucene4/template.mf deleted file mode 100644 index faad6033e1..0000000000 --- a/querydsl-lucene4/template.mf +++ /dev/null @@ -1,11 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.lucene -Bundle-Name: Querydsl Lucene -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - javax.annotation.*;version="0", - com.google.common.*;version="${guava.version}", - org.apache.lucene.*;version="[4.0.0,5.0.0)", - org.slf4j.*;version="${slf4j.version}" \ No newline at end of file diff --git a/querydsl-mongodb/template.mf b/querydsl-mongodb/template.mf deleted file mode 100644 index 876b62b9b6..0000000000 --- a/querydsl-mongodb/template.mf +++ /dev/null @@ -1,15 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.mongodb -Bundle-Name: Querydsl Mongodb -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mongodb.*;version="0", - org.mongodb.morphia.*;version="${morphia.version}";resolution:=optional, - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.apt;version="${project.version}";resolution:=optional, - com.mysema.query.*;version="${project.version}", - javax.annotation.*;version="0";resolution:=optional, - javax.lang.model.*;version="0", - javax.tools.*;version="0", - com.google.common.*;version="${guava.version}", - org.bson.*;version="0" diff --git a/querydsl-spatial/template.mf b/querydsl-spatial/template.mf deleted file mode 100644 index 72e7150306..0000000000 --- a/querydsl-spatial/template.mf +++ /dev/null @@ -1,9 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.core -Bundle-Name: Querydsl Spatial -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - javax.annotation.*;version="0", - org.geolatte.geom.*;version="0.11", - com.mysema.query.*;version="${project.version}", - com.google.common.*;version="${guava.version}" diff --git a/querydsl-sql-codegen/template.mf b/querydsl-sql-codegen/template.mf deleted file mode 100644 index 6e99f3ad61..0000000000 --- a/querydsl-sql-codegen/template.mf +++ /dev/null @@ -1,18 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.sql.codegen -Bundle-Name: Querydsl SQL Codegen -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Import-Template: - com.mysema.codegen.*;version="${codegen.version}", - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - javax.validation.*;version="1.0.0", - com.google.common.*;version="${guava.version}", - org.apache.tools.ant.*;version="${ant.version}", - org.joda.time.*;version="1.6", - org.geolatte.*;version="0.11", - org.slf4j.*;version="${slf4j.version}" - \ No newline at end of file diff --git a/querydsl-sql/template.mf b/querydsl-sql/template.mf deleted file mode 100644 index 4236d60490..0000000000 --- a/querydsl-sql/template.mf +++ /dev/null @@ -1,17 +0,0 @@ -Bundle-SymbolicName: com.mysema.querydsl.sql -Bundle-Name: Querydsl SQL -Bundle-Vendor: Mysema -Bundle-ManifestVersion: 2 -Excluded-Imports: com.infradna.tool.bridge_method_injector, org.postgis, org.geolatte.*, oracle.*, com.vividsolutions.jts.* -Import-Template: - com.mysema.commons.lang.*;version="${mysema.lang.version}", - com.mysema.query.*;version="${project.version}", - com.mysema.util.*;version="${project.version}", - javax.annotation.*;version="0", - javax.inject.*;version="0", - javax.sql.*;version="0", - javax.validation.*;version="1.0.0", - com.google.common.*;version="${guava.version}", - org.joda.time.*;version="1.6", - org.slf4j.*;version="${slf4j.version}" - \ No newline at end of file From f75bd60fe69c7f1d646fd3a451730785e047e635 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 19:48:04 +0200 Subject: [PATCH 0265/1968] Changing lucene3 OSGi Import-Package range to [3.6,4) --- querydsl-lucene3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 6ed4cf96b6..6cde9874d1 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -25,7 +25,7 @@ 3.6.2 - org.apache.lucene.*;version="[3,3.1)", + org.apache.lucene.*;version="[3.6,4)", ${osgi.import.package.root} From debddbc1795cb510c92a0bec93f0486b59006b1c Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 20:13:40 +0200 Subject: [PATCH 0266/1968] Removing javax.jdo Import-Package special range definition --- querydsl-jdo/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 2c8b71b258..581709dadd 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -25,10 +25,6 @@ 3.2.0-release 3.2.0-release - - javax.jdo.*;version="[2,4)", - ${osgi.import.package.root} - From 93f94181db1149e766cf1168df2c0636c2b702e5 Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 20:30:20 +0200 Subject: [PATCH 0267/1968] Marking vividsolutions as an optional dependency in querydsl-sql --- querydsl-sql/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 7282d8927c..22b06d5a13 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -39,7 +39,7 @@ com.vividsolutions jts 1.10 - provided + true joda-time From 751d0dfbb16b12dcc5856ef405094189b532711c Mon Sep 17 00:00:00 2001 From: "balazs.zsoldos" Date: Tue, 24 Jun 2014 20:59:58 +0200 Subject: [PATCH 0268/1968] Change lucene3 import package version to [3.6,4) in hibernate-search --- querydsl-hibernate-search/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 1fd283653b..4b6ca84fec 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -28,7 +28,7 @@ 4.2.0.Final 3.6.2 - org.apache.lucene.*;version="[3,3.1)", + org.apache.lucene.*;version="[3.6,4)", org.hibernate.*;version="[4,5)", ${osgi.import.package.root} From d8337bfc26a08a9d84d7cbdb2451a5abcc8cf32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 24 Jun 2014 23:19:45 +0300 Subject: [PATCH 0269/1968] Improve EclipseLink mappings --- .../com/mysema/query/jpa/EclipseLinkTemplates.java | 8 +++++++- .../test/java/com/mysema/query/AbstractJPATest.java | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/EclipseLinkTemplates.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/EclipseLinkTemplates.java index e1131e1ff3..456490d4ea 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/EclipseLinkTemplates.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/EclipseLinkTemplates.java @@ -70,13 +70,19 @@ public EclipseLinkTemplates(char escape) { add(Ops.NUMCAST, "cast({0} {1s})"); // datetime - add(Ops.DateTimeOps.MILLISECOND, "extract(microsecond from {0})"); + add(Ops.DateTimeOps.MILLISECOND, "extract(millisecond from {0})"); add(Ops.DateTimeOps.SECOND, "extract(second from {0})"); add(Ops.DateTimeOps.MINUTE, "extract(minute from {0})"); add(Ops.DateTimeOps.HOUR, "extract(hour from {0})"); + add(Ops.DateTimeOps.DAY_OF_WEEK, "extract(day_of_week from {0})"); add(Ops.DateTimeOps.DAY_OF_MONTH, "extract(day from {0})"); + add(Ops.DateTimeOps.DAY_OF_YEAR, "extract(day_of_year from {0})"); + add(Ops.DateTimeOps.WEEK, "extract(week from {0})"); add(Ops.DateTimeOps.MONTH, "extract(month from {0})"); add(Ops.DateTimeOps.YEAR, "extract(year from {0})"); + + add(Ops.DateTimeOps.YEAR_MONTH, "extract(year from {0}) * 100 + extract(month from {0})"); + } @Override diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index 773c319048..c52b93a342 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -479,6 +479,18 @@ public void DistinctResults() { assertEquals(1, query().from(cat).distinct().list(cat.birthdate).size()); } + @Test + public void Date() { + query().from(cat).list(cat.birthdate.year()); + query().from(cat).list(cat.birthdate.yearMonth()); + query().from(cat).list(cat.birthdate.month()); + query().from(cat).list(cat.birthdate.week()); + query().from(cat).list(cat.birthdate.dayOfMonth()); + query().from(cat).list(cat.birthdate.hour()); + query().from(cat).list(cat.birthdate.minute()); + query().from(cat).list(cat.birthdate.second()); + } + @Test @ExcludeIn(ORACLE) public void Divide() { @@ -1469,3 +1481,4 @@ public void Type_Order() { .list(animal.id)); } } + From 6382e5cc0a75d71297f2f5046683e8220b90658b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Jun 2014 19:44:49 +0300 Subject: [PATCH 0270/1968] Comment week mapping out --- .../src/test/java/com/mysema/query/AbstractJPATest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index c52b93a342..d14bf1b3fa 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -484,7 +484,7 @@ public void Date() { query().from(cat).list(cat.birthdate.year()); query().from(cat).list(cat.birthdate.yearMonth()); query().from(cat).list(cat.birthdate.month()); - query().from(cat).list(cat.birthdate.week()); + //query().from(cat).list(cat.birthdate.week()); query().from(cat).list(cat.birthdate.dayOfMonth()); query().from(cat).list(cat.birthdate.hour()); query().from(cat).list(cat.birthdate.minute()); From 3fe1a1cacd0cfb8173570753c7a29481755d4ac8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Jun 2014 19:48:55 +0300 Subject: [PATCH 0271/1968] Exclude Like_Escape test for Firebird --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 84664b5266..7f477acd28 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -630,6 +630,7 @@ public void Like() { } @Test + @ExcludeIn(FIREBIRD) public void Like_Escape() { List strs = ImmutableList.of("%a", "a%", "%a%", "_a", "a_", "_a_", "[C-P]arsen"); From 5be3edd310dfe37a67489c31be943a8ef18edf22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Jun 2014 21:03:47 +0300 Subject: [PATCH 0272/1968] Throw exception on template expression in batch statements --- .../query/sql/dml/AbstractSQLClause.java | 18 +++++---- .../mysema/query/sql/dml/SQLDeleteClause.java | 26 ++++++------- .../mysema/query/sql/dml/SQLInsertClause.java | 36 +++++++---------- .../mysema/query/sql/dml/SQLMergeClause.java | 37 +++++++++--------- .../mysema/query/sql/dml/SQLUpdateClause.java | 39 +++++++------------ .../sql/teradata/SetQueryBandClause.java | 17 +++++--- .../java/com/mysema/query/DeleteBase.java | 28 +++++++------ .../java/com/mysema/query/InsertBase.java | 7 ++++ .../test/java/com/mysema/query/MergeBase.java | 33 +++++++++------- .../java/com/mysema/query/UpdateBase.java | 28 ++++++------- 10 files changed, 136 insertions(+), 133 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index 771042b6e3..d17b266dd9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -23,14 +23,8 @@ import com.google.common.collect.ImmutableList; import com.mysema.query.QueryMetadata; import com.mysema.query.dml.DMLClause; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.SQLBindings; -import com.mysema.query.sql.SQLListener; -import com.mysema.query.sql.SQLListeners; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Path; +import com.mysema.query.sql.*; +import com.mysema.query.types.*; /** * AbstractSQLClause is a superclass for SQL based DMLClause implementations @@ -55,6 +49,14 @@ public AbstractSQLClause(Configuration configuration) { this.useLiterals = configuration.getUseLiterals(); } + protected abstract void assertNoTemplateExpressionsInBatch(); + + protected void assertNoTemplateExpressionInBatch(Expression expr) { + if (expr instanceof TemplateExpression) { + throw new IllegalArgumentException("Template expressions are not allowed in batch statements"); + } + } + /** * @param listener */ diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index 9376735957..430b13f931 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -13,33 +13,23 @@ */ package com.mysema.query.sql.dml; +import javax.annotation.Nonnegative; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -import javax.annotation.Nonnegative; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.common.collect.ImmutableList; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.JoinType; -import com.mysema.query.QueryFlag; +import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; import com.mysema.query.dml.DeleteClause; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.RelationalPath; -import com.mysema.query.sql.SQLBindings; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.sql.SQLTemplates; +import com.mysema.query.sql.*; import com.mysema.query.types.Expression; import com.mysema.query.types.Predicate; import com.mysema.query.types.ValidatingVisitor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * SQLDeleteClause defines a DELETE clause @@ -109,6 +99,7 @@ public SQLDeleteClause addFlag(Position position, Expression flag) { * @return */ public SQLDeleteClause addBatch() { + assertNoTemplateExpressionsInBatch(); batches.add(metadata); metadata = new DefaultQueryMetadata(); metadata.addJoin(JoinType.DEFAULT, entity); @@ -116,6 +107,11 @@ public SQLDeleteClause addBatch() { return this; } + @Override + protected void assertNoTemplateExpressionsInBatch() { + assertNoTemplateExpressionInBatch(metadata.getWhere()); + } + private PreparedStatement createStatement() throws SQLException{ PreparedStatement stmt; if (batches.isEmpty()) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index ece68342b7..b7d347a820 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -13,21 +13,13 @@ */ package com.mysema.query.sql.dml; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; +import javax.annotation.Nullable; +import java.sql.*; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.common.collect.ImmutableList; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinType; @@ -35,20 +27,12 @@ import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.dml.InsertClause; -import com.mysema.query.sql.AbstractSQLSubQuery; -import com.mysema.query.sql.ColumnMetadata; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.RelationalPath; -import com.mysema.query.sql.SQLBindings; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.sql.SQLTemplates; +import com.mysema.query.sql.*; import com.mysema.query.sql.types.Null; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.SubQueryExpression; +import com.mysema.query.types.*; import com.mysema.util.ResultSetAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * SQLInsertClause defines an INSERT INTO clause @@ -137,6 +121,7 @@ public SQLInsertClause addFlag(Position position, Expression flag) { * @return */ public SQLInsertClause addBatch() { + assertNoTemplateExpressionsInBatch(); if (subQueryBuilder != null) { subQuery = subQueryBuilder.list(values.toArray(new Expression[values.size()])); values.clear(); @@ -148,6 +133,13 @@ public SQLInsertClause addBatch() { return this; } + @Override + protected void assertNoTemplateExpressionsInBatch() { + for (Expression expr : values) { + assertNoTemplateExpressionInBatch(expr); + } + } + @Override public SQLInsertClause columns(Path... columns) { this.columns.addAll(Arrays.asList(columns)); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index a0bffe2481..867f456d64 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -13,6 +13,7 @@ */ package com.mysema.query.sql.dml; +import javax.annotation.Nullable; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -21,11 +22,6 @@ import java.util.Arrays; import java.util.List; -import javax.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.common.collect.ImmutableList; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinType; @@ -33,21 +29,12 @@ import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.dml.StoreClause; -import com.mysema.query.sql.ColumnMetadata; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.RelationalPath; -import com.mysema.query.sql.SQLBindings; -import com.mysema.query.sql.SQLQuery; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.sql.SQLTemplates; +import com.mysema.query.sql.*; import com.mysema.query.sql.types.Null; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.NullExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.SubQueryExpression; +import com.mysema.query.types.*; import com.mysema.util.ResultSetAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * SQLMergeClause defines an MERGE INTO clause @@ -121,6 +108,7 @@ public SQLMergeClause addFlag(Position position, Expression flag) { * @return */ public SQLMergeClause addBatch() { + assertNoTemplateExpressionsInBatch(); if (!configuration.getTemplates().isNativeMerge()) { throw new IllegalStateException("batch only supported for databases that support native merge"); } @@ -133,6 +121,19 @@ public SQLMergeClause addBatch() { return this; } + @Override + protected void assertNoTemplateExpressionsInBatch() { + for (Expression expr : keys) { + assertNoTemplateExpressionInBatch(expr); + } + for (Expression expr : columns) { + assertNoTemplateExpressionInBatch(expr); + } + for (Expression expr : values) { + assertNoTemplateExpressionInBatch(expr); + } + } + public SQLMergeClause columns(Path... columns) { this.columns.addAll(Arrays.asList(columns)); return this; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index a3b89b2d52..ca2e217fab 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -13,39 +13,22 @@ */ package com.mysema.query.sql.dml; +import javax.annotation.Nonnegative; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnegative; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.*; import com.google.common.collect.ImmutableList; import com.mysema.commons.lang.Pair; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.JoinType; -import com.mysema.query.QueryFlag; +import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; import com.mysema.query.dml.UpdateClause; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.RelationalPath; -import com.mysema.query.sql.SQLBindings; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.sql.SQLTemplates; +import com.mysema.query.sql.*; import com.mysema.query.sql.types.Null; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; +import com.mysema.query.types.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * SQLUpdateClause defines a UPDATE clause @@ -112,6 +95,7 @@ public SQLUpdateClause addFlag(Position position, Expression flag) { * @return */ public SQLUpdateClause addBatch() { + assertNoTemplateExpressionsInBatch(); batches.add(new SQLUpdateBatch(metadata, updates)); updates = new ArrayList,Expression>>(); metadata = new DefaultQueryMetadata(); @@ -119,6 +103,13 @@ public SQLUpdateClause addBatch() { return this; } + protected void assertNoTemplateExpressionsInBatch() { + for (Pair, Expression> pair : updates) { + assertNoTemplateExpressionInBatch(pair.getSecond()); + } + assertNoTemplateExpressionInBatch(metadata.getWhere()); + } + private PreparedStatement createStatement() throws SQLException{ PreparedStatement stmt; if (batches.isEmpty()) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java index 8e7e11fbc3..bd4ce8e28a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java @@ -13,6 +13,12 @@ */ package com.mysema.query.sql.teradata; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.mysema.query.sql.Configuration; @@ -20,12 +26,6 @@ import com.mysema.query.sql.SQLTemplates; import com.mysema.query.sql.dml.AbstractSQLClause; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.List; -import java.util.Map; - /** * SetQueryBandClause provides support for Teradata specific set query_band executions. * @@ -96,6 +96,11 @@ public long execute() { } } + @Override + protected void assertNoTemplateExpressionsInBatch() { + // do nothing + } + @Override public List getSQL() { SQLBindings bindings; diff --git a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java index 23a86c6455..95a2cbfe24 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java @@ -13,27 +13,22 @@ */ package com.mysema.query; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Target.CUBRID; -import static com.mysema.query.Target.H2; -import static com.mysema.query.Target.MYSQL; -import static com.mysema.query.Target.ORACLE; -import static com.mysema.query.Target.SQLSERVER; -import static org.junit.Assert.assertEquals; - import java.sql.SQLException; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.sql.dml.SQLDeleteClause; import com.mysema.query.sql.domain.QEmployee; import com.mysema.query.sql.domain.QSurvey; +import com.mysema.query.support.Expressions; import com.mysema.query.types.expr.Param; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Target.*; +import static org.junit.Assert.assertEquals; public class DeleteBase extends AbstractBaseTest{ @@ -115,4 +110,13 @@ public void Delete_with_SubQuery_exists2() { delete.execute(); } + + @Test(expected=IllegalArgumentException.class) + public void Delete_With_TempateExpression_In_Batch() { + delete(survey) + .where(Expressions.booleanTemplate("true")) + .addBatch(); + } + + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index ebca6ff4e9..17b5a6609b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -391,5 +391,12 @@ public void Replace() { clause.execute(); } + @Test(expected=IllegalArgumentException.class) + public void Insert_With_TempateExpression_In_Batch() { + insert(survey) + .set(survey.id, 3) + .set(survey.name, Expressions.stringTemplate("'Hello'")) + .addBatch(); + } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java index b0d5491d91..3b3cecca78 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java @@ -13,30 +13,23 @@ */ package com.mysema.query; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Constants.survey2; -import static com.mysema.query.Target.CUBRID; -import static com.mysema.query.Target.DERBY; -import static com.mysema.query.Target.H2; -import static com.mysema.query.Target.POSTGRES; -import static com.mysema.query.Target.SQLSERVER; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - import java.sql.ResultSet; import java.sql.SQLException; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - import com.mysema.query.sql.dml.SQLMergeClause; import com.mysema.query.sql.domain.QSurvey; +import com.mysema.query.support.Expressions; import com.mysema.query.types.Path; import com.mysema.query.types.PathImpl; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Constants.survey2; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; public class MergeBase extends AbstractBaseTest{ @@ -171,4 +164,14 @@ public void MergeBatch_with_subquery() { // assertEquals(1, insert.execute()); } + @Test(expected=IllegalArgumentException.class) + public void Merge_With_TempateExpression_In_Batch() { + SQLMergeClause merge = merge(survey) + .keys(survey.id) + .set(survey.id, 5) + .set(survey.name, Expressions.stringTemplate("'5'")) + .addBatch(); + } + + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java index 57b3dbda83..d1c6b15a9c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java @@ -13,29 +13,24 @@ */ package com.mysema.query; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Target.CUBRID; -import static com.mysema.query.Target.H2; -import static com.mysema.query.Target.MYSQL; -import static com.mysema.query.Target.ORACLE; -import static com.mysema.query.Target.SQLSERVER; -import static org.junit.Assert.assertEquals; - import java.sql.SQLException; import java.util.Collections; import java.util.List; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.sql.dml.SQLUpdateClause; import com.mysema.query.sql.domain.QEmployee; import com.mysema.query.sql.domain.QSurvey; +import com.mysema.query.support.Expressions; import com.mysema.query.types.Path; import com.mysema.query.types.expr.Param; import com.mysema.testutil.IncludeIn; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Target.*; +import static org.junit.Assert.assertEquals; public class UpdateBase extends AbstractBaseTest { @@ -56,7 +51,6 @@ public void tearDown() throws SQLException{ @Test public void Update() throws SQLException{ - // original state long count = query().from(survey).count(); assertEquals(0, query().from(survey).where(survey.name.eq("S")).count()); @@ -174,4 +168,12 @@ public void Update_with_SubQuery_notExists() { update.execute(); } + @Test(expected=IllegalArgumentException.class) + public void Update_With_TempateExpression_In_Batch() { + update(survey) + .set(survey.id, 3) + .set(survey.name, Expressions.stringTemplate("'Hello'")) + .addBatch(); + } + } From 9615461162a966ff729c6ca24c8d5ca2836758d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Jun 2014 21:10:05 +0300 Subject: [PATCH 0273/1968] Mention Firebird support in docs --- .../main/docbook/en-US/content/tutorials/sql.xml | 13 ++++++++----- .../main/docbook/ko-KR/content/tutorials/sql.xml | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 8ea98f762d..f81a6a6601 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -400,16 +400,19 @@ Configuration configuration = new Configuration(templates); - CUBRIDTemplates (tested with 8.4) + CUBRIDTemplates (tested with CUBRID 8.4) - DerbyTemplates (tested with 10.8.2.2) + DerbyTemplates (tested with Derby 10.8.2.2) - HSQLDBTemplates (tested with 2.2.4) + FirebirdTemplates (tested with Firebird 2.5) - H2Templates (tested with 1.3.164) + HSQLDBTemplates (tested with HSQLDB 2.2.4) + + + H2Templates (tested with H2 1.3.164) MySQLTemplates (tested with MySQL 5.5) @@ -418,7 +421,7 @@ Configuration configuration = new Configuration(templates); OracleTemplates (test with Oracle 10 and 11) - PostgresTemplates (tested with 9.1) + PostgresTemplates (tested with PostgreSQL 9.1) SQLiteTemplates (tested with xerial JDBC 3.7.2) diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index 46f8133069..004e7e165e 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -391,16 +391,19 @@ Configuration configuration = new Configuration(templates); - CUBRIDTemplates (tested with 8.4) + CUBRIDTemplates (tested with CUBRID 8.4) - DerbyTemplates (tested with 10.8.2.2) + DerbyTemplates (tested with Derby 10.8.2.2) - HSQLDBTemplates (tested with 2.2.4) + FirebirdTemplates (tested with Firebird 2.5) - H2Templates (tested with 1.3.164) + HSQLDBTemplates (tested with HSQLDB 2.2.4) + + + H2Templates (tested with H2 1.3.164) MySQLTemplates (tested with MySQL 5.5) @@ -409,7 +412,7 @@ Configuration configuration = new Configuration(templates); OracleTemplates (test with Oracle 10 and 11) - PostgresTemplates (tested with 9.1) + PostgresTemplates (tested with PostgreSQL 9.1) SQLiteTemplates (tested with xerial JDBC 3.7.2) From 265911e3763c67ae4f4e109c79f3305a68865f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 27 Jun 2014 21:06:37 +0300 Subject: [PATCH 0274/1968] Add mongodb tests --- .../java/com/mysema/query/mongodb/MongodbQueryTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java index ff12190127..ca21b08edd 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java @@ -148,6 +148,12 @@ public void Equals_Ignore_Case() { assertFalse(where(user.firstName.equalsIgnoreCase("AaKk")).exists()); } + @Test + public void Equals_and_Between() { + assertQuery(user.firstName.startsWith("Jaa").and(user.age.between(20, 30)), u2, u1); + assertQuery(user.firstName.startsWith("Jaa").and(user.age.goe(20).and(user.age.loe(30))), u2, u1); + } + @Test public void Exists() { assertTrue(where(user.firstName.eq("Jaakko")).exists()); From 1c75030d6e5dc00cb92178eefb9777f1b714e95e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 29 Jun 2014 14:35:45 +0300 Subject: [PATCH 0275/1968] Bump version --- querydsl-apt/pom.xml | 6 +++--- querydsl-codegen/pom.xml | 6 +++--- querydsl-collections/pom.xml | 6 +++--- querydsl-core/pom.xml | 6 +++--- querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml | 2 +- querydsl-hibernate-search/pom.xml | 6 +++--- querydsl-jdo/pom.xml | 6 +++--- querydsl-jpa-codegen/pom.xml | 6 +++--- querydsl-jpa/pom.xml | 6 +++--- querydsl-lucene3/pom.xml | 6 +++--- querydsl-lucene4/pom.xml | 6 +++--- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 6 +++--- querydsl-root/pom.xml | 6 +++--- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 6 +++--- querydsl-sql-codegen/pom.xml | 6 +++--- querydsl-sql/pom.xml | 6 +++--- 19 files changed, 49 insertions(+), 49 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 116f5463a1..6000405214 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -232,4 +232,4 @@ - + diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 32e08541d0..400a7f00bd 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -83,4 +83,4 @@ - + diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 7b0bf2f5d0..71447868aa 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -103,4 +103,4 @@ - + diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index f2946ad58e..3f9c307510 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -141,4 +141,4 @@ 1.11 - + diff --git a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml index f2782f0bf3..de7b53a069 100644 --- a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml index 66f6f39f1c..ba5c1d7e45 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 4b6ca84fec..fa99477b16 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -143,4 +143,4 @@ - + diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 581709dadd..a7af0db8de 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -289,4 +289,4 @@ - + diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 9abfbafa39..ec3a414b00 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -123,4 +123,4 @@ - + diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 3c2bb75093..90de78f94c 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -362,4 +362,4 @@ - + diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 6cde9874d1..246235f73f 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -113,4 +113,4 @@ - + diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 1ca8ba3835..02cff1992d 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -119,4 +119,4 @@ - + diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index acc609708f..a8f6959f21 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 4225d966ec..3ab2c67fcc 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -154,4 +154,4 @@ - + diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index e65b796d90..ffb5a8630d 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,10 +1,10 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 Querydsl parent project for Querydsl modules ${project.homepage} @@ -573,4 +573,4 @@ - + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index d073535585..daa425d0e5 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 5f8f880b8d..bd88761202 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -72,4 +72,4 @@ 1.11 - + diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 87326a2f53..afe00cab09 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -219,4 +219,4 @@ - + diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 8426154643..3cd3683817 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1.BUILD-SNAPSHOT + 3.4.1 ../querydsl-root/pom.xml @@ -330,4 +330,4 @@ - + From e67b311fa6089286c68ff2cd2398c526c128553d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 29 Jun 2014 14:37:04 +0300 Subject: [PATCH 0276/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 6000405214..0eed3a570b 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 400a7f00bd..fa9e873b5e 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 71447868aa..04c9c1561d 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 3f9c307510..6d76255428 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index fa99477b16..803bd8a12c 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index a7af0db8de..33f527613c 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index ec3a414b00..38b5a58e09 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 90de78f94c..e533592d62 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 246235f73f..3484561ad7 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 02cff1992d..4f0c2fc03c 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index a8f6959f21..436532276d 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 3ab2c67fcc..bbec2f19f3 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ffb5a8630d..d29654d7eb 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index daa425d0e5..cd6b7d3cb7 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index bd88761202..4cc98a2025 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index afe00cab09..b3d62950b8 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 3cd3683817..4551cbccb1 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.1 + 3.4.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml From e2de295e5f546b63ca97a6fc46b93b5706a0d1e6 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 1 Jul 2014 19:33:35 +0200 Subject: [PATCH 0277/1968] Fix for #836 --- .../java/com/mysema/query/types/TemplateFactory.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/TemplateFactory.java b/querydsl-core/src/main/java/com/mysema/query/types/TemplateFactory.java index 93a280dee0..5d2cb3cec2 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/TemplateFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/TemplateFactory.java @@ -36,9 +36,9 @@ public class TemplateFactory { private static final Constant PERCENT = ConstantImpl.create("%"); private static final Pattern elementPattern = Pattern.compile("\\{" - + "(?%?%?)" - + "(?\\d+)" - + "(?[slu%]?%?)" + + "(%?%?)" + + "(\\d+)" + + "([slu%]?%?)" + "\\}"); private final Map cache = new ConcurrentHashMap(); @@ -177,9 +177,9 @@ public Template create(String template) { if (m.start() > end) { elements.add(new Template.StaticText(template.substring(end, m.start()))); } - String premodifiers = m.group("premod").toLowerCase(Locale.ENGLISH); - int index = Integer.parseInt(m.group("index")); - String postmodifiers = m.group("postmod").toLowerCase(Locale.ENGLISH); + String premodifiers = m.group(1).toLowerCase(Locale.ENGLISH); + int index = Integer.parseInt(m.group(2)); + String postmodifiers = m.group(3).toLowerCase(Locale.ENGLISH); boolean asString = false; Function transformer = null; switch (premodifiers.length()) { From f21e7b24dafcce036d7c0331aaa2b015ac43f03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 10 Jul 2014 22:53:47 +0300 Subject: [PATCH 0278/1968] Improve batch handling --- .../query/sql/dml/AbstractSQLClause.java | 29 ++++--- .../mysema/query/sql/dml/SQLDeleteClause.java | 79 +++++++++-------- .../mysema/query/sql/dml/SQLInsertClause.java | 85 +++++++++++-------- .../mysema/query/sql/dml/SQLMergeClause.java | 77 +++++++++++------ .../mysema/query/sql/dml/SQLUpdateClause.java | 79 +++++++++-------- .../sql/teradata/SetQueryBandClause.java | 5 -- .../java/com/mysema/query/DeleteBase.java | 2 +- .../java/com/mysema/query/InsertBase.java | 2 +- .../test/java/com/mysema/query/MergeBase.java | 5 +- .../java/com/mysema/query/UpdateBase.java | 2 +- 10 files changed, 216 insertions(+), 149 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index d17b266dd9..94b372f7ed 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -17,6 +17,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -24,7 +25,9 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.dml.DMLClause; import com.mysema.query.sql.*; -import com.mysema.query.types.*; +import com.mysema.query.types.ParamExpression; +import com.mysema.query.types.ParamNotSetException; +import com.mysema.query.types.Path; /** * AbstractSQLClause is a superclass for SQL based DMLClause implementations @@ -49,14 +52,6 @@ public AbstractSQLClause(Configuration configuration) { this.useLiterals = configuration.getUseLiterals(); } - protected abstract void assertNoTemplateExpressionsInBatch(); - - protected void assertNoTemplateExpressionInBatch(Expression expr) { - if (expr instanceof TemplateExpression) { - throw new IllegalArgumentException("Template expressions are not allowed in batch statements"); - } - } - /** * @param listener */ @@ -123,7 +118,7 @@ protected void setParameters(PreparedStatement stmt, List objects, } } - protected long executeBatch(PreparedStatement stmt) throws SQLException { + private long executeBatch(PreparedStatement stmt) throws SQLException { if (configuration.getTemplates().isBatchCountViaGetUpdateCount()) { stmt.executeBatch(); return stmt.getUpdateCount(); @@ -136,6 +131,14 @@ protected long executeBatch(PreparedStatement stmt) throws SQLException { } } + protected long executeBatch(Collection stmts) throws SQLException { + long rv = 0; + for (PreparedStatement stmt : stmts) { + rv += executeBatch(stmt); + } + return rv; + } + protected void close(Statement stmt) { try { stmt.close(); @@ -144,6 +147,12 @@ protected void close(Statement stmt) { } } + protected void close(Collection stmts) { + for (Statement stmt : stmts) { + close(stmt); + } + } + protected void close(ResultSet rs) { try { rs.close(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index 430b13f931..a6b1494ec5 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -18,9 +18,12 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Map; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; import com.mysema.query.dml.DeleteClause; @@ -99,7 +102,6 @@ public SQLDeleteClause addFlag(Position position, Expression flag) { * @return */ public SQLDeleteClause addBatch() { - assertNoTemplateExpressionsInBatch(); batches.add(metadata); metadata = new DefaultQueryMetadata(); metadata.addJoin(JoinType.DEFAULT, entity); @@ -107,55 +109,61 @@ public SQLDeleteClause addBatch() { return this; } - @Override - protected void assertNoTemplateExpressionsInBatch() { - assertNoTemplateExpressionInBatch(metadata.getWhere()); - } - private PreparedStatement createStatement() throws SQLException{ - PreparedStatement stmt; - if (batches.isEmpty()) { - SQLSerializer serializer = createSerializer(); - serializer.serializeDelete(metadata, entity); - queryString = serializer.toString(); - constants = serializer.getConstants(); - logger.debug(queryString); - stmt = connection.prepareStatement(queryString); - setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - } else { - SQLSerializer serializer = createSerializer(); - serializer.serializeDelete(batches.get(0), entity); - queryString = serializer.toString(); - constants = serializer.getConstants(); - logger.debug(queryString); + SQLSerializer serializer = createSerializer(); + serializer.serializeDelete(metadata, entity); + queryString = serializer.toString(); + constants = serializer.getConstants(); + logger.debug(queryString); + PreparedStatement stmt = connection.prepareStatement(queryString); + setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + return stmt; + } - // add first batch - stmt = connection.prepareStatement(queryString); + private Collection createStatements() throws SQLException { + SQLSerializer serializer = createSerializer(); + serializer.serializeDelete(batches.get(0), entity); + queryString = serializer.toString(); + constants = serializer.getConstants(); + logger.debug(queryString); + + Map stmts = Maps.newHashMap(); + + // add first batch + PreparedStatement stmt = connection.prepareStatement(queryString); + setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + stmt.addBatch(); + stmts.put(queryString, stmt); + + // add other batches + for (int i = 1; i < batches.size(); i++) { + serializer = createSerializer(); + serializer.serializeDelete(batches.get(i), entity); + stmt = stmts.get(serializer.toString()); + if (stmt == null) { + stmt = connection.prepareStatement(serializer.toString()); + stmts.put(serializer.toString(), stmt); + } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); - - // add other batches - for (int i = 1; i < batches.size(); i++) { - serializer = createSerializer(); - serializer.serializeDelete(batches.get(i), entity); - setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); - } } - return stmt; + + return stmts.values(); } @Override public long execute() { PreparedStatement stmt = null; + Collection stmts = null; try { - stmt = createStatement(); if (batches.isEmpty()) { + stmt = createStatement(); listeners.notifyDelete(entity, metadata); return stmt.executeUpdate(); } else { + stmts = createStatements(); listeners.notifyDeletes(entity, batches); - return executeBatch(stmt); + return executeBatch(stmts); } } catch (SQLException e) { throw configuration.translate(queryString, constants, e); @@ -163,6 +171,9 @@ public long execute() { if (stmt != null) { close(stmt); } + if (stmts != null) { + close(stmts); + } } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index b7d347a820..b2a4595432 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -15,12 +15,10 @@ import javax.annotation.Nullable; import java.sql.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; +import java.util.*; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinType; import com.mysema.query.QueryFlag; @@ -121,7 +119,6 @@ public SQLInsertClause addFlag(Position position, Expression flag) { * @return */ public SQLInsertClause addBatch() { - assertNoTemplateExpressionsInBatch(); if (subQueryBuilder != null) { subQuery = subQueryBuilder.list(values.toArray(new Expression[values.size()])); values.clear(); @@ -133,13 +130,6 @@ public SQLInsertClause addBatch() { return this; } - @Override - protected void assertNoTemplateExpressionsInBatch() { - for (Expression expr : values) { - assertNoTemplateExpressionInBatch(expr); - } - } - @Override public SQLInsertClause columns(Path... columns) { this.columns.addAll(Arrays.asList(columns)); @@ -229,30 +219,45 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException subQuery = subQueryBuilder.list(values.toArray(new Expression[values.size()])); values.clear(); } - PreparedStatement stmt = null; - if (batches.isEmpty()) { - serializer.serializeInsert(metadata, entity, columns, values, subQuery); - stmt = prepareStatementAndSetParameters(serializer, withKeys); - } else { - serializer.serializeInsert(metadata, entity, batches.get(0).getColumns(), batches - .get(0).getValues(), batches.get(0).getSubQuery()); - stmt = prepareStatementAndSetParameters(serializer, withKeys); - // add first batch - stmt.addBatch(); + serializer.serializeInsert(metadata, entity, columns, values, subQuery); + return prepareStatementAndSetParameters(serializer, withKeys); + } + + private Collection createStatements(boolean withKeys) throws SQLException { + if (subQueryBuilder != null) { + subQuery = subQueryBuilder.list(values.toArray(new Expression[values.size()])); + values.clear(); + } + + Map stmts = Maps.newHashMap(); - // add other batches - for (int i = 1; i < batches.size(); i++) { - SQLInsertBatch batch = batches.get(i); - serializer = createSerializer(); - serializer.serializeInsert(metadata, entity, batch.getColumns(), - batch.getValues(), batch.getSubQuery()); + // add first batch + SQLSerializer serializer = createSerializer(); + serializer.serializeInsert(metadata, entity, batches.get(0).getColumns(), batches + .get(0).getValues(), batches.get(0).getSubQuery()); + PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); + stmt.addBatch(); + stmts.put(serializer.toString(), stmt); + + // add other batches + for (int i = 1; i < batches.size(); i++) { + SQLInsertBatch batch = batches.get(i); + serializer = createSerializer(); + serializer.serializeInsert(metadata, entity, batch.getColumns(), + batch.getValues(), batch.getSubQuery()); + stmt = stmts.get(serializer.toString()); + if (stmt == null) { + stmt = prepareStatementAndSetParameters(serializer, withKeys); + stmts.put(serializer.toString(), stmt); + } else { setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); } + stmt.addBatch(); } - return stmt; + + return stmts.values(); } private PreparedStatement prepareStatementAndSetParameters(SQLSerializer serializer, @@ -288,14 +293,21 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali */ public ResultSet executeWithKeys() { try { - final PreparedStatement stmt = createStatement(true); + PreparedStatement stmt = null; + Collection stmts = null; if (batches.isEmpty()) { + stmt = createStatement(true); listeners.notifyInsert(entity, metadata, columns, values, subQuery); stmt.executeUpdate(); } else { + stmts = createStatements(true); listeners.notifyInserts(entity, metadata, batches); stmt.executeBatch(); } + if (stmts != null && stmts.size() > 1) { + throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); + } + final Statement stmt2 = stmts != null ? stmts.iterator().next() : stmt; ResultSet rs = stmt.getGeneratedKeys(); return new ResultSetAdapter(rs) { @Override @@ -303,7 +315,7 @@ public void close() throws SQLException { try { super.close(); } finally { - stmt.close(); + stmt2.close(); } } }; @@ -315,14 +327,16 @@ public void close() throws SQLException { @Override public long execute() { PreparedStatement stmt = null; + Collection stmts = null; try { - stmt = createStatement(false); if (batches.isEmpty()) { + stmt = createStatement(false); listeners.notifyInsert(entity, metadata, columns, values, subQuery); return stmt.executeUpdate(); } else { + stmts = createStatements(false); listeners.notifyInserts(entity, metadata, batches); - return executeBatch(stmt); + return executeBatch(stmts); } } catch (SQLException e) { throw configuration.translate(queryString, constants, e); @@ -330,6 +344,9 @@ public long execute() { if (stmt != null) { close(stmt); } + if (stmts != null) { + close(stmts); + } } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 867f456d64..0b3f82e53e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -14,15 +14,11 @@ package com.mysema.query.sql.dml; import javax.annotation.Nullable; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.sql.*; +import java.util.*; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinType; import com.mysema.query.QueryFlag; @@ -108,7 +104,6 @@ public SQLMergeClause addFlag(Position position, Expression flag) { * @return */ public SQLMergeClause addBatch() { - assertNoTemplateExpressionsInBatch(); if (!configuration.getTemplates().isNativeMerge()) { throw new IllegalStateException("batch only supported for databases that support native merge"); } @@ -121,19 +116,6 @@ public SQLMergeClause addBatch() { return this; } - @Override - protected void assertNoTemplateExpressionsInBatch() { - for (Expression expr : keys) { - assertNoTemplateExpressionInBatch(expr); - } - for (Expression expr : columns) { - assertNoTemplateExpressionInBatch(expr); - } - for (Expression expr : values) { - assertNoTemplateExpressionInBatch(expr); - } - } - public SQLMergeClause columns(Path... columns) { this.columns.addAll(Arrays.asList(columns)); return this; @@ -221,14 +203,21 @@ private List executeWithKeys(Class type, @Nullable Path path) { public ResultSet executeWithKeys() { try { if (configuration.getTemplates().isNativeMerge()) { - final PreparedStatement stmt = createStatement(true); + PreparedStatement stmt = null; + Collection stmts = null; if (batches.isEmpty()) { + stmt = createStatement(true); listeners.notifyMerge(entity, metadata, keys, columns, values, subQuery); stmt.executeUpdate(); } else { + stmts = createStatements(true); listeners.notifyMerges(entity, metadata, batches); stmt.executeBatch(); } + if (stmts != null && stmts.size() > 1) { + throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); + } + final Statement stmt2 = stmts != null ? stmts.iterator().next() : stmt; ResultSet rs = stmt.getGeneratedKeys(); return new ResultSetAdapter(rs) { @Override @@ -236,7 +225,7 @@ public void close() throws SQLException { try { super.close(); } finally { - stmt.close(); + stmt2.close(); } } }; @@ -324,7 +313,7 @@ private void populate(StoreClause clause) { } } - private PreparedStatement createStatement(boolean withKeys) throws SQLException{ + private PreparedStatement createStatement(boolean withKeys) throws SQLException { SQLSerializer serializer = createSerializer(); PreparedStatement stmt = null; if (batches.isEmpty()) { @@ -351,6 +340,37 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException{ return stmt; } + private Collection createStatements(boolean withKeys) throws SQLException { + Map stmts = Maps.newHashMap(); + + // add first batch + SQLSerializer serializer = createSerializer(); + serializer.serializeMerge(metadata, entity, + batches.get(0).getKeys(), batches.get(0).getColumns(), + batches.get(0).getValues(), batches.get(0).getSubQuery()); + PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); + stmts.put(serializer.toString(), stmt); + stmt.addBatch(); + + // add other batches + for (int i = 1; i < batches.size(); i++) { + SQLMergeBatch batch = batches.get(i); + serializer = createSerializer(); + serializer.serializeMerge(metadata, entity, + batch.getKeys(), batch.getColumns(), batch.getValues(), batch.getSubQuery()); + stmt = stmts.get(serializer.toString()); + if (stmt == null) { + stmt = prepareStatementAndSetParameters(serializer, withKeys); + stmts.put(serializer.toString(), stmt); + } else { + setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + } + stmt.addBatch(); + } + + return stmts.values(); + } + private PreparedStatement prepareStatementAndSetParameters(SQLSerializer serializer, boolean withKeys) throws SQLException { queryString = serializer.toString(); @@ -372,14 +392,16 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali private long executeNativeMerge() { PreparedStatement stmt = null; + Collection stmts = null; try { - stmt = createStatement(false); if (batches.isEmpty()) { + stmt = createStatement(false); listeners.notifyMerge(entity, metadata, keys, columns, values, subQuery); return stmt.executeUpdate(); } else { + stmts = createStatements(false); listeners.notifyMerges(entity, metadata, batches); - return executeBatch(stmt); + return executeBatch(stmts); } } catch (SQLException e) { throw configuration.translate(queryString, constants, e); @@ -387,6 +409,9 @@ private long executeNativeMerge() { if (stmt != null) { close(stmt); } + if (stmts != null) { + close(stmts); + } } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index ca2e217fab..3eef1d9ca3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -20,6 +20,7 @@ import java.util.*; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Maps; import com.mysema.commons.lang.Pair; import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; @@ -95,7 +96,6 @@ public SQLUpdateClause addFlag(Position position, Expression flag) { * @return */ public SQLUpdateClause addBatch() { - assertNoTemplateExpressionsInBatch(); batches.add(new SQLUpdateBatch(metadata, updates)); updates = new ArrayList,Expression>>(); metadata = new DefaultQueryMetadata(); @@ -103,57 +103,61 @@ public SQLUpdateClause addBatch() { return this; } - protected void assertNoTemplateExpressionsInBatch() { - for (Pair, Expression> pair : updates) { - assertNoTemplateExpressionInBatch(pair.getSecond()); - } - assertNoTemplateExpressionInBatch(metadata.getWhere()); - } - private PreparedStatement createStatement() throws SQLException{ - PreparedStatement stmt; - if (batches.isEmpty()) { - SQLSerializer serializer = createSerializer(); - serializer.serializeUpdate(metadata, entity, updates); - queryString = serializer.toString(); - constants = serializer.getConstants(); - logger.debug(queryString); - stmt = connection.prepareStatement(queryString); - setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - } else { - SQLSerializer serializer = createSerializer(); - serializer.serializeUpdate(batches.get(0).getMetadata(), entity, batches.get(0).getUpdates()); - queryString = serializer.toString(); - constants = serializer.getConstants(); - logger.debug(queryString); + SQLSerializer serializer = createSerializer(); + serializer.serializeUpdate(metadata, entity, updates); + queryString = serializer.toString(); + constants = serializer.getConstants(); + logger.debug(queryString); + PreparedStatement stmt = connection.prepareStatement(queryString); + setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + return stmt; + } - // add first batch - stmt = connection.prepareStatement(queryString); + private Collection createStatements() throws SQLException { + SQLSerializer serializer = createSerializer(); + serializer.serializeUpdate(batches.get(0).getMetadata(), entity, batches.get(0).getUpdates()); + queryString = serializer.toString(); + constants = serializer.getConstants(); + logger.debug(queryString); + + Map stmts = Maps.newHashMap(); + + // add first batch + PreparedStatement stmt = connection.prepareStatement(queryString); + setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + stmt.addBatch(); + stmts.put(serializer.toString(), stmt); + + // add other batches + for (int i = 1; i < batches.size(); i++) { + serializer = createSerializer(); + serializer.serializeUpdate(batches.get(i).getMetadata(), entity, batches.get(i).getUpdates()); + stmt = stmts.get(serializer.toString()); + if (stmt == null) { + stmt = connection.prepareStatement(queryString); + stmts.put(queryString, stmt); + } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); - - // add other batches - for (int i = 1; i < batches.size(); i++) { - serializer = createSerializer(); - serializer.serializeUpdate(batches.get(i).getMetadata(), entity, batches.get(i).getUpdates()); - setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); - } } - return stmt; + + return stmts.values(); } @Override public long execute() { PreparedStatement stmt = null; + Collection stmts = null; try { - stmt = createStatement(); if (batches.isEmpty()) { + stmt = createStatement(); listeners.notifyUpdate(entity, metadata, updates); return stmt.executeUpdate(); } else { + stmts = createStatements(); listeners.notifyUpdates(entity, batches); - return executeBatch(stmt); + return executeBatch(stmts); } } catch (SQLException e) { throw configuration.translate(queryString, constants, e); @@ -161,6 +165,9 @@ public long execute() { if (stmt != null) { close(stmt); } + if (stmts != null) { + close(stmts); + } } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java index bd4ce8e28a..fecc6dface 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java @@ -96,11 +96,6 @@ public long execute() { } } - @Override - protected void assertNoTemplateExpressionsInBatch() { - // do nothing - } - @Override public List getSQL() { SQLBindings bindings; diff --git a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java index 95a2cbfe24..70ca1d0824 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java @@ -111,7 +111,7 @@ public void Delete_with_SubQuery_exists2() { } - @Test(expected=IllegalArgumentException.class) + @Test public void Delete_With_TempateExpression_In_Batch() { delete(survey) .where(Expressions.booleanTemplate("true")) diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index 7fae0b12eb..4d268b8af7 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -397,7 +397,7 @@ public void Replace() { clause.execute(); } - @Test(expected=IllegalArgumentException.class) + @Test public void Insert_With_TempateExpression_In_Batch() { insert(survey) .set(survey.id, 3) diff --git a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java index 3b3cecca78..c45e11bea8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java @@ -164,13 +164,16 @@ public void MergeBatch_with_subquery() { // assertEquals(1, insert.execute()); } - @Test(expected=IllegalArgumentException.class) + @Test + @IncludeIn(H2) public void Merge_With_TempateExpression_In_Batch() { SQLMergeClause merge = merge(survey) .keys(survey.id) .set(survey.id, 5) .set(survey.name, Expressions.stringTemplate("'5'")) .addBatch(); + + merge.execute(); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java index d1c6b15a9c..81b4d11cfc 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java @@ -168,7 +168,7 @@ public void Update_with_SubQuery_notExists() { update.execute(); } - @Test(expected=IllegalArgumentException.class) + @Test public void Update_With_TempateExpression_In_Batch() { update(survey) .set(survey.id, 3) From 4f22009cd199decb37238ebd5b19b424d77fa5be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 10 Jul 2014 23:10:00 +0300 Subject: [PATCH 0279/1968] Add tests --- .../mysema/query/sql/dml/SQLUpdateClause.java | 4 ++-- .../java/com/mysema/query/DeleteBase.java | 12 ++++++++++ .../java/com/mysema/query/InsertBase.java | 17 ++++++++++++++ .../test/java/com/mysema/query/MergeBase.java | 22 +++++++++++++++++++ .../java/com/mysema/query/UpdateBase.java | 11 ++++++++++ 5 files changed, 64 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index 3eef1d9ca3..76d77bd01c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -135,8 +135,8 @@ private Collection createStatements() throws SQLException { serializer.serializeUpdate(batches.get(i).getMetadata(), entity, batches.get(i).getUpdates()); stmt = stmts.get(serializer.toString()); if (stmt == null) { - stmt = connection.prepareStatement(queryString); - stmts.put(queryString, stmt); + stmt = connection.prepareStatement(serializer.toString()); + stmts.put(serializer.toString(), stmt); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java index 70ca1d0824..b3aeb0d730 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java @@ -58,6 +58,18 @@ public void Batch() throws SQLException{ assertEquals(2, delete.execute()); } + @Test + @ExcludeIn(SQLITE) + public void Batch_Templates() throws SQLException{ + insert(survey).values(2, "A","B").execute(); + insert(survey).values(3, "B","C").execute(); + + SQLDeleteClause delete = delete(survey); + delete.where(survey.name.eq(Expressions.stringTemplate("'A'"))).addBatch(); + delete.where(survey.name.eq(Expressions.stringTemplate("'B'"))).addBatch(); + assertEquals(2, delete.execute()); + } + @Test @ExcludeIn(MYSQL) public void Delete() throws SQLException{ diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index 4d268b8af7..d87fb82fae 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -134,6 +134,23 @@ public void Insert_Batch() { assertEquals(1l, query().from(survey).where(survey.name.eq("66")).count()); } + @Test + public void Insert_Batch_Templates() { + SQLInsertClause insert = insert(survey) + .set(survey.id, 5) + .set(survey.name, Expressions.stringTemplate("'55'")) + .addBatch(); + + insert.set(survey.id, 6) + .set(survey.name, Expressions.stringTemplate("'66'")) + .addBatch(); + + assertEquals(2, insert.execute()); + + assertEquals(1l, query().from(survey).where(survey.name.eq("55")).count()); + assertEquals(1l, query().from(survey).where(survey.name.eq("66")).count()); + } + @Test public void Insert_Batch2() { SQLInsertClause insert = insert(survey) diff --git a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java index c45e11bea8..e8b853a36c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java @@ -145,6 +145,28 @@ public void MergeBatch() { assertEquals(1l, query().from(survey).where(survey.name.eq("6")).count()); } + @Test + @IncludeIn(H2) + public void MergeBatch_Templates() { + SQLMergeClause merge = merge(survey) + .keys(survey.id) + .set(survey.id, 5) + .set(survey.name, Expressions.stringTemplate("'5'")) + .addBatch(); + + merge + .keys(survey.id) + .set(survey.id, 6) + .set(survey.name, Expressions.stringTemplate("'6'")) + .addBatch(); + + assertEquals(2, merge.execute()); + + assertEquals(1l, query().from(survey).where(survey.name.eq("5")).count()); + assertEquals(1l, query().from(survey).where(survey.name.eq("6")).count()); + } + + @Test @IncludeIn(H2) public void MergeBatch_with_subquery() { diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java index 81b4d11cfc..694665d67c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java @@ -123,6 +123,17 @@ public void Batch() throws SQLException{ assertEquals(2, update.execute()); } + @Test + public void Batch_Templates() throws SQLException{ + insert(survey).values(2, "A","B").execute(); + insert(survey).values(3, "B","C").execute(); + + SQLUpdateClause update = update(survey); + update.set(survey.name, "AA").where(survey.name.eq(Expressions.stringTemplate("'A'"))).addBatch(); + update.set(survey.name, "BB").where(survey.name.eq(Expressions.stringTemplate("'B'"))).addBatch(); + assertEquals(2, update.execute()); + } + @Test public void Update_with_SubQuery_exists() { QSurvey survey1 = new QSurvey("s1"); From 1dd5e56bb1d2586daf7b33fb0ebc5fb921a28d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 10 Jul 2014 23:31:19 +0300 Subject: [PATCH 0280/1968] Update test --- querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java index b3aeb0d730..47e87dde9c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/DeleteBase.java @@ -59,7 +59,7 @@ public void Batch() throws SQLException{ } @Test - @ExcludeIn(SQLITE) + @ExcludeIn({CUBRID, SQLITE}) public void Batch_Templates() throws SQLException{ insert(survey).values(2, "A","B").execute(); insert(survey).values(3, "B","C").execute(); From cbad9e6078ca1f077275026bc2035c83a9e33b1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 13 Jul 2014 22:25:54 +0300 Subject: [PATCH 0281/1968] Improve union handling --- .../mysema/query/sql/ProjectableSQLQuery.java | 45 ++++++++++++++++++- .../test/java/com/mysema/query/UnionBase.java | 28 ++++++++++++ 2 files changed, 71 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java index e3365475f7..3cb011e36f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java @@ -14,10 +14,13 @@ package com.mysema.query.sql; import javax.annotation.Nullable; +import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Sets; import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.*; @@ -38,11 +41,15 @@ */ public abstract class ProjectableSQLQuery & Query> extends ProjectableQuery implements SQLCommonQuery { + private static final Path defaultQueryAlias = new PathImpl(Object.class, "query"); + protected final Configuration configuration; @Nullable protected Expression union; + private SubQueryExpression firstUnionSubQuery; + protected boolean unionAll; @SuppressWarnings("unchecked") @@ -292,6 +299,7 @@ private Union innerUnion(SubQueryExpression... sq) { throw new IllegalArgumentException("Don't mix union and from"); } this.union = UnionUtils.union(sq, unionAll); + this.firstUnionSubQuery = sq[0]; return new UnionImpl((Q)this, sq[0].getMetadata().getProjection()); } @@ -480,11 +488,44 @@ protected void clone(Q query) { public abstract Q clone(); protected abstract SQLSerializer createSerializer(); - + + private Set> getRootPaths(Collection> exprs) { + Set> paths = Sets.newHashSet(); + for (Expression e : exprs) { + Path path = e.accept(PathExtractor.DEFAULT, null); + if (path != null && !path.getMetadata().isRoot()) { + paths.add(path.getMetadata().getRoot()); + } + } + return paths; + } + + private Collection> expandProjection(Collection> exprs) { + if (exprs.size() == 1 && exprs.iterator().next() instanceof FactoryExpression) { + return ((FactoryExpression) exprs.iterator().next()).getArgs(); + } else { + return exprs; + } + } + protected SQLSerializer serialize(boolean forCountRow) { SQLSerializer serializer = createSerializer(); if (union != null) { - serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); + if (expandProjection(queryMixin.getMetadata().getProjection()).equals( + expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { + serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); + } else { + QueryMixin mixin2 = new QueryMixin(queryMixin.getMetadata().clone()); + Set> paths = getRootPaths(expandProjection(mixin2.getMetadata().getProjection())); + if (paths.isEmpty()) { + mixin2.from(ExpressionUtils.as((Expression) union, defaultQueryAlias)); + } else if (paths.size() == 1) { + mixin2.from(ExpressionUtils.as((Expression) union, paths.iterator().next())); + } else { + throw new IllegalStateException("Unable to create serialize union"); + } + serializer.serialize(mixin2.getMetadata(), forCountRow); + } } else { serializer.serialize(queryMixin.getMetadata(), forCountRow); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java index 3c97383f73..f29c6185f4 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java @@ -63,6 +63,34 @@ public void Union_Multiple_Columns() throws SQLException { } } + @SuppressWarnings("unchecked") + @Test + public void Union_Multiple_Columns2() throws SQLException { + SubQueryExpression sq1 = sq().from(employee).unique(employee.firstname, employee.lastname); + SubQueryExpression sq2 = sq().from(employee).unique(employee.firstname, employee.lastname); + TestQuery query = query(); + query.union(sq1, sq2); + List list = query.list(employee.firstname); + assertFalse(list.isEmpty()); + for (String row : list) { + assertNotNull(row); + } + } + + @SuppressWarnings("unchecked") + @Test + public void Union_Multiple_Columns3() throws SQLException { + SubQueryExpression sq1 = sq().from(employee).unique(employee.firstname, employee.lastname); + SubQueryExpression sq2 = sq().from(employee).unique(employee.firstname, employee.lastname); + TestQuery query = query(); + query.union(sq1, sq2); + List list = query.list(employee.lastname, employee.firstname); + assertFalse(list.isEmpty()); + for (Tuple row : list) { + System.out.println(row.get(0, String.class) + " " + row.get(1, String.class)); + } + } + @Test @SuppressWarnings("unchecked") public void Union_Empty_Result() throws SQLException { From 1e01fe304c9853abe2721c44d1c1713d4ede800a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 14 Jul 2014 00:51:31 +0300 Subject: [PATCH 0282/1968] Fix handling of empty projection --- .../main/java/com/mysema/query/sql/ProjectableSQLQuery.java | 5 +++-- querydsl-sql/src/test/java/com/mysema/query/UnionBase.java | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java index 3cb011e36f..a8d18e6a4c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java @@ -511,8 +511,9 @@ private Collection> expandProjection(Collection> exp protected SQLSerializer serialize(boolean forCountRow) { SQLSerializer serializer = createSerializer(); if (union != null) { - if (expandProjection(queryMixin.getMetadata().getProjection()).equals( - expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { + if (queryMixin.getMetadata().getProjection().isEmpty() || + expandProjection(queryMixin.getMetadata().getProjection()).equals( + expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); } else { QueryMixin mixin2 = new QueryMixin(queryMixin.getMetadata().clone()); diff --git a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java index f29c6185f4..15c9706173 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java @@ -65,6 +65,7 @@ public void Union_Multiple_Columns() throws SQLException { @SuppressWarnings("unchecked") @Test + @ExcludeIn(DERBY) public void Union_Multiple_Columns2() throws SQLException { SubQueryExpression sq1 = sq().from(employee).unique(employee.firstname, employee.lastname); SubQueryExpression sq2 = sq().from(employee).unique(employee.firstname, employee.lastname); @@ -79,6 +80,7 @@ public void Union_Multiple_Columns2() throws SQLException { @SuppressWarnings("unchecked") @Test + @ExcludeIn(DERBY) public void Union_Multiple_Columns3() throws SQLException { SubQueryExpression sq1 = sq().from(employee).unique(employee.firstname, employee.lastname); SubQueryExpression sq2 = sq().from(employee).unique(employee.firstname, employee.lastname); From 215f059cc65479af29121663423ce816d0231891 Mon Sep 17 00:00:00 2001 From: Marvin Froeder Date: Mon, 14 Jul 2014 13:17:07 -0300 Subject: [PATCH 0283/1968] Made SearchResults serializable --- .../src/main/java/com/mysema/query/SearchResults.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/SearchResults.java b/querydsl-core/src/main/java/com/mysema/query/SearchResults.java index a7810d5183..d0b5111a3f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/SearchResults.java +++ b/querydsl-core/src/main/java/com/mysema/query/SearchResults.java @@ -13,6 +13,7 @@ */ package com.mysema.query; +import java.io.Serializable; import java.util.List; import javax.annotation.Nullable; @@ -24,7 +25,9 @@ * * @author tiwe */ -public final class SearchResults { +public final class SearchResults implements Serializable { + + private static final long serialVersionUID = -4591506147471300909L; private static final SearchResults EMPTY = new SearchResults( ImmutableList.of(), Long.MAX_VALUE, 0l, 0l); From ef7c96a74d9d56b2054431bcfdf2a10d7c85d0ff Mon Sep 17 00:00:00 2001 From: Marvin Froeder Date: Mon, 14 Jul 2014 16:29:02 -0300 Subject: [PATCH 0284/1968] Excluded SearchResults from enforcer --- querydsl-root/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index d29654d7eb..3faaaf81f1 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -209,6 +209,9 @@ + + com/mysema/query/SearchResults + BACKWARD_COMPATIBLE_USER true true From 443536b4d9006814f93ed022997cb8b2d506c41e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 15 Jul 2014 20:16:30 +0300 Subject: [PATCH 0285/1968] Add codegen test --- .../mysema/query/apt/GenericExporterTest.java | 2 + .../mysema/query/domain/Generic16Test.java | 43 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java index 6f2ed002c6..9d08a76ec0 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java @@ -90,6 +90,8 @@ public void Execute2() throws IOException { expected.add("QGeneric12Test_ChannelRole.java"); expected.add("QManyToManyTest_Person.java"); expected.add("QOneToOneTest_Person.java"); + //expected.add("QGeneric16Test_HidaBez.java"); + expected.add("QGeneric16Test_HidaBezGruppe.java"); execute(expected, "GenericExporterTest2", "HibernateAnnotationProcessor"); } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java new file mode 100644 index 0000000000..8186a59878 --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java @@ -0,0 +1,43 @@ +package com.mysema.query.domain; + +import javax.persistence.Entity; +import javax.persistence.MappedSuperclass; +import java.util.Set; + +import org.junit.Test; + +public class Generic16Test { + + @Entity + public static abstract class HidaBez, G extends HidaBezGruppe> extends CapiBCKeyedByGrundstueck { + + } + + @Entity + public static abstract class HidaBezGruppe, B extends HidaBez> extends CapiBCKeyedByGrundstueck { + + Set bez; + + } + + @MappedSuperclass + public static abstract class CapiBCKeyedByGrundstueck extends CapiBusinessClass { + + } + + @MappedSuperclass + public static abstract class CapiBusinessClass implements ICapiBusinessClass { + + } + + public interface ICapiBusinessClass extends Comparable { + + + } + + @Test + public void test() { + + } + +} From b33988c5e3923e860a9afc6b5827106a6a66c103 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 15 Jul 2014 22:03:59 +0300 Subject: [PATCH 0286/1968] Add lockMode to DML classes --- .../jpa/hibernate/HibernateDeleteClause.java | 19 +++++++++++++- .../jpa/hibernate/HibernateUpdateClause.java | 16 ++++++++++++ .../query/jpa/impl/JPADeleteClause.java | 16 ++++++++++-- .../query/jpa/impl/JPAUpdateClause.java | 25 ++++++++++++------- 4 files changed, 64 insertions(+), 12 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateDeleteClause.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateDeleteClause.java index 9efae77656..73eb28c905 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateDeleteClause.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateDeleteClause.java @@ -13,8 +13,11 @@ */ package com.mysema.query.jpa.hibernate; +import java.util.HashMap; import java.util.Map; +import com.mysema.query.types.Path; +import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.StatelessSession; @@ -43,6 +46,8 @@ public class HibernateDeleteClause implements DeleteClause,LockMode> lockModes = new HashMap,LockMode>(); + public HibernateDeleteClause(Session session, EntityPath entity) { this(new DefaultSessionHolder(session), entity, HQLTemplates.DEFAULT); } @@ -68,6 +73,9 @@ public long execute() { Map constants = serializer.getConstantToLabel(); Query query = session.createQuery(serializer.toString()); + for (Map.Entry, LockMode> entry : lockModes.entrySet()) { + query.setLockMode(entry.getKey().toString(), entry.getValue()); + } HibernateUtil.setConstants(query, constants, md.getParams()); return query.executeUpdate(); } @@ -79,7 +87,16 @@ public HibernateDeleteClause where(Predicate... o) { } return this; } - + + /** + * Set the lock mode for the given path. + */ + @SuppressWarnings("unchecked") + public HibernateDeleteClause setLockMode(Path path, LockMode lockMode) { + lockModes.put(path, lockMode); + return this; + } + @Override public String toString() { JPQLSerializer serializer = new JPQLSerializer(templates, null); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateUpdateClause.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateUpdateClause.java index ab75428544..9ca6d8189d 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateUpdateClause.java @@ -13,9 +13,11 @@ */ package com.mysema.query.jpa.hibernate; +import java.util.HashMap; import java.util.List; import java.util.Map; +import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.StatelessSession; @@ -49,6 +51,8 @@ public class HibernateUpdateClause implements private final JPQLTemplates templates; + private final Map,LockMode> lockModes = new HashMap,LockMode>(); + public HibernateUpdateClause(Session session, EntityPath entity) { this(new DefaultSessionHolder(session), entity, HQLTemplates.DEFAULT); } @@ -75,6 +79,9 @@ public long execute() { Map constants = serializer.getConstantToLabel(); Query query = session.createQuery(serializer.toString()); + for (Map.Entry, LockMode> entry : lockModes.entrySet()) { + query.setLockMode(entry.getKey().toString(), entry.getValue()); + } HibernateUtil.setConstants(query, constants, metadata.getParams()); return query.executeUpdate(); } @@ -127,6 +134,15 @@ public HibernateUpdateClause where(Predicate... o) { } return this; } + + /** + * Set the lock mode for the given path. + */ + @SuppressWarnings("unchecked") + public HibernateUpdateClause setLockMode(Path path, LockMode lockMode) { + lockModes.put(path, lockMode); + return this; + } @Override public String toString() { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPADeleteClause.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPADeleteClause.java index 6625e8dba6..2bfeea5520 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPADeleteClause.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPADeleteClause.java @@ -13,10 +13,11 @@ */ package com.mysema.query.jpa.impl; -import java.util.Map; - +import javax.annotation.Nullable; import javax.persistence.EntityManager; +import javax.persistence.LockModeType; import javax.persistence.Query; +import java.util.Map; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinType; @@ -41,6 +42,9 @@ public class JPADeleteClause implements DeleteClause { private final JPQLTemplates templates; + @Nullable + private LockModeType lockMode; + public JPADeleteClause(EntityManager em, EntityPath entity) { this(em, entity, JPAProvider.getTemplates(em)); } @@ -58,6 +62,9 @@ public long execute() { Map constants = serializer.getConstantToLabel(); Query query = entityManager.createQuery(serializer.toString()); + if (lockMode != null) { + query.setLockMode(lockMode); + } JPAUtil.setConstants(query, constants, metadata.getParams()); return query.executeUpdate(); } @@ -69,6 +76,11 @@ public JPADeleteClause where(Predicate... o) { } return this; } + + public JPADeleteClause setLockMode(LockModeType lockMode) { + this.lockMode = lockMode; + return this; + } @Override public String toString() { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUpdateClause.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUpdateClause.java index 3f0b9eb489..e5bb32e435 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUpdateClause.java @@ -13,11 +13,12 @@ */ package com.mysema.query.jpa.impl; -import java.util.List; -import java.util.Map; - +import javax.annotation.Nullable; import javax.persistence.EntityManager; +import javax.persistence.LockModeType; import javax.persistence.Query; +import java.util.List; +import java.util.Map; import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinType; @@ -25,12 +26,7 @@ import com.mysema.query.dml.UpdateClause; import com.mysema.query.jpa.JPQLSerializer; import com.mysema.query.jpa.JPQLTemplates; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.NullExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; +import com.mysema.query.types.*; /** * UpdateClause implementation for JPA @@ -46,6 +42,9 @@ public class JPAUpdateClause implements UpdateClause { private final JPQLTemplates templates; + @Nullable + private LockModeType lockMode; + public JPAUpdateClause(EntityManager em, EntityPath entity) { this(em, entity, JPAProvider.getTemplates(em)); } @@ -63,6 +62,9 @@ public long execute() { Map constants = serializer.getConstantToLabel(); Query query = entityManager.createQuery(serializer.toString()); + if (lockMode != null) { + query.setLockMode(lockMode); + } JPAUtil.setConstants(query, constants, metadata.getParams()); return query.executeUpdate(); } @@ -114,6 +116,11 @@ public JPAUpdateClause where(Predicate... o) { } return this; } + + public JPAUpdateClause setLockMode(LockModeType lockMode) { + this.lockMode = lockMode; + return this; + } @Override public String toString() { From 6e20ef6198a78a1ba544f55160e2ef990b1ef8bd Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Thu, 17 Jul 2014 17:04:22 +1000 Subject: [PATCH 0287/1968] https://github.com/querydsl/querydsl/issues/854 - fixed offset limit echoing in result object --- .../java/com/mysema/query/sql/AbstractSQLQuery.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 293a52a5f1..8c317f69f8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -125,10 +125,10 @@ private void set(PreparedStatement stmt, Path path, int i, Object value) thro /** * Get the results as an JDBC result set * - * @param args + * @param exprs the expression arguments to retrieve * @return */ - public ResultSet getResults(Expression... exprs) { + public ResultSet getResultsgetResults(Expression... exprs) { queryMixin.addProjection(exprs); SQLSerializer serializer = serialize(false); String queryString = serializer.toString(); @@ -298,6 +298,7 @@ public List list(Expression expr) { @Override public SearchResults listResults(Expression expr) { + QueryModifiers originalModifiers = queryMixin.getMetadata().getModifiers(); try { if (configuration.getTemplates().isCountViaAnalytics()) { List results; @@ -318,16 +319,14 @@ public SearchResults listResults(Expression expr) { } else { total = count(); } - QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); - return new SearchResults(results, modifiers, total); + return new SearchResults(results, originalModifiers, total); } else { queryMixin.addProjection(expr); long total = count(); if (total > 0) { queryMixin.getMetadata().clearProjection(); - QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); - return new SearchResults(list(expr), modifiers, total); + return new SearchResults(list(expr), originalModifiers, total); } else { return SearchResults.emptyResults(); } From 74af3c5201e552d974aa9398ab2f4e6069d8a876 Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Thu, 17 Jul 2014 17:31:54 +1000 Subject: [PATCH 0288/1968] https://github.com/querydsl/querydsl/issues/854 - oops bad rename --- .../src/main/java/com/mysema/query/sql/AbstractSQLQuery.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 8c317f69f8..6555763ce8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -128,7 +128,7 @@ private void set(PreparedStatement stmt, Path path, int i, Object value) thro * @param exprs the expression arguments to retrieve * @return */ - public ResultSet getResultsgetResults(Expression... exprs) { + public ResultSet getResults(Expression... exprs) { queryMixin.addProjection(exprs); SQLSerializer serializer = serialize(false); String queryString = serializer.toString(); From e790d4684b4b01bf38dc60040d03221f8016456e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 17 Jul 2014 23:01:04 +0300 Subject: [PATCH 0289/1968] Remove count usage --- .../mysema/query/mongodb/MongodbQuery.java | 29 ++++--------------- 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java index 6f761457f9..0afb93975a 100644 --- a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java +++ b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/MongodbQuery.java @@ -13,39 +13,20 @@ */ package com.mysema.query.mongodb; +import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; -import javax.annotation.Nullable; - import com.google.common.base.Function; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; -import com.mongodb.BasicDBObject; -import com.mongodb.DBCollection; -import com.mongodb.DBCursor; -import com.mongodb.DBObject; -import com.mongodb.ReadPreference; +import com.mongodb.*; import com.mysema.commons.lang.CloseableIterator; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.JoinExpression; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; -import com.mysema.query.SearchResults; -import com.mysema.query.SimpleProjectable; -import com.mysema.query.SimpleQuery; +import com.mysema.query.*; import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.Operation; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathImpl; -import com.mysema.query.types.Predicate; +import com.mysema.query.types.*; import com.mysema.query.types.path.CollectionPathBase; /** @@ -268,7 +249,7 @@ public List list(Path... paths) { public List list() { try { DBCursor cursor = createCursor(); - List results = new ArrayList(cursor.size()); + List results = new ArrayList(); for (DBObject dbObject : cursor) { results.add(transformer.apply(dbObject)); } From 0383abfcf07ad5bd54c15a5c5cc5d4d7f119fded Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 17 Jul 2014 23:23:16 +0300 Subject: [PATCH 0290/1968] Use Types constants --- .../query/sql/codegen/MetaDataSerializer.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataSerializer.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataSerializer.java index e5f1c884c1..50acf76f99 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataSerializer.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataSerializer.java @@ -17,9 +17,11 @@ import javax.inject.Named; import java.io.IOException; import java.lang.annotation.Annotation; +import java.lang.reflect.Field; import java.util.*; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.mysema.codegen.CodeWriter; import com.mysema.codegen.model.*; import com.mysema.query.codegen.*; @@ -42,6 +44,21 @@ */ public class MetaDataSerializer extends EntitySerializer { + private static final Map typeConstants = Maps.newHashMap(); + + static { + try { + for (Field field : java.sql.Types.class.getDeclaredFields()) { + if (field.getType().equals(Integer.TYPE)) { + typeConstants.put(field.getInt(null), field.getName()); + } + } + } catch (IllegalAccessException e) { + throw new IllegalStateException(e.getMessage(), e); + } + + } + private final NamingStrategy namingStrategy; private final boolean innerClassesForKeys; @@ -175,7 +192,7 @@ protected void introImports(CodeWriter writer, SerializerConfig config, EntityTy writer.imports(List.class.getPackage()); } - writer.imports(ColumnMetadata.class); + writer.imports(ColumnMetadata.class, java.sql.Types.class); if (!entityPathType.getPackage().equals(ColumnMetadata.class.getPackage())) { writer.imports(entityPathType); @@ -217,7 +234,11 @@ protected void outro(EntityType model, CodeWriter writer) throws IOException { columnMeta.append("ColumnMetadata"); columnMeta.append(".named(\"" + metadata.getName() + "\")"); columnMeta.append(".withIndex(" + metadata.getIndex() + ")"); - columnMeta.append(".ofType(" + metadata.getJdbcType() + ")"); + String type = String.valueOf(metadata.getJdbcType()); + if (typeConstants.containsKey(metadata.getJdbcType())) { + type = "Types." + typeConstants.get(metadata.getJdbcType()); + } + columnMeta.append(".ofType(" + type + ")"); if (metadata.hasSize()) { columnMeta.append(".withSize(" + metadata.getSize() + ")"); } From d43d48f1823633129d093ec2618f441cf020d38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 17 Jul 2014 23:33:21 +0300 Subject: [PATCH 0291/1968] Update test --- .../src/test/java/com/mysema/query/domain/Generic16Test.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java index 8186a59878..817a663343 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java @@ -2,7 +2,8 @@ import javax.persistence.Entity; import javax.persistence.MappedSuperclass; -import java.util.Set; +import java.util.SortedSet; +import java.util.TreeSet; import org.junit.Test; @@ -16,7 +17,7 @@ public static abstract class HidaBez, G extends HidaBezG @Entity public static abstract class HidaBezGruppe, B extends HidaBez> extends CapiBCKeyedByGrundstueck { - Set bez; + SortedSet bez = new TreeSet(); } From 9df99f02f5445379bca7a31ca665c977acb3f984 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 18 Jul 2014 08:14:40 +0300 Subject: [PATCH 0292/1968] Improve limit/offset handling --- .../query/sql/SQLServer2012Templates.java | 37 +++++++++++++++---- .../query/sql/SQLServer2012TemplatesTest.java | 12 +++--- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java index bf371e96d2..fd4e798273 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java @@ -13,9 +13,11 @@ */ package com.mysema.query.sql; +import com.mysema.query.QueryFlag; import com.mysema.query.QueryFlag.Position; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; +import com.mysema.query.support.Expressions; /** * SQLServer2012Templates is an SQL dialect for Microsoft SQL Server 2012 and later @@ -25,6 +27,8 @@ */ public class SQLServer2012Templates extends SQLServerTemplates { + private String topTemplate = "top {0s} "; + private String limitOffsetTemplate = "\noffset {1} rows fetch next {0} rows only"; private String offsetTemplate = "\noffset {0} rows"; @@ -52,7 +56,22 @@ public SQLServer2012Templates(char escape, boolean quote) { @Override public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer context) { - context.serializeForQuery(metadata, forCountRow); + if (!forCountRow && metadata.getModifiers().isRestricting() && metadata.getOrderBy().isEmpty() + && !metadata.getJoins().isEmpty()) { + QueryModifiers mod = metadata.getModifiers(); + // use top if order by is empty + if (mod.getOffset() == null) { + // select top ... + metadata = metadata.clone(); + metadata.addFlag(new QueryFlag(QueryFlag.Position.AFTER_SELECT, + Expressions.template(Integer.class, topTemplate, mod.getLimit()))); + context.serializeForQuery(metadata, forCountRow); + } else { + throw new IllegalStateException("offset not supported without order by"); + } + } else { + context.serializeForQuery(metadata, forCountRow); + } if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); @@ -61,13 +80,15 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer @Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { - QueryModifiers mod = metadata.getModifiers(); - if (mod.getLimit() == null) { - context.handle(offsetTemplate, mod.getOffset()); - } else if (mod.getOffset() == null) { - context.handle(limitOffsetTemplate, mod.getLimit(), 0); - } else { - context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset()); + if (!metadata.getOrderBy().isEmpty()) { + QueryModifiers mod = metadata.getModifiers(); + if (mod.getLimit() == null) { + context.handle(offsetTemplate, mod.getOffset()); + } else if (mod.getOffset() == null) { + context.handle(limitOffsetTemplate, mod.getLimit(), 0); + } else { + context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset()); + } } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLServer2012TemplatesTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLServer2012TemplatesTest.java index dc3bc203c6..0f938e3ba2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLServer2012TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLServer2012TemplatesTest.java @@ -13,10 +13,6 @@ */ package com.mysema.query.sql; -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - import com.mysema.query.types.ConstantImpl; import com.mysema.query.types.Operation; import com.mysema.query.types.OperationImpl; @@ -24,6 +20,8 @@ import com.mysema.query.types.expr.NumberExpression; import com.mysema.query.types.path.SimplePath; import com.mysema.query.types.template.NumberTemplate; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class SQLServer2012TemplatesTest extends AbstractSQLTemplatesTest { @@ -64,14 +62,14 @@ public void Union() { public void Limit() { query.from(survey1).limit(5); query.getMetadata().addProjection(survey1.id); - assertEquals("select survey1.ID from SURVEY survey1 offset ? rows fetch next ? rows only", query.toString()); + assertEquals("select top 5 survey1.ID from SURVEY survey1", query.toString()); } @Test public void Modifiers() { - query.from(survey1).limit(5).offset(3); + query.from(survey1).limit(5).offset(3).orderBy(survey1.id.asc()); query.getMetadata().addProjection(survey1.id); - assertEquals("select survey1.ID from SURVEY survey1 offset ? rows fetch next ? rows only", query.toString()); + assertEquals("select survey1.ID from SURVEY survey1 order by survey1.ID asc offset ? rows fetch next ? rows only", query.toString()); } @Test From 718c1430895959024c5e0e47281d1f468741b97a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 19 Jul 2014 20:12:43 +0300 Subject: [PATCH 0293/1968] Add test for Hibernate model based codegen --- .../domain17/CapiBCKeyedByGrundstueck.java | 5 ++++ .../query/jpa/domain17/CapiBusinessClass.java | 5 ++++ .../jpa/domain17/DomainExporterTest.java | 26 +++++++++++++++++++ .../mysema/query/jpa/domain17/HidaBez.java | 7 +++++ .../query/jpa/domain17/HidaBezGruppe.java | 12 +++++++++ .../jpa/domain17/ICapiBusinessClass.java | 6 +++++ .../mysema/query/jpa/domain17/domain.hbm.xml | 24 +++++++++++++++++ 7 files changed, 85 insertions(+) create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java create mode 100644 querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java new file mode 100644 index 0000000000..e8c0ed1f78 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java @@ -0,0 +1,5 @@ +package com.mysema.query.jpa.domain17; + +public abstract class CapiBCKeyedByGrundstueck extends CapiBusinessClass { + +} \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java new file mode 100644 index 0000000000..33c8cacd01 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java @@ -0,0 +1,5 @@ +package com.mysema.query.jpa.domain17; + +public abstract class CapiBusinessClass implements ICapiBusinessClass { + +} \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java new file mode 100644 index 0000000000..c91784e456 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java @@ -0,0 +1,26 @@ +package com.mysema.query.jpa.domain17; + +import java.io.File; +import java.io.IOException; + +import com.mysema.query.jpa.codegen.HibernateDomainExporter; +import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; + +public class DomainExporterTest { + + @Test + public void Execute() throws IOException { + File gen = new File("target/" + getClass().getSimpleName()); + FileUtils.delete(gen); + Configuration config = new Configuration(); + config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml")); + HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); + exporter.execute(); + + + + } + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java new file mode 100644 index 0000000000..447217b369 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java @@ -0,0 +1,7 @@ +package com.mysema.query.jpa.domain17; + +public abstract class HidaBez, G extends HidaBezGruppe> extends CapiBCKeyedByGrundstueck { + + Long id; + +} \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java new file mode 100644 index 0000000000..994770e78e --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java @@ -0,0 +1,12 @@ +package com.mysema.query.jpa.domain17; + +import java.util.SortedSet; +import java.util.TreeSet; + +public abstract class HidaBezGruppe, B extends HidaBez> extends CapiBCKeyedByGrundstueck { + + Long id; + + SortedSet bez = new TreeSet(); + +} \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java new file mode 100644 index 0000000000..e6a3429b86 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java @@ -0,0 +1,6 @@ +package com.mysema.query.jpa.domain17; + +public interface ICapiBusinessClass extends Comparable { + + + } \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml new file mode 100644 index 0000000000..0560bdf818 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 29599d5d3925dadce018d53b95c07ec82dad5394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 19 Jul 2014 22:31:43 +0300 Subject: [PATCH 0294/1968] Fix test --- .../src/test/java/com/mysema/query/apt/GenericExporterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java index 9d08a76ec0..91cb31d396 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java @@ -90,7 +90,7 @@ public void Execute2() throws IOException { expected.add("QGeneric12Test_ChannelRole.java"); expected.add("QManyToManyTest_Person.java"); expected.add("QOneToOneTest_Person.java"); - //expected.add("QGeneric16Test_HidaBez.java"); + expected.add("QGeneric16Test_HidaBez.java"); expected.add("QGeneric16Test_HidaBezGruppe.java"); execute(expected, "GenericExporterTest2", "HibernateAnnotationProcessor"); From 158164ec18e8a41c90fd5c2e02d496bc572f7ba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 19 Jul 2014 22:45:02 +0300 Subject: [PATCH 0295/1968] Add compilation to tests --- .../query/jpa/codegen/CompileUtils.java | 42 +++++++++++++++++++ .../codegen/HibernateDomainExporterTest.java | 23 +++++++--- ...terTest.java => DomainExporter10Test.java} | 14 +++---- ...terTest.java => DomainExporter11Test.java} | 13 +++--- ...terTest.java => DomainExporter12Test.java} | 13 +++--- ...terTest.java => DomainExporter13Test.java} | 13 +++--- ...terTest.java => DomainExporter14Test.java} | 13 +++--- ...terTest.java => DomainExporter15Test.java} | 14 +++---- ...terTest.java => DomainExporter16Test.java} | 14 +++---- ...terTest.java => DomainExporter17Test.java} | 6 +-- ...rterTest.java => DomainExporter5Test.java} | 13 +++--- ...rterTest.java => DomainExporter6Test.java} | 13 +++--- ...rterTest.java => DomainExporter7Test.java} | 13 +++--- ...rterTest.java => DomainExporter8Test.java} | 13 +++--- ...rterTest.java => DomainExporter9Test.java} | 5 ++- 15 files changed, 143 insertions(+), 79 deletions(-) create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/{DomainExporterTest.java => DomainExporter10Test.java} (87%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/{DomainExporterTest.java => DomainExporter11Test.java} (87%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/{DomainExporterTest.java => DomainExporter12Test.java} (86%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/{DomainExporterTest.java => DomainExporter13Test.java} (85%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/{DomainExporterTest.java => DomainExporter14Test.java} (87%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/{DomainExporterTest.java => DomainExporter15Test.java} (88%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/{DomainExporterTest.java => DomainExporter16Test.java} (89%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/{DomainExporterTest.java => DomainExporter17Test.java} (83%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/{DomainExporterTest.java => DomainExporter5Test.java} (92%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/{DomainExporterTest.java => DomainExporter6Test.java} (92%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/{DomainExporterTest.java => DomainExporter7Test.java} (87%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/{DomainExporterTest.java => DomainExporter8Test.java} (86%) rename querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/{DomainExporterTest.java => DomainExporter9Test.java} (83%) diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java new file mode 100644 index 0000000000..0bd4ed87c5 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java @@ -0,0 +1,42 @@ +package com.mysema.query.jpa.codegen; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import com.mysema.codegen.SimpleCompiler; +import junit.framework.Assert; + +public class CompileUtils { + + private static final SimpleCompiler compiler = new SimpleCompiler(); + + private static List getFiles(String path) { + List classes = new ArrayList(); + for (File file : new File(path).listFiles()) { + if (file.getName().endsWith(".java")) { + classes.add(file.getPath()); + } else if (file.isDirectory() && !file.getName().startsWith(".")) { + classes.addAll(getFiles(file.getAbsolutePath())); + } + } + return classes; + } + + public static void compile(String target) throws IOException { + List options = new ArrayList(); + options.addAll(getFiles(target)); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + ByteArrayOutputStream err = new ByteArrayOutputStream(); + int compilationResult = compiler.run(null, out, err, options.toArray(new String[options.size()])); + + if (compilationResult != 0) { + System.out.println(new String(out.toByteArray())); + System.out.println(new String(err.toByteArray())); + Assert.fail("Compilation Failed"); + } + } +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java index f080b29152..0840e8a31e 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java @@ -13,17 +13,11 @@ */ package com.mysema.query.jpa.codegen; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - import com.google.common.base.Charsets; import com.google.common.io.Files; import com.mysema.query.annotations.Config; @@ -32,6 +26,10 @@ import com.mysema.query.jpa.domain.Domain; import com.mysema.query.jpa.domain2.Domain2; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; public class HibernateDomainExporterTest { @@ -50,6 +48,8 @@ public void Execute_MyEntity() throws IOException { File targetFile = new File("target/gen6/com/mysema/query/jpa/codegen/QMyEntity.java"); assertContains(targetFile, "StringPath pk1", "StringPath pk2", "StringPath prop1"); + + CompileUtils.compile("target/gen6"); } @Test @@ -65,6 +65,8 @@ public void Execute_Contact() throws IOException { File targetFile = new File("target/gen1/com/mysema/query/jpa/domain2/QContact.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); + + CompileUtils.compile("target/gen1"); } @Test @@ -80,6 +82,8 @@ public void Execute_Contact_with_Suffix() throws IOException { File targetFile = new File("target/gen1/com/mysema/query/jpa/domain2/ContactType.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); + + CompileUtils.compile("target/gen1"); } @Test @@ -95,6 +99,8 @@ public void Execute_Contact2() throws IOException { File targetFile = new File("target/gen2/com/mysema/query/jpa/domain2/QContact.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); + + CompileUtils.compile("target/gen2"); } @Test @@ -126,6 +132,7 @@ public void Execute_Multiple() throws IOException { fail("Failed with " + failures.size() + " failures"); } + CompileUtils.compile("target/gen3"); } @Test @@ -157,6 +164,8 @@ public void Execute_Multiple2() throws IOException { fail("Failed with " + failures.size() + " failures"); } + CompileUtils.compile("target/gen4"); + } @Test @@ -174,6 +183,8 @@ public void Execute_Store() throws IOException { targetFile = new File("target/gen5/com/mysema/query/jpa/domain3/QHardwareStore.java"); assertContains(targetFile, "StringPath code = _super.code;", "StringPath address"); + + CompileUtils.compile("target/gen5"); } private static void assertContains(File file, String... strings) throws IOException { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporter10Test.java similarity index 87% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporter10Test.java index 2252b4fbe4..dc3d5b28ad 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporter10Test.java @@ -1,18 +1,17 @@ package com.mysema.query.jpa.domain10; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter10Test { @Test public void Execute() throws IOException { @@ -26,6 +25,7 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain10/QEntity.java").exists()); assertFalse(new File(gen, "com/mysema/query/jpa/domain10/QCustomType.java").exists()); + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporter11Test.java similarity index 87% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporter11Test.java index 85a6d9644f..d6e87a9089 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporter11Test.java @@ -1,19 +1,18 @@ package com.mysema.query.jpa.domain11; -import static org.junit.Assert.*; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - import com.google.common.base.Charsets; import com.google.common.io.Files; +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter11Test { @Test public void Execute() throws IOException { @@ -32,6 +31,8 @@ public void Execute() throws IOException { str = Files.toString(new File(gen, "com/mysema/query/jpa/domain11/QSomething.java"), Charsets.UTF_8); assertTrue(str.contains("id")); + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporter12Test.java similarity index 86% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporter12Test.java index ac792c2e2e..34d94b8aa7 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporter12Test.java @@ -1,17 +1,16 @@ package com.mysema.query.jpa.domain12; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter12Test { @Test public void Execute() throws IOException { @@ -24,6 +23,8 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain12/QEntity.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain12/QSupertype.java").exists()); + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporter13Test.java similarity index 85% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporter13Test.java index ed4c20241a..109993a5f8 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporter13Test.java @@ -1,17 +1,16 @@ package com.mysema.query.jpa.domain13; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter13Test { @Test public void Execute() throws IOException { @@ -23,6 +22,8 @@ public void Execute() throws IOException { exporter.execute(); assertTrue(new File(gen, "com/mysema/query/jpa/domain13/QEntity.java").exists()); + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporter14Test.java similarity index 87% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporter14Test.java index c37c8bdaf9..22804fb742 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporter14Test.java @@ -1,17 +1,16 @@ package com.mysema.query.jpa.domain14; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter14Test { @Test public void Execute() throws IOException { @@ -24,6 +23,8 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain14/QSiCZuCapiRechtMapping.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain14/QMappingID.java").exists()); + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporter15Test.java similarity index 88% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporter15Test.java index 6681b2a0bd..d4a783d93e 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporter15Test.java @@ -1,17 +1,16 @@ package com.mysema.query.jpa.domain15; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter15Test { @Test public void Execute() throws IOException { @@ -25,7 +24,8 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain15/QEntity.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain15/QEntity2.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain15/QSuperclass.java").exists()); - + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporter16Test.java similarity index 89% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporter16Test.java index 59eeff152d..787461d647 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporter16Test.java @@ -1,18 +1,17 @@ package com.mysema.query.jpa.domain16; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter16Test { @Test public void Execute() throws IOException { @@ -28,6 +27,7 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain16/QCustom2.java").exists()); assertFalse(new File(gen, "com/mysema/query/jpa/domain16/QCustom3.java").exists()); + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporter17Test.java similarity index 83% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporter17Test.java index c91784e456..ae3d309e82 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporter17Test.java @@ -3,12 +3,13 @@ import java.io.File; import java.io.IOException; +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -public class DomainExporterTest { +public class DomainExporter17Test { @Test public void Execute() throws IOException { @@ -19,8 +20,7 @@ public void Execute() throws IOException { HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - - + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporter5Test.java similarity index 92% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporter5Test.java index 709c567991..5f460496e3 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporter5Test.java @@ -1,20 +1,19 @@ package com.mysema.query.jpa.domain5; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; import java.util.Arrays; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - import com.google.common.base.Charsets; import com.google.common.io.Files; +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter5Test { @Test public void Execute() throws IOException { @@ -32,6 +31,8 @@ public void Execute() throws IOException { File targetFile = new File(gen, "com/mysema/query/jpa/domain5/QCustomer.java"); assertContains(targetFile, "SetPath", "SetPath"); + + CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporter6Test.java similarity index 92% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporter6Test.java index 2c1a5e76f7..51ce24c0c5 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporter6Test.java @@ -1,19 +1,18 @@ package com.mysema.query.jpa.domain6; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - import com.google.common.base.Charsets; import com.google.common.io.Files; +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter6Test { @Test public void Execute() throws IOException { @@ -30,6 +29,8 @@ public void Execute() throws IOException { targetFile = new File(gen, "com/mysema/query/jpa/domain6/QPhoneNumber.java"); assertContains(targetFile, "QPhoneNumber extends BeanPath", "StringPath number = createString(\"number\")"); + + CompileUtils.compile(gen.getAbsolutePath()); } private static void assertContains(File file, String... strings) throws IOException { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporter7Test.java similarity index 87% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporter7Test.java index 498eb2d17a..2d5d56a54b 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporter7Test.java @@ -1,17 +1,16 @@ package com.mysema.query.jpa.domain7; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter7Test { @Test public void Execute() throws IOException { @@ -25,6 +24,8 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain7/QA.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain7/QB.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain7/QC.java").exists()); + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporter8Test.java similarity index 86% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporter8Test.java index 79b59b9fd1..efd41186cf 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporter8Test.java @@ -1,17 +1,16 @@ package com.mysema.query.jpa.domain8; -import static org.junit.Assert.assertTrue; - import java.io.File; import java.io.IOException; -import org.hibernate.cfg.Configuration; -import org.junit.Test; - +import com.mysema.query.jpa.codegen.CompileUtils; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; +import org.hibernate.cfg.Configuration; +import org.junit.Test; +import static org.junit.Assert.assertTrue; -public class DomainExporterTest { +public class DomainExporter8Test { @Test public void Execute() throws IOException { @@ -24,6 +23,8 @@ public void Execute() throws IOException { assertTrue(new File(gen, "com/mysema/query/jpa/domain8/QA.java").exists()); assertTrue(new File(gen, "com/mysema/query/jpa/domain8/QB.java").exists()); + + CompileUtils.compile(gen.getAbsolutePath()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporter9Test.java similarity index 83% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporter9Test.java index 0ffd9c9be5..320ab1d041 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporter9Test.java @@ -3,13 +3,14 @@ import java.io.File; import java.io.IOException; +import com.mysema.query.jpa.codegen.CompileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.mysema.query.jpa.codegen.HibernateDomainExporter; import com.mysema.util.FileUtils; -public class DomainExporterTest { +public class DomainExporter9Test { @Test public void Execute() throws IOException { @@ -19,6 +20,8 @@ public void Execute() throws IOException { config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain9/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); + + CompileUtils.compile(gen.getAbsolutePath()); } } From 9cb1364b0ec70d0efd1491590163de5a109e6c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 19 Jul 2014 22:48:24 +0300 Subject: [PATCH 0296/1968] Simplify compilation code --- .../java/com/mysema/query/jpa/codegen/CompileUtils.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java index 0bd4ed87c5..c4374fa2ad 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java @@ -1,6 +1,5 @@ package com.mysema.query.jpa.codegen; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -29,13 +28,9 @@ public static void compile(String target) throws IOException { List options = new ArrayList(); options.addAll(getFiles(target)); - ByteArrayOutputStream out = new ByteArrayOutputStream(); - ByteArrayOutputStream err = new ByteArrayOutputStream(); - int compilationResult = compiler.run(null, out, err, options.toArray(new String[options.size()])); + int compilationResult = compiler.run(null, null, null, options.toArray(new String[options.size()])); if (compilationResult != 0) { - System.out.println(new String(out.toByteArray())); - System.out.println(new String(err.toByteArray())); Assert.fail("Compilation Failed"); } } From 0d209cd6835e94fd7cfda87b743fefdb97d5310f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 20 Jul 2014 10:56:47 +0300 Subject: [PATCH 0297/1968] Add type parameter normalization --- .../jpa/codegen/HibernateDomainExporter.java | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java index 7bcd8045e3..5c95f056dc 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java @@ -13,25 +13,13 @@ */ package com.mysema.query.jpa.codegen; +import javax.xml.stream.XMLStreamException; import java.io.File; import java.io.IOException; import java.lang.reflect.AnnotatedElement; import java.nio.charset.Charset; import java.util.Iterator; -import javax.xml.stream.XMLStreamException; - -import org.hibernate.MappingException; -import org.hibernate.cfg.Configuration; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.KeyValue; -import org.hibernate.mapping.ManyToOne; -import org.hibernate.mapping.MappedSuperclass; -import org.hibernate.mapping.OneToMany; -import org.hibernate.mapping.PersistentClass; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; @@ -39,6 +27,11 @@ import com.mysema.query.codegen.Property; import com.mysema.query.codegen.SerializerConfig; import com.mysema.query.codegen.SimpleSerializerConfig; +import org.hibernate.MappingException; +import org.hibernate.cfg.Configuration; +import org.hibernate.mapping.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * HibernateDomainExporter exports Hibernate XML configuration files to Querydsl expression types @@ -205,6 +198,14 @@ protected void collectTypes() throws IOException, XMLStreamException, ClassNotFo } } + private Type normalize(Type first, Type second) { + if (first.getFullName().equals(second.getFullName())) { + return first; + } else { + return second; + } + } + private void handleProperty(EntityType entityType, Class cl, org.hibernate.mapping.Property p) throws NoSuchMethodException, ClassNotFoundException { if (p.isBackRef()) { @@ -248,10 +249,13 @@ private void handleProperty(EntityType entityType, Class cl, org.hibernate.ma if (collection.isMap()) { Type keyType = typeFactory.get(Class.forName(propertyType.getParameters().get(0).getFullName())); Type valueType = typeFactory.get(Class.forName(entityName)); - propertyType = new SimpleType(propertyType, keyType, valueType); + propertyType = new SimpleType(propertyType, + normalize(propertyType.getParameters().get(0), keyType), + normalize(propertyType.getParameters().get(1), valueType)); } else { Type componentType = typeFactory.get(Class.forName(entityName)); - propertyType = new SimpleType(propertyType, componentType); + propertyType = new SimpleType(propertyType, + normalize(propertyType.getParameters().get(0), componentType)); } } } else if (collection.getElement() instanceof Component) { From 968e5dc66989b5ab1d454b5116d0da817b6f970f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 20 Jul 2014 14:03:25 +0300 Subject: [PATCH 0298/1968] Use parameter normalization also for JPADomainExporter --- .../jpa/codegen/AbstractDomainExporter.java | 47 +++++++------------ .../jpa/codegen/HibernateDomainExporter.java | 8 ---- .../query/jpa/codegen/JPADomainExporter.java | 23 ++++----- 3 files changed, 25 insertions(+), 53 deletions(-) diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java index fa37b4121a..c5237fe0f9 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java @@ -13,30 +13,16 @@ */ package com.mysema.query.jpa.codegen; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; +import javax.annotation.Nullable; +import javax.persistence.Embeddable; +import javax.persistence.Entity; +import java.io.*; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.nio.charset.Charset; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Nullable; -import javax.persistence.Embeddable; -import javax.persistence.Entity; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.*; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; @@ -49,20 +35,11 @@ import com.mysema.query.annotations.PropertyType; import com.mysema.query.annotations.QueryInit; import com.mysema.query.annotations.QueryType; -import com.mysema.query.codegen.CodegenModule; -import com.mysema.query.codegen.EmbeddableSerializer; -import com.mysema.query.codegen.EntitySerializer; -import com.mysema.query.codegen.EntityType; -import com.mysema.query.codegen.Property; -import com.mysema.query.codegen.QueryTypeFactory; -import com.mysema.query.codegen.Serializer; -import com.mysema.query.codegen.SerializerConfig; -import com.mysema.query.codegen.Supertype; -import com.mysema.query.codegen.SupertypeSerializer; -import com.mysema.query.codegen.TypeFactory; -import com.mysema.query.codegen.TypeMappings; +import com.mysema.query.codegen.*; import com.mysema.util.Annotations; import com.mysema.util.ReflectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * AbstractDomainExporter is a common supertype for DomainExporters @@ -339,6 +316,14 @@ private Writer writerFor(File file) { } } + protected Type normalize(Type first, Type second) { + if (first.getFullName().equals(second.getFullName())) { + return first; + } else { + return second; + } + } + public void setUnknownAsEntity(boolean unknownAsEntity) { typeFactory.setUnknownAsEntity(unknownAsEntity); } diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java index 5c95f056dc..39ea8c1c9e 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java @@ -198,14 +198,6 @@ protected void collectTypes() throws IOException, XMLStreamException, ClassNotFo } } - private Type normalize(Type first, Type second) { - if (first.getFullName().equals(second.getFullName())) { - return first; - } else { - return second; - } - } - private void handleProperty(EntityType entityType, Class cl, org.hibernate.mapping.Property p) throws NoSuchMethodException, ClassNotFoundException { if (p.isBackRef()) { diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java index bd7c53e345..fe7fdcd80e 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java @@ -13,24 +13,15 @@ */ package com.mysema.query.jpa.codegen; +import javax.persistence.Temporal; +import javax.persistence.metamodel.*; +import javax.xml.stream.XMLStreamException; import java.io.File; import java.io.IOException; import java.lang.reflect.AnnotatedElement; import java.nio.charset.Charset; import java.util.Map; -import javax.persistence.Temporal; -import javax.persistence.metamodel.Attribute; -import javax.persistence.metamodel.EmbeddableType; -import javax.persistence.metamodel.ManagedType; -import javax.persistence.metamodel.MapAttribute; -import javax.persistence.metamodel.MappedSuperclassType; -import javax.persistence.metamodel.Metamodel; -import javax.persistence.metamodel.PluralAttribute; -import javax.xml.stream.XMLStreamException; - -import org.hibernate.MappingException; - import com.google.common.collect.Maps; import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; @@ -39,6 +30,7 @@ import com.mysema.query.codegen.Property; import com.mysema.query.codegen.SerializerConfig; import com.mysema.query.codegen.SimpleSerializerConfig; +import org.hibernate.MappingException; /** * JPADomainExporter exports JPA 2 metamodels to Querydsl expression types @@ -192,11 +184,14 @@ private void handleProperty(EntityType entityType, Class cl, Attribute p Type keyType = typeFactory.get(map.getKeyJavaType()); Type valueType = typeFactory.get(map.getElementType().getJavaType()); valueType = getPropertyType(p, valueType); - propertyType = new SimpleType(propertyType, keyType, valueType); + propertyType = new SimpleType(propertyType, + normalize(propertyType.getParameters().get(0), keyType), + normalize(propertyType.getParameters().get(1), valueType)); } else { Type valueType = typeFactory.get(((PluralAttribute)p).getElementType().getJavaType()); valueType = getPropertyType(p, valueType); - propertyType = new SimpleType(propertyType, valueType); + propertyType = new SimpleType(propertyType, + normalize(propertyType.getParameters().get(0), valueType)); } } else { propertyType = getPropertyType(p, propertyType); From 802a4a61a88039e8265a32324068a8fc0df47733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 20 Jul 2014 22:31:03 +0300 Subject: [PATCH 0299/1968] Add escaping of pk and fk property names --- .../query/sql/codegen/DefaultNamingStrategy.java | 11 +++++++++-- .../sql/codegen/DefaultNamingStrategyTest.java | 16 ++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/DefaultNamingStrategy.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/DefaultNamingStrategy.java index 5c9b9cb09c..e95ff91bc2 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/DefaultNamingStrategy.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/DefaultNamingStrategy.java @@ -15,6 +15,7 @@ import java.util.Locale; +import com.google.common.collect.ImmutableList; import com.mysema.query.codegen.EntityType; /** @@ -76,7 +77,7 @@ public String getPropertyNameForForeignKey(String fkName, EntityType entityType) if (fkName.toLowerCase().startsWith("fk_")) { fkName = fkName.substring(3) + "_" + fkName.substring(0,2); } - return getPropertyName(fkName, entityType); + return escape(entityType, getPropertyName(fkName, entityType)); } @Override @@ -90,7 +91,13 @@ public String getPropertyNameForPrimaryKey(String pkName, EntityType entityType) if (pkName.toLowerCase().startsWith("pk_")) { pkName = pkName.substring(3) + "_" + pkName.substring(0,2); } - return getPropertyName(pkName, entityType); + String propertyName = getPropertyName(pkName, entityType); + for (String candidate : ImmutableList.of(propertyName, propertyName + "Pk")) { + if (!entityType.getEscapedPropertyNames().contains(candidate)) { + return candidate; + } + } + return escape(entityType, propertyName); } protected String normalizePropertyName(String name) { diff --git a/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/DefaultNamingStrategyTest.java b/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/DefaultNamingStrategyTest.java index b26cd2ca17..8481d15f38 100644 --- a/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/DefaultNamingStrategyTest.java +++ b/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/DefaultNamingStrategyTest.java @@ -13,13 +13,12 @@ */ package com.mysema.query.sql.codegen; -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - import com.mysema.codegen.model.Types; import com.mysema.query.codegen.EntityType; +import com.mysema.query.codegen.Property; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class DefaultNamingStrategyTest { @@ -86,13 +85,18 @@ public void GetPropertyNameForForeignKey() { assertEquals("refFooBar_", namingStrategy.getPropertyNameForForeignKey("REF_FOO_BAR_", entityModel)); } - @Test public void GetPropertyNameForPrimaryKey() { assertEquals("superiorPk", namingStrategy.getPropertyNameForPrimaryKey("pk_superior", entityModel)); assertEquals("superiorPk", namingStrategy.getPropertyNameForPrimaryKey("PK_SUPERIOR", entityModel)); } + @Test + public void GetPropertyNameForPrimaryKey_Clash() { + entityModel.addProperty(new Property(entityModel, "id", Types.STRING)); + assertEquals("idPk", namingStrategy.getPropertyNameForPrimaryKey("id", entityModel)); + } + @Test public void GetDefaultVariableName() { assertEquals("object", namingStrategy.getDefaultVariableName(entityModel)); From de17f302dbe4ed1b881d7e12fab01f8dc5df09b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 21 Jul 2014 22:27:52 +0300 Subject: [PATCH 0300/1968] Add SQL Spring module --- querydsl-root/pom.xml | 16 ++++--- querydsl-sql-spring/pom.xml | 46 +++++++++++++++++++ .../sql/spring/SpringConnectionProvider.java | 26 +++++++++++ .../sql/spring/SpringExceptionTranslator.java | 31 +++++++++++++ 4 files changed, 113 insertions(+), 6 deletions(-) create mode 100644 querydsl-sql-spring/pom.xml create mode 100644 querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java create mode 100644 querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3faaaf81f1..ea693f7f66 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -209,9 +209,9 @@ - - com/mysema/query/SearchResults - + + com/mysema/query/SearchResults + BACKWARD_COMPATIBLE_USER true true @@ -399,7 +399,8 @@ ../querydsl-apt ../querydsl-collections ../querydsl-sql - ../querydsl-sql-codegen + ../querydsl-sql-codegen + ../querydsl-sql-spring ../querydsl-maven-plugin ../querydsl-jpa ../querydsl-jpa-codegen @@ -437,6 +438,7 @@ ../querydsl-apt ../querydsl-sql ../querydsl-sql-codegen + ../querydsl-sql-spring ../querydsl-maven-plugin ../querydsl-jpa ../querydsl-jpa-codegen @@ -452,6 +454,7 @@ ../querydsl-apt ../querydsl-sql ../querydsl-sql-codegen + ../querydsl-sql-spring ../querydsl-maven-plugin ../querydsl-jdo @@ -486,6 +489,7 @@ ../querydsl-spatial ../querydsl-sql ../querydsl-sql-codegen + ../querydsl-sql-spring ../querydsl-maven-plugin @@ -576,4 +580,4 @@ - + diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml new file mode 100644 index 0000000000..a74e977e03 --- /dev/null +++ b/querydsl-sql-spring/pom.xml @@ -0,0 +1,46 @@ + + + 4.0.0 + + + com.mysema.querydsl + querydsl-root + 3.4.2.BUILD-SNAPSHOT + ../querydsl-root/pom.xml + + + com.mysema.querydsl + querydsl-sql-spring + Querydsl - SQL Spring support + SQL Spring support for Querydsl + + + + 3.1.2.RELEASE + + + + + com.mysema.querydsl + querydsl-sql + ${project.version} + + + + org.springframework + spring-jdbc + ${spring.version} + provided + + + + + + + org.apache.felix + maven-bundle-plugin + + + + + diff --git a/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java new file mode 100644 index 0000000000..123beea774 --- /dev/null +++ b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java @@ -0,0 +1,26 @@ +package com.mysema.query.sql.spring; + +import javax.inject.Provider; +import javax.sql.DataSource; +import java.sql.Connection; + +import org.springframework.jdbc.datasource.DataSourceUtils; + +public class SpringConnectionProvider implements Provider { + + private final DataSource dataSource; + + public SpringConnectionProvider(DataSource dataSource) { + this.dataSource = dataSource; + } + + @Override + public Connection get() { + Connection connection = DataSourceUtils.getConnection(dataSource); + if (!DataSourceUtils.isConnectionTransactional(connection, dataSource)) { + throw new IllegalStateException("Connection is not transactional"); + } + return connection; + } + +} \ No newline at end of file diff --git a/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java new file mode 100644 index 0000000000..d6a532e734 --- /dev/null +++ b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java @@ -0,0 +1,31 @@ +package com.mysema.query.sql.spring; + +import java.sql.SQLException; +import java.util.List; + +import org.springframework.jdbc.support.SQLExceptionTranslator; +import org.springframework.jdbc.support.SQLStateSQLExceptionTranslator; + +public class SpringExceptionTranslator implements com.mysema.query.sql.SQLExceptionTranslator { + + private final SQLExceptionTranslator translator; + + public SpringExceptionTranslator() { + this.translator = new SQLStateSQLExceptionTranslator(); + } + + public SpringExceptionTranslator(SQLExceptionTranslator translator) { + this.translator = translator; + } + + @Override + public RuntimeException translate(String sql, List bindings, SQLException e) { + return translator.translate(null, sql, e); + } + + @Override + public RuntimeException translate(SQLException e) { + return translator.translate(null, null, e); + } + +} \ No newline at end of file From 7efac3e8efd8f1c5507956c5bf62a37c9224c609 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 23 Jul 2014 21:55:51 +0300 Subject: [PATCH 0301/1968] Remove delegate methods cache --- .../query/apt/AbstractQuerydslProcessor.java | 20 +------------------ 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java index 022adc17df..79880c17df 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/AbstractQuerydslProcessor.java @@ -54,8 +54,6 @@ public abstract class AbstractQuerydslProcessor extends AbstractProcessor { public static Elements ELEMENTS; - private static final Set DELEGATE_METHODS = new HashSet(); - public static final Boolean ALLOW_OTHER_PROCESSORS_TO_CLAIM_ANNOTATIONS = Boolean.FALSE; private final TypeExtractor typeExtractor = new TypeExtractor(true); @@ -431,23 +429,7 @@ private void processExclusions() { } private Set processDelegateMethods() { - Set delegateMethods = new HashSet(); - delegateMethods.addAll(getElements(QueryDelegate.class)); - for (Element element : DELEGATE_METHODS) { - TypeElement parent = (TypeElement)element.getEnclosingElement(); - // replace with element from current session - parent = processingEnv.getElementUtils().getTypeElement(parent.getQualifiedName().toString()); - if (parent != null) { - for (Element child : parent.getEnclosedElements()) { - if (child.getKind() == element.getKind() && child.getSimpleName().equals(element.getSimpleName())) { - delegateMethods.add(child); - } - } - } - } - DELEGATE_METHODS.clear(); - DELEGATE_METHODS.addAll(delegateMethods); - + Set delegateMethods = (Set)getElements(QueryDelegate.class); Set typeElements = new HashSet(); for (Element delegateMethod : delegateMethods) { From cc71e7d7bec4fa9f481718991b6b3b7893af014b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 27 Jul 2014 18:31:47 +0300 Subject: [PATCH 0302/1968] Make query classes non-final --- .../main/java/com/mysema/query/collections/CollQuery.java | 2 +- .../src/main/java/com/mysema/query/jdo/JDOQuery.java | 2 +- .../src/main/java/com/mysema/query/jpa/JPASubQuery.java | 2 +- .../java/com/mysema/query/jpa/hibernate/HibernateQuery.java | 2 +- .../com/mysema/query/jpa/hibernate/HibernateSubQuery.java | 2 +- .../mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java | 2 +- .../src/main/java/com/mysema/query/jpa/impl/JPAQuery.java | 2 +- .../src/main/java/com/mysema/query/jpa/sql/JPASQLQuery.java | 6 +++--- .../java/com/mysema/query/mongodb/morphia/MorphiaQuery.java | 2 +- .../src/main/java/com/mysema/query/sql/SQLQuery.java | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java index fd88810a2c..510b4f05cd 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java @@ -23,7 +23,7 @@ * @author tiwe * */ -public final class CollQuery extends AbstractCollQuery implements Cloneable { +public class CollQuery extends AbstractCollQuery implements Cloneable { /** * Create a new CollQuery instance diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java index b21187c4aa..bccabc6add 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java @@ -25,7 +25,7 @@ * * @param */ -public final class JDOQuery extends AbstractJDOQuery { +public class JDOQuery extends AbstractJDOQuery { /** * Create a detached JDOQuery instance diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPASubQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPASubQuery.java index 1b415bc305..51951e5984 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPASubQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPASubQuery.java @@ -21,7 +21,7 @@ * @author tiwe * */ -public final class JPASubQuery extends AbstractJPASubQuery { +public class JPASubQuery extends AbstractJPASubQuery { public JPASubQuery() { super(); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateQuery.java index 3b2005fc69..db2368a624 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateQuery.java @@ -27,7 +27,7 @@ * @author tiwe * */ -public final class HibernateQuery extends AbstractHibernateQuery { +public class HibernateQuery extends AbstractHibernateQuery { /** * Creates a detached query diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateSubQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateSubQuery.java index 31ccce3221..f9da05bc30 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateSubQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/HibernateSubQuery.java @@ -22,7 +22,7 @@ * @author tiwe * */ -public final class HibernateSubQuery extends AbstractJPASubQuery { +public class HibernateSubQuery extends AbstractJPASubQuery { public HibernateSubQuery() { super(); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java index 697406976d..c5748cafb5 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/HibernateSQLQuery.java @@ -27,7 +27,7 @@ * @author tiwe * */ -public final class HibernateSQLQuery extends AbstractHibernateSQLQuery { +public class HibernateSQLQuery extends AbstractHibernateSQLQuery { public HibernateSQLQuery(Session session, SQLTemplates sqlTemplates) { super(session, new Configuration(sqlTemplates)); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java index 0080370764..534b3a8c2d 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java @@ -25,7 +25,7 @@ * @author tiwe * */ -public final class JPAQuery extends AbstractJPAQuery { +public class JPAQuery extends AbstractJPAQuery { /** * Creates a new detached query diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/JPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/JPASQLQuery.java index 8b1f611013..c492cdb5c0 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/JPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/JPASQLQuery.java @@ -13,13 +13,13 @@ */ package com.mysema.query.jpa.sql; +import javax.persistence.EntityManager; + import com.mysema.query.QueryMetadata; import com.mysema.query.jpa.QueryHandler; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.SQLTemplates; -import javax.persistence.EntityManager; - /** * JPASQLQuery is an SQLQuery implementation that uses JPA Native SQL functionality * to execute queries @@ -27,7 +27,7 @@ * @author tiwe * */ -public final class JPASQLQuery extends AbstractJPASQLQuery { +public class JPASQLQuery extends AbstractJPASQLQuery { public JPASQLQuery(EntityManager entityManager, SQLTemplates sqlTemplates) { super(entityManager, new Configuration(sqlTemplates)); diff --git a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/morphia/MorphiaQuery.java b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/morphia/MorphiaQuery.java index be3186bf83..b2680f754d 100644 --- a/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-mongodb/src/main/java/com/mysema/query/mongodb/morphia/MorphiaQuery.java @@ -32,7 +32,7 @@ * @author tiwe * */ -public final class MorphiaQuery extends MongodbQuery { +public class MorphiaQuery extends MongodbQuery { private final EntityCache cache; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLQuery.java index 0de5e70b63..c11e41aeeb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLQuery.java @@ -23,7 +23,7 @@ * * @author tiwe */ -public final class SQLQuery extends AbstractSQLQuery { +public class SQLQuery extends AbstractSQLQuery { /** * Create a detached SQLQuery instance From e26803eb37640e406ff5916f0cf874de7372dad0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 27 Jul 2014 18:43:03 +0300 Subject: [PATCH 0303/1968] Add numeric mapping ranges --- .../com/mysema/query/sql/Configuration.java | 17 +++++++++++++++++ .../com/mysema/query/sql/ConfigurationTest.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 85f00ed6cc..2ae735ae46 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -390,6 +390,23 @@ public void registerNumeric(int total, int decimal, Class javaType) { jdbcTypeMapping.registerNumeric(total, decimal, javaType); } + /** + * Override multiple numeric bindings, both begin and end are inclusive + * + * @param beginTotal + * @param endTotal + * @param beginDecimal + * @param endDecimal + * @param javaType + */ + public void registerNumeric (int beginTotal, int endTotal, int beginDecimal, int endDecimal, Class javaType) { + for (int total = beginTotal; total <= endTotal; total++) { + for (int decimal = beginDecimal; decimal <= endDecimal; decimal++) { + registerNumeric(total, decimal, javaType); + } + } + } + /** * Register the given javaType for the given table and column * diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/ConfigurationTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/ConfigurationTest.java index ed220e5051..06e6d75908 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/ConfigurationTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/ConfigurationTest.java @@ -14,6 +14,7 @@ package com.mysema.query.sql; import java.io.InputStream; +import java.math.BigInteger; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; @@ -70,4 +71,20 @@ public void Get_Schema() { // assertEquals("employees", configuration.getTable("public", "employee")); } + @Test + public void NumericOverriden() { + Configuration configuration = new Configuration(new H2Templates()); + configuration.registerNumeric(19, 0, BigInteger.class); + assertEquals(configuration.getJavaType(Types.NUMERIC, "", 19, 0, "", ""), BigInteger.class); + } + + @Test + public void NumericOverriden2() { + Configuration configuration = new Configuration(new H2Templates()); + configuration.registerNumeric(18, 19, 0, 0, BigInteger.class); + assertEquals(configuration.getJavaType(Types.NUMERIC, "", 18, 0, "", ""), BigInteger.class); + assertEquals(configuration.getJavaType(Types.NUMERIC, "", 19, 0, "", ""), BigInteger.class); + } + + } From d8858bd0cfc8aa590c100e64335f60010094e988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 28 Jul 2014 20:15:42 +0300 Subject: [PATCH 0304/1968] Bump version --- querydsl-root/pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3faaaf81f1..6e7a092dae 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -162,7 +162,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 org.apache.maven.plugins @@ -209,9 +209,9 @@ - - com/mysema/query/SearchResults - + + com/mysema/query/SearchResults + BACKWARD_COMPATIBLE_USER true true @@ -576,4 +576,4 @@ - + From abeaed297d448d17902c671250f02101fe2c158a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Jul 2014 20:55:08 +0300 Subject: [PATCH 0305/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 6 +++--- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 19 files changed, 21 insertions(+), 21 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 0eed3a570b..027d343adb 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index fa9e873b5e..aa4049a07e 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 04c9c1561d..2cc02ceb00 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 6d76255428..124f6c23b0 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml index de7b53a069..95af242e67 100644 --- a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml index ba5c1d7e45..27af33bd97 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 803bd8a12c..fd58010763 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 33f527613c..f037f81ec2 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 38b5a58e09..5f5dd48183 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index e533592d62..4dcdd0f208 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 3484561ad7..d068e8f04b 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 4f0c2fc03c..3cc2ea9325 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 436532276d..08a2a0773b 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index bbec2f19f3..ada3dbb97e 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 6e7a092dae..f591a9dd1f 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,10 +1,10 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 Querydsl parent project for Querydsl modules ${project.homepage} @@ -576,4 +576,4 @@ - + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index cd6b7d3cb7..6162be5112 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 4cc98a2025..e80bcbf363 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index b3d62950b8..23e5cc1a41 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 4551cbccb1..82eddb8733 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.4.2 ../querydsl-root/pom.xml From 2c3c4d318cdc5a2ee8eceb9809c1fe0175d6252c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 29 Jul 2014 21:01:28 +0300 Subject: [PATCH 0306/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 027d343adb..928fc0a9b3 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index aa4049a07e..28dae1212f 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 2cc02ceb00..a62aec51b8 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 124f6c23b0..3bb4c6a8e6 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index fd58010763..cc66834f55 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index f037f81ec2..6e2df50188 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 5f5dd48183..4a1c6c38f9 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 4dcdd0f208..c383008b35 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index d068e8f04b..8870c9c689 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 3cc2ea9325..81c0c91370 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 08a2a0773b..376309e830 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index ada3dbb97e..3c118e210b 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index f591a9dd1f..4996e7a981 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 6162be5112..1beda7484d 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index e80bcbf363..649dadf2c7 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 23e5cc1a41..3facbe8965 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 82eddb8733..8b86f2bff9 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2 + 3.4.3.BUILD-SNAPSHOT ../querydsl-root/pom.xml From 6a8080040fde065cf9df60483af3a23fa1a90925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 1 Aug 2014 22:46:26 +0300 Subject: [PATCH 0307/1968] Bump version --- querydsl-root/pom.xml | 1154 ++++++++++++++++++++--------------------- 1 file changed, 577 insertions(+), 577 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 4996e7a981..f7552c5686 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,579 +1,579 @@ - - - 4.0.0 - com.mysema.querydsl - querydsl-root - 3.4.3.BUILD-SNAPSHOT - Querydsl - parent project for Querydsl modules - ${project.homepage} - - - com.mysema.home - mysema-source - 0.3.1 - - - pom - - 2007 - - - false - UTF-8 - http://www.querydsl.com - http://github.com/querydsl/querydsl - scm:git:git@github.com:querydsl/querydsl.git - - - 10.10.1.1 - 2.3.1 - 1.4.178 - 9.3-1101-jdbc41 - 11.1.0.7.0 - 5.1.30 - 1.3.1 - 8.4.0 - 3.7.2 - 13.10.00.35 - 2.2.5 - - 14.0 - 0.6.2 - 0.2.4 - 2.2.2 - 1.3.2 - 1.6.1 - - - - com.google.common.*;version=${@}, - * - - ${osgi.import.package.root} - - - - - junit - junit - 4.8.1 - test - - - javax.servlet - servlet-api - - - - - - org.easymock - easymock - 3.0 - test - - - cglib - cglib-nodep - - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - provided - - - - - - ${project.checkout} - ${project.checkout} - ${project.githubpage} - - - - - tiwe - Timo Westkämper - timo.westkamper@gmail.com - Mysema Ltd - - Project Manager - Architect - - - - sasa - Samppa Saarela - samppa.saarela@mysema.com - Mysema Ltd - - Developer - - - - vema - Vesa Marttila - vesa.marttila@mysema.com - Mysema Ltd - - Developer - - - - laim - Lassi Immonen - lassi.immonen@mysema.com - Mysema Ltd - - Developer - - - - - - - Apache License, Version 2.0 - LICENSE.txt - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.4 - - - com.mysema.maven - apt-maven-plugin - 1.1.2 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.16 - - - org.apache.felix - maven-bundle-plugin - 2.4.0 - - - bundle-manifest - process-classes - - manifest - - true - - - - ${osgi.import.package} - - - - - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.3.1 - - - check - verify - - enforce - - - - - - com/mysema/query/SearchResults - - BACKWARD_COMPATIBLE_USER - true - true - - - - - - - - org.semver - enforcer-rule - 0.9.24 - - - - - maven-assembly-plugin - - - ../querydsl-root/src/main/assembly.xml - - ../querydsl-root/target/dist - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - ${project.build.directory}/dist/apidocs - ${project.build.directory}/dist/apidocs - - - Core - com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* - - - APT - com.mysema.query.apt* - - - Spatial - com.mysema.query.spatial* - - - Collections - com.mysema.query.collections* - - - JPA - com.mysema.query.jpa* - - - JDO - com.mysema.query.jdo* - - - SQL - com.mysema.query.sql* - - - Spatial - com.mysema.query.spatial* - - - Lucene - com.mysema.query.lucene - - - Hibernate Search - com.mysema.query.search - - - Mongodb - com.mysema.query.mongodb* - - - - - - com.mysema.maven - maven-version-plugin - 0.1.0 - - - org.apache.maven.plugins - maven-pmd-plugin - 2.3 - - 1.6 - true - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 1.6 - 1.6 - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - package - - jar - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - - -Xms256m -Xmx512m -XX:MaxPermSize=512m - com.mysema.testutil.ExternalDB - - - - org.apache.maven.surefire - surefire-junit47 - 2.16 - - - - - - - - - jahia - http://maven.jahia.org/maven2 - - - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release - - - geoapi - http://maven.geotoolkit.org - - - opengeo - http://repo.opengeo.org - - - nexus - https://maven.nuxeo.org/nexus/content/groups/public - - - - - - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release - - - com.springsource.repository.bundles.external - http://repository.springsource.com/maven/bundles/external - - - - - - all - true - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-collections - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - ../querydsl-jdo - - - ../querydsl-lucene3 - ../querydsl-lucene4 - ../querydsl-hibernate-search - - - ../querydsl-mongodb - - - ../querydsl-scala - - - - - hibernate-search - - ../querydsl-core - ../querydsl-codegen - ../querydsl-lucene3 - ../querydsl-hibernate-search - - - - - jpa - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - - - - - jdo - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jdo - - - - - lucene - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-lucene3 - ../querydsl-lucene4 - - - - - mongodb - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-mongodb - - - - - sql - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - - - - - collections - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-collections - - - - - jenkins - - - - org.apache.maven.plugins - maven-surefire-plugin - - com.mysema.testutil.DummyInterface - - **/*$* - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java - - - - - - - - - travis - - - - org.apache.maven.plugins - maven-surefire-plugin - - com.mysema.testutil.DummyInterface - - **/*$* - **/ExportOracleTest.java - **/ExportTeradataTest.java - **/OracleSuiteTest.java - **/OracleWithQuotingTest.java - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java - - - - - - - - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - true - - - - org.codehaus.mojo - junit-report-maven-plugin - devel - - true - - - - org.apache.maven.plugins - maven-jxr-plugin - 2.3 - - true - - - - - + + + 4.0.0 + com.mysema.querydsl + querydsl-root + 3.4.3.BUILD-SNAPSHOT + Querydsl + parent project for Querydsl modules + ${project.homepage} + + + com.mysema.home + mysema-source + 0.3.1 + + + pom + + 2007 + + + false + UTF-8 + http://www.querydsl.com + http://github.com/querydsl/querydsl + scm:git:git@github.com:querydsl/querydsl.git + + + 10.10.1.1 + 2.3.1 + 1.4.178 + 9.3-1101-jdbc41 + 11.1.0.7.0 + 5.1.30 + 1.3.1 + 8.4.0 + 3.7.2 + 13.10.00.35 + 2.2.5 + + 14.0 + 0.6.2 + 0.2.4 + 2.2.2 + 1.3.2 + 1.6.1 + + + + com.google.common.*;version=${@}, + * + + ${osgi.import.package.root} + + + + + junit + junit + 4.8.1 + test + + + javax.servlet + servlet-api + + + + + + org.easymock + easymock + 3.0 + test + + + cglib + cglib-nodep + + + + + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + provided + + + + + + ${project.checkout} + ${project.checkout} + ${project.githubpage} + + + + + tiwe + Timo Westkämper + timo.westkamper@gmail.com + Mysema Ltd + + Project Manager + Architect + + + + sasa + Samppa Saarela + samppa.saarela@mysema.com + Mysema Ltd + + Developer + + + + vema + Vesa Marttila + vesa.marttila@mysema.com + Mysema Ltd + + Developer + + + + laim + Lassi Immonen + lassi.immonen@mysema.com + Mysema Ltd + + Developer + + + + + + + Apache License, Version 2.0 + LICENSE.txt + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.4 + + + com.mysema.maven + apt-maven-plugin + 1.1.2 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + + org.apache.felix + maven-bundle-plugin + 2.4.0 + + + bundle-manifest + process-classes + + manifest + + true + + + + ${osgi.import.package} + + + + + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + check + verify + + enforce + + + + + + com/mysema/query/SearchResults + + BACKWARD_COMPATIBLE_USER + true + true + + + + + + + + org.semver + enforcer-rule + 0.9.26 + + + + + maven-assembly-plugin + + + ../querydsl-root/src/main/assembly.xml + + ../querydsl-root/target/dist + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + ${project.build.directory}/dist/apidocs + ${project.build.directory}/dist/apidocs + + + Core + com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* + + + APT + com.mysema.query.apt* + + + Spatial + com.mysema.query.spatial* + + + Collections + com.mysema.query.collections* + + + JPA + com.mysema.query.jpa* + + + JDO + com.mysema.query.jdo* + + + SQL + com.mysema.query.sql* + + + Spatial + com.mysema.query.spatial* + + + Lucene + com.mysema.query.lucene + + + Hibernate Search + com.mysema.query.search + + + Mongodb + com.mysema.query.mongodb* + + + + + + com.mysema.maven + maven-version-plugin + 0.1.0 + + + org.apache.maven.plugins + maven-pmd-plugin + 2.3 + + 1.6 + true + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + + -Xms256m -Xmx512m -XX:MaxPermSize=512m + com.mysema.testutil.ExternalDB + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + + + jahia + http://maven.jahia.org/maven2 + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + geoapi + http://maven.geotoolkit.org + + + opengeo + http://repo.opengeo.org + + + nexus + https://maven.nuxeo.org/nexus/content/groups/public + + + + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + com.springsource.repository.bundles.external + http://repository.springsource.com/maven/bundles/external + + + + + + all + true + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-apt + ../querydsl-collections + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jpa + ../querydsl-jpa-codegen + ../querydsl-jdo + + + ../querydsl-lucene3 + ../querydsl-lucene4 + ../querydsl-hibernate-search + + + ../querydsl-mongodb + + + ../querydsl-scala + + + + + hibernate-search + + ../querydsl-core + ../querydsl-codegen + ../querydsl-lucene3 + ../querydsl-hibernate-search + + + + + jpa + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-apt + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jpa + ../querydsl-jpa-codegen + + + + + jdo + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-apt + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jdo + + + + + lucene + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-lucene3 + ../querydsl-lucene4 + + + + + mongodb + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-mongodb + + + + + sql + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + + + + + collections + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-collections + + + + + jenkins + + + + org.apache.maven.plugins + maven-surefire-plugin + + com.mysema.testutil.DummyInterface + + **/*$* + **/MSSQLSuiteTest.java + **/TeradataSuiteTest.java + + + + + + + + + travis + + + + org.apache.maven.plugins + maven-surefire-plugin + + com.mysema.testutil.DummyInterface + + **/*$* + **/ExportOracleTest.java + **/ExportTeradataTest.java + **/OracleSuiteTest.java + **/OracleWithQuotingTest.java + **/MSSQLSuiteTest.java + **/TeradataSuiteTest.java + + + + + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + true + + + + org.codehaus.mojo + junit-report-maven-plugin + devel + + true + + + + org.apache.maven.plugins + maven-jxr-plugin + 2.3 + + true + + + + + From 72d39b9192171566789a92d7a2f03cbebecf83f5 Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Tue, 5 Aug 2014 11:01:24 +1000 Subject: [PATCH 0308/1968] Initial commit of a detailed sql listener interface so we can instrument the performance aspects and execution aspects of queryDSL --- .../mysema/query/sql/AbstractSQLQuery.java | 117 +++++++++++- .../mysema/query/sql/SQLDetailedListener.java | 71 +++++++ .../mysema/query/sql/SQLListenerAdapter.java | 168 +++++++++++++++++ .../mysema/query/sql/SQLListenerContext.java | 66 +++++++ .../query/sql/SQLListenerContextBuilder.java | 175 ++++++++++++++++++ .../com/mysema/query/sql/SQLListeners.java | 110 ++++++++++- .../query/sql/dml/AbstractSQLClause.java | 42 +++++ .../mysema/query/sql/dml/SQLDeleteClause.java | 40 +++- .../mysema/query/sql/dml/SQLInsertClause.java | 45 ++++- .../mysema/query/sql/dml/SQLMergeClause.java | 50 ++++- .../mysema/query/sql/dml/SQLUpdateClause.java | 40 +++- .../com/mysema/query/AbstractBaseTest.java | 41 ++-- .../com/mysema/query/QueryMutabilityTest.java | 1 + .../com/mysema/query/SQLListenersTest.java | 29 +++ .../com/mysema/query/TestLoggingListener.java | 147 +++++++++++++++ .../mysema/query/suites/DerbySuiteTest.java | 2 + .../query/suites/H2WithQuotingTest.java | 2 + .../mysema/query/suites/H2WithSchemaTest.java | 2 + .../mysema/query/suites/HsqldbSuiteTest.java | 2 + .../mysema/query/suites/SQLiteSuiteTest.java | 2 + 20 files changed, 1127 insertions(+), 25 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/TestLoggingListener.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 6555763ce8..fb5d8b2055 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -42,6 +42,8 @@ import com.mysema.query.types.Path; import com.mysema.util.ResultSetAdapter; +import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; + /** * AbstractSQLQuery is the base type for SQL query implementations * @@ -122,6 +124,44 @@ private void set(PreparedStatement stmt, Path path, int i, Object value) thro configuration.set(stmt, path, i, value); } + /** + * Called to create and start a new SQL Listener context + * @param connection the database connection + * @param metadata the meta data for that context + * @return the newly started context + */ + protected SQLListenerContext startContext(Connection connection, QueryMetadata metadata) + { + SQLListenerContext context = newContext(metadata).with(connection).build(); + listeners.start(context); + return context; + } + + /** + * Called to make the call back to listeners when an exception happens + * + * @param context the current context in play + * @param e the exception + * @return the new context + */ + protected SQLListenerContext onException(SQLListenerContext context, Exception e) + { + context = newContext(context).with(e).build(); + listeners.exception(context); + return context; + } + + /** + * Called to end a SQL listener context + * @param context the listener context to end + */ + protected void endContext(SQLListenerContext context) + { + listeners.end(context); + } + + + /** * Get the results as an JDBC result set * @@ -130,18 +170,31 @@ private void set(PreparedStatement stmt, Path path, int i, Object value) thro */ public ResultSet getResults(Expression... exprs) { queryMixin.addProjection(exprs); + + SQLListenerContext context = startContext(conn, queryMixin.getMetadata()); + + listeners.preRender(context); SQLSerializer serializer = serialize(false); String queryString = serializer.toString(); if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } + context = newContext(context).with(queryString).build(); + listeners.rendered(context); + listeners.notifyQuery(queryMixin.getMetadata()); List constants = serializer.getConstants(); try { + listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), getMetadata().getParams()); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + + listeners.preExecute(context); final ResultSet rs = stmt.executeQuery(); + listeners.executed(context); return new ResultSetAdapter(rs) { @Override @@ -154,16 +207,18 @@ public void close() throws SQLException { } }; } catch (SQLException e) { + context = onException(context, e); throw configuration.translate(queryString, constants, e); } finally { reset(); + endContext(context); } } protected Configuration getConfiguration() { return configuration; } - + @Override public CloseableIterator iterate(Expression expr) { expr = queryMixin.addProjection(expr); @@ -172,17 +227,30 @@ public CloseableIterator iterate(Expression expr) { @SuppressWarnings("unchecked") private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullable final Expression expr) { + SQLListenerContext context = startContext(conn,queryMixin.getMetadata()); + + listeners.preRender(context); SQLSerializer serializer = serialize(false); final String queryString = serializer.toString(); if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } + context = newContext(context).with(queryString).build(); + listeners.rendered(context); + + listeners.notifyQuery(queryMixin.getMetadata()); List constants = serializer.getConstants(); try { + listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), metadata.getParams()); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + + listeners.preExecute(context); final ResultSet rs = stmt.executeQuery(); + listeners.executed(context); if (expr == null) { return new SQLResultIterator(configuration, stmt, rs) { @@ -219,8 +287,11 @@ public RT produceNext(ResultSet rs) throws Exception { } } catch (SQLException e) { + context = onException(context, e); + throw configuration.translate(queryString, constants, e); } finally { + endContext(context); reset(); } } @@ -229,18 +300,30 @@ public RT produceNext(ResultSet rs) throws Exception { @Override public List list(Expression expr) { expr = queryMixin.addProjection(expr); + SQLListenerContext context = startContext(conn, queryMixin.getMetadata()); + + listeners.preRender(context); SQLSerializer serializer = serialize(false); final String queryString = serializer.toString(); if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } + context = newContext(context).with(queryString).build(); + listeners.rendered(context); + listeners.notifyQuery(queryMixin.getMetadata()); List constants = serializer.getConstants(); try { + listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); try { setParameters(stmt, constants, serializer.getConstantPaths(), queryMixin.getMetadata().getParams()); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + + listeners.preExecute(context); final ResultSet rs = stmt.executeQuery(); + listeners.executed(context); try { lastCell = null; final List rv = new ArrayList(); @@ -276,12 +359,23 @@ public List list(Expression expr) { } return rv; } catch (IllegalAccessException e) { + context = newContext(context).with(e).build(); + listeners.exception(context); + throw new QueryException(e); } catch (InvocationTargetException e) { + context = newContext(context).with(e).build(); + listeners.exception(context); + throw new QueryException(e); } catch (InstantiationException e) { + context = newContext(context).with(e).build(); + listeners.exception(context); + throw new QueryException(e); } catch (SQLException e) { + context = onException(context, e); + throw configuration.translate(queryString, constants, e); } finally { rs.close(); @@ -290,8 +384,11 @@ public List list(Expression expr) { stmt.close(); } } catch (SQLException e) { + context = onException(context, e); + throw configuration.translate(queryString, constants, e); } finally { + endContext(context); reset(); } } @@ -384,21 +481,38 @@ public RT uniqueResult(Expression expr) { } private long unsafeCount() throws SQLException { + SQLListenerContext context = startContext(conn,getMetadata()); + + listeners.preRender(context); SQLSerializer serializer = serialize(true); final String queryString = serializer.toString(); if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } + context = newContext(context).with(queryString).build(); + listeners.rendered(context); + List constants = serializer.getConstants(); PreparedStatement stmt = null; ResultSet rs = null; try { + listeners.prePrepare(context); + stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), getMetadata().getParams()); + + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + + listeners.preExecute(context); rs = stmt.executeQuery(); rs.next(); + listeners.executed(context); + return rs.getLong(1); } catch (SQLException e) { + context = onException(context, e); + throw configuration.translate(queryString, constants, e); } finally { try { @@ -410,6 +524,7 @@ private long unsafeCount() throws SQLException { stmt.close(); } } + endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java new file mode 100644 index 0000000000..530f04cbf8 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java @@ -0,0 +1,71 @@ +package com.mysema.query.sql; + +/** + * An extended listener interface that details much more about the preparation and execution of queries + */ +public interface SQLDetailedListener extends SQLListener +{ + /** + * Called at the start of a query. Most context parameters are empty at this stage + * + * @param context a context object that is progressively filled out as the query executes + */ + void start(SQLListenerContext context); + + /** + * Called at the start of SQL rendering. + * + * @param context a context object that is progressively filled out as the query executes + */ + void preRender(SQLListenerContext context); + + /** + * Called at the end of SQL rendering. The sql context value will not be available + * + * @param context a context object that is progressively filled out as the query executes + */ + void rendered(SQLListenerContext context); + + /** + * Called at the start of {@link java.sql.PreparedStatement} preparation. + * + * @param context a context object that is progressively filled out as the query executes + */ + void prePrepare(SQLListenerContext context); + + /** + * Called at the end of {@link java.sql.PreparedStatement} preparation. + * + * @param context a context object that is progressively filled out as the query executes + */ + void prepared(SQLListenerContext context); + + /** + * Called at the start of {@link java.sql.PreparedStatement} execution. + * + * @param context a context object that is progressively filled out as the query executes + */ + void preExecute(SQLListenerContext context); + + /** + * Called at the end of {@link java.sql.PreparedStatement} execution. + * + * @param context a context object that is progressively filled out as the query executes + */ + void executed(SQLListenerContext context); + + /** + * Called if an exception happens during query building and execution. The context exception values will + * now be available indicating the exception that occurred. + * + * @param context a context object that is progressively filled out as the query executes + */ + void exception(SQLListenerContext context); + + /** + * Called at the end of a query. + * + * @param context a context object that is progressively filled out as the query executes + */ + void end(SQLListenerContext context); +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java new file mode 100644 index 0000000000..d64107c66e --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java @@ -0,0 +1,168 @@ +package com.mysema.query.sql; + +import com.mysema.commons.lang.Pair; +import com.mysema.query.QueryMetadata; +import com.mysema.query.sql.dml.SQLInsertBatch; +import com.mysema.query.sql.dml.SQLMergeBatch; +import com.mysema.query.sql.dml.SQLUpdateBatch; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Path; +import com.mysema.query.types.SubQueryExpression; + +import java.util.List; + +/** + * A simple adapter class that knows if the underlying listener is a simple or detailed SQL listener + */ +class SQLListenerAdapter implements SQLDetailedListener +{ + + private final SQLListener sqlListener; + private final SQLDetailedListener SQLDetailedListener; + + SQLListenerAdapter(final SQLListener sqlListener) + { + this.SQLDetailedListener = sqlListener instanceof SQLDetailedListener ? (SQLDetailedListener) sqlListener : null; + this.sqlListener = sqlListener; + } + + public SQLListener getSqlListener() + { + return sqlListener; + } + + @Override + public void start(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.start(context); + } + } + + @Override + public void preRender(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.preRender(context); + } + } + + @Override + public void rendered(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.rendered(context); + } + } + + @Override + public void prePrepare(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.prePrepare(context); + } + } + + @Override + public void prepared(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.prepared(context); + } + } + + @Override + public void preExecute(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.preExecute(context); + } + } + + @Override + public void executed(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.executed(context); + } + } + + @Override + public void end(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.end(context); + } + } + + @Override + public void exception(final SQLListenerContext context) + { + if (SQLDetailedListener != null) + { + SQLDetailedListener.exception(context); + } + } + + @Override + public void notifyQuery(final QueryMetadata md) + { + sqlListener.notifyQuery(md); + } + + @Override + public void notifyDelete(final RelationalPath entity, final QueryMetadata md) + { + sqlListener.notifyDelete(entity, md); + } + + @Override + public void notifyDeletes(final RelationalPath entity, final List batches) + { + sqlListener.notifyDeletes(entity, batches); + } + + @Override + public void notifyMerge(final RelationalPath entity, final QueryMetadata md, final List> keys, final List> columns, final List> values, final SubQueryExpression subQuery) + { + sqlListener.notifyMerge(entity, md, keys, columns, values, subQuery); + } + + @Override + public void notifyMerges(final RelationalPath entity, final QueryMetadata md, final List batches) + { + sqlListener.notifyMerges(entity, md, batches); + } + + @Override + public void notifyInsert(final RelationalPath entity, final QueryMetadata md, final List> columns, final List> values, final SubQueryExpression subQuery) + { + sqlListener.notifyInsert(entity, md, columns, values, subQuery); + } + + @Override + public void notifyInserts(final RelationalPath entity, final QueryMetadata md, final List batches) + { + sqlListener.notifyInserts(entity, md, batches); + } + + @Override + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) + { + sqlListener.notifyUpdate(entity, md, updates); + } + + @Override + public void notifyUpdates(final RelationalPath entity, final List batches) + { + sqlListener.notifyUpdates(entity, batches); + } +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java new file mode 100644 index 0000000000..dbaef61019 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java @@ -0,0 +1,66 @@ +package com.mysema.query.sql; + +import com.mysema.query.QueryMetadata; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.util.Collection; +import java.util.Map; + +/** + * A context object that is progressively filled out during query execution and is + * passed to each {@link SQLDetailedListener} callback method + */ +public interface SQLListenerContext +{ + /** + * The context map is a general purpose place that listeners can place objects. It allows listeners to pass context + * between themselves during callbacks. + *

+ * This is never null but can be empty + * + * @return the context map + */ + Map map(); + + /** + * @return the underlying query metadata + */ + QueryMetadata queryMetadata(); + + /** + * NOTE : This can be null depending on the stage of the query execution + * + * @return the underlying sql + */ + String sql(); + + /** + * NOTE : This can be null depending on the stage of the query execution + * + * @return the underlying entity affected + */ + RelationalPath entity(); + + /** + * NOTE : This can be null depending on the stage of the query execution + * + * @return the underlying connection if there is one + */ + Connection connection(); + + /** + * NOTE : This can be null depending on whether an exception occurred + * + * @return the underlying exception that has happened during query execution + */ + Exception exception(); + + /** + * NOTE : This can be null depending on the stage of the query execution + * + * @return the underlying set of prepared statements + */ + Collection preparedStatements(); + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java new file mode 100644 index 0000000000..7030fe3415 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java @@ -0,0 +1,175 @@ +package com.mysema.query.sql; + +import com.google.common.collect.Lists; +import com.mysema.query.QueryMetadata; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +/** + * A builder of {@link com.mysema.query.sql.SQLListenerContext} objects + */ +public class SQLListenerContextBuilder +{ + private Map contextMap = new HashMap(); + + private QueryMetadata md; + + private String sql; + + private RelationalPath entity; + + private Connection connection; + + private Exception exception; + + private Collection preparedStatements; + + SQLListenerContextBuilder(final QueryMetadata md) + { + this.md = md; + } + + public static SQLListenerContextBuilder newContext(QueryMetadata md) + { + return new SQLListenerContextBuilder(md); + } + + public static SQLListenerContextBuilder newContext(SQLListenerContext context) + { + return new SQLListenerContextBuilder(context.queryMetadata()) + .with(context.map()) + .with(context.connection()) + .with(context.entity()) + .with(context.exception()) + .with(context.preparedStatements()) + .with(context.sql()) + ; + } + + SQLListenerContextBuilder with(Map contextMap) + { + this.contextMap = contextMap; + return this; + } + + public SQLListenerContextBuilder with(RelationalPath entity) + { + this.entity = entity; + return this; + } + + public SQLListenerContextBuilder with(String sql) + { + this.sql = sql; + return this; + } + + public SQLListenerContextBuilder with(Exception exception) + { + this.exception = exception; + return this; + } + + public SQLListenerContextBuilder with(Connection connection) + { + this.connection = connection; + return this; + } + + public SQLListenerContextBuilder with(PreparedStatement preparedStatement) + { + if (preparedStatement != null) + { + this.preparedStatements = Lists.newArrayList(preparedStatement); + } + return this; + } + + public SQLListenerContextBuilder with(Collection preparedStatements) + { + if (preparedStatements != null) + { + this.preparedStatements = Lists.newArrayList(preparedStatements); + } + return this; + } + + public SQLListenerContext build() + { + return new SQLListenerContextImpl(); + } + + /** + * A simple implementation that looks at the builder for values + */ + class SQLListenerContextImpl implements SQLListenerContext + { + @Override + public QueryMetadata queryMetadata() + { + return md; + } + + @Override + public RelationalPath entity() + { + return entity; + } + + @Override + public String sql() + { + return sql; + } + + @Override + public Exception exception() + { + return exception; + } + + @Override + public Connection connection() + { + return connection; + } + + @Override + public Collection preparedStatements() + { + return preparedStatements; + } + + @Override + public Map map() + { + return contextMap; + } + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder() + .append(" sql:").append(nicerSql(sql)) + .append(" connection:").append(connection == null ? "not connected" : "connected") + .append(" entity:").append(entity) + .append(" exception:").append(exception); + + for (Map.Entry entry : contextMap.entrySet()) + { + sb.append(" [").append(entry.getKey()).append(":").append(entry.getValue()).append("]"); + } + return sb.toString(); + } + + private String nicerSql(final String sql) + { + return "'" + (sql == null ? sql : sql.replace('\n', ' ')) + "'"; + } + } + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java index 8df7e2bf4a..9125cdeceb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java @@ -34,15 +34,16 @@ * @author tiwe * */ -public class SQLListeners implements SQLListener { +public class SQLListeners implements SQLDetailedListener +{ @Nullable - private final SQLListener parent; + private final SQLListenerAdapter parent; - private final List listeners = Lists.newArrayList(); + private final List listeners = Lists.newArrayList(); public SQLListeners(SQLListener parent) { - this.parent = parent; + this.parent = new SQLListenerAdapter(parent); } public SQLListeners() { @@ -50,7 +51,7 @@ public SQLListeners() { } public void add(SQLListener listener) { - listeners.add(listener); + listeners.add(new SQLListenerAdapter(listener)); } @Override @@ -147,4 +148,103 @@ public void notifyUpdates(RelationalPath entity, List batches } } + + @Override + public void start(final SQLListenerContext context) + { + if (parent != null) { + parent.start(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.start(context); + } + } + + @Override + public void preRender(final SQLListenerContext context) + { + if (parent != null) { + parent.preRender(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.preRender(context); + } + } + + @Override + public void rendered(final SQLListenerContext context) + { + if (parent != null) { + parent.rendered(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.rendered(context); + } + } + + @Override + public void prePrepare(final SQLListenerContext context) + { + if (parent != null) { + parent.prePrepare(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.prePrepare(context); + } + } + + @Override + public void prepared(final SQLListenerContext context) + { + if (parent != null) { + parent.prepared(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.prepared(context); + } + } + + @Override + public void preExecute(final SQLListenerContext context) + { + if (parent != null) { + parent.preExecute(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.preExecute(context); + } + } + + @Override + public void executed(final SQLListenerContext context) + { + if (parent != null) { + parent.executed(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.executed(context); + } + } + + @Override + public void end(final SQLListenerContext context) + { + if (parent != null) { + parent.end(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.end(context); + } + } + + @Override + public void exception(final SQLListenerContext context) + { + if (parent != null) { + parent.exception(context); + } + for (SQLListenerAdapter listener : listeners) { + listener.exception(context); + } + } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index 94b372f7ed..a581ef9b4e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -13,6 +13,7 @@ */ package com.mysema.query.sql.dml; +import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -43,6 +44,8 @@ public abstract class AbstractSQLClause> implemen protected boolean useLiterals; + protected SQLListenerContext context; + /** * @param configuration */ @@ -59,6 +62,45 @@ public void addListener(SQLListener listener) { listeners.add(listener); } + /** + * Called to create and start a new SQL Listener context + * @param connection the database connection + * @param metadata the meta data for that context + * @param entity the entity for that context + * @return the newly started context + */ + protected SQLListenerContext startContext(Connection connection, QueryMetadata metadata, RelationalPath entity) + { + SQLListenerContext context = SQLListenerContextBuilder.newContext(metadata).with(connection).with(entity).build(); + listeners.start(context); + return context; + } + + /** + * Called to make the call back to listeners when an exception happens + * + * @param context the current context in play + * @param e the exception + * @return the new context + */ + protected SQLListenerContext onException(SQLListenerContext context, Exception e) + { + context = SQLListenerContextBuilder.newContext(context).with(e).build(); + listeners.exception(context); + return context; + } + + /** + * Called to end a SQL listener context + * @param context the listener context to end + */ + protected void endContext(SQLListenerContext context) + { + listeners.end(context); + this.context = null; + } + + protected SQLBindings createBindings(QueryMetadata metadata, SQLSerializer serializer) { String queryString = serializer.toString(); ImmutableList.Builder args = ImmutableList.builder(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index a6b1494ec5..eb98cf5e15 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -34,6 +34,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; + /** * SQLDeleteClause defines a DELETE clause * @@ -110,39 +112,62 @@ public SQLDeleteClause addBatch() { } private PreparedStatement createStatement() throws SQLException{ + listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeDelete(metadata, entity); queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); + context = newContext(context).with(queryString).build(); + listeners.rendered(context); + + listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + return stmt; } private Collection createStatements() throws SQLException { + listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeDelete(batches.get(0), entity); queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); + context = newContext(context).with(queryString).build(); + listeners.rendered(context); Map stmts = Maps.newHashMap(); // add first batch + listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); stmts.put(queryString, stmt); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + // add other batches for (int i = 1; i < batches.size(); i++) { + listeners.preRender(context); serializer = createSerializer(); serializer.serializeDelete(batches.get(i), entity); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + stmt = stmts.get(serializer.toString()); if (stmt == null) { + listeners.prePrepare(context); stmt = connection.prepareStatement(serializer.toString()); stmts.put(serializer.toString(), stmt); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); @@ -153,19 +178,29 @@ private Collection createStatements() throws SQLException { @Override public long execute() { + context = startContext(connection, metadata, entity); PreparedStatement stmt = null; Collection stmts = null; try { if (batches.isEmpty()) { stmt = createStatement(); listeners.notifyDelete(entity, metadata); - return stmt.executeUpdate(); + + listeners.preExecute(context); + int rc = stmt.executeUpdate(); + listeners.executed(context); + return rc; } else { stmts = createStatements(); listeners.notifyDeletes(entity, batches); - return executeBatch(stmts); + + listeners.preExecute(context); + long rc = executeBatch(stmts); + listeners.executed(context); + return rc; } } catch (SQLException e) { + context = onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { @@ -174,6 +209,7 @@ public long execute() { if (stmts != null) { close(stmts); } + endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index b2a4595432..317bedce42 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -32,6 +32,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; + /** * SQLInsertClause defines an INSERT INTO clause * @@ -214,6 +216,7 @@ private List executeWithKeys(Class type, @Nullable Path path) { } private PreparedStatement createStatement(boolean withKeys) throws SQLException { + listeners.preRender(context); SQLSerializer serializer = createSerializer(); if (subQueryBuilder != null) { subQuery = subQueryBuilder.list(values.toArray(new Expression[values.size()])); @@ -221,10 +224,14 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException } serializer.serializeInsert(metadata, entity, columns, values, subQuery); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); return prepareStatementAndSetParameters(serializer, withKeys); } private Collection createStatements(boolean withKeys) throws SQLException { + listeners.preRender(context); + if (subQueryBuilder != null) { subQuery = subQueryBuilder.list(values.toArray(new Expression[values.size()])); values.clear(); @@ -239,13 +246,20 @@ private Collection createStatements(boolean withKeys) throws PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); stmt.addBatch(); stmts.put(serializer.toString(), stmt); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); // add other batches for (int i = 1; i < batches.size(); i++) { SQLInsertBatch batch = batches.get(i); + + listeners.preRender(context); serializer = createSerializer(); serializer.serializeInsert(metadata, entity, batch.getColumns(), batch.getValues(), batch.getSubQuery()); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + stmt = stmts.get(serializer.toString()); if (stmt == null) { stmt = prepareStatementAndSetParameters(serializer, withKeys); @@ -262,6 +276,8 @@ private Collection createStatements(boolean withKeys) throws private PreparedStatement prepareStatementAndSetParameters(SQLSerializer serializer, boolean withKeys) throws SQLException { + listeners.prePrepare(context); + queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); @@ -283,6 +299,9 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + + context = newContext(context).with(stmt).build(); + listeners.prepared(context); return stmt; } @@ -292,17 +311,25 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali * @return */ public ResultSet executeWithKeys() { + context = startContext(connection, metadata, entity); try { PreparedStatement stmt = null; Collection stmts = null; if (batches.isEmpty()) { stmt = createStatement(true); listeners.notifyInsert(entity, metadata, columns, values, subQuery); + + listeners.preExecute(context); stmt.executeUpdate(); + listeners.preExecute(context); } else { stmts = createStatements(true); + listeners.notifyInserts(entity, metadata, batches); + + listeners.preExecute(context); stmt.executeBatch(); + listeners.executed(context); } if (stmts != null && stmts.size() > 1) { throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); @@ -320,25 +347,38 @@ public void close() throws SQLException { } }; } catch (SQLException e) { + context = onException(context,e); throw configuration.translate(queryString, constants, e); + } finally { + endContext(context); } } @Override public long execute() { + context = startContext(connection,metadata,entity); PreparedStatement stmt = null; Collection stmts = null; try { if (batches.isEmpty()) { stmt = createStatement(false); listeners.notifyInsert(entity, metadata, columns, values, subQuery); - return stmt.executeUpdate(); + + listeners.preExecute(context); + int rc = stmt.executeUpdate(); + listeners.executed(context); + return rc; } else { stmts = createStatements(false); listeners.notifyInserts(entity, metadata, batches); - return executeBatch(stmts); + + listeners.preExecute(context); + long rc = executeBatch(stmts); + listeners.executed(context); + return rc; } } catch (SQLException e) { + context = onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { @@ -347,6 +387,7 @@ public long execute() { if (stmts != null) { close(stmts); } + endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 0b3f82e53e..3a5e99d209 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -32,6 +32,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.mysema.query.sql.SQLListenerContextBuilder.*; + /** * SQLMergeClause defines an MERGE INTO clause * @@ -201,6 +203,7 @@ private List executeWithKeys(Class type, @Nullable Path path) { * @return */ public ResultSet executeWithKeys() { + context = startContext(connection, metadata, entity); try { if (configuration.getTemplates().isNativeMerge()) { PreparedStatement stmt = null; @@ -208,11 +211,17 @@ public ResultSet executeWithKeys() { if (batches.isEmpty()) { stmt = createStatement(true); listeners.notifyMerge(entity, metadata, keys, columns, values, subQuery); + + listeners.preExecute(context); stmt.executeUpdate(); + listeners.executed(context); } else { stmts = createStatements(true); listeners.notifyMerges(entity, metadata, batches); + + listeners.preExecute(context); stmt.executeBatch(); + listeners.executed(context); } if (stmts != null && stmts.size() > 1) { throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); @@ -245,7 +254,10 @@ public void close() throws SQLException { } } } catch (SQLException e) { + context = onException(context,e); throw configuration.translate(queryString, constants, e); + } finally { + endContext(context); } } @@ -314,15 +326,25 @@ private void populate(StoreClause clause) { } private PreparedStatement createStatement(boolean withKeys) throws SQLException { + listeners.preRender(context); SQLSerializer serializer = createSerializer(); PreparedStatement stmt = null; if (batches.isEmpty()) { serializer.serializeMerge(metadata, entity, keys, columns, values, subQuery); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + + listeners.prePrepare(context); stmt = prepareStatementAndSetParameters(serializer, withKeys); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); } else { serializer.serializeMerge(metadata, entity, batches.get(0).getKeys(), batches.get(0).getColumns(), batches.get(0).getValues(), batches.get(0).getSubQuery()); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + stmt = prepareStatementAndSetParameters(serializer, withKeys); // add first batch @@ -331,8 +353,12 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException // add other batches for (int i = 1; i < batches.size(); i++) { SQLMergeBatch batch = batches.get(i); + listeners.preRender(context); serializer = createSerializer(); serializer.serializeMerge(metadata, entity, batch.getKeys(), batch.getColumns(), batch.getValues(), batch.getSubQuery()); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); } @@ -344,10 +370,14 @@ private Collection createStatements(boolean withKeys) throws Map stmts = Maps.newHashMap(); // add first batch + listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeMerge(metadata, entity, batches.get(0).getKeys(), batches.get(0).getColumns(), batches.get(0).getValues(), batches.get(0).getSubQuery()); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); stmts.put(serializer.toString(), stmt); stmt.addBatch(); @@ -373,6 +403,8 @@ private Collection createStatements(boolean withKeys) throws private PreparedStatement prepareStatementAndSetParameters(SQLSerializer serializer, boolean withKeys) throws SQLException { + listeners.prePrepare(context); + queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); @@ -387,23 +419,36 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali stmt = connection.prepareStatement(queryString); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + return stmt; } private long executeNativeMerge() { + context = startContext(connection, metadata, entity); PreparedStatement stmt = null; Collection stmts = null; try { if (batches.isEmpty()) { stmt = createStatement(false); listeners.notifyMerge(entity, metadata, keys, columns, values, subQuery); - return stmt.executeUpdate(); + + listeners.preExecute(context); + int rc = stmt.executeUpdate(); + listeners.executed(context); + return rc; } else { stmts = createStatements(false); listeners.notifyMerges(entity, metadata, batches); - return executeBatch(stmts); + + listeners.preExecute(context); + long rc = executeBatch(stmts); + listeners.executed(context); + return rc; } } catch (SQLException e) { + context = onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { @@ -412,6 +457,7 @@ private long executeNativeMerge() { if (stmts != null) { close(stmts); } + endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index 76d77bd01c..d64f8846f5 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -31,6 +31,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; + /** * SQLUpdateClause defines a UPDATE clause * @@ -104,39 +106,61 @@ public SQLUpdateClause addBatch() { } private PreparedStatement createStatement() throws SQLException{ + listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeUpdate(metadata, entity, updates); queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); + context = newContext(context).with(queryString).build(); + listeners.prepared(context); + + listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + return stmt; } private Collection createStatements() throws SQLException { + listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeUpdate(batches.get(0).getMetadata(), entity, batches.get(0).getUpdates()); queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); + context = newContext(context).with(queryString).build(); + listeners.rendered(context); Map stmts = Maps.newHashMap(); // add first batch + listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); stmts.put(serializer.toString(), stmt); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); + // add other batches for (int i = 1; i < batches.size(); i++) { + listeners.preRender(context); serializer = createSerializer(); serializer.serializeUpdate(batches.get(i).getMetadata(), entity, batches.get(i).getUpdates()); + context = newContext(context).with(serializer.toString()).build(); + listeners.rendered(context); + stmt = stmts.get(serializer.toString()); if (stmt == null) { + listeners.prePrepare(context); stmt = connection.prepareStatement(serializer.toString()); stmts.put(serializer.toString(), stmt); + context = newContext(context).with(stmt).build(); + listeners.prepared(context); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); @@ -147,19 +171,30 @@ private Collection createStatements() throws SQLException { @Override public long execute() { + context = startContext(connection, metadata, entity); + PreparedStatement stmt = null; Collection stmts = null; try { if (batches.isEmpty()) { stmt = createStatement(); listeners.notifyUpdate(entity, metadata, updates); - return stmt.executeUpdate(); + + listeners.preExecute(context); + int rc = stmt.executeUpdate(); + listeners.executed(context); + return rc; } else { stmts = createStatements(); listeners.notifyUpdates(entity, batches); - return executeBatch(stmts); + + listeners.preExecute(context); + long rc = executeBatch(stmts); + listeners.executed(context); + return rc; } } catch (SQLException e) { + context = onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { @@ -168,6 +203,7 @@ public long execute() { if (stmts != null) { close(stmts); } + endContext(context); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index a2f75f96a3..8721364545 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -16,7 +16,6 @@ import java.util.List; import javax.annotation.Nullable; import java.sql.Connection; -import java.util.List; import com.mysema.query.sql.*; import com.mysema.query.sql.dml.SQLDeleteClause; @@ -94,44 +93,64 @@ protected void add(List list, T arg, Target... exclusions) { } protected SQLUpdateClause update(RelationalPath e) { - return new SQLUpdateClause(connection, configuration, e); + SQLUpdateClause sqlUpdateClause = new SQLUpdateClause(connection, configuration, e); + sqlUpdateClause.addListener(new TestLoggingListener()); + return sqlUpdateClause; } protected SQLInsertClause insert(RelationalPath e) { - return new SQLInsertClause(connection, configuration, e); + SQLInsertClause sqlInsertClause = new SQLInsertClause(connection, configuration, e); + sqlInsertClause.addListener(new TestLoggingListener()); + return sqlInsertClause; } protected SQLInsertClause insert(RelationalPath e, AbstractSQLSubQuery sq) { - return new SQLInsertClause(connection, configuration, e, sq); + SQLInsertClause sqlInsertClause = new SQLInsertClause(connection, configuration, e, sq); + sqlInsertClause.addListener(new TestLoggingListener()); + return sqlInsertClause; } protected SQLDeleteClause delete(RelationalPath e) { - return new SQLDeleteClause(connection, configuration, e); + SQLDeleteClause sqlDeleteClause = new SQLDeleteClause(connection, configuration, e); + sqlDeleteClause.addListener(new TestLoggingListener()); + return sqlDeleteClause; } protected SQLMergeClause merge(RelationalPath e) { - return new SQLMergeClause(connection, configuration, e); + SQLMergeClause sqlMergeClause = new SQLMergeClause(connection, configuration, e); + sqlMergeClause.addListener(new TestLoggingListener()); + return sqlMergeClause; } protected ExtendedSQLQuery extQuery() { - return new ExtendedSQLQuery(connection, configuration); + ExtendedSQLQuery extendedSQLQuery = new ExtendedSQLQuery(connection, configuration); + extendedSQLQuery.addListener(new TestLoggingListener()); + return extendedSQLQuery; } protected SQLInsertClause mysqlReplace(RelationalPath path) { - return new MySQLReplaceClause(connection, configuration, path); + MySQLReplaceClause mySQLReplaceClause = new MySQLReplaceClause(connection, configuration, path); + mySQLReplaceClause.addListener(new TestLoggingListener()); + return mySQLReplaceClause; } protected TestQuery query() { - return new TestQuery(connection, configuration); + TestQuery testQuery = new TestQuery(connection, configuration); + testQuery.addListener(new TestLoggingListener()); + return testQuery; } protected TeradataQuery teradataQuery() { - return new TeradataQuery(connection, configuration); + TeradataQuery teradataQuery = new TeradataQuery(connection, configuration); + teradataQuery.addListener(new TestLoggingListener()); + return teradataQuery; } protected TestQuery testQuery() { - return new TestQuery(connection, configuration, + TestQuery testQuery = new TestQuery(connection, configuration, new DefaultQueryMetadata().noValidate()); + testQuery.addListener(new TestLoggingListener()); + return testQuery; } protected SQLSubQuery sq() { diff --git a/querydsl-sql/src/test/java/com/mysema/query/QueryMutabilityTest.java b/querydsl-sql/src/test/java/com/mysema/query/QueryMutabilityTest.java index 13ad24ba85..40ef85e24a 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/QueryMutabilityTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/QueryMutabilityTest.java @@ -51,6 +51,7 @@ public void test() throws IOException, SecurityException, IllegalAccessException, InvocationTargetException { SQLQuery query = new SQLQuery(connection, new DerbyTemplates()); query.from(survey); + query.addListener(new TestLoggingListener()); new QueryMutability(query).test(survey.id, survey.name); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java b/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java index 2ff8c39cfc..b1089fbbaa 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java @@ -4,6 +4,8 @@ import static org.easymock.EasyMock.replay; import static org.easymock.EasyMock.verify; +import com.mysema.query.sql.SQLDetailedListener; +import com.mysema.query.sql.SQLListenerContext; import org.junit.Test; import com.mysema.query.sql.SQLListener; @@ -38,4 +40,31 @@ public void NotifyQuery_Parent() { verify(listener); } + + @Test + public void NotifyQuery_DetailedListener_start() { + SQLListenerContext sqlListenerContext = createMock(SQLListenerContext.class); + SQLDetailedListener listenerParent = createMock(SQLDetailedListener.class); + SQLDetailedListener listener1 = createMock(SQLDetailedListener.class); + SQLDetailedListener listener2 = createMock(SQLDetailedListener.class); + + listenerParent.start(sqlListenerContext); + replay(listenerParent); + + listener1.start(sqlListenerContext); + replay(listener1); + + listener2.start(sqlListenerContext); + replay(listener2); + + + SQLListeners listeners = new SQLListeners(listenerParent); + listeners.add(listener1); + listeners.add(listener2); + + listeners.start(sqlListenerContext); + verify(listenerParent); + verify(listener1); + verify(listener2); + } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/TestLoggingListener.java b/querydsl-sql/src/test/java/com/mysema/query/TestLoggingListener.java new file mode 100644 index 0000000000..5babd5d9c3 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/TestLoggingListener.java @@ -0,0 +1,147 @@ +package com.mysema.query; + +import com.mysema.commons.lang.Pair; +import com.mysema.query.sql.SQLDetailedListener; +import com.mysema.query.sql.RelationalPath; +import com.mysema.query.sql.SQLListenerContext; +import com.mysema.query.sql.dml.SQLInsertBatch; +import com.mysema.query.sql.dml.SQLMergeBatch; +import com.mysema.query.sql.dml.SQLUpdateBatch; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Path; +import com.mysema.query.types.SubQueryExpression; + +import java.util.List; + +import static java.lang.String.format; + +/** + */ +public class TestLoggingListener implements SQLDetailedListener +{ + private static boolean enabled = false; + + /** + * Called to enable logging in tests + */ + public static void enable() + { + enabled = true; + } + + /** + * Called to disable logging in tests + */ + public static void disable() + { + enabled = false; + } + + @Override + public void start(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\n\tstart %s", context)); + } + + @Override + public void preRender(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\tpreRender %s", context)); + } + + @Override + public void rendered(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\t\trendered %s", context)); + } + + @Override + public void prePrepare(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\tprePrepare %s", context)); + } + + @Override + public void prepared(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\t\tprepared %s", context)); + } + + @Override + public void preExecute(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\tpreExecute %s", context)); + } + + @Override + public void executed(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\t\texecuted %s", context)); + } + + @Override + public void exception(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\t\texception %s", context)); + } + + @Override + public void end(final SQLListenerContext context) + { + if (enabled) System.out.println(format("\tend %s\n\n", context)); + } + + @Override + public void notifyQuery(final QueryMetadata md) + { + if (enabled) System.out.println(format("\t\t\tnotifyQuery %s", md)); + } + + @Override + public void notifyDelete(final RelationalPath entity, final QueryMetadata md) + { + if (enabled) System.out.println(format("\t\t\tnotifyDelete %s", entity)); + } + + @Override + public void notifyDeletes(final RelationalPath entity, final List batches) + { + if (enabled) System.out.println(format("\t\t\tnotifyDeletes %s", entity)); + } + + @Override + public void notifyMerge(final RelationalPath entity, final QueryMetadata md, final List> keys, final List> columns, final List> values, final SubQueryExpression subQuery) + { + if (enabled) System.out.println(format("\t\t\tnotifyMerge %s", entity)); + } + + @Override + public void notifyMerges(final RelationalPath entity, final QueryMetadata md, final List batches) + { + if (enabled) System.out.println(format("\t\t\tnotifyMerges %s", entity)); + } + + @Override + public void notifyInsert(final RelationalPath entity, final QueryMetadata md, final List> columns, final List> values, final SubQueryExpression subQuery) + { + if (enabled) System.out.println(format("\t\t\tnotifyInsert %s", entity)); + } + + @Override + public void notifyInserts(final RelationalPath entity, final QueryMetadata md, final List batches) + { + if (enabled) System.out.println(format("\t\t\tnotifyInserts %s", entity)); + } + + @Override + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) + { + if (enabled) System.out.println(format("\t\t\tnotifyUpdate %s", entity)); + } + + @Override + public void notifyUpdates(final RelationalPath entity, final List batches) + { + if (enabled) System.out.println(format("\t\t\tnotifyUpdates %s", entity)); + } +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java index 611c8fe0f7..65b254f691 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java @@ -1,5 +1,6 @@ package com.mysema.query.suites; +import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -32,6 +33,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { + TestLoggingListener.enable(); Connections.initDerby(); Connections.setTemplates(DerbyTemplates.builder().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java index a88f0cfbe9..3e2e5a64ef 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java @@ -1,5 +1,6 @@ package com.mysema.query.suites; +import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -32,6 +33,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { + TestLoggingListener.enable(); Connections.initH2(); Connections.setTemplates(H2Templates.builder().quote().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java index aec392bc4e..8b6d006e56 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java @@ -1,5 +1,6 @@ package com.mysema.query.suites; +import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -32,6 +33,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { + TestLoggingListener.enable(); Connections.initH2(); Connections.setTemplates(H2Templates.builder().printSchema().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java index f8294c068d..433818e20b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java @@ -1,5 +1,6 @@ package com.mysema.query.suites; +import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -32,6 +33,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { + TestLoggingListener.enable(); Connections.initHSQL(); Connections.setTemplates(HSQLDBTemplates.builder().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java index d479f9c144..f618083e5f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java @@ -1,5 +1,6 @@ package com.mysema.query.suites; +import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -32,6 +33,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { + TestLoggingListener.enable(); Connections.initSQLite(); Connections.setTemplates(SQLiteTemplates.builder().newLineToSingleSpace().build()); } From 3b7bcd3a84443aec092bff25fcb60be584a395d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 5 Aug 2014 19:21:30 +0300 Subject: [PATCH 0309/1968] Add static geo functions --- .../query/spatial/GeometryExpressions.java | 186 ++++++++++++++++++ .../com/mysema/query/spatial/SpatialOps.java | 15 ++ .../sql/spatial/SpatialTemplatesSupport.java | 16 ++ .../java/com/mysema/query/SpatialBase.java | 30 +++ 4 files changed, 247 insertions(+) create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/GeometryExpressions.java diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/GeometryExpressions.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/GeometryExpressions.java new file mode 100644 index 0000000000..115163cdd4 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/GeometryExpressions.java @@ -0,0 +1,186 @@ +package com.mysema.query.spatial; + +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.*; +import org.geolatte.geom.Geometry; +import org.geolatte.geom.GeometryCollection; + +/** + * GeometryExpressions contains static functions for GEO operations + */ +public final class GeometryExpressions { + + /** + * Return a specified ST_Geometry value from Extended Well-Known Text representation (EWKT). + * + * @param expr + * @return + */ + public static StringExpression asEWKT(GeometryExpression expr) { + return StringOperation.create(SpatialOps.AS_EWKT, expr); + } + + /** + * Return a specified ST_Geometry value from Well-Known Text representation (WKT). + * + * @param text + * @return + */ + public static GeometryExpression fromText(String text) { + return GeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, ConstantImpl.create(text)); + } + + /** + * Return a specified ST_Geometry value from Well-Known Text representation (WKT). + * + * @param text + * @return + */ + public static GeometryExpression fromText(Expression text) { + return GeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, text); + } + + /** + * Sets the SRID on a geometry to a particular integer value. + * + * @param expr + * @param srid + * @param + * @return + */ + public static GeometryExpression setSRID(Expression expr, int srid) { + return (GeometryExpression)GeometryOperation.create(expr.getType(), SpatialOps.SET_SRID, + expr, ConstantImpl.create(srid)); + } + + /** + * Returns X minima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression xmin(GeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.XMIN, expr); + } + + /** + * Returns X maxima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression xmax(GeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.XMAX, expr); + } + + /** + * Returns Y minima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression ymin(GeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.YMIN, expr); + } + + /** + * Returns Y maxima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression ymax(GeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.YMAX, expr); + } + + /** + * Returns true if the geometries are within the specified distance of one another. + * For geometry units are in those of spatial reference and For geography units are in meters. + * + * @param expr1 + * @param expr2 + * @param distance + * @return + */ + public static BooleanExpression dwithin(Expression expr1, + Expression expr2, Expression distance) { + return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, distance); + } + + /** + * Returns true if the geometries are within the specified distance of one another. + * For geometry units are in those of spatial reference and For geography units are in meters. + * + * @param expr1 + * @param expr2 + * @param distance + * @return + */ + public static BooleanExpression dwithin(Expression expr1, + Expression expr2, double distance) { + return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, ConstantImpl.create(distance)); + } + + /** + * Returns the bounding box that bounds rows of geometries. + * + * @param collection + * @return + */ + public static GeometryExpression extent(Expression collection) { + return GeometryOperation.create(Geometry.class, SpatialOps.EXTENT, collection); + } + + /** + * Return a specified ST_Geometry value from a collection of other geometries. + * + * @param collection + * @return + */ + public static GeometryExpression collect(Expression collection) { + return GeometryOperation.create(Geometry.class, SpatialOps.COLLECT, collection); + } + + /** + * Return a specified ST_Geometry value from a collection of other geometries. + * + * @param expr1 + * @param expr2 + * @return + */ + public static GeometryExpression collect(Expression expr1, Expression expr2) { + return GeometryOperation.create(Geometry.class, SpatialOps.COLLECT2, expr1, expr2); + } + + /** + * Translates the geometry to a new location using the numeric parameters as offsets. + * + * @param expr + * @param deltax + * @param deltay + * @param + * @return + */ + public static GeometryExpression translate(Expression expr, float deltax, float deltay) { + return (GeometryExpression)GeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE, + expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay)); + } + + /** + * Translates the geometry to a new location using the numeric parameters as offsets. + * + * @param expr + * @param deltax + * @param deltay + * @param deltaz + * @param + * @return + */ + public static GeometryExpression translate(Expression expr, float deltax, float deltay, float deltaz) { + return (GeometryExpression)GeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE2, + expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay), ConstantImpl.create(deltaz)); + } + + private GeometryExpressions() {} +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/SpatialOps.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/SpatialOps.java index a2ab2afeaf..454710f6fe 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/SpatialOps.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/SpatialOps.java @@ -106,4 +106,19 @@ public final class SpatialOps { // MultiCurve public static final Operator IS_CLOSED = new OperatorImpl(NS, "IS_CLOSED"); + // Extensions + public static final Operator AS_EWKT = new OperatorImpl(NS, "AS_EWKT"); + public static final Operator GEOM_FROM_TEXT = new OperatorImpl(NS, "GEOM_FROM_TEXT"); + public static final Operator SET_SRID = new OperatorImpl(NS, "SET_SRID"); + public static final Operator XMIN = new OperatorImpl(NS, "XMIN"); + public static final Operator XMAX = new OperatorImpl(NS, "XMAX"); + public static final Operator YMIN = new OperatorImpl(NS, "YMIN"); + public static final Operator YMAX = new OperatorImpl(NS, "YMAX"); + public static final Operator DWITHIN = new OperatorImpl(NS, "DWITHIN"); + public static final Operator EXTENT = new OperatorImpl(NS, "EXTENT"); + public static final Operator COLLECT = new OperatorImpl(NS, "COLLECT"); + public static final Operator COLLECT2 = new OperatorImpl(NS, "COLLECT2"); + public static final Operator TRANSLATE = new OperatorImpl(NS, "TRANSLATE"); + public static final Operator TRANSLATE2 = new OperatorImpl(NS, "TRANSLATE2"); + } \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SpatialTemplatesSupport.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SpatialTemplatesSupport.java index a3e5d43a49..bd70a54720 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SpatialTemplatesSupport.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SpatialTemplatesSupport.java @@ -113,6 +113,22 @@ public static Map, String> getSpatialOps(String prefix, boolean asFu ops.put(SpatialOps.Y2, createSpatial(prefix + "Y", 2, asFunction)); ops.put(SpatialOps.Z, createSpatial(prefix + "Z", 1, asFunction)); ops.put(SpatialOps.Z2, createSpatial(prefix + "Z", 2, asFunction)); + + // extensions + ops.put(SpatialOps.AS_EWKT, createSpatial(prefix + "AsEWKT", 1, asFunction)); + ops.put(SpatialOps.GEOM_FROM_TEXT, createSpatial(prefix + "GeomFromText", 1, asFunction)); + ops.put(SpatialOps.SET_SRID, createSpatial(prefix + "SetSRID", 2, asFunction)); + ops.put(SpatialOps.XMIN, createSpatial(prefix + "XMin", 1, asFunction)); + ops.put(SpatialOps.XMAX, createSpatial(prefix + "XMax", 1, asFunction)); + ops.put(SpatialOps.YMIN, createSpatial(prefix + "YMin", 1, asFunction)); + ops.put(SpatialOps.YMAX, createSpatial(prefix + "YMax", 1, asFunction)); + ops.put(SpatialOps.DWITHIN, createSpatial(prefix + "DWithin", 3, asFunction)); + ops.put(SpatialOps.EXTENT, createSpatial(prefix + "Extent", 1, asFunction)); + ops.put(SpatialOps.COLLECT, createSpatial(prefix + "Collect", 1, asFunction)); + ops.put(SpatialOps.COLLECT2, createSpatial(prefix + "Collect", 2, asFunction)); + ops.put(SpatialOps.TRANSLATE, createSpatial(prefix + "Translate", 3, asFunction)); + ops.put(SpatialOps.TRANSLATE2, createSpatial(prefix + "Translate", 4, asFunction)); + return ops; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SpatialBase.java b/querydsl-sql/src/test/java/com/mysema/query/SpatialBase.java index 5661a14f05..5a356ed823 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SpatialBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SpatialBase.java @@ -3,6 +3,8 @@ import java.util.List; import com.google.common.collect.Lists; +import com.mysema.query.spatial.GeometryExpression; +import com.mysema.query.spatial.GeometryExpressions; import com.mysema.query.spatial.PointExpression; import com.mysema.query.spatial.path.*; import com.mysema.query.sql.spatial.QShapes; @@ -415,5 +417,33 @@ public void MultiPolygon_Methods() { } } + @Test + @IncludeIn(Target.POSTGRES) + public void Extensions() { + List> expressions = Lists.newArrayList(); + GeometryExpression expr1 = shapes.geometry; + + expressions.add(GeometryExpressions.asEWKT(expr1)); + expressions.add(GeometryExpressions.fromText(expr1.asText())); + expressions.add(GeometryExpressions.setSRID(expr1, 4326)); + expressions.add(GeometryExpressions.xmin(expr1)); + expressions.add(GeometryExpressions.xmax(expr1)); + expressions.add(GeometryExpressions.ymin(expr1)); + expressions.add(GeometryExpressions.ymax(expr1)); + expressions.add(GeometryExpressions.dwithin(expr1, expr1, 1)); + expressions.add(GeometryExpressions.collect(expr1, expr1)); + expressions.add(GeometryExpressions.translate(expr1, 1, 1)); + + for (Expression expr : expressions) { + boolean logged = false; + for (Object row : withPoints().list(expr)) { + if (row == null && !logged) { + System.err.println(expr.toString()); + logged = true; + } + } + } + } + } From bc86c7fe20ec1255f3f7e53cdc8fdfd988be2eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 6 Aug 2014 08:16:21 +0300 Subject: [PATCH 0310/1968] Fix osgi exports --- querydsl-root/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index f7552c5686..ef7ae3bf6d 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -186,6 +186,7 @@ ${osgi.import.package} + com.mysema.query.* From 7e65c0662e2358c76cdc55d5353a995547bcda21 Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Wed, 6 Aug 2014 21:38:51 +1000 Subject: [PATCH 0311/1968] Moved to JavaBeans style interface on context object --- .../mysema/query/sql/SQLListenerContext.java | 18 +++++------ .../query/sql/SQLListenerContextBuilder.java | 30 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java index dbaef61019..5c8563edd6 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java @@ -14,53 +14,53 @@ public interface SQLListenerContext { /** - * The context map is a general purpose place that listeners can place objects. It allows listeners to pass context + * The context getMap is a general purpose place that listeners can place objects. It allows listeners to pass context * between themselves during callbacks. *

* This is never null but can be empty * - * @return the context map + * @return the context getMap */ - Map map(); + Map getMap(); /** * @return the underlying query metadata */ - QueryMetadata queryMetadata(); + QueryMetadata getMetadata(); /** * NOTE : This can be null depending on the stage of the query execution * * @return the underlying sql */ - String sql(); + String getSQL(); /** * NOTE : This can be null depending on the stage of the query execution * * @return the underlying entity affected */ - RelationalPath entity(); + RelationalPath getEntity(); /** * NOTE : This can be null depending on the stage of the query execution * * @return the underlying connection if there is one */ - Connection connection(); + Connection getConnection(); /** * NOTE : This can be null depending on whether an exception occurred * * @return the underlying exception that has happened during query execution */ - Exception exception(); + Exception getException(); /** * NOTE : This can be null depending on the stage of the query execution * * @return the underlying set of prepared statements */ - Collection preparedStatements(); + Collection getPreparedStatements(); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java index 7030fe3415..a1e663805c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java @@ -40,13 +40,13 @@ public static SQLListenerContextBuilder newContext(QueryMetadata md) public static SQLListenerContextBuilder newContext(SQLListenerContext context) { - return new SQLListenerContextBuilder(context.queryMetadata()) - .with(context.map()) - .with(context.connection()) - .with(context.entity()) - .with(context.exception()) - .with(context.preparedStatements()) - .with(context.sql()) + return new SQLListenerContextBuilder(context.getMetadata()) + .with(context.getMap()) + .with(context.getConnection()) + .with(context.getEntity()) + .with(context.getException()) + .with(context.getPreparedStatements()) + .with(context.getSQL()) ; } @@ -109,43 +109,43 @@ public SQLListenerContext build() class SQLListenerContextImpl implements SQLListenerContext { @Override - public QueryMetadata queryMetadata() + public QueryMetadata getMetadata() { return md; } @Override - public RelationalPath entity() + public RelationalPath getEntity() { return entity; } @Override - public String sql() + public String getSQL() { return sql; } @Override - public Exception exception() + public Exception getException() { return exception; } @Override - public Connection connection() + public Connection getConnection() { return connection; } @Override - public Collection preparedStatements() + public Collection getPreparedStatements() { return preparedStatements; } @Override - public Map map() + public Map getMap() { return contextMap; } @@ -168,7 +168,7 @@ public String toString() private String nicerSql(final String sql) { - return "'" + (sql == null ? sql : sql.replace('\n', ' ')) + "'"; + return "'" + (sql == null ? null : sql.replace('\n', ' ')) + "'"; } } From 4f5f5dfc516b2e42251d5800bc5c0663d92544f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 6 Aug 2014 22:53:41 +0300 Subject: [PATCH 0312/1968] Flag full join methods as deprecated --- .../main/java/com/mysema/query/jpa/AbstractJPASubQuery.java | 6 ++++++ .../src/main/java/com/mysema/query/jpa/JPACommonQuery.java | 6 ++++++ .../src/main/java/com/mysema/query/jpa/JPAQueryBase.java | 6 ++++++ 3 files changed, 18 insertions(+) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPASubQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPASubQuery.java index b32254377e..3050bcb5b3 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPASubQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/AbstractJPASubQuery.java @@ -71,31 +71,37 @@ public Q from(EntityPath... o) { } @Override + @Deprecated public

Q fullJoin(CollectionExpression target) { return queryMixin.fullJoin(target); } @Override + @Deprecated public

Q fullJoin(CollectionExpression target, Path

alias) { return queryMixin.fullJoin(target, alias); } @Override + @Deprecated public

Q fullJoin(EntityPath

target) { return queryMixin.fullJoin(target); } @Override + @Deprecated public

Q fullJoin(EntityPath

target, Path

alias) { return queryMixin.fullJoin(target, alias); } @Override + @Deprecated public

Q fullJoin(MapExpression target) { return queryMixin.fullJoin(target); } @Override + @Deprecated public

Q fullJoin(MapExpression target, Path

alias) { return queryMixin.fullJoin(target, alias); } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACommonQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACommonQuery.java index 5f979d64e1..3e05a923f0 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACommonQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACommonQuery.java @@ -285,6 +285,7 @@ public interface JPACommonQuery> extends Query { * @param target * @return */ + @Deprecated

Q fullJoin(EntityPath

target); /** @@ -295,6 +296,7 @@ public interface JPACommonQuery> extends Query { * @param alias * @return */ + @Deprecated

Q fullJoin(EntityPath

target, Path

alias); /** @@ -305,6 +307,7 @@ public interface JPACommonQuery> extends Query { * @param target * @return */ + @Deprecated

Q fullJoin(CollectionExpression target); /** @@ -315,6 +318,7 @@ public interface JPACommonQuery> extends Query { * @param alias * @return */ + @Deprecated

Q fullJoin(CollectionExpression target, Path

alias); /** @@ -325,6 +329,7 @@ public interface JPACommonQuery> extends Query { * @param target * @return */ + @Deprecated

Q fullJoin(MapExpression target); /** @@ -335,6 +340,7 @@ public interface JPACommonQuery> extends Query { * @param alias * @return */ + @Deprecated

Q fullJoin(MapExpression target, Path

alias); /** diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryBase.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryBase.java index 323bf6aea8..136d7f4dec 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryBase.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryBase.java @@ -88,26 +88,32 @@ public Q from(EntityPath... args) { return queryMixin.from(args); } + @Deprecated public

Q fullJoin(CollectionExpression target) { return queryMixin.fullJoin(target); } + @Deprecated public

Q fullJoin(CollectionExpression target, Path

alias) { return queryMixin.fullJoin(target, alias); } + @Deprecated public

Q fullJoin(EntityPath

target) { return queryMixin.fullJoin(target); } + @Deprecated public

Q fullJoin(EntityPath

target, Path

alias) { return queryMixin.fullJoin(target, alias); } + @Deprecated public

Q fullJoin(MapExpression target) { return queryMixin.fullJoin(target); } + @Deprecated public

Q fullJoin(MapExpression target, Path

alias) { return queryMixin.fullJoin(target, alias); } From 2175c77d7bce5885b6ca0c2a075d101c1a874d77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 19:13:26 +0300 Subject: [PATCH 0313/1968] Remove JPA dependencies --- .../com/mysema/query/apt/jdo/JDOAnnotationProcessor.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java index 3e6674a6d6..bd42ffcd09 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java @@ -13,15 +13,14 @@ */ package com.mysema.query.apt.jdo; -import java.lang.annotation.Annotation; - import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.jdo.annotations.EmbeddedOnly; import javax.jdo.annotations.NotPersistent; import javax.jdo.annotations.PersistenceCapable; -import javax.persistence.Embedded; +import java.lang.annotation.Annotation; +import com.mysema.query.annotations.QueryEmbedded; import com.mysema.query.annotations.QueryEntities; import com.mysema.query.annotations.QuerySupertype; import com.mysema.query.apt.AbstractQuerydslProcessor; @@ -45,7 +44,7 @@ protected Configuration createConfiguration(RoundEnvironment roundEnv) { Class entity = PersistenceCapable.class; Class superType = QuerySupertype.class; Class embeddable = EmbeddedOnly.class; - Class embedded = Embedded.class; + Class embedded = QueryEmbedded.class; Class skip = NotPersistent.class; return new DefaultConfiguration(roundEnv, processingEnv.getOptions(), Keywords.JDO, entities, entity, superType, embeddable, embedded, skip); From ed2676721e91706374e6fe46f635bfc9f6cbf85e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 20:06:12 +0300 Subject: [PATCH 0314/1968] Fix any path handling --- .../com/mysema/query/support/QueryMixin.java | 39 ++++++++++++++----- .../com/mysema/query/AbstractJPATest.java | 5 +++ 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java index b53ad8597e..779a1af030 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryMixin.java @@ -13,6 +13,8 @@ */ package com.mysema.query.support; +import javax.annotation.Nullable; + import com.mysema.query.DefaultQueryMetadata; import com.mysema.query.JoinFlag; import com.mysema.query.JoinType; @@ -48,6 +50,8 @@ public class QueryMixin { private final boolean expandAnyPaths; + private ReplaceVisitor replaceVisitor; + private T self; public QueryMixin() { @@ -121,18 +125,35 @@ private

> P assertRoot(P p) { return p; } + private Path normalizePath(Path expr) { + Context context = new Context(); + Path replaced = (Path)expr.accept(CollectionAnyVisitor.DEFAULT, context); + if (!replaced.equals(expr)) { + for (int i = 0; i < context.paths.size(); i++) { + Path path = context.paths.get(i).getMetadata().getParent(); + Path replacement = context.replacements.get(i); + this.innerJoin(path, replacement); + } + return replaced; + } else { + return expr; + } + } + @SuppressWarnings("rawtypes") public Expression convert(Expression expr, boolean forOrder) { - if (expandAnyPaths && expr instanceof Path) { - Context context = new Context(); - Expression replaced = expr.accept(CollectionAnyVisitor.DEFAULT, context); - if (!replaced.equals(expr)) { - for (int i = 0; i < context.paths.size(); i++) { - Path path = context.paths.get(i).getMetadata().getParent(); - Path replacement = context.replacements.get(i); - this.innerJoin(path, replacement); + if (expandAnyPaths) { + if (expr instanceof Path) { + expr = (Expression)normalizePath((Path)expr); + } else if (expr != null) { + if (replaceVisitor == null) { + replaceVisitor = new ReplaceVisitor() { + public Expression visit(Path expr, @Nullable Void context) { + return normalizePath(expr); + } + }; } - return replaced; + expr = (Expression)expr.accept(replaceVisitor, null); } } if (expr instanceof ProjectionRole) { diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index d14bf1b3fa..dc968a4ddb 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -240,6 +240,11 @@ public void Any_In_Projection2() { assertFalse(query().from(cat).list(cat.kittens.any().name).isEmpty()); } + @Test + public void Any_In_Projection3() { + assertFalse(query().from(cat).list(cat.kittens.any().name, cat.kittens.any().bodyWeight).isEmpty()); + } + @Test public void Any_In1() { //select cat from Cat cat where exists ( From afb19d00869afc934b8273451e85701223bfd14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 21:59:14 +0300 Subject: [PATCH 0315/1968] Bump version --- querydsl-core/pom.xml | 6 +++--- querydsl-sql/pom.xml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 7f5cb1c160..e602dea6a5 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -138,6 +138,6 @@ - 1.11 + 1.13 - + diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 2c8dd34043..3293112b23 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -16,7 +16,7 @@ jar - 1.11 + 1.13 @@ -314,4 +314,4 @@ - + From d14e9a11a2262fc95ccd322db607c7500a1c7504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 22:09:31 +0300 Subject: [PATCH 0316/1968] Add exclusions --- querydsl-root/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index d4556c8726..d0e667a5a1 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -212,6 +212,7 @@ com/mysema/query/SearchResults + com/mysema/query/apt/TypeExtractor BACKWARD_COMPATIBLE_USER true From 62ab0d7c80ccf346962f28b2aceeec9d3d0b7c69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 23:24:40 +0300 Subject: [PATCH 0317/1968] Fix tests --- .../com/mysema/query/sql/RelationalPathUtils.java | 10 +++------- .../query/sql/teradata/SetQueryBandClause.java | 2 +- .../java/com/mysema/query/sql/SQLSubQueryTest.java | 8 ++++---- .../com/mysema/query/sql/SQLTypeMappingTest.java | 5 ++--- .../query/sql/teradata/SetQueryBandClauseTest.java | 12 +++++------- 5 files changed, 15 insertions(+), 22 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathUtils.java b/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathUtils.java index 7a81a09f13..7c3103fc82 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathUtils.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathUtils.java @@ -13,14 +13,10 @@ */ package com.mysema.query.sql; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.Map; -import com.mysema.query.types.Expression; -import com.mysema.query.types.FactoryExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.Projections; -import com.mysema.query.types.QBean; +import com.mysema.query.types.*; /** * RelationalPathUtils provides static utility methods for {@link RelationalPath} instances @@ -51,7 +47,7 @@ private static FactoryExpression createConstructorProjection(RelationalPa } private static FactoryExpression createBeanProjection(RelationalPath path) { - Map> bindings = new HashMap>(); + Map> bindings = new LinkedHashMap>(); for (Path column : path.getColumns()) { bindings.put(column.getMetadata().getName(), column); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java index fecc6dface..dc5aedc745 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/teradata/SetQueryBandClause.java @@ -38,7 +38,7 @@ public class SetQueryBandClause extends AbstractSQLClause { private boolean forSession = true; - private final Map values = Maps.newHashMap(); + private final Map values = Maps.newLinkedHashMap(); private transient String queryString; diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSubQueryTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSubQueryTest.java index 552e398161..3abd567595 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSubQueryTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSubQueryTest.java @@ -71,10 +71,10 @@ public void List_Entity() { SQLSerializer serializer = new SQLSerializer(new Configuration(SQLTemplates.DEFAULT)); serializer.handle(expr); - assertEquals("(select EMPLOYEE.ID, EMPLOYEE.SUPERIOR_ID, EMPLOYEE.TIMEFIELD, EMPLOYEE.LASTNAME, EMPLOYEE.DATEFIELD, EMPLOYEE.SALARY, EMPLOYEE.FIRSTNAME, employee2.ID\n" + - "from EMPLOYEE EMPLOYEE\n" + - "inner join EMPLOYEE employee2\n" + - "on EMPLOYEE.SUPERIOR_ID = employee2.ID)", serializer.toString()); + assertEquals("(select EMPLOYEE.ID, EMPLOYEE.FIRSTNAME, EMPLOYEE.LASTNAME, EMPLOYEE.SALARY, EMPLOYEE.DATEFIELD, EMPLOYEE.TIMEFIELD, EMPLOYEE.SUPERIOR_ID, employee2.ID\n" + + "from EMPLOYEE EMPLOYEE\n" + + "inner join EMPLOYEE employee2\n" + + "on EMPLOYEE.SUPERIOR_ID = employee2.ID)", serializer.toString()); } @Test diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTypeMappingTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTypeMappingTest.java index 50442f9efd..de49ff73fb 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTypeMappingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTypeMappingTest.java @@ -13,11 +13,10 @@ */ package com.mysema.query.sql; -import static org.junit.Assert.fail; - import java.lang.reflect.Field; import org.junit.Test; +import static org.junit.Assert.fail; public class SQLTypeMappingTest { @@ -28,7 +27,7 @@ public void Get() throws IllegalArgumentException, IllegalAccessException { if (field.getType().equals(int.class)) { int val = field.getInt(null); if (mapping.get(val,0,0) == null) { - fail("Got no value for " + field.getName()); + fail("Got no value for " + field.getName() + " (" + val + ")"); } } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/teradata/SetQueryBandClauseTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/teradata/SetQueryBandClauseTest.java index d701ff8960..1e5d37f0da 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/teradata/SetQueryBandClauseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/teradata/SetQueryBandClauseTest.java @@ -1,12 +1,10 @@ package com.mysema.query.sql.teradata; -import static org.junit.Assert.assertEquals; - -import org.junit.Before; -import org.junit.Test; - import com.mysema.query.sql.Configuration; import com.mysema.query.sql.SQLTemplates; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class SetQueryBandClauseTest { @@ -40,7 +38,7 @@ public void ForTransaction() { clause.forTransaction(); clause.set("a", "b"); clause.set("b", "c"); - assertEquals("set query_band='b=c;a=b;' for transaction", clause.toString()); + assertEquals("set query_band='a=b;b=c;' for transaction", clause.toString()); } @Test @@ -48,7 +46,7 @@ public void GetSQL() { clause.forTransaction(); clause.set("a", "b"); clause.set("b", "c"); - assertEquals("set query_band='b=c;a=b;' for transaction", clause.getSQL().get(0).getSQL()); + assertEquals("set query_band='a=b;b=c;' for transaction", clause.getSQL().get(0).getSQL()); } } From 326df415579013e544b25fe7458cde9dd10a4f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 23:37:45 +0300 Subject: [PATCH 0318/1968] Add REF_CURSOR mapping --- .../src/main/java/com/mysema/query/sql/JDBCTypeMapping.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java b/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java index c31dac07c3..3c863fb7fb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java @@ -39,6 +39,7 @@ public final class JDBCTypeMapping { static{ registerDefault(-101, Object.class); registerDefault(-102, java.sql.Timestamp.class); // Oracle: TIMESTAMP(6) WITH LOCAL TIME ZONE + registerDefault(2012, Object.class); // REF_CURSOR // BOOLEAN registerDefault(Types.BIT, Boolean.class); From 6b8fdc07a6a433a960e38587d5d82f50a72a1153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 8 Aug 2014 23:55:02 +0300 Subject: [PATCH 0319/1968] Add mappings --- .../src/main/java/com/mysema/query/sql/JDBCTypeMapping.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java b/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java index 3c863fb7fb..25f529a562 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/JDBCTypeMapping.java @@ -17,6 +17,8 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Blob; +import java.sql.Time; +import java.sql.Timestamp; import java.sql.Types; import java.util.HashMap; import java.util.Map; @@ -40,6 +42,8 @@ public final class JDBCTypeMapping { registerDefault(-101, Object.class); registerDefault(-102, java.sql.Timestamp.class); // Oracle: TIMESTAMP(6) WITH LOCAL TIME ZONE registerDefault(2012, Object.class); // REF_CURSOR + registerDefault(2013, Time.class); // TIME_WITH_TIMEZONE + registerDefault(2014, Timestamp.class); // TIMESTAMP_WIH_TIMEZONE // BOOLEAN registerDefault(Types.BIT, Boolean.class); From e742cc0fd9a11b0ed7f6a2d2665334901bc50f89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 9 Aug 2014 09:59:12 +0300 Subject: [PATCH 0320/1968] Add schema --- querydsl-sql/src/test/java/com/mysema/query/sql/QPerson.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/QPerson.java b/querydsl-sql/src/test/java/com/mysema/query/sql/QPerson.java index dc5b363cce..1a544ee5a2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/QPerson.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/QPerson.java @@ -38,7 +38,7 @@ public class QPerson extends RelationalPathBase { public final PrimaryKey sysIdx118 = createPrimaryKey(id); public QPerson(String variable) { - super(QPerson.class, PathMetadataFactory.forVariable(variable), null, "PERSON"); + super(QPerson.class, PathMetadataFactory.forVariable(variable), "", "PERSON"); addMetadata(); } From 1dfb1cf6cb3c437aabd85bc60e00cdfe575e4c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 9 Aug 2014 10:37:15 +0300 Subject: [PATCH 0321/1968] Set schema --- .../query/jdo/test/domain/sql/SBook.java | 9 ++++---- .../query/jdo/test/domain/sql/SProduct.java | 6 +++--- .../query/jdo/test/domain/sql/SStore.java | 9 ++++---- .../jdo/test/domain/sql/SStoreProducts.java | 9 ++++---- .../test/domain/sql/SStoreProductsbyname.java | 9 ++++---- .../mysema/query/jpa/domain/sql/SAccount.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SAnimal.java | 16 +++++++------- .../query/jpa/domain/sql/SAuditlog.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SAuthor.java | 17 +++++++-------- .../com/mysema/query/jpa/domain/sql/SBar.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SBook.java | 17 +++++++-------- .../query/jpa/domain/sql/SBookBookmarks.java | 20 ++++++++---------- .../mysema/query/jpa/domain/sql/SBookid.java | 16 +++++++------- .../query/jpa/domain/sql/SBookversion.java | 20 ++++++++---------- .../query/jpa/domain/sql/SCalendar.java | 11 +++++----- .../jpa/domain/sql/SCalendarHolidays.java | 18 ++++++++-------- .../mysema/query/jpa/domain/sql/SCatalog.java | 17 +++++++-------- .../query/jpa/domain/sql/SCatalog_price.java | 16 +++++++------- .../query/jpa/domain/sql/SCategory.java | 11 +++++----- .../jpa/domain/sql/SCategory_category.java | 11 +++++----- .../domain/sql/SCategory_categoryprop.java | 16 +++++++------- .../query/jpa/domain/sql/SCategoryprop.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SChild2.java | 20 +++++++----------- .../mysema/query/jpa/domain/sql/SCompany.java | 17 +++++++-------- .../jpa/domain/sql/SCompany_department.java | 16 +++++++------- .../query/jpa/domain/sql/SCustomer.java | 16 +++++++------- .../query/jpa/domain/sql/SDateTest.java | 20 +++++++----------- .../query/jpa/domain/sql/SDepartment.java | 17 +++++++-------- .../jpa/domain/sql/SDepartment_employee.java | 16 +++++++------- .../query/jpa/domain/sql/SDocument.java | 18 ++++++++-------- .../query/jpa/domain/sql/SDocument2.java | 18 ++++++++-------- .../query/jpa/domain/sql/SDocumentprop.java | 17 +++++++-------- .../query/jpa/domain/sql/SEmployee.java | 11 +++++----- .../jpa/domain/sql/SEmployeeJobFunctions.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SEntity1.java | 21 +++++++------------ .../query/jpa/domain/sql/SEviltype.java | 16 +++++++------- .../com/mysema/query/jpa/domain/sql/SFoo.java | 18 ++++++++-------- .../query/jpa/domain/sql/SFooNames.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SFormula.java | 16 +++++++------- .../query/jpa/domain/sql/SGeneratedKeys.java | 21 +++++++------------ .../query/jpa/domain/sql/SHumanHairs.java | 20 +++++++----------- .../jpa/domain/sql/SInheritedproperties.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SItem.java | 17 +++++++-------- .../jpa/domain/sql/SItem_statuschange.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SKittens.java | 16 +++++++------- .../query/jpa/domain/sql/SKittensSet.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SLibrary.java | 16 +++++++------- .../query/jpa/domain/sql/SLineItems.java | 16 +++++++------- .../query/jpa/domain/sql/SLocation.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SMammal.java | 21 +++++++------------ .../mysema/query/jpa/domain/sql/SName.java | 17 +++++++-------- .../query/jpa/domain/sql/SNameListNames.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SNamed.java | 17 +++++++-------- .../query/jpa/domain/sql/SNamelist.java | 16 +++++++------- .../query/jpa/domain/sql/SNationality.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SNumeric.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SOrder.java | 17 +++++++-------- .../sql/SOrderDeliveredItemIndices.java | 16 +++++++------- .../query/jpa/domain/sql/SOrder_item.java | 16 +++++++------- .../query/jpa/domain/sql/SParameter.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SParent.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SParent2.java | 20 +++++++----------- .../mysema/query/jpa/domain/sql/SPerson.java | 18 ++++++++-------- .../query/jpa/domain/sql/SPersonid.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SPlayer.java | 16 +++++++------- .../query/jpa/domain/sql/SPlayerScores.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SPrice.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SShapes.java | 21 +++++++------------ .../mysema/query/jpa/domain/sql/SShow.java | 16 +++++++------- .../query/jpa/domain/sql/SShowActs.java | 17 +++++++-------- .../query/jpa/domain/sql/SSimpletypes.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SStatus.java | 17 +++++++-------- .../query/jpa/domain/sql/SStatuschange.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SStore.java | 16 +++++++------- .../query/jpa/domain/sql/SStore_customer.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SSurvey.java | 21 +++++++------------ .../mysema/query/jpa/domain/sql/STest.java | 20 +++++++----------- .../query/jpa/domain/sql/STimeTest.java | 20 +++++++----------- .../mysema/query/jpa/domain/sql/SUser.java | 17 +++++++-------- .../mysema/query/jpa/domain/sql/SUser2.java | 18 ++++++++-------- .../query/jpa/domain/sql/SUser2_userprop.java | 16 +++++++------- .../query/jpa/domain/sql/SUserprop.java | 18 ++++++++-------- .../jpa/domain/sql/SUserprop_category.java | 16 +++++++------- .../domain/sql/SUserprop_categoryprop.java | 16 +++++++------- .../mysema/query/jpa/domain/sql/SWorld.java | 20 +++++++----------- .../query/jpa/domain/sql/SWorldMammal.java | 20 +++++++----------- 86 files changed, 625 insertions(+), 796 deletions(-) diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java index d903d6bd43..c95020d0e5 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java @@ -13,8 +13,6 @@ */ package com.mysema.query.jdo.test.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.forVariable; - import com.mysema.query.sql.ForeignKey; import com.mysema.query.sql.PrimaryKey; import com.mysema.query.sql.RelationalPathBase; @@ -22,6 +20,7 @@ import com.mysema.query.types.path.BeanPath; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -47,15 +46,15 @@ public class SBook extends RelationalPathBase { public final ForeignKey bookFk1 = new ForeignKey(this, bookId, "PRODUCT_ID"); public SBook(String variable) { - super(SBook.class, forVariable(variable), null, "BOOK"); + super(SBook.class, forVariable(variable), "", "BOOK"); } public SBook(BeanPath entity) { - super(entity.getType(),entity.getMetadata(), null, "BOOK"); + super(entity.getType(),entity.getMetadata(), "", "BOOK"); } public SBook(PathMetadata metadata) { - super(SBook.class, metadata, null, "BOOK"); + super(SBook.class, metadata, "", "BOOK"); } } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java index 1f3023b0ab..3dc564dea9 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java @@ -57,17 +57,17 @@ public class SProduct extends RelationalPathBase { public final ForeignKey _storeProductsbynameFk2 = new ForeignKey(this, productId, "PRODUCT_ID_VID"); public SProduct(String variable) { - super(SProduct.class, forVariable(variable), null, "PRODUCT"); + super(SProduct.class, forVariable(variable), "", "PRODUCT"); addMetadata(); } public SProduct(BeanPath entity) { - super(entity.getType(),entity.getMetadata(), null, "PRODUCT"); + super(entity.getType(),entity.getMetadata(), "", "PRODUCT"); addMetadata(); } public SProduct(PathMetadata metadata) { - super(SProduct.class, metadata, null, "PRODUCT"); + super(SProduct.class, metadata, "", "PRODUCT"); addMetadata(); } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java index 0123c13005..e9f71a5fe0 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java @@ -13,8 +13,6 @@ */ package com.mysema.query.jdo.test.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.forVariable; - import com.mysema.query.sql.ForeignKey; import com.mysema.query.sql.PrimaryKey; import com.mysema.query.sql.RelationalPathBase; @@ -22,6 +20,7 @@ import com.mysema.query.types.path.BeanPath; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -45,15 +44,15 @@ public class SStore extends RelationalPathBase { public final ForeignKey _storeProductsFk1 = new ForeignKey(this, storeId, "STORE_ID_OID"); public SStore(String variable) { - super(SStore.class, forVariable(variable), null, "STORE"); + super(SStore.class, forVariable(variable), "", "STORE"); } public SStore(BeanPath entity) { - super(entity.getType(),entity.getMetadata(), null, "STORE"); + super(entity.getType(),entity.getMetadata(), "", "STORE"); } public SStore(PathMetadata metadata) { - super(SStore.class, metadata, null, "STORE"); + super(SStore.class, metadata, "", "STORE"); } } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java index a2d4d0466d..ccf862072b 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java @@ -13,14 +13,13 @@ */ package com.mysema.query.jdo.test.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.forVariable; - import com.mysema.query.sql.ForeignKey; import com.mysema.query.sql.PrimaryKey; import com.mysema.query.sql.RelationalPathBase; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.path.BeanPath; import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -46,15 +45,15 @@ public class SStoreProducts extends RelationalPathBase { public final ForeignKey storeProductsFk1 = new ForeignKey(this, storeIdOid, "STORE_ID"); public SStoreProducts(String variable) { - super(SStoreProducts.class, forVariable(variable), null, "STORE_PRODUCTS"); + super(SStoreProducts.class, forVariable(variable), "", "STORE_PRODUCTS"); } public SStoreProducts(BeanPath entity) { - super(entity.getType(),entity.getMetadata(), null, "STORE_PRODUCTS"); + super(entity.getType(),entity.getMetadata(), "", "STORE_PRODUCTS"); } public SStoreProducts(PathMetadata metadata) { - super(SStoreProducts.class, metadata, null, "STORE_PRODUCTS"); + super(SStoreProducts.class, metadata, "", "STORE_PRODUCTS"); } } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java index 7e4ddd5629..ea6b4b1283 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java @@ -13,8 +13,6 @@ */ package com.mysema.query.jdo.test.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.forVariable; - import com.mysema.query.sql.ForeignKey; import com.mysema.query.sql.PrimaryKey; import com.mysema.query.sql.RelationalPathBase; @@ -22,6 +20,7 @@ import com.mysema.query.types.path.BeanPath; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -47,15 +46,15 @@ public class SStoreProductsbyname extends RelationalPathBase storeProductsbynameFk2 = new ForeignKey(this, productIdVid, "PRODUCT_ID"); public SStoreProductsbyname(String variable) { - super(SStoreProductsbyname.class, forVariable(variable), null, "STORE_PRODUCTSBYNAME"); + super(SStoreProductsbyname.class, forVariable(variable), "", "STORE_PRODUCTSBYNAME"); } public SStoreProductsbyname(BeanPath entity) { - super(entity.getType(),entity.getMetadata(), null, "STORE_PRODUCTSBYNAME"); + super(entity.getType(),entity.getMetadata(), "", "STORE_PRODUCTSBYNAME"); } public SStoreProductsbyname(PathMetadata metadata) { - super(SStoreProductsbyname.class, metadata, null, "STORE_PRODUCTSBYNAME"); + super(SStoreProductsbyname.class, metadata, "", "STORE_PRODUCTSBYNAME"); } } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAccount.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAccount.java index 7814707998..abe9e121ad 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAccount.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAccount.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +31,7 @@ public class SAccount extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey fk809dbbd28cfac74 = createForeignKey(ownerI, "i"); public SAccount(String variable) { - super(SAccount.class, forVariable(variable), "null", "account_"); + super(SAccount.class, forVariable(variable), "", "account_"); addMetadata(); } @@ -42,12 +41,12 @@ public SAccount(String variable, String schema, String table) { } public SAccount(Path path) { - super(path.getType(), path.getMetadata(), "null", "account_"); + super(path.getType(), path.getMetadata(), "", "account_"); addMetadata(); } public SAccount(PathMetadata metadata) { - super(SAccount.class, metadata, "null", "account_"); + super(SAccount.class, metadata, "", "account_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAnimal.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAnimal.java index ce9844546e..a22903c35e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAnimal.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAnimal.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.*; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -66,7 +64,7 @@ public class SAnimal extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk4fccad6f3881aaa7 = createInvForeignKey(id, "kitten_id"); public SAnimal(String variable) { - super(SAnimal.class, forVariable(variable), "null", "animal_"); + super(SAnimal.class, forVariable(variable), "", "animal_"); addMetadata(); } @@ -76,12 +74,12 @@ public SAnimal(String variable, String schema, String table) { } public SAnimal(Path path) { - super(path.getType(), path.getMetadata(), "null", "animal_"); + super(path.getType(), path.getMetadata(), "", "animal_"); addMetadata(); } public SAnimal(PathMetadata metadata) { - super(SAnimal.class, metadata, "null", "animal_"); + super(SAnimal.class, metadata, "", "animal_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuditlog.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuditlog.java index 7aeec671d6..f819e87a99 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuditlog.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuditlog.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SAuditlog extends com.mysema.query.sql.RelationalPathBase fkb88fbf6ae26109c = createForeignKey(itemId, "id"); public SAuditlog(String variable) { - super(SAuditlog.class, forVariable(variable), "null", "auditlog_"); + super(SAuditlog.class, forVariable(variable), "", "auditlog_"); addMetadata(); } @@ -40,12 +38,12 @@ public SAuditlog(String variable, String schema, String table) { } public SAuditlog(Path path) { - super(path.getType(), path.getMetadata(), "null", "auditlog_"); + super(path.getType(), path.getMetadata(), "", "auditlog_"); addMetadata(); } public SAuditlog(PathMetadata metadata) { - super(SAuditlog.class, metadata, "null", "auditlog_"); + super(SAuditlog.class, metadata, "", "auditlog_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuthor.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuthor.java index 4e10f626bd..f02048bb84 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuthor.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SAuthor.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +29,7 @@ public class SAuthor extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk599229686eaf51c = createInvForeignKey(id, "AUTHOR_ID"); public SAuthor(String variable) { - super(SAuthor.class, forVariable(variable), "null", "author_"); + super(SAuthor.class, forVariable(variable), "", "author_"); addMetadata(); } @@ -40,12 +39,12 @@ public SAuthor(String variable, String schema, String table) { } public SAuthor(Path path) { - super(path.getType(), path.getMetadata(), "null", "author_"); + super(path.getType(), path.getMetadata(), "", "author_"); addMetadata(); } public SAuthor(PathMetadata metadata) { - super(SAuthor.class, metadata, "null", "author_"); + super(SAuthor.class, metadata, "", "author_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBar.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBar.java index ae2c5e253a..4c91e585fc 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBar.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBar.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +27,7 @@ public class SBar extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SBar(String variable) { - super(SBar.class, forVariable(variable), "null", "bar_"); + super(SBar.class, forVariable(variable), "", "bar_"); addMetadata(); } @@ -38,12 +37,12 @@ public SBar(String variable, String schema, String table) { } public SBar(Path path) { - super(path.getType(), path.getMetadata(), "null", "bar_"); + super(path.getType(), path.getMetadata(), "", "bar_"); addMetadata(); } public SBar(PathMetadata metadata) { - super(SBar.class, metadata, "null", "bar_"); + super(SBar.class, metadata, "", "bar_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBook.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBook.java index 574121e5f9..d5f7965b78 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBook.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBook.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +33,7 @@ public class SBook extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey fk599229686eaf51c = createForeignKey(authorId, "id"); public SBook(String variable) { - super(SBook.class, forVariable(variable), "null", "book_"); + super(SBook.class, forVariable(variable), "", "book_"); addMetadata(); } @@ -44,12 +43,12 @@ public SBook(String variable, String schema, String table) { } public SBook(Path path) { - super(path.getType(), path.getMetadata(), "null", "book_"); + super(path.getType(), path.getMetadata(), "", "book_"); addMetadata(); } public SBook(PathMetadata metadata) { - super(SBook.class, metadata, "null", "book_"); + super(SBook.class, metadata, "", "book_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookBookmarks.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookBookmarks.java index 030623dd86..ada6e6ed85 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookBookmarks.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookBookmarks.java @@ -1,16 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; - -import java.util.*; +import java.util.Arrays; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -38,7 +36,7 @@ public class SBookBookmarks extends com.mysema.query.sql.RelationalPathBase fk94026827e33d3be4 = createForeignKey(Arrays.asList(bookVersionBookIDIdentity, bookVersionLibraryIdentity), Arrays.asList("bookID_identity", "library_identity")); public SBookBookmarks(String variable) { - super(SBookBookmarks.class, forVariable(variable), "null", "book_bookmarks"); + super(SBookBookmarks.class, forVariable(variable), "", "book_bookmarks"); addMetadata(); } @@ -48,12 +46,12 @@ public SBookBookmarks(String variable, String schema, String table) { } public SBookBookmarks(Path path) { - super(path.getType(), path.getMetadata(), "null", "book_bookmarks"); + super(path.getType(), path.getMetadata(), "", "book_bookmarks"); addMetadata(); } public SBookBookmarks(PathMetadata metadata) { - super(SBookBookmarks.class, metadata, "null", "book_bookmarks"); + super(SBookBookmarks.class, metadata, "", "book_bookmarks"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookid.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookid.java index 13bc351255..5c6d9b9371 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookid.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookid.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SBookid extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fkef4bc0704dd5d6c3 = createInvForeignKey(identity, "bookID_identity"); public SBookid(String variable) { - super(SBookid.class, forVariable(variable), "null", "bookid_"); + super(SBookid.class, forVariable(variable), "", "bookid_"); addMetadata(); } @@ -38,12 +36,12 @@ public SBookid(String variable, String schema, String table) { } public SBookid(Path path) { - super(path.getType(), path.getMetadata(), "null", "bookid_"); + super(path.getType(), path.getMetadata(), "", "bookid_"); addMetadata(); } public SBookid(PathMetadata metadata) { - super(SBookid.class, metadata, "null", "bookid_"); + super(SBookid.class, metadata, "", "bookid_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookversion.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookversion.java index 202f89af5c..6b9305edf2 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookversion.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SBookversion.java @@ -1,16 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; - -import java.util.*; +import java.util.Arrays; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -40,7 +38,7 @@ public class SBookversion extends com.mysema.query.sql.RelationalPathBase _fk94026827e33d3be4 = createInvForeignKey(Arrays.asList(bookIDIdentity, libraryIdentity), Arrays.asList("BookVersion_bookID_identity", "BookVersion_library_identity")); public SBookversion(String variable) { - super(SBookversion.class, forVariable(variable), "null", "bookversion_"); + super(SBookversion.class, forVariable(variable), "", "bookversion_"); addMetadata(); } @@ -50,12 +48,12 @@ public SBookversion(String variable, String schema, String table) { } public SBookversion(Path path) { - super(path.getType(), path.getMetadata(), "null", "bookversion_"); + super(path.getType(), path.getMetadata(), "", "bookversion_"); addMetadata(); } public SBookversion(PathMetadata metadata) { - super(SBookversion.class, metadata, "null", "bookversion_"); + super(SBookversion.class, metadata, "", "bookversion_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendar.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendar.java index fa8e2fe665..b63bc4b9b2 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendar.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendar.java @@ -1,12 +1,11 @@ package com.mysema.query.jpa.domain.sql; +import javax.annotation.Generated; + import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.types.Path; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.path.NumberPath; - -import javax.annotation.Generated; - import static com.mysema.query.types.PathMetadataFactory.forVariable; @@ -29,7 +28,7 @@ public class SCalendar extends com.mysema.query.sql.RelationalPathBase _fkab8efa23591ebbc = createInvForeignKey(id, "calendar_id"); public SCalendar(String variable) { - super(SCalendar.class, forVariable(variable), "null", "calendar_"); + super(SCalendar.class, forVariable(variable), "", "calendar_"); addMetadata(); } @@ -39,12 +38,12 @@ public SCalendar(String variable, String schema, String table) { } public SCalendar(Path path) { - super(path.getType(), path.getMetadata(), "null", "calendar_"); + super(path.getType(), path.getMetadata(), "", "calendar_"); addMetadata(); } public SCalendar(PathMetadata metadata) { - super(SCalendar.class, metadata, "null", "calendar_"); + super(SCalendar.class, metadata, "", "calendar_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendarHolidays.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendarHolidays.java index 3b9fe385f6..c3573ac4d7 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendarHolidays.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCalendarHolidays.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +32,7 @@ public class SCalendarHolidays extends com.mysema.query.sql.RelationalPathBase fk31ce1edc591ebbc = createForeignKey(calendarId, "id"); public SCalendarHolidays(String variable) { - super(SCalendarHolidays.class, forVariable(variable), "null", "Calendar_holidays"); + super(SCalendarHolidays.class, forVariable(variable), "", "Calendar_holidays"); addMetadata(); } @@ -42,12 +42,12 @@ public SCalendarHolidays(String variable, String schema, String table) { } public SCalendarHolidays(Path path) { - super(path.getType(), path.getMetadata(), "null", "Calendar_holidays"); + super(path.getType(), path.getMetadata(), "", "Calendar_holidays"); addMetadata(); } public SCalendarHolidays(PathMetadata metadata) { - super(SCalendarHolidays.class, metadata, "null", "Calendar_holidays"); + super(SCalendarHolidays.class, metadata, "", "Calendar_holidays"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog.java index df33c7c8a7..f5e85d6af3 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +29,7 @@ public class SCatalog extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey _fkaa04532fbb9021ab = createInvForeignKey(id, "catalog__id"); public SCatalog(String variable) { - super(SCatalog.class, forVariable(variable), "null", "catalog_"); + super(SCatalog.class, forVariable(variable), "", "catalog_"); addMetadata(); } @@ -40,12 +39,12 @@ public SCatalog(String variable, String schema, String table) { } public SCatalog(Path path) { - super(path.getType(), path.getMetadata(), "null", "catalog_"); + super(path.getType(), path.getMetadata(), "", "catalog_"); addMetadata(); } public SCatalog(PathMetadata metadata) { - super(SCatalog.class, metadata, "null", "catalog_"); + super(SCatalog.class, metadata, "", "catalog_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog_price.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog_price.java index 09eab12675..cf12afe038 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog_price.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCatalog_price.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SCatalog_price extends com.mysema.query.sql.RelationalPathBase fkaa04532f5222eaf7 = createForeignKey(pricesId, "id"); public SCatalog_price(String variable) { - super(SCatalog_price.class, forVariable(variable), "null", "catalog__price_"); + super(SCatalog_price.class, forVariable(variable), "", "catalog__price_"); addMetadata(); } @@ -42,12 +40,12 @@ public SCatalog_price(String variable, String schema, String table) { } public SCatalog_price(Path path) { - super(path.getType(), path.getMetadata(), "null", "catalog__price_"); + super(path.getType(), path.getMetadata(), "", "catalog__price_"); addMetadata(); } public SCatalog_price(PathMetadata metadata) { - super(SCatalog_price.class, metadata, "null", "catalog__price_"); + super(SCatalog_price.class, metadata, "", "catalog__price_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory.java index 773a0704f8..8256e43682 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; +import javax.annotation.Generated; + import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.types.Path; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.path.DateTimePath; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.StringPath; - -import javax.annotation.Generated; - import static com.mysema.query.types.PathMetadataFactory.forVariable; @@ -51,7 +50,7 @@ public class SCategory extends com.mysema.query.sql.RelationalPathBase _fkc4e60b833c83109d = createInvForeignKey(id, "childId"); public SCategory(String variable) { - super(SCategory.class, forVariable(variable), "null", "category_"); + super(SCategory.class, forVariable(variable), "", "category_"); addMetadata(); } @@ -61,12 +60,12 @@ public SCategory(String variable, String schema, String table) { } public SCategory(Path path) { - super(path.getType(), path.getMetadata(), "null", "category_"); + super(path.getType(), path.getMetadata(), "", "category_"); addMetadata(); } public SCategory(PathMetadata metadata) { - super(SCategory.class, metadata, "null", "category_"); + super(SCategory.class, metadata, "", "category_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_category.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_category.java index 411225ed64..2d1c29e28d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_category.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_category.java @@ -1,12 +1,11 @@ package com.mysema.query.jpa.domain.sql; +import javax.annotation.Generated; + import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.types.Path; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.path.NumberPath; - -import javax.annotation.Generated; - import static com.mysema.query.types.PathMetadataFactory.forVariable; @@ -31,7 +30,7 @@ public class SCategory_category extends com.mysema.query.sql.RelationalPathBase< public final com.mysema.query.sql.ForeignKey fkc4e60b833c83109d = createForeignKey(childId, "id"); public SCategory_category(String variable) { - super(SCategory_category.class, forVariable(variable), "null", "category__category_"); + super(SCategory_category.class, forVariable(variable), "", "category__category_"); addMetadata(); } @@ -41,12 +40,12 @@ public SCategory_category(String variable, String schema, String table) { } public SCategory_category(Path path) { - super(path.getType(), path.getMetadata(), "null", "category__category_"); + super(path.getType(), path.getMetadata(), "", "category__category_"); addMetadata(); } public SCategory_category(PathMetadata metadata) { - super(SCategory_category.class, metadata, "null", "category__category_"); + super(SCategory_category.class, metadata, "", "category__category_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_categoryprop.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_categoryprop.java index 1a2b29bd2c..58338a67b0 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_categoryprop.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategory_categoryprop.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SCategory_categoryprop extends com.mysema.query.sql.RelationalPathB public final com.mysema.query.sql.ForeignKey fk8543a2802974945f = createForeignKey(category_id, "id"); public SCategory_categoryprop(String variable) { - super(SCategory_categoryprop.class, forVariable(variable), "null", "category__categoryprop_"); + super(SCategory_categoryprop.class, forVariable(variable), "", "category__categoryprop_"); addMetadata(); } @@ -42,12 +40,12 @@ public SCategory_categoryprop(String variable, String schema, String table) { } public SCategory_categoryprop(Path path) { - super(path.getType(), path.getMetadata(), "null", "category__categoryprop_"); + super(path.getType(), path.getMetadata(), "", "category__categoryprop_"); addMetadata(); } public SCategory_categoryprop(PathMetadata metadata) { - super(SCategory_categoryprop.class, metadata, "null", "category__categoryprop_"); + super(SCategory_categoryprop.class, metadata, "", "category__categoryprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategoryprop.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategoryprop.java index cf0b1cbed8..d7e4cc8195 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategoryprop.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCategoryprop.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -36,7 +35,7 @@ public class SCategoryprop extends com.mysema.query.sql.RelationalPathBase _fk8543a280fd94cd90 = createInvForeignKey(id, "properties_id"); public SCategoryprop(String variable) { - super(SCategoryprop.class, forVariable(variable), "null", "categoryprop_"); + super(SCategoryprop.class, forVariable(variable), "", "categoryprop_"); addMetadata(); } @@ -46,12 +45,12 @@ public SCategoryprop(String variable, String schema, String table) { } public SCategoryprop(Path path) { - super(path.getType(), path.getMetadata(), "null", "categoryprop_"); + super(path.getType(), path.getMetadata(), "", "categoryprop_"); addMetadata(); } public SCategoryprop(PathMetadata metadata) { - super(SCategoryprop.class, metadata, "null", "categoryprop_"); + super(SCategoryprop.class, metadata, "", "categoryprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SChild2.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SChild2.java index 837a877c5d..aede253404 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SChild2.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SChild2.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +28,7 @@ public class SChild2 extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey fk783f9ab6c2dbacbc = createForeignKey(parentId, "id"); public SChild2(String variable) { - super(SChild2.class, forVariable(variable), "null", "Child2"); + super(SChild2.class, forVariable(variable), "", "Child2"); addMetadata(); } @@ -44,12 +38,12 @@ public SChild2(String variable, String schema, String table) { } public SChild2(Path path) { - super(path.getType(), path.getMetadata(), "null", "Child2"); + super(path.getType(), path.getMetadata(), "", "Child2"); addMetadata(); } public SChild2(PathMetadata metadata) { - super(SChild2.class, metadata, "null", "Child2"); + super(SChild2.class, metadata, "", "Child2"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany.java index 29c5c04e73..9ab7b44c9c 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -44,7 +43,7 @@ public class SCompany extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey _fk1f3a274ddc953998 = createInvForeignKey(id, "company_id"); public SCompany(String variable) { - super(SCompany.class, forVariable(variable), "null", "company_"); + super(SCompany.class, forVariable(variable), "", "company_"); addMetadata(); } @@ -54,12 +53,12 @@ public SCompany(String variable, String schema, String table) { } public SCompany(Path path) { - super(path.getType(), path.getMetadata(), "null", "company_"); + super(path.getType(), path.getMetadata(), "", "company_"); addMetadata(); } public SCompany(PathMetadata metadata) { - super(SCompany.class, metadata, "null", "company_"); + super(SCompany.class, metadata, "", "company_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany_department.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany_department.java index d01d8d66ef..64a1b06ada 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany_department.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCompany_department.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SCompany_department extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey fk100ba610f0d30873 = createForeignKey(company_id, "id"); public SCompany_department(String variable) { - super(SCompany_department.class, forVariable(variable), "null", "company__department_"); + super(SCompany_department.class, forVariable(variable), "", "company__department_"); addMetadata(); } @@ -40,12 +38,12 @@ public SCompany_department(String variable, String schema, String table) { } public SCompany_department(Path path) { - super(path.getType(), path.getMetadata(), "null", "company__department_"); + super(path.getType(), path.getMetadata(), "", "company__department_"); addMetadata(); } public SCompany_department(PathMetadata metadata) { - super(SCompany_department.class, metadata, "null", "company__department_"); + super(SCompany_department.class, metadata, "", "company__department_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCustomer.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCustomer.java index c4d8e51d26..2a8bf07ea3 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCustomer.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SCustomer.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -38,7 +36,7 @@ public class SCustomer extends com.mysema.query.sql.RelationalPathBase _fkc3df62d1b29c27bc = createInvForeignKey(id, "customer_id"); public SCustomer(String variable) { - super(SCustomer.class, forVariable(variable), "null", "customer_"); + super(SCustomer.class, forVariable(variable), "", "customer_"); addMetadata(); } @@ -48,12 +46,12 @@ public SCustomer(String variable, String schema, String table) { } public SCustomer(Path path) { - super(path.getType(), path.getMetadata(), "null", "customer_"); + super(path.getType(), path.getMetadata(), "", "customer_"); addMetadata(); } public SCustomer(PathMetadata metadata) { - super(SCustomer.class, metadata, "null", "customer_"); + super(SCustomer.class, metadata, "", "customer_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDateTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDateTest.java index fa6cfcab3e..aaf1a44f4d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDateTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDateTest.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +22,7 @@ public class SDateTest extends com.mysema.query.sql.RelationalPathBase dateTest = createDate("dateTest", java.sql.Date.class); public SDateTest(String variable) { - super(SDateTest.class, forVariable(variable), "null", "DATE_TEST"); + super(SDateTest.class, forVariable(variable), "", "DATE_TEST"); addMetadata(); } @@ -38,12 +32,12 @@ public SDateTest(String variable, String schema, String table) { } public SDateTest(Path path) { - super(path.getType(), path.getMetadata(), "null", "DATE_TEST"); + super(path.getType(), path.getMetadata(), "", "DATE_TEST"); addMetadata(); } public SDateTest(PathMetadata metadata) { - super(SDateTest.class, metadata, "null", "DATE_TEST"); + super(SDateTest.class, metadata, "", "DATE_TEST"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment.java index 8d169e30c2..ace112d28f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -36,7 +35,7 @@ public class SDepartment extends com.mysema.query.sql.RelationalPathBase _fkc33a14ff7d2db0e1 = createInvForeignKey(id, "department__id"); public SDepartment(String variable) { - super(SDepartment.class, forVariable(variable), "null", "department_"); + super(SDepartment.class, forVariable(variable), "", "department_"); addMetadata(); } @@ -46,12 +45,12 @@ public SDepartment(String variable, String schema, String table) { } public SDepartment(Path path) { - super(path.getType(), path.getMetadata(), "null", "department_"); + super(path.getType(), path.getMetadata(), "", "department_"); addMetadata(); } public SDepartment(PathMetadata metadata) { - super(SDepartment.class, metadata, "null", "department_"); + super(SDepartment.class, metadata, "", "department_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment_employee.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment_employee.java index 48b4d88c3f..fd9c30ac73 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment_employee.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDepartment_employee.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SDepartment_employee extends com.mysema.query.sql.RelationalPathBas public final com.mysema.query.sql.ForeignKey fkc33a14ff7d2db0e1 = createForeignKey(department_id, "id"); public SDepartment_employee(String variable) { - super(SDepartment_employee.class, forVariable(variable), "null", "department__employee_"); + super(SDepartment_employee.class, forVariable(variable), "", "department__employee_"); addMetadata(); } @@ -40,12 +38,12 @@ public SDepartment_employee(String variable, String schema, String table) { } public SDepartment_employee(Path path) { - super(path.getType(), path.getMetadata(), "null", "department__employee_"); + super(path.getType(), path.getMetadata(), "", "department__employee_"); addMetadata(); } public SDepartment_employee(PathMetadata metadata) { - super(SDepartment_employee.class, metadata, "null", "department__employee_"); + super(SDepartment_employee.class, metadata, "", "department__employee_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument.java index 5e5de2f5bc..e99f58b9ad 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +30,7 @@ public class SDocument extends com.mysema.query.sql.RelationalPathBase primary = createPrimaryKey(id); public SDocument(String variable) { - super(SDocument.class, forVariable(variable), "null", "document_"); + super(SDocument.class, forVariable(variable), "", "document_"); addMetadata(); } @@ -40,12 +40,12 @@ public SDocument(String variable, String schema, String table) { } public SDocument(Path path) { - super(path.getType(), path.getMetadata(), "null", "document_"); + super(path.getType(), path.getMetadata(), "", "document_"); addMetadata(); } public SDocument(PathMetadata metadata) { - super(SDocument.class, metadata, "null", "document_"); + super(SDocument.class, metadata, "", "document_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument2.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument2.java index 9333895c9b..34e142912c 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument2.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocument2.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DateTimePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -50,7 +50,7 @@ public class SDocument2 extends com.mysema.query.sql.RelationalPathBase primary = createPrimaryKey(id); public SDocument2(String variable) { - super(SDocument2.class, forVariable(variable), "null", "document2_"); + super(SDocument2.class, forVariable(variable), "", "document2_"); addMetadata(); } @@ -60,12 +60,12 @@ public SDocument2(String variable, String schema, String table) { } public SDocument2(Path path) { - super(path.getType(), path.getMetadata(), "null", "document2_"); + super(path.getType(), path.getMetadata(), "", "document2_"); addMetadata(); } public SDocument2(PathMetadata metadata) { - super(SDocument2.class, metadata, "null", "document2_"); + super(SDocument2.class, metadata, "", "document2_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocumentprop.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocumentprop.java index 4aedd46a03..1eecd48df5 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocumentprop.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SDocumentprop.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +33,7 @@ public class SDocumentprop extends com.mysema.query.sql.RelationalPathBase primary = createPrimaryKey(id); public SDocumentprop(String variable) { - super(SDocumentprop.class, forVariable(variable), "null", "documentprop_"); + super(SDocumentprop.class, forVariable(variable), "", "documentprop_"); addMetadata(); } @@ -44,12 +43,12 @@ public SDocumentprop(String variable, String schema, String table) { } public SDocumentprop(Path path) { - super(path.getType(), path.getMetadata(), "null", "documentprop_"); + super(path.getType(), path.getMetadata(), "", "documentprop_"); addMetadata(); } public SDocumentprop(PathMetadata metadata) { - super(SDocumentprop.class, metadata, "null", "documentprop_"); + super(SDocumentprop.class, metadata, "", "documentprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployee.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployee.java index 3487e44af6..e548f7eb2f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployee.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployee.java @@ -1,13 +1,12 @@ package com.mysema.query.jpa.domain.sql; +import javax.annotation.Generated; + import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.types.Path; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.StringPath; - -import javax.annotation.Generated; - import static com.mysema.query.types.PathMetadataFactory.forVariable; @@ -44,7 +43,7 @@ public class SEmployee extends com.mysema.query.sql.RelationalPathBase _fkc33a14ffd846a985 = createInvForeignKey(id, "employees_id"); public SEmployee(String variable) { - super(SEmployee.class, forVariable(variable), "null", "employee_"); + super(SEmployee.class, forVariable(variable), "", "employee_"); addMetadata(); } @@ -54,12 +53,12 @@ public SEmployee(String variable, String schema, String table) { } public SEmployee(Path path) { - super(path.getType(), path.getMetadata(), "null", "employee_"); + super(path.getType(), path.getMetadata(), "", "employee_"); addMetadata(); } public SEmployee(PathMetadata metadata) { - super(SEmployee.class, metadata, "null", "employee_"); + super(SEmployee.class, metadata, "", "employee_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployeeJobFunctions.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployeeJobFunctions.java index 4eb302c428..91a70ea103 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployeeJobFunctions.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEmployeeJobFunctions.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +27,7 @@ public class SEmployeeJobFunctions extends com.mysema.query.sql.RelationalPathBa public final com.mysema.query.sql.ForeignKey fk49690e2f75b8f5bc = createForeignKey(employeeId, "id"); public SEmployeeJobFunctions(String variable) { - super(SEmployeeJobFunctions.class, forVariable(variable), "null", "Employee_jobFunctions"); + super(SEmployeeJobFunctions.class, forVariable(variable), "", "Employee_jobFunctions"); addMetadata(); } @@ -38,12 +37,12 @@ public SEmployeeJobFunctions(String variable, String schema, String table) { } public SEmployeeJobFunctions(Path path) { - super(path.getType(), path.getMetadata(), "null", "Employee_jobFunctions"); + super(path.getType(), path.getMetadata(), "", "Employee_jobFunctions"); addMetadata(); } public SEmployeeJobFunctions(PathMetadata metadata) { - super(SEmployeeJobFunctions.class, metadata, "null", "Employee_jobFunctions"); + super(SEmployeeJobFunctions.class, metadata, "", "Employee_jobFunctions"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEntity1.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEntity1.java index 88a757847c..cd84f12871 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEntity1.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEntity1.java @@ -1,18 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -36,7 +31,7 @@ public class SEntity1 extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SEntity1(String variable) { - super(SEntity1.class, forVariable(variable), "null", "Entity1"); + super(SEntity1.class, forVariable(variable), "", "Entity1"); addMetadata(); } @@ -46,12 +41,12 @@ public SEntity1(String variable, String schema, String table) { } public SEntity1(Path path) { - super(path.getType(), path.getMetadata(), "null", "Entity1"); + super(path.getType(), path.getMetadata(), "", "Entity1"); addMetadata(); } public SEntity1(PathMetadata metadata) { - super(SEntity1.class, metadata, "null", "Entity1"); + super(SEntity1.class, metadata, "", "Entity1"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEviltype.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEviltype.java index af2302f344..3a83f29bff 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEviltype.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SEviltype.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -104,7 +102,7 @@ public class SEviltype extends com.mysema.query.sql.RelationalPathBase _fkd21f83512d7708c5 = createInvForeignKey(id, "getMetadata_id"); public SEviltype(String variable) { - super(SEviltype.class, forVariable(variable), "null", "eviltype_"); + super(SEviltype.class, forVariable(variable), "", "eviltype_"); addMetadata(); } @@ -114,12 +112,12 @@ public SEviltype(String variable, String schema, String table) { } public SEviltype(Path path) { - super(path.getType(), path.getMetadata(), "null", "eviltype_"); + super(path.getType(), path.getMetadata(), "", "eviltype_"); addMetadata(); } public SEviltype(PathMetadata metadata) { - super(SEviltype.class, metadata, "null", "eviltype_"); + super(SEviltype.class, metadata, "", "eviltype_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFoo.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFoo.java index ec8c739361..1e502e9db3 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFoo.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFoo.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +32,7 @@ public class SFoo extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fkb6129a8f94e297f8 = createInvForeignKey(id, "foo_id"); public SFoo(String variable) { - super(SFoo.class, forVariable(variable), "null", "foo_"); + super(SFoo.class, forVariable(variable), "", "foo_"); addMetadata(); } @@ -42,12 +42,12 @@ public SFoo(String variable, String schema, String table) { } public SFoo(Path path) { - super(path.getType(), path.getMetadata(), "null", "foo_"); + super(path.getType(), path.getMetadata(), "", "foo_"); addMetadata(); } public SFoo(PathMetadata metadata) { - super(SFoo.class, metadata, "null", "foo_"); + super(SFoo.class, metadata, "", "foo_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFooNames.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFooNames.java index 4a3b5f1486..151eaf4fb0 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFooNames.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFooNames.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +27,7 @@ public class SFooNames extends com.mysema.query.sql.RelationalPathBase fkb6129a8f94e297f8 = createForeignKey(fooId, "id"); public SFooNames(String variable) { - super(SFooNames.class, forVariable(variable), "null", "foo_names"); + super(SFooNames.class, forVariable(variable), "", "foo_names"); addMetadata(); } @@ -38,12 +37,12 @@ public SFooNames(String variable, String schema, String table) { } public SFooNames(Path path) { - super(path.getType(), path.getMetadata(), "null", "foo_names"); + super(path.getType(), path.getMetadata(), "", "foo_names"); addMetadata(); } public SFooNames(PathMetadata metadata) { - super(SFooNames.class, metadata, "null", "foo_names"); + super(SFooNames.class, metadata, "", "foo_names"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFormula.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFormula.java index 439559f290..39479665b2 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFormula.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SFormula.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SFormula extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey fk1c4adbb924189298 = createForeignKey(parameterId, "id"); public SFormula(String variable) { - super(SFormula.class, forVariable(variable), "null", "formula_"); + super(SFormula.class, forVariable(variable), "", "formula_"); addMetadata(); } @@ -40,12 +38,12 @@ public SFormula(String variable, String schema, String table) { } public SFormula(Path path) { - super(path.getType(), path.getMetadata(), "null", "formula_"); + super(path.getType(), path.getMetadata(), "", "formula_"); addMetadata(); } public SFormula(PathMetadata metadata) { - super(SFormula.class, metadata, "null", "formula_"); + super(SFormula.class, metadata, "", "formula_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SGeneratedKeys.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SGeneratedKeys.java index 3c98229115..6e0edf07c2 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SGeneratedKeys.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SGeneratedKeys.java @@ -1,18 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +27,7 @@ public class SGeneratedKeys extends com.mysema.query.sql.RelationalPathBase primary = createPrimaryKey(id); public SGeneratedKeys(String variable) { - super(SGeneratedKeys.class, forVariable(variable), "null", "GENERATED_KEYS"); + super(SGeneratedKeys.class, forVariable(variable), "", "GENERATED_KEYS"); addMetadata(); } @@ -42,12 +37,12 @@ public SGeneratedKeys(String variable, String schema, String table) { } public SGeneratedKeys(Path path) { - super(path.getType(), path.getMetadata(), "null", "GENERATED_KEYS"); + super(path.getType(), path.getMetadata(), "", "GENERATED_KEYS"); addMetadata(); } public SGeneratedKeys(PathMetadata metadata) { - super(SGeneratedKeys.class, metadata, "null", "GENERATED_KEYS"); + super(SGeneratedKeys.class, metadata, "", "GENERATED_KEYS"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SHumanHairs.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SHumanHairs.java index f72df061a1..ff298b0c52 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SHumanHairs.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SHumanHairs.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +26,7 @@ public class SHumanHairs extends com.mysema.query.sql.RelationalPathBase fk6649531ff097e318 = createForeignKey(humanId, "id"); public SHumanHairs(String variable) { - super(SHumanHairs.class, forVariable(variable), "null", "Human_hairs"); + super(SHumanHairs.class, forVariable(variable), "", "Human_hairs"); addMetadata(); } @@ -42,12 +36,12 @@ public SHumanHairs(String variable, String schema, String table) { } public SHumanHairs(Path path) { - super(path.getType(), path.getMetadata(), "null", "Human_hairs"); + super(path.getType(), path.getMetadata(), "", "Human_hairs"); addMetadata(); } public SHumanHairs(PathMetadata metadata) { - super(SHumanHairs.class, metadata, "null", "Human_hairs"); + super(SHumanHairs.class, metadata, "", "Human_hairs"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SInheritedproperties.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SInheritedproperties.java index 6254246453..caba1da6f6 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SInheritedproperties.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SInheritedproperties.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +31,7 @@ public class SInheritedproperties extends com.mysema.query.sql.RelationalPathBas public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SInheritedproperties(String variable) { - super(SInheritedproperties.class, forVariable(variable), "null", "inheritedproperties_"); + super(SInheritedproperties.class, forVariable(variable), "", "inheritedproperties_"); addMetadata(); } @@ -42,12 +41,12 @@ public SInheritedproperties(String variable, String schema, String table) { } public SInheritedproperties(Path path) { - super(path.getType(), path.getMetadata(), "null", "inheritedproperties_"); + super(path.getType(), path.getMetadata(), "", "inheritedproperties_"); addMetadata(); } public SInheritedproperties(PathMetadata metadata) { - super(SInheritedproperties.class, metadata, "null", "inheritedproperties_"); + super(SInheritedproperties.class, metadata, "", "inheritedproperties_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem.java index 539a95e40a..cbe915c6dd 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -56,7 +55,7 @@ public class SItem extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fkb2e400c3d8e44c3 = createInvForeignKey(id, "lineItems_id"); public SItem(String variable) { - super(SItem.class, forVariable(variable), "null", "item_"); + super(SItem.class, forVariable(variable), "", "item_"); addMetadata(); } @@ -66,12 +65,12 @@ public SItem(String variable, String schema, String table) { } public SItem(Path path) { - super(path.getType(), path.getMetadata(), "null", "item_"); + super(path.getType(), path.getMetadata(), "", "item_"); addMetadata(); } public SItem(PathMetadata metadata) { - super(SItem.class, metadata, "null", "item_"); + super(SItem.class, metadata, "", "item_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem_statuschange.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem_statuschange.java index 8fc74603cc..5215c500c0 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem_statuschange.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SItem_statuschange.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SItem_statuschange extends com.mysema.query.sql.RelationalPathBase< public final com.mysema.query.sql.ForeignKey fkcb99fb2aedc50192 = createForeignKey(item_id, "id"); public SItem_statuschange(String variable) { - super(SItem_statuschange.class, forVariable(variable), "null", "item__statuschange_"); + super(SItem_statuschange.class, forVariable(variable), "", "item__statuschange_"); addMetadata(); } @@ -40,12 +38,12 @@ public SItem_statuschange(String variable, String schema, String table) { } public SItem_statuschange(Path path) { - super(path.getType(), path.getMetadata(), "null", "item__statuschange_"); + super(path.getType(), path.getMetadata(), "", "item__statuschange_"); addMetadata(); } public SItem_statuschange(PathMetadata metadata) { - super(SItem_statuschange.class, metadata, "null", "item__statuschange_"); + super(SItem_statuschange.class, metadata, "", "item__statuschange_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittens.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittens.java index 8451c3be5e..65df58395a 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittens.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittens.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +32,7 @@ public class SKittens extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey fkd60087cc8f00fdf8 = createForeignKey(catId, "id"); public SKittens(String variable) { - super(SKittens.class, forVariable(variable), "null", "kittens"); + super(SKittens.class, forVariable(variable), "", "kittens"); addMetadata(); } @@ -44,12 +42,12 @@ public SKittens(String variable, String schema, String table) { } public SKittens(Path path) { - super(path.getType(), path.getMetadata(), "null", "kittens"); + super(path.getType(), path.getMetadata(), "", "kittens"); addMetadata(); } public SKittens(PathMetadata metadata) { - super(SKittens.class, metadata, "null", "kittens"); + super(SKittens.class, metadata, "", "kittens"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittensSet.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittensSet.java index a10b9fc028..df5ff3ad95 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittensSet.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SKittensSet.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SKittensSet extends com.mysema.query.sql.RelationalPathBase fk4fccad6f3881aaa7 = createForeignKey(kittenId, "id"); public SKittensSet(String variable) { - super(SKittensSet.class, forVariable(variable), "null", "kittens_set"); + super(SKittensSet.class, forVariable(variable), "", "kittens_set"); addMetadata(); } @@ -42,12 +40,12 @@ public SKittensSet(String variable, String schema, String table) { } public SKittensSet(Path path) { - super(path.getType(), path.getMetadata(), "null", "kittens_set"); + super(path.getType(), path.getMetadata(), "", "kittens_set"); addMetadata(); } public SKittensSet(PathMetadata metadata) { - super(SKittensSet.class, metadata, "null", "kittens_set"); + super(SKittensSet.class, metadata, "", "kittens_set"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLibrary.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLibrary.java index 1240ca9963..c43ebf9767 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLibrary.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLibrary.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SLibrary extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey _fkef4bc070e364cd17 = createInvForeignKey(identity, "library_identity"); public SLibrary(String variable) { - super(SLibrary.class, forVariable(variable), "null", "library_"); + super(SLibrary.class, forVariable(variable), "", "library_"); addMetadata(); } @@ -38,12 +36,12 @@ public SLibrary(String variable, String schema, String table) { } public SLibrary(Path path) { - super(path.getType(), path.getMetadata(), "null", "library_"); + super(path.getType(), path.getMetadata(), "", "library_"); addMetadata(); } public SLibrary(PathMetadata metadata) { - super(SLibrary.class, metadata, "null", "library_"); + super(SLibrary.class, metadata, "", "library_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLineItems.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLineItems.java index 9d5ec7f4de..65279e7f4b 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLineItems.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLineItems.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +32,7 @@ public class SLineItems extends com.mysema.query.sql.RelationalPathBase fkb2e400c3d8e44c3 = createForeignKey(lineItemsId, "id"); public SLineItems(String variable) { - super(SLineItems.class, forVariable(variable), "null", "LineItems"); + super(SLineItems.class, forVariable(variable), "", "LineItems"); addMetadata(); } @@ -44,12 +42,12 @@ public SLineItems(String variable, String schema, String table) { } public SLineItems(Path path) { - super(path.getType(), path.getMetadata(), "null", "LineItems"); + super(path.getType(), path.getMetadata(), "", "LineItems"); addMetadata(); } public SLineItems(PathMetadata metadata) { - super(SLineItems.class, metadata, "null", "LineItems"); + super(SLineItems.class, metadata, "", "LineItems"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLocation.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLocation.java index c1db61cc0f..2d0a07077c 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLocation.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SLocation.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +29,7 @@ public class SLocation extends com.mysema.query.sql.RelationalPathBase _fkcad4239e8a55845c = createInvForeignKey(id, "location_id"); public SLocation(String variable) { - super(SLocation.class, forVariable(variable), "null", "location_"); + super(SLocation.class, forVariable(variable), "", "location_"); addMetadata(); } @@ -40,12 +39,12 @@ public SLocation(String variable, String schema, String table) { } public SLocation(Path path) { - super(path.getType(), path.getMetadata(), "null", "location_"); + super(path.getType(), path.getMetadata(), "", "location_"); addMetadata(); } public SLocation(PathMetadata metadata) { - super(SLocation.class, metadata, "null", "location_"); + super(SLocation.class, metadata, "", "location_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SMammal.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SMammal.java index b544c220aa..c55c36359e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SMammal.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SMammal.java @@ -1,18 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -36,7 +31,7 @@ public class SMammal extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk4070aeece01c8ee7 = createInvForeignKey(id, "mammals_id"); public SMammal(String variable) { - super(SMammal.class, forVariable(variable), "null", "Mammal"); + super(SMammal.class, forVariable(variable), "", "Mammal"); addMetadata(); } @@ -46,12 +41,12 @@ public SMammal(String variable, String schema, String table) { } public SMammal(Path path) { - super(path.getType(), path.getMetadata(), "null", "Mammal"); + super(path.getType(), path.getMetadata(), "", "Mammal"); addMetadata(); } public SMammal(PathMetadata metadata) { - super(SMammal.class, metadata, "null", "Mammal"); + super(SMammal.class, metadata, "", "Mammal"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SName.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SName.java index a89072cb9a..1709ebc8fd 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SName.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SName.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +33,7 @@ public class SName extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk600e7c4196a83d9c = createInvForeignKey(id, "name_id"); public SName(String variable) { - super(SName.class, forVariable(variable), "null", "name_"); + super(SName.class, forVariable(variable), "", "name_"); addMetadata(); } @@ -44,12 +43,12 @@ public SName(String variable, String schema, String table) { } public SName(Path path) { - super(path.getType(), path.getMetadata(), "null", "name_"); + super(path.getType(), path.getMetadata(), "", "name_"); addMetadata(); } public SName(PathMetadata metadata) { - super(SName.class, metadata, "null", "name_"); + super(SName.class, metadata, "", "name_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNameListNames.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNameListNames.java index 790cf767fa..99d2cf8d3d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNameListNames.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNameListNames.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +27,7 @@ public class SNameListNames extends com.mysema.query.sql.RelationalPathBase fkd6c82d7217b6c3fc = createForeignKey(nameListId, "id"); public SNameListNames(String variable) { - super(SNameListNames.class, forVariable(variable), "null", "NameList_names"); + super(SNameListNames.class, forVariable(variable), "", "NameList_names"); addMetadata(); } @@ -38,12 +37,12 @@ public SNameListNames(String variable, String schema, String table) { } public SNameListNames(Path path) { - super(path.getType(), path.getMetadata(), "null", "NameList_names"); + super(path.getType(), path.getMetadata(), "", "NameList_names"); addMetadata(); } public SNameListNames(PathMetadata metadata) { - super(SNameListNames.class, metadata, "null", "NameList_names"); + super(SNameListNames.class, metadata, "", "NameList_names"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamed.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamed.java index cb51ed2087..556f98b1dc 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamed.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamed.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +27,7 @@ public class SNamed extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SNamed(String variable) { - super(SNamed.class, forVariable(variable), "null", "named_"); + super(SNamed.class, forVariable(variable), "", "named_"); addMetadata(); } @@ -38,12 +37,12 @@ public SNamed(String variable, String schema, String table) { } public SNamed(Path path) { - super(path.getType(), path.getMetadata(), "null", "named_"); + super(path.getType(), path.getMetadata(), "", "named_"); addMetadata(); } public SNamed(PathMetadata metadata) { - super(SNamed.class, metadata, "null", "named_"); + super(SNamed.class, metadata, "", "named_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamelist.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamelist.java index c8dccc82b7..bc4b5ee25e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamelist.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNamelist.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SNamelist extends com.mysema.query.sql.RelationalPathBase _fkd6c82d7217b6c3fc = createInvForeignKey(id, "NameList_id"); public SNamelist(String variable) { - super(SNamelist.class, forVariable(variable), "null", "namelist_"); + super(SNamelist.class, forVariable(variable), "", "namelist_"); addMetadata(); } @@ -38,12 +36,12 @@ public SNamelist(String variable, String schema, String table) { } public SNamelist(Path path) { - super(path.getType(), path.getMetadata(), "null", "namelist_"); + super(path.getType(), path.getMetadata(), "", "namelist_"); addMetadata(); } public SNamelist(PathMetadata metadata) { - super(SNamelist.class, metadata, "null", "namelist_"); + super(SNamelist.class, metadata, "", "namelist_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNationality.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNationality.java index 13dee5532b..571d3c1c9a 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNationality.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNationality.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SNationality extends com.mysema.query.sql.RelationalPathBase _fkd78fcfaaf6578e38 = createInvForeignKey(id, "nationality_id"); public SNationality(String variable) { - super(SNationality.class, forVariable(variable), "null", "nationality_"); + super(SNationality.class, forVariable(variable), "", "nationality_"); addMetadata(); } @@ -42,12 +40,12 @@ public SNationality(String variable, String schema, String table) { } public SNationality(Path path) { - super(path.getType(), path.getMetadata(), "null", "nationality_"); + super(path.getType(), path.getMetadata(), "", "nationality_"); addMetadata(); } public SNationality(PathMetadata metadata) { - super(SNationality.class, metadata, "null", "nationality_"); + super(SNationality.class, metadata, "", "nationality_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNumeric.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNumeric.java index 0ec9525598..8d9786a40d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNumeric.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SNumeric.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SNumeric extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SNumeric(String variable) { - super(SNumeric.class, forVariable(variable), "null", "numeric_"); + super(SNumeric.class, forVariable(variable), "", "numeric_"); addMetadata(); } @@ -40,12 +38,12 @@ public SNumeric(String variable, String schema, String table) { } public SNumeric(Path path) { - super(path.getType(), path.getMetadata(), "null", "numeric_"); + super(path.getType(), path.getMetadata(), "", "numeric_"); addMetadata(); } public SNumeric(PathMetadata metadata) { - super(SNumeric.class, metadata, "null", "numeric_"); + super(SNumeric.class, metadata, "", "numeric_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder.java index 2833fa7952..9b27444ff9 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.BooleanPath; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -40,7 +39,7 @@ public class SOrder extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fkb2e400cb968f515 = createInvForeignKey(id, "order__id"); public SOrder(String variable) { - super(SOrder.class, forVariable(variable), "null", "order_"); + super(SOrder.class, forVariable(variable), "", "order_"); addMetadata(); } @@ -50,12 +49,12 @@ public SOrder(String variable, String schema, String table) { } public SOrder(Path path) { - super(path.getType(), path.getMetadata(), "null", "order_"); + super(path.getType(), path.getMetadata(), "", "order_"); addMetadata(); } public SOrder(PathMetadata metadata) { - super(SOrder.class, metadata, "null", "order_"); + super(SOrder.class, metadata, "", "order_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrderDeliveredItemIndices.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrderDeliveredItemIndices.java index 0ec3dcc8b6..3b0db5839d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrderDeliveredItemIndices.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrderDeliveredItemIndices.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SOrderDeliveredItemIndices extends com.mysema.query.sql.RelationalP public final com.mysema.query.sql.ForeignKey fk30cbd6611a4d2378 = createForeignKey(orderId, "id"); public SOrderDeliveredItemIndices(String variable) { - super(SOrderDeliveredItemIndices.class, forVariable(variable), "null", "Order_deliveredItemIndices"); + super(SOrderDeliveredItemIndices.class, forVariable(variable), "", "Order_deliveredItemIndices"); addMetadata(); } @@ -42,12 +40,12 @@ public SOrderDeliveredItemIndices(String variable, String schema, String table) } public SOrderDeliveredItemIndices(Path path) { - super(path.getType(), path.getMetadata(), "null", "Order_deliveredItemIndices"); + super(path.getType(), path.getMetadata(), "", "Order_deliveredItemIndices"); addMetadata(); } public SOrderDeliveredItemIndices(PathMetadata metadata) { - super(SOrderDeliveredItemIndices.class, metadata, "null", "Order_deliveredItemIndices"); + super(SOrderDeliveredItemIndices.class, metadata, "", "Order_deliveredItemIndices"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder_item.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder_item.java index d8f7206f1b..2b15ac0ca4 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder_item.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SOrder_item.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +32,7 @@ public class SOrder_item extends com.mysema.query.sql.RelationalPathBase fk1b5e8cbeb968f515 = createForeignKey(order_id, "id"); public SOrder_item(String variable) { - super(SOrder_item.class, forVariable(variable), "null", "order__item_"); + super(SOrder_item.class, forVariable(variable), "", "order__item_"); addMetadata(); } @@ -44,12 +42,12 @@ public SOrder_item(String variable, String schema, String table) { } public SOrder_item(Path path) { - super(path.getType(), path.getMetadata(), "null", "order__item_"); + super(path.getType(), path.getMetadata(), "", "order__item_"); addMetadata(); } public SOrder_item(PathMetadata metadata) { - super(SOrder_item.class, metadata, "null", "order__item_"); + super(SOrder_item.class, metadata, "", "order__item_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParameter.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParameter.java index 368bc77790..1b435ce37d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParameter.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParameter.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SParameter extends com.mysema.query.sql.RelationalPathBase _fk1c4adbb924189298 = createInvForeignKey(id, "parameter_id"); public SParameter(String variable) { - super(SParameter.class, forVariable(variable), "null", "parameter_"); + super(SParameter.class, forVariable(variable), "", "parameter_"); addMetadata(); } @@ -38,12 +36,12 @@ public SParameter(String variable, String schema, String table) { } public SParameter(Path path) { - super(path.getType(), path.getMetadata(), "null", "parameter_"); + super(path.getType(), path.getMetadata(), "", "parameter_"); addMetadata(); } public SParameter(PathMetadata metadata) { - super(SParameter.class, metadata, "null", "parameter_"); + super(SParameter.class, metadata, "", "parameter_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent.java index e2149f173d..59d6dc4f51 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +29,7 @@ public class SParent extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SParent(String variable) { - super(SParent.class, forVariable(variable), "null", "parent_"); + super(SParent.class, forVariable(variable), "", "parent_"); addMetadata(); } @@ -40,12 +39,12 @@ public SParent(String variable, String schema, String table) { } public SParent(Path path) { - super(path.getType(), path.getMetadata(), "null", "parent_"); + super(path.getType(), path.getMetadata(), "", "parent_"); addMetadata(); } public SParent(PathMetadata metadata) { - super(SParent.class, metadata, "null", "parent_"); + super(SParent.class, metadata, "", "parent_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent2.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent2.java index cfb7077e39..a423ca3d56 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent2.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SParent2.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +26,7 @@ public class SParent2 extends com.mysema.query.sql.RelationalPathBase public final com.mysema.query.sql.ForeignKey _fk783f9ab6c2dbacbc = createInvForeignKey(id, "parent_id"); public SParent2(String variable) { - super(SParent2.class, forVariable(variable), "null", "Parent2"); + super(SParent2.class, forVariable(variable), "", "Parent2"); addMetadata(); } @@ -42,12 +36,12 @@ public SParent2(String variable, String schema, String table) { } public SParent2(Path path) { - super(path.getType(), path.getMetadata(), "null", "Parent2"); + super(path.getType(), path.getMetadata(), "", "Parent2"); addMetadata(); } public SParent2(PathMetadata metadata) { - super(SParent2.class, metadata, "null", "Parent2"); + super(SParent2.class, metadata, "", "Parent2"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPerson.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPerson.java index bfb5404954..30c44a18ac 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPerson.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPerson.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DatePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -40,7 +40,7 @@ public class SPerson extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk809dbbd28cfac74 = createInvForeignKey(i, "owner_i"); public SPerson(String variable) { - super(SPerson.class, forVariable(variable), "null", "person_"); + super(SPerson.class, forVariable(variable), "", "person_"); addMetadata(); } @@ -50,12 +50,12 @@ public SPerson(String variable, String schema, String table) { } public SPerson(Path path) { - super(path.getType(), path.getMetadata(), "null", "person_"); + super(path.getType(), path.getMetadata(), "", "person_"); addMetadata(); } public SPerson(PathMetadata metadata) { - super(SPerson.class, metadata, "null", "person_"); + super(SPerson.class, metadata, "", "person_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPersonid.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPersonid.java index 196a295547..068aef8201 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPersonid.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPersonid.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +31,7 @@ public class SPersonid extends com.mysema.query.sql.RelationalPathBase _fkd78fcfaad7999e61 = createInvForeignKey(id, "pid_id"); public SPersonid(String variable) { - super(SPersonid.class, forVariable(variable), "null", "personid_"); + super(SPersonid.class, forVariable(variable), "", "personid_"); addMetadata(); } @@ -42,12 +41,12 @@ public SPersonid(String variable, String schema, String table) { } public SPersonid(Path path) { - super(path.getType(), path.getMetadata(), "null", "personid_"); + super(path.getType(), path.getMetadata(), "", "personid_"); addMetadata(); } public SPersonid(PathMetadata metadata) { - super(SPersonid.class, metadata, "null", "personid_"); + super(SPersonid.class, metadata, "", "personid_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayer.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayer.java index 986aecdaea..8d376148e8 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayer.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayer.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SPlayer extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fkd5dc571fd8736d5c = createInvForeignKey(id, "Player_id"); public SPlayer(String variable) { - super(SPlayer.class, forVariable(variable), "null", "player_"); + super(SPlayer.class, forVariable(variable), "", "player_"); addMetadata(); } @@ -38,12 +36,12 @@ public SPlayer(String variable, String schema, String table) { } public SPlayer(Path path) { - super(path.getType(), path.getMetadata(), "null", "player_"); + super(path.getType(), path.getMetadata(), "", "player_"); addMetadata(); } public SPlayer(PathMetadata metadata) { - super(SPlayer.class, metadata, "null", "player_"); + super(SPlayer.class, metadata, "", "player_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayerScores.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayerScores.java index 984b36a1e0..6caa1a29bb 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayerScores.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPlayerScores.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SPlayerScores extends com.mysema.query.sql.RelationalPathBase fkd5dc571fd8736d5c = createForeignKey(playerId, "id"); public SPlayerScores(String variable) { - super(SPlayerScores.class, forVariable(variable), "null", "Player_scores"); + super(SPlayerScores.class, forVariable(variable), "", "Player_scores"); addMetadata(); } @@ -38,12 +36,12 @@ public SPlayerScores(String variable, String schema, String table) { } public SPlayerScores(Path path) { - super(path.getType(), path.getMetadata(), "null", "Player_scores"); + super(path.getType(), path.getMetadata(), "", "Player_scores"); addMetadata(); } public SPlayerScores(PathMetadata metadata) { - super(SPlayerScores.class, metadata, "null", "Player_scores"); + super(SPlayerScores.class, metadata, "", "Player_scores"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPrice.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPrice.java index de1fdb5a81..eefa7f512a 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPrice.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SPrice.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +32,7 @@ public class SPrice extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fkaa04532f5222eaf7 = createInvForeignKey(id, "prices_id"); public SPrice(String variable) { - super(SPrice.class, forVariable(variable), "null", "price_"); + super(SPrice.class, forVariable(variable), "", "price_"); addMetadata(); } @@ -44,12 +42,12 @@ public SPrice(String variable, String schema, String table) { } public SPrice(Path path) { - super(path.getType(), path.getMetadata(), "null", "price_"); + super(path.getType(), path.getMetadata(), "", "price_"); addMetadata(); } public SPrice(PathMetadata metadata) { - super(SPrice.class, metadata, "null", "price_"); + super(SPrice.class, metadata, "", "price_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShapes.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShapes.java index 39553e0fe1..bce8a1da41 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShapes.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShapes.java @@ -1,18 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.SimplePath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +27,7 @@ public class SShapes extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SShapes(String variable) { - super(SShapes.class, forVariable(variable), "null", "SHAPES"); + super(SShapes.class, forVariable(variable), "", "SHAPES"); addMetadata(); } @@ -42,12 +37,12 @@ public SShapes(String variable, String schema, String table) { } public SShapes(Path path) { - super(path.getType(), path.getMetadata(), "null", "SHAPES"); + super(path.getType(), path.getMetadata(), "", "SHAPES"); addMetadata(); } public SShapes(PathMetadata metadata) { - super(SShapes.class, metadata, "null", "SHAPES"); + super(SShapes.class, metadata, "", "SHAPES"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShow.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShow.java index 746bed1393..b2dc979659 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShow.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShow.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +26,7 @@ public class SShow extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk5f6ee03ab40105c = createInvForeignKey(id, "Show_id"); public SShow(String variable) { - super(SShow.class, forVariable(variable), "null", "show_"); + super(SShow.class, forVariable(variable), "", "show_"); addMetadata(); } @@ -38,12 +36,12 @@ public SShow(String variable, String schema, String table) { } public SShow(Path path) { - super(path.getType(), path.getMetadata(), "null", "show_"); + super(path.getType(), path.getMetadata(), "", "show_"); addMetadata(); } public SShow(PathMetadata metadata) { - super(SShow.class, metadata, "null", "show_"); + super(SShow.class, metadata, "", "show_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShowActs.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShowActs.java index 4cbe881f98..e4a2c3a94e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShowActs.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SShowActs.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +31,7 @@ public class SShowActs extends com.mysema.query.sql.RelationalPathBase fk5f6ee03ab40105c = createForeignKey(showId, "id"); public SShowActs(String variable) { - super(SShowActs.class, forVariable(variable), "null", "Show_acts"); + super(SShowActs.class, forVariable(variable), "", "Show_acts"); addMetadata(); } @@ -42,12 +41,12 @@ public SShowActs(String variable, String schema, String table) { } public SShowActs(Path path) { - super(path.getType(), path.getMetadata(), "null", "Show_acts"); + super(path.getType(), path.getMetadata(), "", "Show_acts"); addMetadata(); } public SShowActs(PathMetadata metadata) { - super(SShowActs.class, metadata, "null", "Show_acts"); + super(SShowActs.class, metadata, "", "Show_acts"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSimpletypes.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSimpletypes.java index 0c9246a985..2164bd7708 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSimpletypes.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSimpletypes.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.*; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -62,7 +60,7 @@ public class SSimpletypes extends com.mysema.query.sql.RelationalPathBase primary = createPrimaryKey(id); public SSimpletypes(String variable) { - super(SSimpletypes.class, forVariable(variable), "null", "simpletypes_"); + super(SSimpletypes.class, forVariable(variable), "", "simpletypes_"); addMetadata(); } @@ -72,12 +70,12 @@ public SSimpletypes(String variable, String schema, String table) { } public SSimpletypes(Path path) { - super(path.getType(), path.getMetadata(), "null", "simpletypes_"); + super(path.getType(), path.getMetadata(), "", "simpletypes_"); addMetadata(); } public SSimpletypes(PathMetadata metadata) { - super(SSimpletypes.class, metadata, "null", "simpletypes_"); + super(SSimpletypes.class, metadata, "", "simpletypes_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatus.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatus.java index d6029aced9..d060672c8a 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatus.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatus.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +31,7 @@ public class SStatus extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk5fde7ac9ea26263 = createInvForeignKey(id, "currentStatus_id"); public SStatus(String variable) { - super(SStatus.class, forVariable(variable), "null", "status_"); + super(SStatus.class, forVariable(variable), "", "status_"); addMetadata(); } @@ -42,12 +41,12 @@ public SStatus(String variable, String schema, String table) { } public SStatus(Path path) { - super(path.getType(), path.getMetadata(), "null", "status_"); + super(path.getType(), path.getMetadata(), "", "status_"); addMetadata(); } public SStatus(PathMetadata metadata) { - super(SStatus.class, metadata, "null", "status_"); + super(SStatus.class, metadata, "", "status_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatuschange.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatuschange.java index 94da6dbeb0..68b90b771f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatuschange.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStatuschange.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DateTimePath; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +29,7 @@ public class SStatuschange extends com.mysema.query.sql.RelationalPathBase _fkcb99fb2ab2bd098d = createInvForeignKey(id, "statusChanges_id"); public SStatuschange(String variable) { - super(SStatuschange.class, forVariable(variable), "null", "statuschange_"); + super(SStatuschange.class, forVariable(variable), "", "statuschange_"); addMetadata(); } @@ -40,12 +39,12 @@ public SStatuschange(String variable, String schema, String table) { } public SStatuschange(Path path) { - super(path.getType(), path.getMetadata(), "null", "statuschange_"); + super(path.getType(), path.getMetadata(), "", "statuschange_"); addMetadata(); } public SStatuschange(PathMetadata metadata) { - super(SStatuschange.class, metadata, "null", "statuschange_"); + super(SStatuschange.class, metadata, "", "statuschange_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore.java index 0649575905..e18dc68796 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SStore extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk82ba2ce035d2d6bb = createInvForeignKey(id, "store__id"); public SStore(String variable) { - super(SStore.class, forVariable(variable), "null", "store_"); + super(SStore.class, forVariable(variable), "", "store_"); addMetadata(); } @@ -42,12 +40,12 @@ public SStore(String variable, String schema, String table) { } public SStore(Path path) { - super(path.getType(), path.getMetadata(), "null", "store_"); + super(path.getType(), path.getMetadata(), "", "store_"); addMetadata(); } public SStore(PathMetadata metadata) { - super(SStore.class, metadata, "null", "store_"); + super(SStore.class, metadata, "", "store_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore_customer.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore_customer.java index 9043fc462f..78e77ec5ac 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore_customer.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SStore_customer.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -30,7 +28,7 @@ public class SStore_customer extends com.mysema.query.sql.RelationalPathBase fk82ba2ce051f3c3e5 = createForeignKey(customersId, "id"); public SStore_customer(String variable) { - super(SStore_customer.class, forVariable(variable), "null", "store__customer_"); + super(SStore_customer.class, forVariable(variable), "", "store__customer_"); addMetadata(); } @@ -40,12 +38,12 @@ public SStore_customer(String variable, String schema, String table) { } public SStore_customer(Path path) { - super(path.getType(), path.getMetadata(), "null", "store__customer_"); + super(path.getType(), path.getMetadata(), "", "store__customer_"); addMetadata(); } public SStore_customer(PathMetadata metadata) { - super(SStore_customer.class, metadata, "null", "store__customer_"); + super(SStore_customer.class, metadata, "", "store__customer_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSurvey.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSurvey.java index 1ed537616e..9c735efd14 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSurvey.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SSurvey.java @@ -1,18 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -34,7 +29,7 @@ public class SSurvey extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.PrimaryKey primary = createPrimaryKey(id); public SSurvey(String variable) { - super(SSurvey.class, forVariable(variable), "null", "SURVEY"); + super(SSurvey.class, forVariable(variable), "", "SURVEY"); addMetadata(); } @@ -44,12 +39,12 @@ public SSurvey(String variable, String schema, String table) { } public SSurvey(Path path) { - super(path.getType(), path.getMetadata(), "null", "SURVEY"); + super(path.getType(), path.getMetadata(), "", "SURVEY"); addMetadata(); } public SSurvey(PathMetadata metadata) { - super(SSurvey.class, metadata, "null", "SURVEY"); + super(SSurvey.class, metadata, "", "SURVEY"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STest.java index 874b45ec3d..ed9a0db085 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STest.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +22,7 @@ public class STest extends com.mysema.query.sql.RelationalPathBase { public final StringPath name = createString("name"); public STest(String variable) { - super(STest.class, forVariable(variable), "null", "TEST"); + super(STest.class, forVariable(variable), "", "TEST"); addMetadata(); } @@ -38,12 +32,12 @@ public STest(String variable, String schema, String table) { } public STest(Path path) { - super(path.getType(), path.getMetadata(), "null", "TEST"); + super(path.getType(), path.getMetadata(), "", "TEST"); addMetadata(); } public STest(PathMetadata metadata) { - super(STest.class, metadata, "null", "TEST"); + super(STest.class, metadata, "", "TEST"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STimeTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STimeTest.java index 3c5cd1182e..29c0247e67 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STimeTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/STimeTest.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.TimePath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -28,7 +22,7 @@ public class STimeTest extends com.mysema.query.sql.RelationalPathBase timeTest = createTime("timeTest", java.sql.Time.class); public STimeTest(String variable) { - super(STimeTest.class, forVariable(variable), "null", "TIME_TEST"); + super(STimeTest.class, forVariable(variable), "", "TIME_TEST"); addMetadata(); } @@ -38,12 +32,12 @@ public STimeTest(String variable, String schema, String table) { } public STimeTest(Path path) { - super(path.getType(), path.getMetadata(), "null", "TIME_TEST"); + super(path.getType(), path.getMetadata(), "", "TIME_TEST"); addMetadata(); } public STimeTest(PathMetadata metadata) { - super(STimeTest.class, metadata, "null", "TIME_TEST"); + super(STimeTest.class, metadata, "", "TIME_TEST"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser.java index 58b536778c..253428385b 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser.java @@ -1,14 +1,13 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -38,7 +37,7 @@ public class SUser extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk9d39ef712743b59c = createInvForeignKey(id, "user_id"); public SUser(String variable) { - super(SUser.class, forVariable(variable), "null", "user_"); + super(SUser.class, forVariable(variable), "", "user_"); addMetadata(); } @@ -48,12 +47,12 @@ public SUser(String variable, String schema, String table) { } public SUser(Path path) { - super(path.getType(), path.getMetadata(), "null", "user_"); + super(path.getType(), path.getMetadata(), "", "user_"); addMetadata(); } public SUser(PathMetadata metadata) { - super(SUser.class, metadata, "null", "user_"); + super(SUser.class, metadata, "", "user_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2.java index 601d8ed1bd..e2069f066f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DateTimePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -50,7 +50,7 @@ public class SUser2 extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk4611b46af21971a1 = createInvForeignKey(id, "user2__id"); public SUser2(String variable) { - super(SUser2.class, forVariable(variable), "null", "user2_"); + super(SUser2.class, forVariable(variable), "", "user2_"); addMetadata(); } @@ -60,12 +60,12 @@ public SUser2(String variable, String schema, String table) { } public SUser2(Path path) { - super(path.getType(), path.getMetadata(), "null", "user2_"); + super(path.getType(), path.getMetadata(), "", "user2_"); addMetadata(); } public SUser2(PathMetadata metadata) { - super(SUser2.class, metadata, "null", "user2_"); + super(SUser2.class, metadata, "", "user2_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2_userprop.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2_userprop.java index e0f9aa9cc7..c259277d17 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2_userprop.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUser2_userprop.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SUser2_userprop extends com.mysema.query.sql.RelationalPathBase fk4611b46aa56541dd = createForeignKey(propertiesId, "id"); public SUser2_userprop(String variable) { - super(SUser2_userprop.class, forVariable(variable), "null", "user2__userprop_"); + super(SUser2_userprop.class, forVariable(variable), "", "user2__userprop_"); addMetadata(); } @@ -42,12 +40,12 @@ public SUser2_userprop(String variable, String schema, String table) { } public SUser2_userprop(Path path) { - super(path.getType(), path.getMetadata(), "null", "user2__userprop_"); + super(path.getType(), path.getMetadata(), "", "user2__userprop_"); addMetadata(); } public SUser2_userprop(PathMetadata metadata) { - super(SUser2_userprop.class, metadata, "null", "user2__userprop_"); + super(SUser2_userprop.class, metadata, "", "user2__userprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop.java index cbeecdc023..d49b4aff06 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop.java @@ -1,14 +1,14 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.DateTimePath; +import com.mysema.query.types.path.NumberPath; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -48,7 +48,7 @@ public class SUserprop extends com.mysema.query.sql.RelationalPathBase _fk4611b46aa56541dd = createInvForeignKey(id, "properties_id"); public SUserprop(String variable) { - super(SUserprop.class, forVariable(variable), "null", "userprop_"); + super(SUserprop.class, forVariable(variable), "", "userprop_"); addMetadata(); } @@ -58,12 +58,12 @@ public SUserprop(String variable, String schema, String table) { } public SUserprop(Path path) { - super(path.getType(), path.getMetadata(), "null", "userprop_"); + super(path.getType(), path.getMetadata(), "", "userprop_"); addMetadata(); } public SUserprop(PathMetadata metadata) { - super(SUserprop.class, metadata, "null", "userprop_"); + super(SUserprop.class, metadata, "", "userprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_category.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_category.java index b0f1cbf4c9..478c2d61ed 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_category.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_category.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SUserprop_category extends com.mysema.query.sql.RelationalPathBase< public final com.mysema.query.sql.ForeignKey fk851f48d37ab543e8 = createForeignKey(childCategoriesId, "id"); public SUserprop_category(String variable) { - super(SUserprop_category.class, forVariable(variable), "null", "userprop__category_"); + super(SUserprop_category.class, forVariable(variable), "", "userprop__category_"); addMetadata(); } @@ -42,12 +40,12 @@ public SUserprop_category(String variable, String schema, String table) { } public SUserprop_category(Path path) { - super(path.getType(), path.getMetadata(), "null", "userprop__category_"); + super(path.getType(), path.getMetadata(), "", "userprop__category_"); addMetadata(); } public SUserprop_category(PathMetadata metadata) { - super(SUserprop_category.class, metadata, "null", "userprop__category_"); + super(SUserprop_category.class, metadata, "", "userprop__category_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_categoryprop.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_categoryprop.java index 05ba82c95f..19e0946211 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_categoryprop.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SUserprop_categoryprop.java @@ -1,14 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +30,7 @@ public class SUserprop_categoryprop extends com.mysema.query.sql.RelationalPathB public final com.mysema.query.sql.ForeignKey fke0fdb7d0904c19df = createForeignKey(userprop_id, "id"); public SUserprop_categoryprop(String variable) { - super(SUserprop_categoryprop.class, forVariable(variable), "null", "userprop__categoryprop_"); + super(SUserprop_categoryprop.class, forVariable(variable), "", "userprop__categoryprop_"); addMetadata(); } @@ -42,12 +40,12 @@ public SUserprop_categoryprop(String variable, String schema, String table) { } public SUserprop_categoryprop(Path path) { - super(path.getType(), path.getMetadata(), "null", "userprop__categoryprop_"); + super(path.getType(), path.getMetadata(), "", "userprop__categoryprop_"); addMetadata(); } public SUserprop_categoryprop(PathMetadata metadata) { - super(SUserprop_categoryprop.class, metadata, "null", "userprop__categoryprop_"); + super(SUserprop_categoryprop.class, metadata, "", "userprop__categoryprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorld.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorld.java index fbf268949f..ccf6fa2f50 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorld.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorld.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -32,7 +26,7 @@ public class SWorld extends com.mysema.query.sql.RelationalPathBase { public final com.mysema.query.sql.ForeignKey _fk4070aeecd3538cf8 = createInvForeignKey(id, "World_id"); public SWorld(String variable) { - super(SWorld.class, forVariable(variable), "null", "World"); + super(SWorld.class, forVariable(variable), "", "World"); addMetadata(); } @@ -42,12 +36,12 @@ public SWorld(String variable, String schema, String table) { } public SWorld(Path path) { - super(path.getType(), path.getMetadata(), "null", "World"); + super(path.getType(), path.getMetadata(), "", "World"); addMetadata(); } public SWorld(PathMetadata metadata) { - super(SWorld.class, metadata, "null", "World"); + super(SWorld.class, metadata, "", "World"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorldMammal.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorldMammal.java index eb5c423795..eb7f84e791 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorldMammal.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/sql/SWorldMammal.java @@ -1,18 +1,12 @@ package com.mysema.query.jpa.domain.sql; -import static com.mysema.query.types.PathMetadataFactory.*; - -import com.mysema.query.types.path.*; - -import com.mysema.query.types.PathMetadata; import javax.annotation.Generated; -import com.mysema.query.types.Path; import com.mysema.query.sql.ColumnMetadata; - -import java.io.*; - -import java.io.File; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; /** @@ -36,7 +30,7 @@ public class SWorldMammal extends com.mysema.query.sql.RelationalPathBase fk4070aeecd3538cf8 = createForeignKey(worldId, "id"); public SWorldMammal(String variable) { - super(SWorldMammal.class, forVariable(variable), "null", "World_Mammal"); + super(SWorldMammal.class, forVariable(variable), "", "World_Mammal"); addMetadata(); } @@ -46,12 +40,12 @@ public SWorldMammal(String variable, String schema, String table) { } public SWorldMammal(Path path) { - super(path.getType(), path.getMetadata(), "null", "World_Mammal"); + super(path.getType(), path.getMetadata(), "", "World_Mammal"); addMetadata(); } public SWorldMammal(PathMetadata metadata) { - super(SWorldMammal.class, metadata, "null", "World_Mammal"); + super(SWorldMammal.class, metadata, "", "World_Mammal"); addMetadata(); } From a9817f5d0f9a59f5f8714a8f45ea6cb8c5afb490 Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Sun, 10 Aug 2014 11:45:56 +0700 Subject: [PATCH 0322/1968] Removed the builder and made the internal context object mutable. Also various fix ups from PR review --- .../mysema/query/sql/AbstractSQLQuery.java | 49 ++--- .../mysema/query/sql/SQLListenerAdapter.java | 40 ++-- .../mysema/query/sql/SQLListenerContext.java | 43 ++++- .../query/sql/SQLListenerContextBuilder.java | 175 ------------------ .../query/sql/SQLListenerContextImpl.java | 161 ++++++++++++++++ .../query/sql/dml/AbstractSQLClause.java | 14 +- .../mysema/query/sql/dml/SQLDeleteClause.java | 16 +- .../mysema/query/sql/dml/SQLInsertClause.java | 14 +- .../mysema/query/sql/dml/SQLMergeClause.java | 18 +- .../mysema/query/sql/dml/SQLUpdateClause.java | 16 +- .../com/mysema/query/SQLListenersTest.java | 171 ++++++++++++++++- 11 files changed, 430 insertions(+), 287 deletions(-) delete mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index fb5d8b2055..fdd9f46b3f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -42,8 +42,6 @@ import com.mysema.query.types.Path; import com.mysema.util.ResultSetAdapter; -import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; - /** * AbstractSQLQuery is the base type for SQL query implementations * @@ -130,9 +128,9 @@ private void set(PreparedStatement stmt, Path path, int i, Object value) thro * @param metadata the meta data for that context * @return the newly started context */ - protected SQLListenerContext startContext(Connection connection, QueryMetadata metadata) + protected SQLListenerContextImpl startContext(Connection connection, QueryMetadata metadata) { - SQLListenerContext context = newContext(metadata).with(connection).build(); + SQLListenerContextImpl context = new SQLListenerContextImpl(metadata,connection); listeners.start(context); return context; } @@ -144,9 +142,9 @@ protected SQLListenerContext startContext(Connection connection, QueryMetadata m * @param e the exception * @return the new context */ - protected SQLListenerContext onException(SQLListenerContext context, Exception e) + protected SQLListenerContextImpl onException(SQLListenerContextImpl context, Exception e) { - context = newContext(context).with(e).build(); + context.setException(e); listeners.exception(context); return context; } @@ -171,7 +169,7 @@ protected void endContext(SQLListenerContext context) public ResultSet getResults(Expression... exprs) { queryMixin.addProjection(exprs); - SQLListenerContext context = startContext(conn, queryMixin.getMetadata()); + SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); listeners.preRender(context); SQLSerializer serializer = serialize(false); @@ -179,7 +177,7 @@ public ResultSet getResults(Expression... exprs) { if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); listeners.notifyQuery(queryMixin.getMetadata()); @@ -189,7 +187,7 @@ public ResultSet getResults(Expression... exprs) { listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), getMetadata().getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); listeners.preExecute(context); @@ -227,7 +225,7 @@ public CloseableIterator iterate(Expression expr) { @SuppressWarnings("unchecked") private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullable final Expression expr) { - SQLListenerContext context = startContext(conn,queryMixin.getMetadata()); + SQLListenerContextImpl context = startContext(conn,queryMixin.getMetadata()); listeners.preRender(context); SQLSerializer serializer = serialize(false); @@ -235,7 +233,7 @@ private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullab if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); @@ -245,7 +243,7 @@ private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullab listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), metadata.getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); listeners.preExecute(context); @@ -300,7 +298,7 @@ public RT produceNext(ResultSet rs) throws Exception { @Override public List list(Expression expr) { expr = queryMixin.addProjection(expr); - SQLListenerContext context = startContext(conn, queryMixin.getMetadata()); + SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); listeners.preRender(context); SQLSerializer serializer = serialize(false); @@ -308,7 +306,7 @@ public List list(Expression expr) { if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); listeners.notifyQuery(queryMixin.getMetadata()); @@ -318,7 +316,7 @@ public List list(Expression expr) { final PreparedStatement stmt = conn.prepareStatement(queryString); try { setParameters(stmt, constants, serializer.getConstantPaths(), queryMixin.getMetadata().getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); listeners.preExecute(context); @@ -359,23 +357,16 @@ public List list(Expression expr) { } return rv; } catch (IllegalAccessException e) { - context = newContext(context).with(e).build(); - listeners.exception(context); - + onException(context, e); throw new QueryException(e); } catch (InvocationTargetException e) { - context = newContext(context).with(e).build(); - listeners.exception(context); - + onException(context,e); throw new QueryException(e); } catch (InstantiationException e) { - context = newContext(context).with(e).build(); - listeners.exception(context); - + onException(context,e); throw new QueryException(e); } catch (SQLException e) { - context = onException(context, e); - + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { rs.close(); @@ -481,7 +472,7 @@ public RT uniqueResult(Expression expr) { } private long unsafeCount() throws SQLException { - SQLListenerContext context = startContext(conn,getMetadata()); + SQLListenerContextImpl context = startContext(conn,getMetadata()); listeners.preRender(context); SQLSerializer serializer = serialize(true); @@ -489,7 +480,7 @@ private long unsafeCount() throws SQLException { if (logger.isDebugEnabled()) { logger.debug("query : {}", queryString); } - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); List constants = serializer.getConstants(); @@ -501,7 +492,7 @@ private long unsafeCount() throws SQLException { stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), getMetadata().getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); listeners.preExecute(context); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java index d64107c66e..e542adcb77 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java @@ -18,11 +18,11 @@ class SQLListenerAdapter implements SQLDetailedListener { private final SQLListener sqlListener; - private final SQLDetailedListener SQLDetailedListener; + private final SQLDetailedListener detailedListener; SQLListenerAdapter(final SQLListener sqlListener) { - this.SQLDetailedListener = sqlListener instanceof SQLDetailedListener ? (SQLDetailedListener) sqlListener : null; + this.detailedListener = sqlListener instanceof SQLDetailedListener ? (SQLDetailedListener) sqlListener : null; this.sqlListener = sqlListener; } @@ -34,81 +34,81 @@ public SQLListener getSqlListener() @Override public void start(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.start(context); + detailedListener.start(context); } } @Override public void preRender(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.preRender(context); + detailedListener.preRender(context); } } @Override public void rendered(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.rendered(context); + detailedListener.rendered(context); } } @Override public void prePrepare(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.prePrepare(context); + detailedListener.prePrepare(context); } } @Override public void prepared(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.prepared(context); + detailedListener.prepared(context); } } @Override public void preExecute(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.preExecute(context); + detailedListener.preExecute(context); } } @Override public void executed(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.executed(context); + detailedListener.executed(context); } } @Override public void end(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.end(context); + detailedListener.end(context); } } @Override public void exception(final SQLListenerContext context) { - if (SQLDetailedListener != null) + if (detailedListener != null) { - SQLDetailedListener.exception(context); + detailedListener.exception(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java index 5c8563edd6..c5c14681b1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java @@ -5,23 +5,34 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Collection; -import java.util.Map; /** - * A context object that is progressively filled out during query execution and is - * passed to each {@link SQLDetailedListener} callback method + * A context object that is progressively filled out during query execution and is passed to each {@link + * SQLDetailedListener} callback method */ public interface SQLListenerContext { /** - * The context getMap is a general purpose place that listeners can place objects. It allows listeners to pass context - * between themselves during callbacks. + * The context getData is a general purpose place that listeners can place objects. It allows listeners to pass + * context between themselves during callbacks. *

- * This is never null but can be empty * - * @return the context getMap + * @param dataKey the key to look up + * @return the context object under that key */ - Map getMap(); + Object getData(String dataKey); + + /** + * The context setData is a general purpose place that listeners can place objects. It allows listeners to pass + * context between themselves during callbacks. + *

+ * A good time to place objects into the context is during {@link com.mysema.query.sql.SQLDetailedListener#start(SQLListenerContext)} + * and then access if after that. + * + * @param dataKey the key to use + * @param value the value to place under that key + */ + void setData(String dataKey, Object value); /** * @return the underlying query metadata @@ -31,10 +42,17 @@ public interface SQLListenerContext /** * NOTE : This can be null depending on the stage of the query execution * - * @return the underlying sql + * @return the underlying sql or first in a batch query */ String getSQL(); + /** + * NOTE : This can be empty depending on the stage of the query execution + * + * @return the underlying sql collection if the query is a batch query + */ + Collection getSQLStatements(); + /** * NOTE : This can be null depending on the stage of the query execution * @@ -59,6 +77,13 @@ public interface SQLListenerContext /** * NOTE : This can be null depending on the stage of the query execution * + * @return the underlying prepared statement or the first if its batch query + */ + PreparedStatement getPreparedStatement(); + + /** + * NOTE : This can be empty depending on the stage of the query execution + * * @return the underlying set of prepared statements */ Collection getPreparedStatements(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java deleted file mode 100644 index a1e663805c..0000000000 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextBuilder.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.mysema.query.sql; - -import com.google.common.collect.Lists; -import com.mysema.query.QueryMetadata; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -/** - * A builder of {@link com.mysema.query.sql.SQLListenerContext} objects - */ -public class SQLListenerContextBuilder -{ - private Map contextMap = new HashMap(); - - private QueryMetadata md; - - private String sql; - - private RelationalPath entity; - - private Connection connection; - - private Exception exception; - - private Collection preparedStatements; - - SQLListenerContextBuilder(final QueryMetadata md) - { - this.md = md; - } - - public static SQLListenerContextBuilder newContext(QueryMetadata md) - { - return new SQLListenerContextBuilder(md); - } - - public static SQLListenerContextBuilder newContext(SQLListenerContext context) - { - return new SQLListenerContextBuilder(context.getMetadata()) - .with(context.getMap()) - .with(context.getConnection()) - .with(context.getEntity()) - .with(context.getException()) - .with(context.getPreparedStatements()) - .with(context.getSQL()) - ; - } - - SQLListenerContextBuilder with(Map contextMap) - { - this.contextMap = contextMap; - return this; - } - - public SQLListenerContextBuilder with(RelationalPath entity) - { - this.entity = entity; - return this; - } - - public SQLListenerContextBuilder with(String sql) - { - this.sql = sql; - return this; - } - - public SQLListenerContextBuilder with(Exception exception) - { - this.exception = exception; - return this; - } - - public SQLListenerContextBuilder with(Connection connection) - { - this.connection = connection; - return this; - } - - public SQLListenerContextBuilder with(PreparedStatement preparedStatement) - { - if (preparedStatement != null) - { - this.preparedStatements = Lists.newArrayList(preparedStatement); - } - return this; - } - - public SQLListenerContextBuilder with(Collection preparedStatements) - { - if (preparedStatements != null) - { - this.preparedStatements = Lists.newArrayList(preparedStatements); - } - return this; - } - - public SQLListenerContext build() - { - return new SQLListenerContextImpl(); - } - - /** - * A simple implementation that looks at the builder for values - */ - class SQLListenerContextImpl implements SQLListenerContext - { - @Override - public QueryMetadata getMetadata() - { - return md; - } - - @Override - public RelationalPath getEntity() - { - return entity; - } - - @Override - public String getSQL() - { - return sql; - } - - @Override - public Exception getException() - { - return exception; - } - - @Override - public Connection getConnection() - { - return connection; - } - - @Override - public Collection getPreparedStatements() - { - return preparedStatements; - } - - @Override - public Map getMap() - { - return contextMap; - } - - @Override - public String toString() - { - StringBuilder sb = new StringBuilder() - .append(" sql:").append(nicerSql(sql)) - .append(" connection:").append(connection == null ? "not connected" : "connected") - .append(" entity:").append(entity) - .append(" exception:").append(exception); - - for (Map.Entry entry : contextMap.entrySet()) - { - sb.append(" [").append(entry.getKey()).append(":").append(entry.getValue()).append("]"); - } - return sb.toString(); - } - - private String nicerSql(final String sql) - { - return "'" + (sql == null ? null : sql.replace('\n', ' ')) + "'"; - } - } - -} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java new file mode 100644 index 0000000000..735b2cb344 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java @@ -0,0 +1,161 @@ +package com.mysema.query.sql; + +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.mysema.query.QueryMetadata; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * A mutable implementation of SQL listener context. + *

+ * INTERNAL USE ONLY - {@link com.mysema.query.sql.SQLDetailedListener} implementations are not expected to use this + * class directly + */ +public class SQLListenerContextImpl implements SQLListenerContext +{ + private final Map contextMap; + + private final QueryMetadata md; + + private final List sqlStatements; + + private final List preparedStatements; + + private RelationalPath entity; + + private Connection connection; + + private Exception exception; + + public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection, final RelationalPath entity) + { + this.contextMap = Maps.newHashMap(); + this.preparedStatements = Lists.newArrayList(); + this.sqlStatements = Lists.newArrayList(); + this.md = metadata; + this.connection = connection; + this.entity = entity; + } + + public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection) + { + this(metadata, connection, null); + } + + public SQLListenerContextImpl(final QueryMetadata metadata) + { + this(metadata, null, null); + } + + public void addSQL(final String sql) + { + this.sqlStatements.add(sql); + } + + public void setEntity(final RelationalPath entity) + { + this.entity = entity; + } + + public void setConnection(final Connection connection) + { + this.connection = connection; + } + + public void setException(final Exception exception) + { + this.exception = exception; + } + + public void addPreparedStatement(final PreparedStatement preparedStatement) + { + this.preparedStatements.add(preparedStatement); + } + + @Override + public QueryMetadata getMetadata() + { + return md; + } + + @Override + public RelationalPath getEntity() + { + return entity; + } + + @Override + public String getSQL() + { + return sqlStatements.isEmpty() ? null : sqlStatements.get(0); + } + + @Override + public Collection getSQLStatements() + { + return sqlStatements; + } + + @Override + public Exception getException() + { + return exception; + } + + @Override + public Connection getConnection() + { + return connection; + } + + @Override + public Collection getPreparedStatements() + { + return preparedStatements; + } + + @Override + public PreparedStatement getPreparedStatement() + { + return preparedStatements.isEmpty() ? null : preparedStatements.get(0); + } + + @Override + public Object getData(final String dataKey) + { + return contextMap.get(dataKey); + } + + @Override + public void setData(final String dataKey, final Object value) + { + contextMap.put(dataKey, value); + } + + + @Override + public String toString() + { + StringBuilder sb = new StringBuilder() + .append(" sql:").append(nicerSql(getSQL())) + .append(" connection:").append(connection == null ? "not connected" : "connected") + .append(" entity:").append(entity) + .append(" exception:").append(exception); + + for (Map.Entry entry : contextMap.entrySet()) + { + sb.append(" [").append(entry.getKey()).append(":").append(entry.getValue()).append("]"); + } + return sb.toString(); + } + + private String nicerSql(final String sql) + { + return "'" + (sql == null ? null : sql.replace('\n', ' ')) + "'"; + } +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index a581ef9b4e..7be500c1c1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -44,7 +44,7 @@ public abstract class AbstractSQLClause> implemen protected boolean useLiterals; - protected SQLListenerContext context; + protected SQLListenerContextImpl context; /** * @param configuration @@ -69,9 +69,9 @@ public void addListener(SQLListener listener) { * @param entity the entity for that context * @return the newly started context */ - protected SQLListenerContext startContext(Connection connection, QueryMetadata metadata, RelationalPath entity) + protected SQLListenerContextImpl startContext(Connection connection, QueryMetadata metadata, RelationalPath entity) { - SQLListenerContext context = SQLListenerContextBuilder.newContext(metadata).with(connection).with(entity).build(); + SQLListenerContextImpl context = new SQLListenerContextImpl(metadata,connection,entity); listeners.start(context); return context; } @@ -81,20 +81,18 @@ protected SQLListenerContext startContext(Connection connection, QueryMetadata m * * @param context the current context in play * @param e the exception - * @return the new context */ - protected SQLListenerContext onException(SQLListenerContext context, Exception e) + protected void onException(SQLListenerContextImpl context, Exception e) { - context = SQLListenerContextBuilder.newContext(context).with(e).build(); + context.setException(e); listeners.exception(context); - return context; } /** * Called to end a SQL listener context * @param context the listener context to end */ - protected void endContext(SQLListenerContext context) + protected void endContext(SQLListenerContextImpl context) { listeners.end(context); this.context = null; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index eb98cf5e15..1de6b50c69 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -34,8 +34,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; - /** * SQLDeleteClause defines a DELETE clause * @@ -118,14 +116,14 @@ private PreparedStatement createStatement() throws SQLException{ queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); return stmt; @@ -138,7 +136,7 @@ private Collection createStatements() throws SQLException { queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); Map stmts = Maps.newHashMap(); @@ -149,7 +147,7 @@ private Collection createStatements() throws SQLException { setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); stmts.put(queryString, stmt); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); @@ -158,7 +156,7 @@ private Collection createStatements() throws SQLException { listeners.preRender(context); serializer = createSerializer(); serializer.serializeDelete(batches.get(i), entity); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); stmt = stmts.get(serializer.toString()); @@ -166,7 +164,7 @@ private Collection createStatements() throws SQLException { listeners.prePrepare(context); stmt = connection.prepareStatement(serializer.toString()); stmts.put(serializer.toString(), stmt); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); @@ -200,7 +198,7 @@ public long execute() { return rc; } } catch (SQLException e) { - context = onException(context,e); + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index 317bedce42..9cc59f7eaa 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -32,8 +32,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; - /** * SQLInsertClause defines an INSERT INTO clause * @@ -224,7 +222,7 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException } serializer.serializeInsert(metadata, entity, columns, values, subQuery); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); return prepareStatementAndSetParameters(serializer, withKeys); } @@ -246,7 +244,7 @@ private Collection createStatements(boolean withKeys) throws PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); stmt.addBatch(); stmts.put(serializer.toString(), stmt); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); // add other batches @@ -257,7 +255,7 @@ private Collection createStatements(boolean withKeys) throws serializer = createSerializer(); serializer.serializeInsert(metadata, entity, batch.getColumns(), batch.getValues(), batch.getSubQuery()); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); stmt = stmts.get(serializer.toString()); @@ -300,7 +298,7 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); return stmt; } @@ -347,7 +345,7 @@ public void close() throws SQLException { } }; } catch (SQLException e) { - context = onException(context,e); + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { endContext(context); @@ -378,7 +376,7 @@ public long execute() { return rc; } } catch (SQLException e) { - context = onException(context,e); + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 3a5e99d209..33e0bde6fb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -32,8 +32,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.mysema.query.sql.SQLListenerContextBuilder.*; - /** * SQLMergeClause defines an MERGE INTO clause * @@ -254,7 +252,7 @@ public void close() throws SQLException { } } } catch (SQLException e) { - context = onException(context,e); + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { endContext(context); @@ -331,18 +329,18 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException PreparedStatement stmt = null; if (batches.isEmpty()) { serializer.serializeMerge(metadata, entity, keys, columns, values, subQuery); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); listeners.prePrepare(context); stmt = prepareStatementAndSetParameters(serializer, withKeys); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); } else { serializer.serializeMerge(metadata, entity, batches.get(0).getKeys(), batches.get(0).getColumns(), batches.get(0).getValues(), batches.get(0).getSubQuery()); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); stmt = prepareStatementAndSetParameters(serializer, withKeys); @@ -356,7 +354,7 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException listeners.preRender(context); serializer = createSerializer(); serializer.serializeMerge(metadata, entity, batch.getKeys(), batch.getColumns(), batch.getValues(), batch.getSubQuery()); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); @@ -375,7 +373,7 @@ private Collection createStatements(boolean withKeys) throws serializer.serializeMerge(metadata, entity, batches.get(0).getKeys(), batches.get(0).getColumns(), batches.get(0).getValues(), batches.get(0).getSubQuery()); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); @@ -419,7 +417,7 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali stmt = connection.prepareStatement(queryString); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); return stmt; @@ -448,7 +446,7 @@ private long executeNativeMerge() { return rc; } } catch (SQLException e) { - context = onException(context,e); + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index d64f8846f5..863fcf63d6 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -31,8 +31,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.mysema.query.sql.SQLListenerContextBuilder.newContext; - /** * SQLUpdateClause defines a UPDATE clause * @@ -112,13 +110,13 @@ private PreparedStatement createStatement() throws SQLException{ queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.prepared(context); listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); return stmt; @@ -131,7 +129,7 @@ private Collection createStatements() throws SQLException { queryString = serializer.toString(); constants = serializer.getConstants(); logger.debug(queryString); - context = newContext(context).with(queryString).build(); + context.addSQL(queryString); listeners.rendered(context); Map stmts = Maps.newHashMap(); @@ -142,7 +140,7 @@ private Collection createStatements() throws SQLException { setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); stmt.addBatch(); stmts.put(serializer.toString(), stmt); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); @@ -151,7 +149,7 @@ private Collection createStatements() throws SQLException { listeners.preRender(context); serializer = createSerializer(); serializer.serializeUpdate(batches.get(i).getMetadata(), entity, batches.get(i).getUpdates()); - context = newContext(context).with(serializer.toString()).build(); + context.addSQL(serializer.toString()); listeners.rendered(context); stmt = stmts.get(serializer.toString()); @@ -159,7 +157,7 @@ private Collection createStatements() throws SQLException { listeners.prePrepare(context); stmt = connection.prepareStatement(serializer.toString()); stmts.put(serializer.toString(), stmt); - context = newContext(context).with(stmt).build(); + context.addPreparedStatement(stmt); listeners.prepared(context); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); @@ -194,7 +192,7 @@ public long execute() { return rc; } } catch (SQLException e) { - context = onException(context,e); + onException(context,e); throw configuration.translate(queryString, constants, e); } finally { if (stmt != null) { diff --git a/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java b/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java index b1089fbbaa..ffcdaee61d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SQLListenersTest.java @@ -1,20 +1,34 @@ package com.mysema.query; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; - +import com.mysema.commons.lang.Pair; +import com.mysema.query.sql.RelationalPath; import com.mysema.query.sql.SQLDetailedListener; +import com.mysema.query.sql.SQLListener; import com.mysema.query.sql.SQLListenerContext; +import com.mysema.query.sql.SQLListenerContextImpl; +import com.mysema.query.sql.SQLListeners; +import com.mysema.query.sql.dml.SQLInsertBatch; +import com.mysema.query.sql.dml.SQLMergeBatch; +import com.mysema.query.sql.dml.SQLUpdateBatch; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Path; +import com.mysema.query.types.SubQueryExpression; +import org.hamcrest.CoreMatchers; import org.junit.Test; -import com.mysema.query.sql.SQLListener; -import com.mysema.query.sql.SQLListeners; +import java.util.List; + +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertThat; -public class SQLListenersTest { +public class SQLListenersTest +{ @Test - public void NotifyQuery() { + public void NotifyQuery() + { SQLListener listener = createMock(SQLListener.class); SQLListeners listeners = new SQLListeners(); listeners.add(listener); @@ -28,7 +42,8 @@ public void NotifyQuery() { } @Test - public void NotifyQuery_Parent() { + public void NotifyQuery_Parent() + { SQLListener listener = createMock(SQLListener.class); SQLListeners listeners = new SQLListeners(listener); @@ -42,7 +57,8 @@ public void NotifyQuery_Parent() { @Test - public void NotifyQuery_DetailedListener_start() { + public void NotifyQuery_DetailedListener_start() + { SQLListenerContext sqlListenerContext = createMock(SQLListenerContext.class); SQLDetailedListener listenerParent = createMock(SQLDetailedListener.class); SQLDetailedListener listener1 = createMock(SQLDetailedListener.class); @@ -67,4 +83,139 @@ public void NotifyQuery_DetailedListener_start() { verify(listener1); verify(listener2); } + + + @Test + public void NotifyQuery_DetailedListener_contexSetting() + { + SQLListenerContext sqlListenerContext = new SQLListenerContextImpl(new DefaultQueryMetadata()); + SQLDetailedListener listenerParent = new AssertingDetailedListener("keyParent", "valueParent"); + SQLDetailedListener listener1 = new AssertingDetailedListener("key1", "value1"); + SQLDetailedListener listener2 = new AssertingDetailedListener("key1", "value1"); + + SQLListeners listeners = new SQLListeners(listenerParent); + listeners.add(listener1); + listeners.add(listener2); + + listeners.start(sqlListenerContext); + listeners.preRender(sqlListenerContext); + listeners.rendered(sqlListenerContext); + listeners.prePrepare(sqlListenerContext); + listeners.prepared(sqlListenerContext); + listeners.preExecute(sqlListenerContext); + listeners.preExecute(sqlListenerContext); + } + + + static class AssertingDetailedListener implements SQLDetailedListener + { + private final String key; + private final Object value; + + AssertingDetailedListener(final String key, final Object value) + { + this.key = key; + this.value = value; + } + + @Override + public void start(final SQLListenerContext context) + { + context.setData(key, value); + } + + @Override + public void preRender(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void rendered(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void prePrepare(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void prepared(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void preExecute(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void executed(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void exception(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void end(final SQLListenerContext context) + { + assertThat(this.value, CoreMatchers.equalTo(context.getData(key))); + } + + @Override + public void notifyQuery(final QueryMetadata md) + { + } + + @Override + public void notifyDelete(final RelationalPath entity, final QueryMetadata md) + { + } + + @Override + public void notifyDeletes(final RelationalPath entity, final List batches) + { + } + + @Override + public void notifyMerge(final RelationalPath entity, final QueryMetadata md, final List> keys, final List> columns, final List> values, final SubQueryExpression subQuery) + { + } + + @Override + public void notifyMerges(final RelationalPath entity, final QueryMetadata md, final List batches) + { + } + + @Override + public void notifyInsert(final RelationalPath entity, final QueryMetadata md, final List> columns, final List> values, final SubQueryExpression subQuery) + { + } + + @Override + public void notifyInserts(final RelationalPath entity, final QueryMetadata md, final List batches) + { + } + + @Override + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) + { + } + + @Override + public void notifyUpdates(final RelationalPath entity, final List batches) + { + } + } + } From 73414f64ece4bdf1ab739cd9efd7b31f466a4f8f Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Mon, 11 Aug 2014 10:12:39 +0700 Subject: [PATCH 0323/1968] Now using quotes in single line. I use IDEA so I dont have the Eclipse settings. This is the default IDEA settings --- .../mysema/query/sql/AbstractSQLQuery.java | 19 ++-- .../mysema/query/sql/SQLDetailedListener.java | 3 +- .../mysema/query/sql/SQLListenerAdapter.java | 90 +++++++------------ .../mysema/query/sql/SQLListenerContext.java | 5 +- .../query/sql/SQLListenerContextImpl.java | 66 +++++--------- .../com/mysema/query/sql/SQLListeners.java | 46 ++++------ .../query/sql/dml/AbstractSQLClause.java | 36 ++++---- 7 files changed, 96 insertions(+), 169 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index fdd9f46b3f..48415b41a8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -124,13 +124,13 @@ private void set(PreparedStatement stmt, Path path, int i, Object value) thro /** * Called to create and start a new SQL Listener context + * * @param connection the database connection - * @param metadata the meta data for that context - * @return the newly started context + * @param metadata the meta data for that context + * @return the newly started context */ - protected SQLListenerContextImpl startContext(Connection connection, QueryMetadata metadata) - { - SQLListenerContextImpl context = new SQLListenerContextImpl(metadata,connection); + protected SQLListenerContextImpl startContext(Connection connection, QueryMetadata metadata) { + SQLListenerContextImpl context = new SQLListenerContextImpl(metadata, connection); listeners.start(context); return context; } @@ -139,11 +139,10 @@ protected SQLListenerContextImpl startContext(Connection connection, QueryMetada * Called to make the call back to listeners when an exception happens * * @param context the current context in play - * @param e the exception + * @param e the exception * @return the new context */ - protected SQLListenerContextImpl onException(SQLListenerContextImpl context, Exception e) - { + protected SQLListenerContextImpl onException(SQLListenerContextImpl context, Exception e) { context.setException(e); listeners.exception(context); return context; @@ -151,10 +150,10 @@ protected SQLListenerContextImpl onException(SQLListenerContextImpl context, Exc /** * Called to end a SQL listener context + * * @param context the listener context to end */ - protected void endContext(SQLListenerContext context) - { + protected void endContext(SQLListenerContext context) { listeners.end(context); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java index 530f04cbf8..31b009f325 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLDetailedListener.java @@ -3,8 +3,7 @@ /** * An extended listener interface that details much more about the preparation and execution of queries */ -public interface SQLDetailedListener extends SQLListener -{ +public interface SQLDetailedListener extends SQLListener { /** * Called at the start of a query. Most context parameters are empty at this stage * diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java index e542adcb77..f20192e2c8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerAdapter.java @@ -14,155 +14,125 @@ /** * A simple adapter class that knows if the underlying listener is a simple or detailed SQL listener */ -class SQLListenerAdapter implements SQLDetailedListener -{ +class SQLListenerAdapter implements SQLDetailedListener { private final SQLListener sqlListener; private final SQLDetailedListener detailedListener; - SQLListenerAdapter(final SQLListener sqlListener) - { + SQLListenerAdapter(final SQLListener sqlListener) { this.detailedListener = sqlListener instanceof SQLDetailedListener ? (SQLDetailedListener) sqlListener : null; this.sqlListener = sqlListener; } - public SQLListener getSqlListener() - { + public SQLListener getSqlListener() { return sqlListener; } @Override - public void start(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void start(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.start(context); } } @Override - public void preRender(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void preRender(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.preRender(context); } } @Override - public void rendered(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void rendered(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.rendered(context); } } @Override - public void prePrepare(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void prePrepare(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.prePrepare(context); } } @Override - public void prepared(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void prepared(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.prepared(context); } } @Override - public void preExecute(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void preExecute(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.preExecute(context); } } @Override - public void executed(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void executed(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.executed(context); } } @Override - public void end(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void end(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.end(context); } } @Override - public void exception(final SQLListenerContext context) - { - if (detailedListener != null) - { + public void exception(final SQLListenerContext context) { + if (detailedListener != null) { detailedListener.exception(context); } } @Override - public void notifyQuery(final QueryMetadata md) - { + public void notifyQuery(final QueryMetadata md) { sqlListener.notifyQuery(md); } @Override - public void notifyDelete(final RelationalPath entity, final QueryMetadata md) - { + public void notifyDelete(final RelationalPath entity, final QueryMetadata md) { sqlListener.notifyDelete(entity, md); } @Override - public void notifyDeletes(final RelationalPath entity, final List batches) - { + public void notifyDeletes(final RelationalPath entity, final List batches) { sqlListener.notifyDeletes(entity, batches); } @Override - public void notifyMerge(final RelationalPath entity, final QueryMetadata md, final List> keys, final List> columns, final List> values, final SubQueryExpression subQuery) - { + public void notifyMerge(final RelationalPath entity, final QueryMetadata md, final List> keys, final List> columns, final List> values, final SubQueryExpression subQuery) { sqlListener.notifyMerge(entity, md, keys, columns, values, subQuery); } @Override - public void notifyMerges(final RelationalPath entity, final QueryMetadata md, final List batches) - { + public void notifyMerges(final RelationalPath entity, final QueryMetadata md, final List batches) { sqlListener.notifyMerges(entity, md, batches); } @Override - public void notifyInsert(final RelationalPath entity, final QueryMetadata md, final List> columns, final List> values, final SubQueryExpression subQuery) - { + public void notifyInsert(final RelationalPath entity, final QueryMetadata md, final List> columns, final List> values, final SubQueryExpression subQuery) { sqlListener.notifyInsert(entity, md, columns, values, subQuery); } @Override - public void notifyInserts(final RelationalPath entity, final QueryMetadata md, final List batches) - { + public void notifyInserts(final RelationalPath entity, final QueryMetadata md, final List batches) { sqlListener.notifyInserts(entity, md, batches); } @Override - public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) - { + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) { sqlListener.notifyUpdate(entity, md, updates); } @Override - public void notifyUpdates(final RelationalPath entity, final List batches) - { + public void notifyUpdates(final RelationalPath entity, final List batches) { sqlListener.notifyUpdates(entity, batches); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java index c5c14681b1..54b5d37fdb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContext.java @@ -10,8 +10,7 @@ * A context object that is progressively filled out during query execution and is passed to each {@link * SQLDetailedListener} callback method */ -public interface SQLListenerContext -{ +public interface SQLListenerContext { /** * The context getData is a general purpose place that listeners can place objects. It allows listeners to pass * context between themselves during callbacks. @@ -30,7 +29,7 @@ public interface SQLListenerContext * and then access if after that. * * @param dataKey the key to use - * @param value the value to place under that key + * @param value the value to place under that key */ void setData(String dataKey, Object value); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java index 735b2cb344..366b6194ff 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListenerContextImpl.java @@ -16,8 +16,7 @@ * INTERNAL USE ONLY - {@link com.mysema.query.sql.SQLDetailedListener} implementations are not expected to use this * class directly */ -public class SQLListenerContextImpl implements SQLListenerContext -{ +public class SQLListenerContextImpl implements SQLListenerContext { private final Map contextMap; private final QueryMetadata md; @@ -32,8 +31,7 @@ public class SQLListenerContextImpl implements SQLListenerContext private Exception exception; - public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection, final RelationalPath entity) - { + public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection, final RelationalPath entity) { this.contextMap = Maps.newHashMap(); this.preparedStatements = Lists.newArrayList(); this.sqlStatements = Lists.newArrayList(); @@ -42,120 +40,100 @@ public SQLListenerContextImpl(final QueryMetadata metadata, final Connection con this.entity = entity; } - public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection) - { + public SQLListenerContextImpl(final QueryMetadata metadata, final Connection connection) { this(metadata, connection, null); } - public SQLListenerContextImpl(final QueryMetadata metadata) - { + public SQLListenerContextImpl(final QueryMetadata metadata) { this(metadata, null, null); } - public void addSQL(final String sql) - { + public void addSQL(final String sql) { this.sqlStatements.add(sql); } - public void setEntity(final RelationalPath entity) - { + public void setEntity(final RelationalPath entity) { this.entity = entity; } - public void setConnection(final Connection connection) - { + public void setConnection(final Connection connection) { this.connection = connection; } - public void setException(final Exception exception) - { + public void setException(final Exception exception) { this.exception = exception; } - public void addPreparedStatement(final PreparedStatement preparedStatement) - { + public void addPreparedStatement(final PreparedStatement preparedStatement) { this.preparedStatements.add(preparedStatement); } @Override - public QueryMetadata getMetadata() - { + public QueryMetadata getMetadata() { return md; } @Override - public RelationalPath getEntity() - { + public RelationalPath getEntity() { return entity; } @Override - public String getSQL() - { + public String getSQL() { return sqlStatements.isEmpty() ? null : sqlStatements.get(0); } @Override - public Collection getSQLStatements() - { + public Collection getSQLStatements() { return sqlStatements; } @Override - public Exception getException() - { + public Exception getException() { return exception; } @Override - public Connection getConnection() - { + public Connection getConnection() { return connection; } @Override - public Collection getPreparedStatements() - { + public Collection getPreparedStatements() { return preparedStatements; } @Override - public PreparedStatement getPreparedStatement() - { + public PreparedStatement getPreparedStatement() { return preparedStatements.isEmpty() ? null : preparedStatements.get(0); } @Override - public Object getData(final String dataKey) - { + public Object getData(final String dataKey) { return contextMap.get(dataKey); } @Override - public void setData(final String dataKey, final Object value) - { + public void setData(final String dataKey, final Object value) { contextMap.put(dataKey, value); } @Override - public String toString() - { + public String toString() { StringBuilder sb = new StringBuilder() .append(" sql:").append(nicerSql(getSQL())) .append(" connection:").append(connection == null ? "not connected" : "connected") .append(" entity:").append(entity) .append(" exception:").append(exception); - for (Map.Entry entry : contextMap.entrySet()) - { + for (Map.Entry entry : contextMap.entrySet()) { sb.append(" [").append(entry.getKey()).append(":").append(entry.getValue()).append("]"); } return sb.toString(); } - private String nicerSql(final String sql) - { + private String nicerSql(final String sql) { return "'" + (sql == null ? null : sql.replace('\n', ' ')) + "'"; } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java index 9125cdeceb..3f29aa95f3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java @@ -13,10 +13,6 @@ */ package com.mysema.query.sql; -import java.util.List; - -import javax.annotation.Nullable; - import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; import com.mysema.query.QueryMetadata; @@ -27,15 +23,16 @@ import com.mysema.query.types.Path; import com.mysema.query.types.SubQueryExpression; +import javax.annotation.Nullable; +import java.util.List; + /** * SQLListeners is an SQLListener implementation which dispatches the * notifications to a list of SQLListener instances * * @author tiwe - * */ -public class SQLListeners implements SQLDetailedListener -{ +public class SQLListeners implements SQLDetailedListener { @Nullable private final SQLListenerAdapter parent; @@ -86,7 +83,7 @@ public void notifyDeletes(RelationalPath entity, List batches) @Override public void notifyMerge(RelationalPath entity, QueryMetadata md, List> keys, - List> columns, List> values, SubQueryExpression subQuery) { + List> columns, List> values, SubQueryExpression subQuery) { if (parent != null) { parent.notifyMerge(entity, md, keys, columns, values, subQuery); } @@ -107,7 +104,7 @@ public void notifyMerges(RelationalPath entity, QueryMetadata md, List entity, QueryMetadata md, List> columns, - List> values, SubQueryExpression subQuery) { + List> values, SubQueryExpression subQuery) { if (parent != null) { parent.notifyInsert(entity, md, columns, values, subQuery); } @@ -118,7 +115,7 @@ public void notifyInsert(RelationalPath entity, QueryMetadata md, List entity, QueryMetadata md, - List batches) { + List batches) { if (parent != null) { parent.notifyInserts(entity, md, batches); } @@ -129,7 +126,7 @@ public void notifyInserts(RelationalPath entity, QueryMetadata md, @Override public void notifyUpdate(RelationalPath entity, QueryMetadata md, - List, Expression>> updates) { + List, Expression>> updates) { if (parent != null) { parent.notifyUpdate(entity, md, updates); } @@ -150,8 +147,7 @@ public void notifyUpdates(RelationalPath entity, List batches @Override - public void start(final SQLListenerContext context) - { + public void start(final SQLListenerContext context) { if (parent != null) { parent.start(context); } @@ -161,8 +157,7 @@ public void start(final SQLListenerContext context) } @Override - public void preRender(final SQLListenerContext context) - { + public void preRender(final SQLListenerContext context) { if (parent != null) { parent.preRender(context); } @@ -172,8 +167,7 @@ public void preRender(final SQLListenerContext context) } @Override - public void rendered(final SQLListenerContext context) - { + public void rendered(final SQLListenerContext context) { if (parent != null) { parent.rendered(context); } @@ -183,8 +177,7 @@ public void rendered(final SQLListenerContext context) } @Override - public void prePrepare(final SQLListenerContext context) - { + public void prePrepare(final SQLListenerContext context) { if (parent != null) { parent.prePrepare(context); } @@ -194,8 +187,7 @@ public void prePrepare(final SQLListenerContext context) } @Override - public void prepared(final SQLListenerContext context) - { + public void prepared(final SQLListenerContext context) { if (parent != null) { parent.prepared(context); } @@ -205,8 +197,7 @@ public void prepared(final SQLListenerContext context) } @Override - public void preExecute(final SQLListenerContext context) - { + public void preExecute(final SQLListenerContext context) { if (parent != null) { parent.preExecute(context); } @@ -216,8 +207,7 @@ public void preExecute(final SQLListenerContext context) } @Override - public void executed(final SQLListenerContext context) - { + public void executed(final SQLListenerContext context) { if (parent != null) { parent.executed(context); } @@ -227,8 +217,7 @@ public void executed(final SQLListenerContext context) } @Override - public void end(final SQLListenerContext context) - { + public void end(final SQLListenerContext context) { if (parent != null) { parent.end(context); } @@ -238,8 +227,7 @@ public void end(final SQLListenerContext context) } @Override - public void exception(final SQLListenerContext context) - { + public void exception(final SQLListenerContext context) { if (parent != null) { parent.exception(context); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index 7be500c1c1..62b60c7d78 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -13,15 +13,6 @@ */ package com.mysema.query.sql.dml; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Collection; -import java.util.List; -import java.util.Map; - import com.google.common.collect.ImmutableList; import com.mysema.query.QueryMetadata; import com.mysema.query.dml.DMLClause; @@ -30,11 +21,15 @@ import com.mysema.query.types.ParamNotSetException; import com.mysema.query.types.Path; +import java.sql.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; + /** * AbstractSQLClause is a superclass for SQL based DMLClause implementations * * @author tiwe - * */ public abstract class AbstractSQLClause> implements DMLClause { @@ -64,14 +59,14 @@ public void addListener(SQLListener listener) { /** * Called to create and start a new SQL Listener context + * * @param connection the database connection - * @param metadata the meta data for that context - * @param entity the entity for that context - * @return the newly started context + * @param metadata the meta data for that context + * @param entity the entity for that context + * @return the newly started context */ - protected SQLListenerContextImpl startContext(Connection connection, QueryMetadata metadata, RelationalPath entity) - { - SQLListenerContextImpl context = new SQLListenerContextImpl(metadata,connection,entity); + protected SQLListenerContextImpl startContext(Connection connection, QueryMetadata metadata, RelationalPath entity) { + SQLListenerContextImpl context = new SQLListenerContextImpl(metadata, connection, entity); listeners.start(context); return context; } @@ -80,20 +75,19 @@ protected SQLListenerContextImpl startContext(Connection connection, QueryMetada * Called to make the call back to listeners when an exception happens * * @param context the current context in play - * @param e the exception + * @param e the exception */ - protected void onException(SQLListenerContextImpl context, Exception e) - { + protected void onException(SQLListenerContextImpl context, Exception e) { context.setException(e); listeners.exception(context); } /** * Called to end a SQL listener context + * * @param context the listener context to end */ - protected void endContext(SQLListenerContextImpl context) - { + protected void endContext(SQLListenerContextImpl context) { listeners.end(context); this.context = null; } From e8138d5960a2d01d4ab4b9a0f2befea080a5e78d Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Mon, 11 Aug 2014 12:12:43 +0700 Subject: [PATCH 0324/1968] Put in the backwards compat exclusion as directed --- querydsl-root/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ef7ae3bf6d..28d4b79760 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -212,6 +212,7 @@ com/mysema/query/SearchResults + com/mysema/query/sql/SQLListeners BACKWARD_COMPATIBLE_USER true From cd868abbbd3cad1de7ca7c3a81ee499fadbabd14 Mon Sep 17 00:00:00 2001 From: John Interrante Date: Tue, 12 Aug 2014 19:25:51 -0400 Subject: [PATCH 0325/1968] Add AntJPADomainExporter and its test files Since querydsl-apt's apt-maven-plugin can't generate Querydsl query types when the JPA metamodel is specified in a mapping file (orm.xml) instead of using JPA annotations, add a custom Ant task which calls JPADomainExporter to generate Querydsl query types from the JPA metamodel in persistence.xml and orm.xml. Also add test files (persistence.xml, orm.xml, Departments.java, and AntJPADomainExporterTest.java) to make sure the Ant task works. --- .../query/jpa/ant/AntJPADomainExporter.java | 154 ++++++++++++++++++ .../jpa/ant/AntJPADomainExporterTest.java | 38 +++++ .../com/mysema/query/jpa/ant/Departments.java | 65 ++++++++ .../src/test/resources/META-INF/orm.xml | 32 ++++ .../test/resources/META-INF/persistence.xml | 18 ++ 5 files changed, 307 insertions(+) create mode 100644 querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java create mode 100644 querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml create mode 100644 querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java new file mode 100644 index 0000000000..1dfe28f2b2 --- /dev/null +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java @@ -0,0 +1,154 @@ +/** + * Copyright 2014, General Electric Company + * + * 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 com.mysema.query.jpa.ant; + +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; +import javax.persistence.metamodel.Metamodel; + +import com.mysema.query.jpa.codegen.JPADomainExporter; + +/** + * AntJPADomainExporter exports JPA 2 metamodels to Querydsl expression types + * + * @author 200003548 + */ +public class AntJPADomainExporter { + + /** + * Additional property to use when creating the JPA entity manager factory + */ + public static class Property { + private String name; + private String value; + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } + } + + /** + * Set of additional properties to use when creating the JPA entity manager factory + */ + public static class Configuration { + private Map properties = new HashMap(); + public Map getProperties() { + return properties; + } + public void addConfiguredProperty(Property property) { + properties.put(property.getName(), property.getValue()); + } + } + + /** + * Set of additional properties to use when creating the JPA entity manager factory + * (no default - not required) + */ + private Configuration configuration; + + /** + * Name prefix for generated query types (default: "Q") + */ + private String namePrefix = "Q"; + + /** + * Name suffix for generated query types (default: "") + */ + private String nameSuffix = ""; + + /** + * Target folder in which to generate query types (no default - required) + */ + private String targetFolder; + + /** + * Name of persistence unit from which to generate query types (no default - required) + */ + private String persistenceUnitName; + + public Configuration getConfiguration() { + return configuration; + } + + public void addConfiguration(Configuration configuration) { + this.configuration = configuration; + } + + public String getNamePrefix() { + return namePrefix; + } + + public void setNamePrefix(String namePrefix) { + this.namePrefix = namePrefix; + } + + public String getNameSuffix() { + return nameSuffix; + } + + public void setNameSuffix(String nameSuffix) { + this.nameSuffix = nameSuffix; + } + + public String getTargetFolder() { + return targetFolder; + } + + public void setTargetFolder(String targetFolder) { + this.targetFolder = targetFolder; + } + + public String getPersistenceUnitName() { + return persistenceUnitName; + } + + public void setPersistenceUnitName(String persistenceUnitName) { + this.persistenceUnitName = persistenceUnitName; + } + + /** + * Exports the named persistence unit's metamodel to Querydsl query types. Expects to be + * called by Ant via name convention using a method with signature public void execute(). + */ + public void execute() { + // We can assume we have the named persistence unit and its mapping file in our classpath, + // but we may have to allow some properties in that persistence unit to be overridden before + // we can successfully get that persistence unit's metamodel. + final Map properties = (configuration != null) ? configuration.getProperties() : null; + final EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName, properties); + + // Now we can get the persistence unit's metamodel and export it to Querydsl query types. + final Metamodel configuration = emf.getMetamodel(); + final JPADomainExporter exporter = new JPADomainExporter(namePrefix, nameSuffix, new File(targetFolder), configuration); + try { + exporter.execute(); + } catch (IOException e) { + throw new RuntimeException("Error in JPADomainExporter", e); + } + } + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java new file mode 100644 index 0000000000..ecfd32803b --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java @@ -0,0 +1,38 @@ +/** + * Copyright 2014, General Electric Company + * + * 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 com.mysema.query.jpa.ant; + +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.junit.Test; + +public class AntJPADomainExporterTest { + + @Test + public void testExecute() { + // Simulate configuring the task in an Ant build.xml file. + AntJPADomainExporter exporter = new AntJPADomainExporter(); + exporter.setNamePrefix("Q"); + exporter.setNameSuffix(""); + exporter.setTargetFolder("target/AntJPADomainExporterTest"); + exporter.setPersistenceUnitName("AntJPADomainExporterTest"); + exporter.execute(); + + // Verify that the Querydsl query type was created successfully. + assertTrue(new File("target/AntJPADomainExporterTest/com/mysema/query/jpa/ant/QDepartments.java").exists()); + } + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java new file mode 100644 index 0000000000..5064e18a0e --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java @@ -0,0 +1,65 @@ +package com.mysema.query.jpa.ant; + +/** + * Auto-generated by: + * org.apache.openjpa.jdbc.meta.ReverseMappingTool$ReverseCodeGenerator + */ +public class Departments { + private Integer commentId; + + private String deptDesc; + + private int deptId; + + private String tag; + + private String timeZone; + + + public Departments() { + } + + public Departments(int deptId) { + this.deptId = deptId; + } + + public Integer getCommentId() { + return commentId; + } + + public void setCommentId(Integer commentId) { + this.commentId = commentId; + } + + public String getDeptDesc() { + return deptDesc; + } + + public void setDeptDesc(String deptDesc) { + this.deptDesc = deptDesc; + } + + public int getDeptId() { + return deptId; + } + + public void setDeptId(int deptId) { + this.deptId = deptId; + } + + public String getTag() { + return tag; + } + + public void setTag(String tag) { + this.tag = tag; + } + + public String getTimeZone() { + return timeZone; + } + + public void setTimeZone(String timeZone) { + this.timeZone = timeZone; + } +} diff --git a/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml b/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml new file mode 100644 index 0000000000..5454ddac91 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml @@ -0,0 +1,32 @@ + + + + + com.mysema.query.jpa.ant + + + PROPERTY + + + + + + + + + + + + + + + + + + + + + + + diff --git a/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml b/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml new file mode 100644 index 0000000000..89caf15074 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml @@ -0,0 +1,18 @@ + + + + + org.hibernate.ejb.HibernatePersistence + META-INF/orm.xml + com.mysema.query.jpa.ant.Departments + true + + + + + + + + From 75795eb3c9788aee4b1efc041808aa5e29de91f1 Mon Sep 17 00:00:00 2001 From: John Interrante Date: Wed, 13 Aug 2014 15:53:36 -0400 Subject: [PATCH 0326/1968] Remove final modifiers --- .../com/mysema/query/jpa/ant/AntJPADomainExporter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java index 1dfe28f2b2..e11f380b76 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java @@ -138,12 +138,12 @@ public void execute() { // We can assume we have the named persistence unit and its mapping file in our classpath, // but we may have to allow some properties in that persistence unit to be overridden before // we can successfully get that persistence unit's metamodel. - final Map properties = (configuration != null) ? configuration.getProperties() : null; - final EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName, properties); + Map properties = (configuration != null) ? configuration.getProperties() : null; + EntityManagerFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName, properties); // Now we can get the persistence unit's metamodel and export it to Querydsl query types. - final Metamodel configuration = emf.getMetamodel(); - final JPADomainExporter exporter = new JPADomainExporter(namePrefix, nameSuffix, new File(targetFolder), configuration); + Metamodel configuration = emf.getMetamodel(); + JPADomainExporter exporter = new JPADomainExporter(namePrefix, nameSuffix, new File(targetFolder), configuration); try { exporter.execute(); } catch (IOException e) { From 1f049a337eeb190883e9d52aa5752910967a00b8 Mon Sep 17 00:00:00 2001 From: John Interrante Date: Wed, 13 Aug 2014 16:06:04 -0400 Subject: [PATCH 0327/1968] Remove copyrights --- .../mysema/query/jpa/ant/AntJPADomainExporter.java | 13 ------------- .../query/jpa/ant/AntJPADomainExporterTest.java | 13 ------------- 2 files changed, 26 deletions(-) diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java index e11f380b76..8dc5af85d5 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java @@ -1,16 +1,3 @@ -/** - * Copyright 2014, General Electric Company - * - * 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 com.mysema.query.jpa.ant; import java.io.File; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java index ecfd32803b..fff9e5744c 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java @@ -1,16 +1,3 @@ -/** - * Copyright 2014, General Electric Company - * - * 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 com.mysema.query.jpa.ant; import static org.junit.Assert.assertTrue; From b0f2bcf7f22ba590545cf4085018981a5a987159 Mon Sep 17 00:00:00 2001 From: Brad Baker Date: Thu, 14 Aug 2014 18:35:14 +0700 Subject: [PATCH 0328/1968] Removed the logging in the tests --- .../src/test/java/com/mysema/query/suites/DerbySuiteTest.java | 2 -- .../test/java/com/mysema/query/suites/H2WithQuotingTest.java | 2 -- .../src/test/java/com/mysema/query/suites/H2WithSchemaTest.java | 2 -- .../src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java | 2 -- .../src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java | 2 -- 5 files changed, 10 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java index 65b254f691..611c8fe0f7 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java @@ -1,6 +1,5 @@ package com.mysema.query.suites; -import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -33,7 +32,6 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - TestLoggingListener.enable(); Connections.initDerby(); Connections.setTemplates(DerbyTemplates.builder().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java index 3e2e5a64ef..a88f0cfbe9 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java @@ -1,6 +1,5 @@ package com.mysema.query.suites; -import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -33,7 +32,6 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - TestLoggingListener.enable(); Connections.initH2(); Connections.setTemplates(H2Templates.builder().quote().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java index 8b6d006e56..aec392bc4e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java @@ -1,6 +1,5 @@ package com.mysema.query.suites; -import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -33,7 +32,6 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - TestLoggingListener.enable(); Connections.initH2(); Connections.setTemplates(H2Templates.builder().printSchema().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java index 433818e20b..f8294c068d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java @@ -1,6 +1,5 @@ package com.mysema.query.suites; -import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -33,7 +32,6 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - TestLoggingListener.enable(); Connections.initHSQL(); Connections.setTemplates(HSQLDBTemplates.builder().newLineToSingleSpace().build()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java index f618083e5f..d479f9c144 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java @@ -1,6 +1,5 @@ package com.mysema.query.suites; -import com.mysema.query.TestLoggingListener; import org.junit.BeforeClass; import com.mysema.query.BeanPopulationBase; @@ -33,7 +32,6 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - TestLoggingListener.enable(); Connections.initSQLite(); Connections.setTemplates(SQLiteTemplates.builder().newLineToSingleSpace().build()); } From 871ba880603554268274d05f6f4a103a72cca61b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 14 Aug 2014 21:38:57 +0300 Subject: [PATCH 0329/1968] Fix boolean serialization --- .../java/com/mysema/query/sql/types/BooleanType.java | 5 +++++ .../src/test/java/com/mysema/query/SelectBase.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BooleanType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BooleanType.java index 264b6c8573..5a66d8d88e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BooleanType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BooleanType.java @@ -45,6 +45,11 @@ public Class getReturnedClass() { return Boolean.class; } + @Override + public String getLiteral(Boolean value) { + return value ? "1" : "0"; + } + @Override public void setValue(PreparedStatement st, int startIndex, Boolean value) throws SQLException { st.setBoolean(startIndex, value); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 7f477acd28..83021e2a83 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -755,6 +755,18 @@ public void ListResults_FactoryExpression() { assertEquals(10, results.getTotal()); } + @Test + @ExcludeIn({DERBY, HSQLDB}) + public void Literals() { + assertEquals(1, singleResult(ConstantImpl.create(1)).intValue()); + assertEquals(2l, singleResult(ConstantImpl.create(2l)).longValue()); + assertEquals(3.0, singleResult(ConstantImpl.create(3.0)).doubleValue(), 0.001); + assertEquals(4.0f, singleResult(ConstantImpl.create(4.0f)).floatValue(), 0.001); + assertEquals(true, singleResult(ConstantImpl.create(true))); + assertEquals(false, singleResult(ConstantImpl.create(false))); + assertEquals("abc", singleResult(ConstantImpl.create("abc"))); + } + private double log(double x, int y) { return Math.log(x) / Math.log(y); } From 88e3f436a021bad504d4b0669d72a8d9db9c3553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 14 Aug 2014 21:46:55 +0300 Subject: [PATCH 0330/1968] Use parent classloaders as well --- .../com/mysema/codegen/SimpleCompiler.java | 29 +++++++------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/mysema/codegen/SimpleCompiler.java b/src/main/java/com/mysema/codegen/SimpleCompiler.java index a638cfc2a9..96c9522df2 100644 --- a/src/main/java/com/mysema/codegen/SimpleCompiler.java +++ b/src/main/java/com/mysema/codegen/SimpleCompiler.java @@ -13,12 +13,9 @@ */ package com.mysema.codegen; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.io.Writer; +import javax.lang.model.SourceVersion; +import javax.tools.*; +import java.io.*; import java.net.URL; import java.net.URLClassLoader; import java.net.URLDecoder; @@ -29,14 +26,6 @@ import java.util.Set; import java.util.jar.Manifest; -import javax.lang.model.SourceVersion; -import javax.tools.DiagnosticListener; -import javax.tools.JavaCompiler; -import javax.tools.JavaFileManager; -import javax.tools.JavaFileObject; -import javax.tools.StandardJavaFileManager; -import javax.tools.ToolProvider; - import com.google.common.base.Joiner; /** @@ -75,10 +64,14 @@ public static String getClassPath(URLClassLoader cl) { paths.add(new File(decodedPath).getAbsolutePath()); } } else { - for (URL url : cl.getURLs()) { - String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8"); - paths.add(new File(decodedPath).getAbsolutePath()); - } + ClassLoader c = cl; + while (c instanceof URLClassLoader) { + for (URL url : ((URLClassLoader)c).getURLs()) { + String decodedPath = URLDecoder.decode(url.getPath(), "UTF-8"); + paths.add(new File(decodedPath).getAbsolutePath()); + } + c = c.getParent(); + } } return pathJoiner.join(paths); } catch (UnsupportedEncodingException e) { From 901af571b27391aa6ba8d7995a57c52f2a8a9899 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 14 Aug 2014 22:53:53 +0300 Subject: [PATCH 0331/1968] Small listener usage changes --- .../mysema/query/sql/AbstractSQLQuery.java | 40 ++++++------------- .../com/mysema/query/sql/Configuration.java | 2 +- .../com/mysema/query/sql/SQLListeners.java | 28 ++++++------- 3 files changed, 27 insertions(+), 43 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 48415b41a8..a8d4796fc0 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -13,6 +13,7 @@ */ package com.mysema.query.sql; +import javax.annotation.Nullable; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.PreparedStatement; @@ -22,25 +23,13 @@ import java.util.List; import java.util.Map; -import javax.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.mysema.commons.lang.CloseableIterator; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.QueryException; -import com.mysema.query.QueryFlag; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; -import com.mysema.query.SearchResults; +import com.mysema.query.*; import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.Expression; -import com.mysema.query.types.FactoryExpression; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Path; +import com.mysema.query.types.*; import com.mysema.util.ResultSetAdapter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * AbstractSQLQuery is the base type for SQL query implementations @@ -140,12 +129,10 @@ protected SQLListenerContextImpl startContext(Connection connection, QueryMetada * * @param context the current context in play * @param e the exception - * @return the new context */ - protected SQLListenerContextImpl onException(SQLListenerContextImpl context, Exception e) { + protected void onException(SQLListenerContextImpl context, Exception e) { context.setException(e); listeners.exception(context); - return context; } /** @@ -204,7 +191,7 @@ public void close() throws SQLException { } }; } catch (SQLException e) { - context = onException(context, e); + onException(context, e); throw configuration.translate(queryString, constants, e); } finally { reset(); @@ -224,7 +211,7 @@ public CloseableIterator iterate(Expression expr) { @SuppressWarnings("unchecked") private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullable final Expression expr) { - SQLListenerContextImpl context = startContext(conn,queryMixin.getMetadata()); + SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); listeners.preRender(context); SQLSerializer serializer = serialize(false); @@ -284,8 +271,7 @@ public RT produceNext(ResultSet rs) throws Exception { } } catch (SQLException e) { - context = onException(context, e); - + onException(context, e); throw configuration.translate(queryString, constants, e); } finally { endContext(context); @@ -374,8 +360,7 @@ public List list(Expression expr) { stmt.close(); } } catch (SQLException e) { - context = onException(context, e); - + onException(context, e); throw configuration.translate(queryString, constants, e); } finally { endContext(context); @@ -471,7 +456,7 @@ public RT uniqueResult(Expression expr) { } private long unsafeCount() throws SQLException { - SQLListenerContextImpl context = startContext(conn,getMetadata()); + SQLListenerContextImpl context = startContext(conn, getMetadata()); listeners.preRender(context); SQLSerializer serializer = serialize(true); @@ -501,8 +486,7 @@ private long unsafeCount() throws SQLException { return rs.getLong(1); } catch (SQLException e) { - context = onException(context, e); - + onException(context, e); throw configuration.translate(queryString, constants, e); } finally { try { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 2ae735ae46..b917378a3d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -452,7 +452,7 @@ public RuntimeException translate(String sql, List bindings, SQLExceptio } /** - * @param listeners + * @param listener */ public void addListener(SQLListener listener) { listeners.add(listener); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java index 3f29aa95f3..7be8f1165d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLListeners.java @@ -13,6 +13,9 @@ */ package com.mysema.query.sql; +import javax.annotation.Nullable; +import java.util.List; + import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; import com.mysema.query.QueryMetadata; @@ -23,9 +26,6 @@ import com.mysema.query.types.Path; import com.mysema.query.types.SubQueryExpression; -import javax.annotation.Nullable; -import java.util.List; - /** * SQLListeners is an SQLListener implementation which dispatches the * notifications to a list of SQLListener instances @@ -35,9 +35,9 @@ public class SQLListeners implements SQLDetailedListener { @Nullable - private final SQLListenerAdapter parent; + private final SQLDetailedListener parent; - private final List listeners = Lists.newArrayList(); + private final List listeners = Lists.newArrayList(); public SQLListeners(SQLListener parent) { this.parent = new SQLListenerAdapter(parent); @@ -151,7 +151,7 @@ public void start(final SQLListenerContext context) { if (parent != null) { parent.start(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.start(context); } } @@ -161,7 +161,7 @@ public void preRender(final SQLListenerContext context) { if (parent != null) { parent.preRender(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.preRender(context); } } @@ -171,7 +171,7 @@ public void rendered(final SQLListenerContext context) { if (parent != null) { parent.rendered(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.rendered(context); } } @@ -181,7 +181,7 @@ public void prePrepare(final SQLListenerContext context) { if (parent != null) { parent.prePrepare(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.prePrepare(context); } } @@ -191,7 +191,7 @@ public void prepared(final SQLListenerContext context) { if (parent != null) { parent.prepared(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.prepared(context); } } @@ -201,7 +201,7 @@ public void preExecute(final SQLListenerContext context) { if (parent != null) { parent.preExecute(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.preExecute(context); } } @@ -211,7 +211,7 @@ public void executed(final SQLListenerContext context) { if (parent != null) { parent.executed(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.executed(context); } } @@ -221,7 +221,7 @@ public void end(final SQLListenerContext context) { if (parent != null) { parent.end(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.end(context); } } @@ -231,7 +231,7 @@ public void exception(final SQLListenerContext context) { if (parent != null) { parent.exception(context); } - for (SQLListenerAdapter listener : listeners) { + for (SQLDetailedListener listener : listeners) { listener.exception(context); } } From aa7f33b72ac9904602893edf106c149cd3b78b60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 15 Aug 2014 22:27:40 +0300 Subject: [PATCH 0332/1968] Add null skipping --- .../query/types/FactoryExpressionBase.java | 65 +++++++++++++++++++ .../java/com/mysema/query/types/QBean.java | 2 +- .../java/com/mysema/query/types/QList.java | 5 +- .../java/com/mysema/query/types/QMap.java | 2 +- .../java/com/mysema/query/types/QTuple.java | 5 +- .../com/mysema/query/types/QTupleTest.java | 16 +++-- 6 files changed, 82 insertions(+), 13 deletions(-) create mode 100644 querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java diff --git a/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java b/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java new file mode 100644 index 0000000000..fe24da58c2 --- /dev/null +++ b/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java @@ -0,0 +1,65 @@ +package com.mysema.query.types; + +import javax.annotation.Nullable; +import java.util.List; + +/** + * Common superclass for FactoryExpression implementations + * + * @param + */ +public abstract class FactoryExpressionBase extends ExpressionBase implements FactoryExpression { + + private static class FactoryExpressionWrapper extends ExpressionBase implements FactoryExpression { + private final FactoryExpression expr; + + public FactoryExpressionWrapper(FactoryExpression expr) { + super(expr.getType()); + this.expr = expr; + } + + @Override + public List> getArgs() { + return expr.getArgs(); + } + + @Nullable + @Override + public T newInstance(Object... args) { + if (args != null) { + for (Object arg : args) { + if (arg != null) { + return expr.newInstance(args); + } + } + } + return null; + } + + @Nullable + @Override + public R accept(Visitor v, @Nullable C context) { + return expr.accept(v, context); + } + + @Override + public boolean equals(Object o) { + return expr.equals(o); + } + + } + + public FactoryExpressionBase(Class type) { + super(type); + } + + /** + * Returns a wrapper expression which returns null if all arguments to newInstance are null + * + * @return + */ + public FactoryExpression skipNulls() { + return new FactoryExpressionWrapper(this); + } + +} diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QBean.java b/querydsl-core/src/main/java/com/mysema/query/types/QBean.java index 958249023c..085b93eb8b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QBean.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QBean.java @@ -46,7 +46,7 @@ * * @param bean type */ -public class QBean extends ExpressionBase implements FactoryExpression { +public class QBean extends FactoryExpressionBase implements FactoryExpression { private static final long serialVersionUID = -8210214512730989778L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QList.java b/querydsl-core/src/main/java/com/mysema/query/types/QList.java index 94fd5284b9..f17f2d49c0 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QList.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QList.java @@ -13,12 +13,11 @@ */ package com.mysema.query.types; +import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collections; import java.util.List; -import javax.annotation.Nullable; - import com.google.common.collect.ImmutableList; /** @@ -27,7 +26,7 @@ * @author tiwe * */ -public class QList extends ExpressionBase> implements FactoryExpression> { +public class QList extends FactoryExpressionBase> implements FactoryExpression> { private static final long serialVersionUID = -7545994090073480810L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QMap.java b/querydsl-core/src/main/java/com/mysema/query/types/QMap.java index f5d837f3e2..9a8159ad8c 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QMap.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QMap.java @@ -37,7 +37,7 @@ * @author tiwe * */ -public class QMap extends ExpressionBase,?>> implements FactoryExpression,?>>{ +public class QMap extends FactoryExpressionBase,?>> implements FactoryExpression,?>>{ private static final long serialVersionUID = -7545994090073480810L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java b/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java index 6a994fc653..4c7526828c 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java @@ -13,13 +13,12 @@ */ package com.mysema.query.types; +import javax.annotation.concurrent.Immutable; import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.Map; -import javax.annotation.concurrent.Immutable; - import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -53,7 +52,7 @@ * */ @Immutable -public class QTuple extends ExpressionBase implements FactoryExpression { +public class QTuple extends FactoryExpressionBase implements FactoryExpression { private static ImmutableMap, Integer> createBindings(List> exprs) { Map, Integer> map = Maps.newHashMap(); diff --git a/querydsl-core/src/test/java/com/mysema/query/types/QTupleTest.java b/querydsl-core/src/test/java/com/mysema/query/types/QTupleTest.java index 7266e3898c..a48a8d06c8 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/QTupleTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/QTupleTest.java @@ -13,16 +13,16 @@ */ package com.mysema.query.types; -import static org.junit.Assert.assertEquals; - import java.util.Arrays; -import org.junit.Ignore; -import org.junit.Test; - import com.google.common.collect.ImmutableList; import com.mysema.query.Tuple; import com.mysema.query.types.path.StringPath; +import org.junit.Ignore; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; public class QTupleTest { @@ -108,4 +108,10 @@ public void Duplicates2() { assertEquals(1, expr.getArgs().size()); assertEquals(str1, expr.getArgs().get(0)); } + + @Test + public void NewInstance() { + assertNotNull(new QTuple(str1, str1).newInstance(null, null)); + assertNull(new QTuple(str1, str1).skipNulls().newInstance(null, null)); + } } From 40f5a2185e7fd2e3dd3c1d49955817da1830f494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 15 Aug 2014 23:44:12 +0300 Subject: [PATCH 0333/1968] Cleanup code Add more FactoryExpressionBase usage --- .../com/mysema/query/support/EnumConversion.java | 5 ++--- .../com/mysema/query/support/NumberConversion.java | 5 ++--- .../mysema/query/support/NumberConversions.java | 4 ++-- .../query/types/ArrayConstructorExpression.java | 5 ++--- .../mysema/query/types/ConstructorExpression.java | 14 ++++++-------- .../com/mysema/query/types/MappingProjection.java | 5 ++--- .../main/java/com/mysema/query/types/QBean.java | 2 +- .../main/java/com/mysema/query/types/QList.java | 2 +- .../src/main/java/com/mysema/query/types/QMap.java | 2 +- .../main/java/com/mysema/query/types/QTuple.java | 2 +- .../src/main/java/com/mysema/query/sql/QBeans.java | 9 ++------- 11 files changed, 22 insertions(+), 33 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java b/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java index bada8fcf09..27598cf8fa 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java @@ -17,8 +17,7 @@ import java.util.List; import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionBase; -import com.mysema.query.types.FactoryExpression; +import com.mysema.query.types.FactoryExpressionBase; import com.mysema.query.types.Visitor; /** @@ -29,7 +28,7 @@ * * @param */ -public class EnumConversion extends ExpressionBase implements FactoryExpression { +public class EnumConversion extends FactoryExpressionBase { private static final long serialVersionUID = 7840412008633901748L; diff --git a/querydsl-core/src/main/java/com/mysema/query/support/NumberConversion.java b/querydsl-core/src/main/java/com/mysema/query/support/NumberConversion.java index a5f1a8729b..ddadf2cfb5 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/NumberConversion.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/NumberConversion.java @@ -17,8 +17,7 @@ import java.util.List; import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionBase; -import com.mysema.query.types.FactoryExpression; +import com.mysema.query.types.FactoryExpressionBase; import com.mysema.query.types.Visitor; import com.mysema.util.MathUtils; @@ -30,7 +29,7 @@ * * @param */ -public class NumberConversion extends ExpressionBase implements FactoryExpression { +public class NumberConversion extends FactoryExpressionBase { private static final long serialVersionUID = 7840412008633901748L; diff --git a/querydsl-core/src/main/java/com/mysema/query/support/NumberConversions.java b/querydsl-core/src/main/java/com/mysema/query/support/NumberConversions.java index 1458a60b35..e6e2e5e4d5 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/NumberConversions.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/NumberConversions.java @@ -18,8 +18,8 @@ import com.google.common.collect.Maps; import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionBase; import com.mysema.query.types.FactoryExpression; +import com.mysema.query.types.FactoryExpressionBase; import com.mysema.query.types.Visitor; import com.mysema.util.MathUtils; @@ -31,7 +31,7 @@ * * @param */ -public class NumberConversions extends ExpressionBase implements FactoryExpression { +public class NumberConversions extends FactoryExpressionBase { private static final long serialVersionUID = -7834053123363933721L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ArrayConstructorExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/ArrayConstructorExpression.java index 0ed9c8ce77..17537de516 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ArrayConstructorExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ArrayConstructorExpression.java @@ -13,11 +13,10 @@ */ package com.mysema.query.types; +import javax.annotation.concurrent.Immutable; import java.lang.reflect.Array; import java.util.List; -import javax.annotation.concurrent.Immutable; - import com.google.common.collect.ImmutableList; /** @@ -28,7 +27,7 @@ * @param component type */ @Immutable -public class ArrayConstructorExpression extends ExpressionBase implements FactoryExpression { +public class ArrayConstructorExpression extends FactoryExpressionBase { private static final long serialVersionUID = 8667880104290226505L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ConstructorExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/ConstructorExpression.java index ee1b5be3a9..f97bf7b51b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ConstructorExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ConstructorExpression.java @@ -13,18 +13,16 @@ */ package com.mysema.query.types; -import static com.mysema.query.util.ConstructorUtils.*; - -import com.google.common.base.Function; -import com.google.common.collect.ImmutableList; - +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; -import javax.annotation.Nullable; -import javax.annotation.concurrent.Immutable; +import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; +import static com.mysema.query.util.ConstructorUtils.*; /** * ConstructorExpression represents a constructor invocation @@ -45,7 +43,7 @@ * @param expression type */ @Immutable -public class ConstructorExpression extends ExpressionBase implements FactoryExpression { +public class ConstructorExpression extends FactoryExpressionBase { private static final long serialVersionUID = -602747921848073175L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java b/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java index 71f30bfae4..627af93c12 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java @@ -13,10 +13,9 @@ */ package com.mysema.query.types; -import java.util.List; - import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; +import java.util.List; import com.mysema.query.Tuple; @@ -37,7 +36,7 @@ * @param expression type */ @Immutable -public abstract class MappingProjection extends ExpressionBase implements FactoryExpression { +public abstract class MappingProjection extends FactoryExpressionBase { private static final long serialVersionUID = -948494350919774466L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QBean.java b/querydsl-core/src/main/java/com/mysema/query/types/QBean.java index 085b93eb8b..c85cc4ce38 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QBean.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QBean.java @@ -46,7 +46,7 @@ * * @param bean type */ -public class QBean extends FactoryExpressionBase implements FactoryExpression { +public class QBean extends FactoryExpressionBase { private static final long serialVersionUID = -8210214512730989778L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QList.java b/querydsl-core/src/main/java/com/mysema/query/types/QList.java index f17f2d49c0..3e92ac63a3 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QList.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QList.java @@ -26,7 +26,7 @@ * @author tiwe * */ -public class QList extends FactoryExpressionBase> implements FactoryExpression> { +public class QList extends FactoryExpressionBase> { private static final long serialVersionUID = -7545994090073480810L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QMap.java b/querydsl-core/src/main/java/com/mysema/query/types/QMap.java index 9a8159ad8c..1d2d47e381 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QMap.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QMap.java @@ -37,7 +37,7 @@ * @author tiwe * */ -public class QMap extends FactoryExpressionBase,?>> implements FactoryExpression,?>>{ +public class QMap extends FactoryExpressionBase,?>> { private static final long serialVersionUID = -7545994090073480810L; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java b/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java index 4c7526828c..c32b7303c4 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/QTuple.java @@ -52,7 +52,7 @@ * */ @Immutable -public class QTuple extends FactoryExpressionBase implements FactoryExpression { +public class QTuple extends FactoryExpressionBase { private static ImmutableMap, Integer> createBindings(List> exprs) { Map, Integer> map = Maps.newHashMap(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/QBeans.java b/querydsl-sql/src/main/java/com/mysema/query/sql/QBeans.java index 2086df450e..435b33970a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/QBeans.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/QBeans.java @@ -20,12 +20,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionBase; -import com.mysema.query.types.FactoryExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.QBean; -import com.mysema.query.types.Visitor; +import com.mysema.query.types.*; import com.mysema.util.ArrayUtils; /** @@ -33,7 +28,7 @@ * * @author luis */ -public class QBeans extends ExpressionBase implements FactoryExpression { +public class QBeans extends FactoryExpressionBase { private static final long serialVersionUID = -4411839816134215923L; From 2148f469a852f5129e0689171ecd9b184fa165be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 16 Aug 2014 22:23:28 +0300 Subject: [PATCH 0334/1968] Work on array support --- .../com/mysema/query/sql/Configuration.java | 26 +++++++++++++ .../com/mysema/query/sql/types/ArrayType.java | 39 +++++++++++++++++++ .../java/com/mysema/query/Connections.java | 8 ++++ 3 files changed, 73 insertions(+) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 2ae735ae46..3baf596aa8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql; +import java.lang.reflect.Array; +import java.lang.reflect.Field; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -38,6 +40,22 @@ public final class Configuration { public static final Configuration DEFAULT = new Configuration(SQLTemplates.DEFAULT); + private static final Map typeConstants = Maps.newHashMap(); + + static { + try { + for (Field field : java.sql.Types.class.getDeclaredFields()) { + if (field.getType().equals(Integer.TYPE)) { + typeConstants.put(field.getName().toLowerCase(), field.getInt(null)); + } + } + typeConstants.put("int4", Types.INTEGER); + typeConstants.put("int8", Types.BIGINT); + } catch (IllegalAccessException e) { + throw new IllegalStateException(e.getMessage(), e); + } + } + private final JDBCTypeMapping jdbcTypeMapping = new JDBCTypeMapping(); private final JavaTypeMapping javaTypeMapping = new JavaTypeMapping(); @@ -135,6 +153,14 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, if (clazz != null) { return clazz; } + if (sqlType == Types.ARRAY) { + for (Map.Entry entry : typeConstants.entrySet()) { + if (typeName.toLowerCase().contains(entry.getKey())) { + Class componentType = jdbcTypeMapping.get(entry.getValue(), size, digits); + return Array.newInstance(componentType, 0).getClass(); + } + } + } } // sql type mapped class return jdbcTypeMapping.get(sqlType, size, digits); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java new file mode 100644 index 0000000000..0facf05094 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java @@ -0,0 +1,39 @@ +package com.mysema.query.sql.types; + +import javax.annotation.Nullable; +import java.sql.*; + +/** + * + * @param + */ +public class ArrayType extends AbstractType { + + private final Class type; + + private final String typeName; + + public ArrayType(Class type, String typeName) { + super(Types.ARRAY); + this.type = type; + this.typeName = typeName; + } + + @Override + public Class getReturnedClass() { + return type; + } + + @Nullable + @Override + public T[] getValue(ResultSet rs, int startIndex) throws SQLException { + Array arr = rs.getArray(startIndex); + return arr != null ? (T[])arr.getArray() : null; + } + + @Override + public void setValue(PreparedStatement st, int startIndex, T[] value) throws SQLException { + Array arr = st.getConnection().createArrayOf(typeName, value); + st.setArray(startIndex, arr); + } +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index a4d99bda49..28055ce18b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -528,6 +528,13 @@ public static void initHSQL() throws SQLException, ClassNotFoundException{ return; } + // arrays + stmt.execute("drop table ARRAYTEST if exists"); + stmt.execute("create table ARRAYTEST ( " + + "ID bigint primary key, " + + "INTEGERS integer array, " + + "MYARRAY varchar(8) array)"); + // dual stmt.execute("drop table DUAL if exists"); stmt.execute("create table DUAL ( DUMMY varchar(1) )"); @@ -742,6 +749,7 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ dropTable(templates, "ARRAYTEST"); stmt.execute("create table \"ARRAYTEST\" (\n" + "\"ID\" bigint primary key,\n" + + "\"INTEGERS\" integer[],\n" + "\"MYARRAY\" varchar(8)[])"); // survey From a01a8d52ceccf78231e8a418c16107195fff6753 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 17 Aug 2014 23:56:21 +0300 Subject: [PATCH 0335/1968] Add typename mappings --- .../com/mysema/query/sql/Configuration.java | 58 +++++----- .../com/mysema/query/sql/DerbyTemplates.java | 13 ++- .../mysema/query/sql/FirebirdTemplates.java | 11 +- .../com/mysema/query/sql/H2Templates.java | 8 ++ .../com/mysema/query/sql/HSQLDBTemplates.java | 16 ++- .../com/mysema/query/sql/MySQLTemplates.java | 52 +++++++-- .../com/mysema/query/sql/OracleTemplates.java | 31 ++++-- .../mysema/query/sql/PostgresTemplates.java | 22 +++- .../com/mysema/query/sql/SQLSerializer.java | 4 +- .../mysema/query/sql/SQLServerTemplates.java | 29 ++++- .../com/mysema/query/sql/SQLTemplates.java | 102 +++++++++++------- .../com/mysema/query/sql/SQLiteTemplates.java | 6 +- .../mysema/query/sql/TeradataTemplates.java | 4 - .../java/com/mysema/query/Connections.java | 4 +- .../mysema/query/ddl/CreateTableClause.java | 16 +-- .../com/mysema/query/ddl/DropTableClause.java | 6 +- .../java/com/mysema/query/sql/TypesDump.java | 48 +++++++++ 17 files changed, 313 insertions(+), 117 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 3baf596aa8..b2f54d6390 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -13,8 +13,8 @@ */ package com.mysema.query.sql; +import javax.annotation.Nullable; import java.lang.reflect.Array; -import java.lang.reflect.Field; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; @@ -23,8 +23,6 @@ import java.util.List; import java.util.Map; -import javax.annotation.Nullable; - import com.google.common.collect.Maps; import com.mysema.query.sql.types.Null; import com.mysema.query.sql.types.Type; @@ -40,22 +38,6 @@ public final class Configuration { public static final Configuration DEFAULT = new Configuration(SQLTemplates.DEFAULT); - private static final Map typeConstants = Maps.newHashMap(); - - static { - try { - for (Field field : java.sql.Types.class.getDeclaredFields()) { - if (field.getType().equals(Integer.TYPE)) { - typeConstants.put(field.getName().toLowerCase(), field.getInt(null)); - } - } - typeConstants.put("int4", Types.INTEGER); - typeConstants.put("int8", Types.BIGINT); - } catch (IllegalAccessException e) { - throw new IllegalStateException(e.getMessage(), e); - } - } - private final JDBCTypeMapping jdbcTypeMapping = new JDBCTypeMapping(); private final JavaTypeMapping javaTypeMapping = new JavaTypeMapping(); @@ -154,12 +136,14 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, return clazz; } if (sqlType == Types.ARRAY) { - for (Map.Entry entry : typeConstants.entrySet()) { - if (typeName.toLowerCase().contains(entry.getKey())) { - Class componentType = jdbcTypeMapping.get(entry.getValue(), size, digits); - return Array.newInstance(componentType, 0).getClass(); - } + if (typeName.startsWith("_")) { + typeName = typeName.substring(1); + } else if (typeName.endsWith(" array")) { + typeName = typeName.substring(0, typeName.length() - 6); } + int sqlComponentType = templates.getCodeForTypeName(typeName); + Class componentType = jdbcTypeMapping.get(sqlComponentType, size, digits); + return Array.newInstance(componentType, 0).getClass(); } } // sql type mapped class @@ -206,8 +190,7 @@ public String getTable(String schema, String table) { /** * Get the schema/table override * - * @param schema - * @param table + * @param key * @return */ @Nullable @@ -290,6 +273,27 @@ private Type getType(@Nullable Path path, Class clazz) { return javaTypeMapping.getType(clazz); } + /** + * Get the SQL type name for the given java type + * + * @param type + * @return + */ + public String getTypeName(Class type) { + int jdbcType = jdbcTypeMapping.get(type); + return templates.getTypeNameForCode(jdbcType); + } + + /** + * + * @param type + * @return + */ + public String getTypeNameForCast(Class type) { + int jdbcType = jdbcTypeMapping.get(type); + return templates.getCastTypeNameForCode(jdbcType); + } + /** * Register a schema override * @@ -478,7 +482,7 @@ public RuntimeException translate(String sql, List bindings, SQLExceptio } /** - * @param listeners + * @param listener */ public void addListener(SQLListener listener) { listeners.add(listener); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java index 17c53fd73a..30bdb54a0c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java @@ -13,12 +13,12 @@ */ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; -import java.sql.Types; - /** * DerbyTemplates is an SQL dialect for Derby * @@ -53,7 +53,6 @@ public DerbyTemplates(boolean quote) { public DerbyTemplates(char escape, boolean quote) { super("\"", escape, quote); setDummyTable("sysibm.sysdummy1"); - addClass2TypeMappings("smallint", Byte.class); setAutoIncrement(" generated always as identity"); setFunctionJoinsWrapped(true); setDefaultValues("\nvalues (default)"); @@ -106,6 +105,14 @@ public DerbyTemplates(char escape, boolean quote) { // left via substr add(Ops.StringOps.LEFT, "substr({0},1,{1})"); + + addTypeNameToCode("smallint", Types.TINYINT, true); + addTypeNameToCode("long varchar for bit data", Types.LONGVARBINARY); + addTypeNameToCode("varchar () for bit data", Types.VARBINARY); + addTypeNameToCode("char () for bit data", Types.BINARY); + addTypeNameToCode("long varchar", Types.LONGVARCHAR, true); + addTypeNameToCode("object", Types.JAVA_OBJECT, true); + addTypeNameToCode("xml", Types.SQLXML,true); } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index e3f6201a56..56c1c830ac 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -1,5 +1,7 @@ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; @@ -34,9 +36,6 @@ public FirebirdTemplates(char escape, boolean quote) { setDummyTable("RDB$DATABASE"); setUnionsWrapped(false); setWrapSelectParameters(true); - addClass2TypeMappings("smallint", Boolean.class, Byte.class); - addClass2TypeMappings("varchar(256)", String.class); - addClass2TypeMappings("double precision", Double.class); // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); @@ -86,6 +85,12 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_HOURS, "datediff(hour,{0},{1})"); add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + + addTypeNameToCode("blob sub_type 0", Types.LONGVARBINARY); + addTypeNameToCode("blob sub_type 1", Types.LONGVARCHAR); + addTypeNameToCode("double precision", Types.DOUBLE); + addTypeNameToCode("array", Types.OTHER); + addTypeNameToCode("blob sub_type <0 ", Types.BLOB); } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java index 9e72a896fa..39e2bfece0 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.types.Ops; /** @@ -56,6 +58,12 @@ public H2Templates(char escape, boolean quote) { add(Ops.MathOps.COTH, "(cosh({0}) / sinh({0}))"); add(Ops.DateTimeOps.DATE, "convert({0}, date)"); + + addTypeNameToCode("result_set", -10); + addTypeNameToCode("identity", Types.BIGINT); + addTypeNameToCode("uuid", Types.BINARY); + addTypeNameToCode("serial", Types.INTEGER); + addTypeNameToCode("varchar_ignorecase", Types.VARCHAR); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java index c164e75f0f..e71bb0a518 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.types.Ops; /** @@ -78,11 +80,19 @@ public HSQLDBTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_SECONDS, "datediff('ss', {0}, {1})"); add(Ops.DateTimeOps.DATE, "convert({0}, date)"); + + addTypeNameToCode("character", Types.CHAR, true); + addTypeNameToCode("float", Types.DOUBLE, true); + addTypeNameToCode("real", Types.DOUBLE); + addTypeNameToCode("nvarchar", Types.VARCHAR); } - @Override - public String getTypeForCast(Class cl) { - return (cl.equals(String.class)) ? "varchar(10)" : getTypeForClass(cl); + public String getCastTypeNameForCode(int code) { + if (code == Types.VARCHAR) { + return "varchar(10)"; + } else { + return super.getCastTypeNameForCode(code); + } } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index c16652b377..509e89de26 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -13,7 +13,7 @@ */ package com.mysema.query.sql; -import java.math.BigDecimal; +import java.sql.Types; import com.mysema.query.types.Ops; @@ -51,14 +51,6 @@ public MySQLTemplates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); - addClass2TypeMappings("bool", Boolean.class); - addClass2TypeMappings("signed", - Byte.class, Short.class, Integer.class, Long.class); - - addClass2TypeMappings("decimal", - Double.class, Float.class, BigDecimal.class); - addClass2TypeMappings("char", String.class); - add(Ops.CONCAT, "concat({0}, {1})",0); add(Ops.StringOps.LPAD, "lpad({0},{1},' ')"); @@ -104,6 +96,32 @@ public MySQLTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_HOURS, "timestampdiff(hour,{0},{1})"); add(Ops.DateTimeOps.DIFF_MINUTES, "timestampdiff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "timestampdiff(second,{0},{1})"); + + addTypeNameToCode("bool", Types.BIT, true); + addTypeNameToCode("tinyint unsigned", Types.TINYINT); + addTypeNameToCode("bigint unsigned", Types.BIGINT); + addTypeNameToCode("long varbinary", Types.LONGVARBINARY, true); + addTypeNameToCode("mediumblob", Types.LONGVARBINARY); + addTypeNameToCode("longblob", Types.LONGVARBINARY); + addTypeNameToCode("blob", Types.LONGVARBINARY); + addTypeNameToCode("tinyblob", Types.LONGVARBINARY); + addTypeNameToCode("long varchar", Types.LONGVARCHAR, true); + addTypeNameToCode("mediumtext", Types.LONGVARCHAR); + addTypeNameToCode("longtext", Types.LONGVARCHAR); + addTypeNameToCode("text", Types.LONGVARCHAR); + addTypeNameToCode("tinytext", Types.LONGVARCHAR); + addTypeNameToCode("integer unsigned", Types.INTEGER); + addTypeNameToCode("int", Types.INTEGER); + addTypeNameToCode("int unsigned", Types.INTEGER); + addTypeNameToCode("mediumint", Types.INTEGER); + addTypeNameToCode("mediumint unsigned", Types.INTEGER); + addTypeNameToCode("smallint unsigned", Types.SMALLINT); + addTypeNameToCode("float", Types.REAL, true); + addTypeNameToCode("double precision", Types.DOUBLE, true); + addTypeNameToCode("real", Types.DOUBLE); + addTypeNameToCode("enum", Types.VARCHAR); + addTypeNameToCode("set", Types.VARCHAR); + addTypeNameToCode("datetime", Types.TIMESTAMP, true); } @Override @@ -118,4 +136,20 @@ public String escapeLiteral(String str) { return builder.toString(); } + + public String getCastTypeNameForCode(int code) { + switch (code) { + case Types.TINYINT: + case Types.SMALLINT: + case Types.INTEGER: + case Types.BIGINT: return "signed"; + case Types.FLOAT: + case Types.DOUBLE: + case Types.REAL: + case Types.DECIMAL: return "decimal"; + case Types.VARCHAR: return "char"; + default: return super.getCastTypeNameForCode(code); + } + } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java index 693b8813f7..8007246f07 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java @@ -13,7 +13,6 @@ */ package com.mysema.query.sql; -import java.math.BigInteger; import java.sql.Types; import java.util.List; @@ -70,15 +69,6 @@ public OracleTemplates(char escape, boolean quote) { setWithRecursive("with "); setCountViaAnalytics(true); - // type mappings - addClass2TypeMappings("number(3,0)", Byte.class); - addClass2TypeMappings("number(1,0)", Boolean.class); - addClass2TypeMappings("number(19,0)", BigInteger.class, Long.class); - addClass2TypeMappings("number(5,0)", Short.class); - addClass2TypeMappings("number(10,0)", Integer.class); - addClass2TypeMappings("double precision", Double.class); - addClass2TypeMappings("varchar(4000 char)", String.class); - add(Ops.ALIAS, "{0} {1}"); add(SQLOps.NEXTVAL, "{0s}.nextval"); @@ -132,6 +122,27 @@ public OracleTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh')"); add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0}, 'mi')"); add(Ops.DateTimeOps.TRUNC_SECOND, "{0}"); // not truncated + + addTypeNameToCode("intervalds", -104); + addTypeNameToCode("intervalym", -103); + addTypeNameToCode("timestamp with local time zone", -102); + addTypeNameToCode("timestamp with time zone", -101); + addTypeNameToCode("long raw", Types.LONGVARBINARY); + addTypeNameToCode("raw", Types.VARBINARY); + addTypeNameToCode("long", Types.LONGVARCHAR); + addTypeNameToCode("varchar2", Types.VARCHAR); + } + + public String getCastTypeNameForCode(int code) { + switch (code) { + case Types.TINYINT: return "number(3,0)"; + case Types.SMALLINT: return "number(5,0)"; + case Types.INTEGER: return "number(10,0)"; + case Types.BIGINT: return "number(19,0)"; + case Types.DOUBLE: return "double precision"; + case Types.VARCHAR: return "varchar(4000 char)"; + default: return super.getCastTypeNameForCode(code); + } } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index 2c06685ae6..9c0ec661b2 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.types.Ops; /** @@ -49,9 +51,6 @@ public PostgresTemplates(char escape, boolean quote) { setCountViaAnalytics(true); setDefaultValues("\ndefault values"); - addClass2TypeMappings("numeric(3,0)", Byte.class); - addClass2TypeMappings("double precision", Double.class); - // String add(Ops.MATCHES, "{0} ~ {1}"); add(Ops.INDEX_OF, "strpos({0},{1})-1"); @@ -110,6 +109,23 @@ public PostgresTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_HOURS, hoursDiff); add(Ops.DateTimeOps.DIFF_MINUTES, minutesDiff); add(Ops.DateTimeOps.DIFF_SECONDS, secondsDiff); + + addTypeNameToCode("bool", Types.BIT, true); + addTypeNameToCode("bytea", Types.BINARY); + addTypeNameToCode("name", Types.VARCHAR); + addTypeNameToCode("int8", Types.BIGINT, true); + addTypeNameToCode("bigserial", Types.BIGINT); + addTypeNameToCode("int2", Types.TINYINT, true); + addTypeNameToCode("int2", Types.SMALLINT, true); + addTypeNameToCode("int4", Types.INTEGER, true); + addTypeNameToCode("serial", Types.INTEGER); + addTypeNameToCode("text", Types.VARCHAR); + addTypeNameToCode("oid", Types.BIGINT); + addTypeNameToCode("xml", Types.SQLXML, true); + addTypeNameToCode("float4", Types.REAL, true); + addTypeNameToCode("float8", Types.DOUBLE, true); + addTypeNameToCode("bpchar", Types.CHAR); + addTypeNameToCode("timestamptz", Types.TIMESTAMP); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index e1e59f1363..1fa3e1b414 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -853,13 +853,13 @@ protected void visitOperation(Class type, Operator operator, List targetType = (Class) ((Constant) args.get(1)).getConstant(); - final String typeName = templates.getTypeForCast(targetType); + final String typeName = configuration.getTypeNameForCast(targetType); super.visitOperation(targetType, SQLOps.CAST, ImmutableList.of(args.get(0), ConstantImpl.create(typeName))); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index c18577a671..9bafdc99ab 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -51,7 +51,6 @@ public SQLServerTemplates(boolean quote) { public SQLServerTemplates(char escape, boolean quote) { super("\"", escape, quote); - addClass2TypeMappings("decimal", Double.class); setDummyTable(""); setNullsFirst(null); setNullsLast(null); @@ -114,6 +113,34 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DATE, "cast({0} as date)"); add(Ops.DateTimeOps.CURRENT_DATE, "cast(getdate() as date)"); + + addTypeNameToCode("decimal", Types.DOUBLE, true); + addTypeNameToCode("tinyint identity", Types.TINYINT); + addTypeNameToCode("bigint identity", Types.BIGINT); + addTypeNameToCode("timestamp", Types.BINARY); + addTypeNameToCode("nchar", Types.CHAR); + addTypeNameToCode("uniqueidentifier", Types.CHAR); + addTypeNameToCode("numeric() identity", Types.NUMERIC); + addTypeNameToCode("money", Types.DECIMAL); + addTypeNameToCode("smallmoney", Types.DECIMAL); + addTypeNameToCode("decimal() identity", Types.DECIMAL); + addTypeNameToCode("int", Types.INTEGER); + addTypeNameToCode("int identity", Types.INTEGER); + addTypeNameToCode("smallint identity", Types.SMALLINT); + addTypeNameToCode("float", Types.DOUBLE); + addTypeNameToCode("nvarchar", Types.VARCHAR); + addTypeNameToCode("date", Types.VARCHAR); + addTypeNameToCode("time", Types.VARCHAR); + addTypeNameToCode("datetime2", Types.VARCHAR); + addTypeNameToCode("datetimeoffset", Types.VARCHAR); + addTypeNameToCode("sysname", Types.VARCHAR); + addTypeNameToCode("sql_variant", Types.VARCHAR); + addTypeNameToCode("datetime", Types.TIMESTAMP); + addTypeNameToCode("smalldatetime", Types.TIMESTAMP); + addTypeNameToCode("image", Types.BLOB); + addTypeNameToCode("ntext", Types.CLOB); + addTypeNameToCode("xml", Types.CLOB); + addTypeNameToCode("text", Types.CLOB); } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 9605c20520..c53a2c4b24 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -14,17 +14,13 @@ package com.mysema.query.sql; import java.lang.reflect.Field; -import java.math.BigDecimal; -import java.math.BigInteger; import java.sql.Types; import java.util.Arrays; import java.util.List; -import java.util.Locale; import java.util.Map; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.google.common.primitives.Primitives; import com.mysema.commons.lang.Pair; import com.mysema.query.JoinType; import com.mysema.query.QueryException; @@ -33,10 +29,6 @@ import com.mysema.query.QueryModifiers; import com.mysema.query.sql.types.Type; import com.mysema.query.types.*; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.LocalTime; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -89,7 +81,9 @@ public SQLTemplates build() { } - private final Map, String> class2type = Maps.newHashMap(); + private final Map typeNameToCode = Maps.newHashMap(); + + private final Map codeToTypeName = Maps.newHashMap(); private final Map tableOverrides = Maps.newHashMap(); @@ -342,27 +336,43 @@ protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { add(Ops.AggOps.BOOLEAN_ANY, "some({0})"); add(Ops.AggOps.BOOLEAN_ALL, "every({0})"); - for (Class cl : new Class[] { Boolean.class, Byte.class, - Double.class, Float.class, Integer.class, Long.class, - Short.class, String.class }) { - class2type.put(cl, cl.getSimpleName().toLowerCase(Locale.ENGLISH)); - } - - class2type.put(Boolean.class, "bit"); - class2type.put(Byte.class, "tinyint"); - class2type.put(Long.class, "bigint"); - class2type.put(BigInteger.class, "bigint"); - class2type.put(BigDecimal.class, "decimal"); - class2type.put(Short.class, "smallint"); - class2type.put(String.class, "varchar"); - class2type.put(java.sql.Date.class, "date"); - class2type.put(java.sql.Time.class, "time"); - class2type.put(java.sql.Timestamp.class, "timestamp"); - - class2type.put(LocalDateTime.class, "timestamp"); - class2type.put(LocalDate.class, "date"); - class2type.put(LocalTime.class, "time"); - class2type.put(DateTime.class, "timestamp"); + // default type names + addTypeNameToCode("null", Types.NULL); + addTypeNameToCode("char", Types.CHAR); + addTypeNameToCode("datalink", Types.DATALINK); + addTypeNameToCode("numeric", Types.NUMERIC); + addTypeNameToCode("decimal", Types.DECIMAL); + addTypeNameToCode("integer", Types.INTEGER); + addTypeNameToCode("smallint", Types.SMALLINT); + addTypeNameToCode("float", Types.FLOAT); + addTypeNameToCode("real", Types.REAL); + addTypeNameToCode("double", Types.DOUBLE); + addTypeNameToCode("varchar", Types.VARCHAR); + addTypeNameToCode("longnvarchar", Types.LONGNVARCHAR); + addTypeNameToCode("nchar", Types.NCHAR); + addTypeNameToCode("boolean", Types.BOOLEAN); + addTypeNameToCode("nvarchar", Types.NVARCHAR); + addTypeNameToCode("rowid", Types.ROWID); + addTypeNameToCode("timestamp", Types.TIMESTAMP); + addTypeNameToCode("bit", Types.BIT); + addTypeNameToCode("time", Types.TIME); + addTypeNameToCode("tinyint", Types.TINYINT); + addTypeNameToCode("other", Types.OTHER); + addTypeNameToCode("bigint", Types.BIGINT); + addTypeNameToCode("longvarbinary", Types.LONGVARBINARY); + addTypeNameToCode("varbinary", Types.VARBINARY); + addTypeNameToCode("date", Types.DATE); + addTypeNameToCode("binary", Types.BINARY); + addTypeNameToCode("longvarchar", Types.LONGVARCHAR); + addTypeNameToCode("struct", Types.STRUCT); + addTypeNameToCode("array", Types.ARRAY); + addTypeNameToCode("java_object", Types.JAVA_OBJECT); + addTypeNameToCode("distinct", Types.DISTINCT); + addTypeNameToCode("ref", Types.REF); + addTypeNameToCode("blob", Types.BLOB); + addTypeNameToCode("clob", Types.CLOB); + addTypeNameToCode("nclob", Types.NCLOB); + addTypeNameToCode("sqlxml", Types.SQLXML); } public String serialize(String literal, int jdbcType) { @@ -405,12 +415,17 @@ public String escapeLiteral(String str) { return builder.toString(); } - protected void addClass2TypeMappings(String type, Class... classes) { - for (Class cl : classes) { - class2type.put(cl, type); + protected void addTypeNameToCode(String type, int code, boolean override) { + typeNameToCode.put(type, code); + if (override || !codeToTypeName.containsKey(code)) { + codeToTypeName.put(code, type); } } + protected void addTypeNameToCode(String type, int code) { + addTypeNameToCode(type, code, false); + } + protected void add(Map, String> ops) { for (Map.Entry, String> entry : ops.entrySet()) { add(entry.getKey(), entry.getValue()); @@ -568,17 +583,26 @@ public final Map getTableOverrides() { return tableOverrides; } + @Deprecated public String getTypeForCast(Class cl) { return getTypeForClass(cl); } + @Deprecated public String getTypeForClass(Class cl) { - Class clazz = Primitives.wrap(cl); - if (class2type.containsKey(clazz)) { - return class2type.get(clazz); - } else { - throw new IllegalArgumentException("Got no type for " + clazz.getName()); - } + throw new UnsupportedOperationException(); + } + + public String getTypeNameForCode(int code) { + return codeToTypeName.get(code); + } + + public String getCastTypeNameForCode(int code) { + return getTypeNameForCode(code); + } + + public int getCodeForTypeName(String type) { + return typeNameToCode.get(type); } public final String getUpdate() { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java index 9c612a0ae4..40e035dcc1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java @@ -13,13 +13,13 @@ */ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.sql.types.BigDecimalAsDoubleType; import com.mysema.query.types.Ops; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; -import java.sql.Types; - /** * SQLiteTemplates is a SQL dialect for SQLite * @@ -94,6 +94,8 @@ public SQLiteTemplates(char escape, boolean quote) { add(Ops.MathOps.RANDOM2, "random({0})"); add(Ops.MathOps.LN, "log({0})"); add(Ops.MathOps.LOG, "(log({0}) / log({1}))"); + + addTypeNameToCode("text", Types.VARCHAR); } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java index 17217e9fe1..19938823b0 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java @@ -59,10 +59,6 @@ public TeradataTemplates(char escape, boolean quote) { setCountViaAnalytics(true); setDefaultValues("\ndefault values"); - addClass2TypeMappings("byteint", Byte.class); - addClass2TypeMappings("double precision", Double.class); - addClass2TypeMappings("varchar(4000)", String.class); - add(Ops.NE, "{0} <> {1}"); // String diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 28055ce18b..0c8a3f12ac 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -157,11 +157,11 @@ private static Connection getTeradata() throws SQLException, ClassNotFoundExcept } private static CreateTableClause createTable(SQLTemplates templates, String table) { - return new CreateTableClause(connHolder.get(), templates, table); + return new CreateTableClause(connHolder.get(), new Configuration(templates), table); } public static void dropTable(SQLTemplates templates, String table) throws SQLException{ - new DropTableClause(connHolder.get(), templates, table).execute(); + new DropTableClause(connHolder.get(), new Configuration(templates), table).execute(); } public static void dropType(Statement stmt, String type) throws SQLException { diff --git a/querydsl-sql/src/test/java/com/mysema/query/ddl/CreateTableClause.java b/querydsl-sql/src/test/java/com/mysema/query/ddl/CreateTableClause.java index 1a7844b9f2..05f00f1761 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/ddl/CreateTableClause.java +++ b/querydsl-sql/src/test/java/com/mysema/query/ddl/CreateTableClause.java @@ -11,12 +11,12 @@ import java.util.ArrayList; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.google.common.base.Joiner; import com.mysema.query.QueryException; +import com.mysema.query.sql.Configuration; import com.mysema.query.sql.SQLTemplates; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * CreateTableClause defines a CREATE TABLE clause @@ -32,6 +32,8 @@ public class CreateTableClause { private final Connection connection; + private final Configuration configuration; + private final SQLTemplates templates; private final String table; @@ -44,9 +46,10 @@ public class CreateTableClause { private final List foreignKeys = new ArrayList(); - public CreateTableClause(Connection conn, SQLTemplates templates, String table) { + public CreateTableClause(Connection conn, Configuration c, String table) { this.connection = conn; - this.templates = templates; + this.configuration = c; + this.templates = c.getTemplates(); this.table = templates.quoteIdentifier(table); } @@ -58,7 +61,8 @@ public CreateTableClause(Connection conn, SQLTemplates templates, String table) * @return */ public CreateTableClause column(String name, Class type) { - columns.add(new ColumnData(templates.quoteIdentifier(name), templates.getTypeForClass(type))); + String typeName = configuration.getTypeName(type); + columns.add(new ColumnData(templates.quoteIdentifier(name), typeName)); return this; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/ddl/DropTableClause.java b/querydsl-sql/src/test/java/com/mysema/query/ddl/DropTableClause.java index e7f8d1c348..746f882c56 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/ddl/DropTableClause.java +++ b/querydsl-sql/src/test/java/com/mysema/query/ddl/DropTableClause.java @@ -10,7 +10,7 @@ import java.sql.Statement; import com.mysema.query.QueryException; -import com.mysema.query.sql.SQLTemplates; +import com.mysema.query.sql.Configuration; /** * DropTableClause defines a DROP TABLE clause @@ -24,9 +24,9 @@ public class DropTableClause { private final String table; - public DropTableClause(Connection conn, SQLTemplates templates, String table) { + public DropTableClause(Connection conn, Configuration c, String table) { this.connection = conn; - this.table = templates.quoteIdentifier(table); + this.table = c.getTemplates().quoteIdentifier(table); } @SuppressWarnings("SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE") diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java b/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java new file mode 100644 index 0000000000..6225dda9e6 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java @@ -0,0 +1,48 @@ +package com.mysema.query.sql; + +import java.lang.reflect.Field; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.Map; + +import com.google.common.collect.Maps; +import com.mysema.query.Connections; + +public class TypesDump { + + public static void main(String[] args) throws Exception { + Map typeConstants = Maps.newHashMap(); + for (Field field : java.sql.Types.class.getDeclaredFields()) { + if (field.getType().equals(Integer.TYPE)) { + typeConstants.put(field.getInt(null), field.getName()); + } + } + + Connections.initSQLServer(); + try { + Connection c = Connections.getConnection(); + DatabaseMetaData m = c.getMetaData(); + ResultSet rs = m.getTypeInfo(); + try { + while (rs.next()) { + String name = rs.getString("TYPE_NAME"); + int jdbcType = rs.getInt("DATA_TYPE"); + String jdbcTypeField = typeConstants.get(jdbcType); + if (jdbcTypeField == null || !jdbcTypeField.equalsIgnoreCase(name)) { + String prefix = rs.getString("LITERAL_PREFIX"); + String suffix = rs.getString("LITERAL_SUFFIX"); + String jdbcTypeStr = jdbcTypeField != null ? ("Types." + jdbcTypeField) : String.valueOf(jdbcType); + System.out.println("addTypeNameToCode(\"" + name.toLowerCase() + "\", " + jdbcTypeStr + ");"); + } + } + } finally { + rs.close(); + } + } finally { + Connections.close(); + } + + } + +} From ff6e1722e5e674675f735a1288b281f1cbb62fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 18:53:04 +0300 Subject: [PATCH 0336/1968] Add test case --- .../mysema/query/domain/QueryInit6Test.java | 192 ++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 querydsl-apt/src/test/java/com/mysema/query/domain/QueryInit6Test.java diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/QueryInit6Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/QueryInit6Test.java new file mode 100644 index 0000000000..0ec48336b9 --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/QueryInit6Test.java @@ -0,0 +1,192 @@ +package com.mysema.query.domain; + +import javax.persistence.*; +import java.io.Serializable; +import java.util.HashSet; +import java.util.Set; + +import com.mysema.query.annotations.PropertyType; +import com.mysema.query.annotations.QueryInit; +import com.mysema.query.annotations.QueryType; +import org.hibernate.proxy.HibernateProxy; +import org.junit.Test; +import static org.junit.Assert.assertNotNull; + +public class QueryInit6Test { + + @Entity(name = Component.NAME) + @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) + public static abstract class Component implements Serializable { + public static final String NAME = "Component"; + + @Id + protected String id; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "parent_id") + private Component parent; + + @QueryType(PropertyType.ENTITY) + @QueryInit("*") + @Transient + public Container getContainer(){ + Component temp = this.parent; + if(this.parent instanceof HibernateProxy){ + temp = (Component) ((HibernateProxy) this.parent) + .getHibernateLazyInitializer().getImplementation(); + } + + if(temp instanceof Container) + return (Container)temp; + else{ + if (!temp.isRoot()) { + return temp.getParent().getContainer(); + } else { + return null; + } + } + } + + @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.LAZY) + private Set children; + + protected Component() { + + } + + protected Component(String id, Component parent) { + this.id = id; + this.parent = parent; + this.children = new HashSet(); + } + + @Transient + public boolean isRoot() { + return (parent == null); + } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public Set getChildren() { + return children; + } + + public void setChildren(Set children) { + this.children = children; + } + + public Component getParent() { + return parent; + } + + public void setParent(Component parent) { + this.parent = parent; + } + } + + @Entity(name = Content.NAME) + public static class Content extends Component { + + public static final String NAME = "Content"; + + @Column(name = "quantity") + private long quantity; + + public Content() { + super(null, null); + } + + public Content(String id, Component parent) { + super(id, parent); + this.quantity = 0; + } + + @Override + public String toString() { + return "Content [id=" + id + " qty=" + quantity + "]"; + } + + public long getQuantity() { + return quantity; + } + + public void setQuantity(long quantity) { + this.quantity = quantity; + } + } + + @Entity(name = Container.NAME) + public static class Container extends Component { + + public static final String NAME = "Container"; + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "packaging_id") + private Packaging packaging; + + public Container() { + super(null, null); + } + + public Container(String id, Component parent) { + super(id, parent); + this.packaging = null; + } + + public Packaging getPackaging() { + return packaging; + } + + public void setPackaging(Packaging packaging) { + this.packaging = packaging; + } + } + + @Entity(name = Packaging.NAME) + public static class Packaging implements Serializable { + + public static final String NAME = "Packaging"; + + @Id + private String id; + + @Column(name = "description") + private String description; + + public Packaging() { + + } + + public Packaging(String id, String description) { + this.id = id; + this.description = description; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + } + + @Test + public void test(){ + assertNotNull(QQueryInit6Test_Content.content.container.packaging); + assertNotNull(QQueryInit6Test_Content.content.container.packaging.id); + } +} From 382bcb816b5610c2d52dd76bffd1316e63355e20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 18:56:45 +0300 Subject: [PATCH 0337/1968] Bump version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 287b351e70..d13bcfb24b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.6.2 + 0.6.3 Codegen Code generation and compilation for Java From 73ca6f15c2ad775c918ba5bab29a10d4512e7dd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 18:58:08 +0300 Subject: [PATCH 0338/1968] Bump codegen version --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 7d6a50f865..686e5007e0 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -40,7 +40,7 @@ 2.2.5 14.0 - 0.6.2 + 0.6.3 0.2.4 2.2.2 1.3.2 From 6c054818e35490ae07edbca24b00b23c7d27904e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 21:48:50 +0300 Subject: [PATCH 0339/1968] Fix conversion --- .../com/mysema/query/codegen/EntityType.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java index c1f5c665cb..97ce4814bb 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java @@ -13,15 +13,9 @@ */ package com.mysema.query.codegen; -import java.lang.annotation.Annotation; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - import javax.annotation.Nullable; +import java.lang.annotation.Annotation; +import java.util.*; import com.mysema.codegen.StringUtils; import com.mysema.codegen.model.Constructor; @@ -128,6 +122,15 @@ public Collection getAnnotations() { return annotations.values(); } + @Override + public Type as(TypeCategory category) { + if (getCategory() == category) { + return this; + } else { + return super.as(category); + } + } + @Override public TypeCategory getCategory() { if (getType().getCategory() == TypeCategory.ENTITY || !properties.isEmpty()) { From 3e1afa2f3a59e8de85d4e2cd703085b5ddbe4348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 21:51:20 +0300 Subject: [PATCH 0340/1968] Fix constant serialization --- .../src/main/java/com/mysema/query/sql/SQLSerializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 1fa3e1b414..b51888e381 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -753,7 +753,7 @@ public void visitConstant(Object constant) { if (stage == Stage.SELECT && !Null.class.isInstance(constant) && configuration.getTemplates().isWrapSelectParameters()) { - String typeName = templates.getTypeForCast(constant.getClass()); + String typeName = configuration.getTypeNameForCast(constant.getClass()); Expression type = Expressions.constant(typeName); super.visitOperation(constant.getClass(), SQLOps.CAST, ImmutableList.>of(Q, type)); } else { From 43bc8ce74b8f1cb3d872fbe55c3a1d50a227ea64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 22:32:19 +0300 Subject: [PATCH 0341/1968] Array type registration --- .../java/com/mysema/query/sql/Configuration.java | 12 ++++++++++++ .../main/java/com/mysema/query/sql/SQLTemplates.java | 6 +++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index b2f54d6390..ce2a37584d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -23,7 +23,9 @@ import java.util.List; import java.util.Map; +import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; +import com.mysema.query.sql.types.ArrayType; import com.mysema.query.sql.types.Null; import com.mysema.query.sql.types.Type; import com.mysema.query.types.Path; @@ -77,6 +79,16 @@ public Configuration(SQLTemplates templates) { for (Map.Entry entry : templates.getTableOverrides().entrySet()) { schemaTables.put(entry.getKey(), entry.getValue()); } + + List> classes = ImmutableList.>of(String.class, Long.class, Integer.class, Short.class, + Byte.class, Boolean.class, java.sql.Date.class, java.sql.Timestamp.class, + java.sql.Time.class, Double.class, Float.class); + for (Class cl : classes) { + int code = jdbcTypeMapping.get(cl); + String name = templates.getTypeNameForCode(code); + Class arrType = Array.newInstance(cl, 0).getClass(); + javaTypeMapping.register(new ArrayType(arrType, name)); + } } /** diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index c53a2c4b24..f323ba2680 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -602,7 +602,11 @@ public String getCastTypeNameForCode(int code) { } public int getCodeForTypeName(String type) { - return typeNameToCode.get(type); + Integer code = typeNameToCode.get(type); + if (code == null) { + throw new IllegalArgumentException("No code for " + type); + } + return code.intValue(); } public final String getUpdate() { From deaa495027fb7980dc2b73726dc16ceff94fd5d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 22:40:31 +0300 Subject: [PATCH 0342/1968] Improve cubrid mappings --- .../java/com/mysema/query/sql/CUBRIDTemplates.java | 11 +++++++++++ .../src/test/java/com/mysema/query/sql/TypesDump.java | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java index b1daa48dff..847f8c84e3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql; +import java.sql.Types; + import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; @@ -72,6 +74,15 @@ public CUBRIDTemplates(char escape, boolean quote) { add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); + + addTypeNameToCode("numeric(3,0)", Types.TINYINT, true); + addTypeNameToCode("numeric(38,0)", Types.BIGINT, true); + addTypeNameToCode("bit varying", Types.LONGVARBINARY); + addTypeNameToCode("bit varying", Types.VARBINARY); + addTypeNameToCode("bit", Types.BINARY, true); + addTypeNameToCode("varchar", Types.LONGVARCHAR, true); + addTypeNameToCode("double", Types.FLOAT, true); + addTypeNameToCode("float", Types.REAL, true); } @Override diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java b/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java index 6225dda9e6..a0838bd745 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java @@ -19,7 +19,7 @@ public static void main(String[] args) throws Exception { } } - Connections.initSQLServer(); + Connections.initCubrid(); try { Connection c = Connections.getConnection(); DatabaseMetaData m = c.getMetaData(); @@ -34,6 +34,7 @@ public static void main(String[] args) throws Exception { String suffix = rs.getString("LITERAL_SUFFIX"); String jdbcTypeStr = jdbcTypeField != null ? ("Types." + jdbcTypeField) : String.valueOf(jdbcType); System.out.println("addTypeNameToCode(\"" + name.toLowerCase() + "\", " + jdbcTypeStr + ");"); + //System.out.println(rs.getInt("PRECISION")); } } } finally { From e877e3cb9d2975b059db94870505711a13f76cd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 18 Aug 2014 23:42:00 +0300 Subject: [PATCH 0343/1968] Update cast name mappings --- .../java/com/mysema/query/sql/FirebirdTemplates.java | 9 +++++++++ .../main/java/com/mysema/query/sql/HSQLDBTemplates.java | 1 + .../main/java/com/mysema/query/sql/MySQLTemplates.java | 2 +- .../main/java/com/mysema/query/sql/OracleTemplates.java | 1 + 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 56c1c830ac..e5f889b877 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -93,6 +93,15 @@ public FirebirdTemplates(char escape, boolean quote) { addTypeNameToCode("blob sub_type <0 ", Types.BLOB); } + @Override + public String getCastTypeNameForCode(int code) { + if (code == Types.VARCHAR) { + return "varchar(256)"; + } else { + return super.getCastTypeNameForCode(code); + } + } + @Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java index e71bb0a518..7e6276438d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java @@ -87,6 +87,7 @@ public HSQLDBTemplates(char escape, boolean quote) { addTypeNameToCode("nvarchar", Types.VARCHAR); } + @Override public String getCastTypeNameForCode(int code) { if (code == Types.VARCHAR) { return "varchar(10)"; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index 509e89de26..a2a154e2e7 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -136,7 +136,7 @@ public String escapeLiteral(String str) { return builder.toString(); } - + @Override public String getCastTypeNameForCode(int code) { switch (code) { case Types.TINYINT: diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java index 8007246f07..94a201e193 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java @@ -133,6 +133,7 @@ public OracleTemplates(char escape, boolean quote) { addTypeNameToCode("varchar2", Types.VARCHAR); } + @Override public String getCastTypeNameForCode(int code) { switch (code) { case Types.TINYINT: return "number(3,0)"; From 22ee46cf8526b20062199a658a7e2585c6249edb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 19 Aug 2014 21:35:32 +0300 Subject: [PATCH 0344/1968] Fix maven-bundl-plugin config --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 7d6a50f865..fbec738c16 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -186,7 +186,7 @@ ${osgi.import.package} - com.mysema.query.* + com.mysema.* From 41f0e9ec08a7cd7559b7b152f397b0baa0687441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 19 Aug 2014 21:47:16 +0300 Subject: [PATCH 0345/1968] Add exclusions --- querydsl-root/pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 7d6a50f865..d64e88b928 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -214,6 +214,17 @@ com/mysema/query/SearchResults com/mysema/query/sql/SQLListeners com/mysema/query/apt/TypeExtractor + + com/mysema/query/support/NumberConversion + com/mysema/query/support/NumberConversions + com/mysema/query/types/ArrayConstructorExpression + com/mysema/query/types/ConstructorExpression + com/mysema/query/types/FactoryExpressionBase + com/mysema/query/types/MappingProjection + com/mysema/query/types/QBean + com/mysema/query/types/QList + com/mysema/query/types/QMap + com/mysema/query/types/QTuple BACKWARD_COMPATIBLE_USER true From af8fb00405aa12bb728eaf876b13f0fb773fbf0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 19 Aug 2014 22:24:39 +0300 Subject: [PATCH 0346/1968] Fix other incompatibilities --- querydsl-root/pom.xml | 4 +++- .../src/main/scala/com/mysema/query/scala/Projections.scala | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index d64e88b928..130ddc852f 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -214,7 +214,9 @@ com/mysema/query/SearchResults com/mysema/query/sql/SQLListeners com/mysema/query/apt/TypeExtractor - + + com/mysema/query/sql/QBeans + com/mysema/query/support/EnumConversion com/mysema/query/support/NumberConversion com/mysema/query/support/NumberConversions com/mysema/query/types/ArrayConstructorExpression diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Projections.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Projections.scala index 9d62ae22ab..e6fcb0a56e 100644 --- a/querydsl-scala/src/main/scala/com/mysema/query/scala/Projections.scala +++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/Projections.scala @@ -35,7 +35,7 @@ trait Projections { * @param mf * @return */ - def create[T](expressions: Ex[_]*)(implicit mf: Manifest[T]) = { + def create[T](expressions: Ex[_]*)(implicit mf: Manifest[T]): ExpressionBase[_] = { val clazz = mf.runtimeClass.asInstanceOf[Class[T]] try { clazz.getConstructor() From 604e64a265451a4375ce662aefe16b744f2359e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 19 Aug 2014 22:37:43 +0300 Subject: [PATCH 0347/1968] Support any paths --- .../mysema/query/lucene/LuceneSerializer.java | 58 +++++-------------- .../mysema/query/lucene/LuceneSerializer.java | 58 +++++-------------- 2 files changed, 32 insertions(+), 84 deletions(-) diff --git a/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java b/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java index 64c5c8e17e..f29db088ab 100644 --- a/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java +++ b/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java @@ -13,50 +13,22 @@ */ package com.mysema.query.lucene; +import javax.annotation.Nullable; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; import java.util.regex.Pattern; -import javax.annotation.Nullable; - +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.mysema.query.QueryMetadata; +import com.mysema.query.types.*; import org.apache.lucene.index.Term; import org.apache.lucene.queryParser.QueryParser; -import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.*; import org.apache.lucene.search.BooleanClause.Occur; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.NumericRangeQuery; -import org.apache.lucene.search.PhraseQuery; -import org.apache.lucene.search.PrefixQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.Sort; -import org.apache.lucene.search.SortField; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TermRangeQuery; -import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.util.NumericUtils; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; -import com.mysema.query.QueryMetadata; -import com.mysema.query.types.Constant; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.Operation; -import com.mysema.query.types.Operator; -import com.mysema.query.types.Ops; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathType; - /** * Serializes Querydsl queries to Lucene queries. * @@ -451,14 +423,16 @@ private Path getPath(Expression leftHandSide) { * @return */ protected String toField(Path path) { - String rv = path.getMetadata().getName(); - if (path.getMetadata().getParent() != null) { - Path parent = path.getMetadata().getParent(); - if (parent.getMetadata().getPathType() != PathType.VARIABLE) { - rv = toField(parent) + "." + rv; - } + PathMetadata md = path.getMetadata(); + if (md.getPathType() == PathType.PROPERTY) { + return toField(md.getParent()) + "." + md.getName(); + } else if (md.getPathType() == PathType.COLLECTION_ANY) { + return toField(md.getParent()); + } else if (md.getPathType() == PathType.VARIABLE) { + return md.getName(); + } else { + throw new IllegalArgumentException("Unsupported path " + path); } - return rv; } private void verifyArguments(Operation operation) { diff --git a/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java b/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java index 82a3d02a0e..0212994aeb 100644 --- a/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java +++ b/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java @@ -13,51 +13,23 @@ */ package com.mysema.query.lucene; +import javax.annotation.Nullable; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; import java.util.regex.Pattern; -import javax.annotation.Nullable; - +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.mysema.query.QueryMetadata; +import com.mysema.query.types.*; import org.apache.lucene.index.Term; import org.apache.lucene.queryparser.classic.QueryParser; -import org.apache.lucene.search.BooleanClause; +import org.apache.lucene.search.*; import org.apache.lucene.search.BooleanClause.Occur; -import org.apache.lucene.search.BooleanQuery; -import org.apache.lucene.search.MatchAllDocsQuery; -import org.apache.lucene.search.NumericRangeQuery; -import org.apache.lucene.search.PhraseQuery; -import org.apache.lucene.search.PrefixQuery; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.Sort; -import org.apache.lucene.search.SortField; -import org.apache.lucene.search.TermQuery; -import org.apache.lucene.search.TermRangeQuery; -import org.apache.lucene.search.WildcardQuery; import org.apache.lucene.util.BytesRef; import org.apache.lucene.util.NumericUtils; -import com.google.common.base.Splitter; -import com.google.common.collect.Iterables; -import com.mysema.query.QueryMetadata; -import com.mysema.query.types.Constant; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.Operation; -import com.mysema.query.types.Operator; -import com.mysema.query.types.Ops; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathType; - /** * Serializes Querydsl queries to Lucene queries. * @@ -454,14 +426,16 @@ private Path getPath(Expression leftHandSide) { * @return */ protected String toField(Path path) { - String rv = path.getMetadata().getName(); - if (path.getMetadata().getParent() != null) { - Path parent = path.getMetadata().getParent(); - if (parent.getMetadata().getPathType() != PathType.VARIABLE) { - rv = toField(parent) + "." + rv; - } + PathMetadata md = path.getMetadata(); + if (md.getPathType() == PathType.PROPERTY) { + return toField(md.getParent()) + "." + md.getName(); + } else if (md.getPathType() == PathType.COLLECTION_ANY) { + return toField(md.getParent()); + } else if (md.getPathType() == PathType.VARIABLE) { + return md.getName(); + } else { + throw new IllegalArgumentException("Unsupported path " + path); } - return rv; } private void verifyArguments(Operation operation) { From 1ac0b12ddfa5a748d450c581cdcadf4b3bb49266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 19 Aug 2014 22:48:27 +0300 Subject: [PATCH 0348/1968] Improve serialization Add tests --- .../com/mysema/query/lucene/LuceneSerializer.java | 15 +++++++++------ .../com/mysema/query/LuceneSerializerTest.java | 8 ++++++++ .../com/mysema/query/lucene/LuceneSerializer.java | 15 +++++++++------ .../com/mysema/query/LuceneSerializerTest.java | 8 ++++++++ 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java b/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java index f29db088ab..5f06a5cc6f 100644 --- a/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java +++ b/querydsl-lucene3/src/main/java/com/mysema/query/lucene/LuceneSerializer.java @@ -424,14 +424,17 @@ private Path getPath(Expression leftHandSide) { */ protected String toField(Path path) { PathMetadata md = path.getMetadata(); - if (md.getPathType() == PathType.PROPERTY) { - return toField(md.getParent()) + "." + md.getName(); - } else if (md.getPathType() == PathType.COLLECTION_ANY) { + if (md.getPathType() == PathType.COLLECTION_ANY) { return toField(md.getParent()); - } else if (md.getPathType() == PathType.VARIABLE) { - return md.getName(); } else { - throw new IllegalArgumentException("Unsupported path " + path); + String rv = md.getName(); + if (md.getParent() != null) { + Path parent = md.getParent(); + if (parent.getMetadata().getPathType() != PathType.VARIABLE) { + rv = toField(parent) + "." + rv; + } + } + return rv; } } diff --git a/querydsl-lucene3/src/test/java/com/mysema/query/LuceneSerializerTest.java b/querydsl-lucene3/src/test/java/com/mysema/query/LuceneSerializerTest.java index e2c382825f..a22b3f67a9 100644 --- a/querydsl-lucene3/src/test/java/com/mysema/query/LuceneSerializerTest.java +++ b/querydsl-lucene3/src/test/java/com/mysema/query/LuceneSerializerTest.java @@ -21,6 +21,7 @@ import com.mysema.query.lucene.QueryElement; import com.mysema.query.types.*; import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.path.CollectionPath; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.PathBuilder; import com.mysema.query.types.path.StringPath; @@ -62,6 +63,7 @@ public class LuceneSerializerTest { private StringPath publisher; private NumberPath year; private NumberPath gross; + private CollectionPath titles; private NumberPath longField; private NumberPath shortField; @@ -112,6 +114,7 @@ public void setUp() throws Exception { year = entityPath.getNumber("year", Integer.class); rating = entityPath.getString("rating"); gross = entityPath.getNumber("gross", Double.class); + titles = entityPath.getCollection("title", String.class, StringPath.class); longField = entityPath.getNumber("longField", Long.class); shortField = entityPath.getNumber("shortField", Short.class); @@ -630,6 +633,11 @@ public void Boost() throws Exception { fail("Not yet implemented!"); } + @Test + public void PathAny() throws Exception { + testQuery(titles.any().eq("Jurassic"), "title:jurassic", 1); + } + private boolean unsupportedOperation(Predicate filter) { if (filter instanceof Operation) { Operator op = ((Operation) filter).getOperator(); diff --git a/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java b/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java index 0212994aeb..acf29289e7 100644 --- a/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java +++ b/querydsl-lucene4/src/main/java/com/mysema/query/lucene/LuceneSerializer.java @@ -427,14 +427,17 @@ private Path getPath(Expression leftHandSide) { */ protected String toField(Path path) { PathMetadata md = path.getMetadata(); - if (md.getPathType() == PathType.PROPERTY) { - return toField(md.getParent()) + "." + md.getName(); - } else if (md.getPathType() == PathType.COLLECTION_ANY) { + if (md.getPathType() == PathType.COLLECTION_ANY) { return toField(md.getParent()); - } else if (md.getPathType() == PathType.VARIABLE) { - return md.getName(); } else { - throw new IllegalArgumentException("Unsupported path " + path); + String rv = md.getName(); + if (md.getParent() != null) { + Path parent = md.getParent(); + if (parent.getMetadata().getPathType() != PathType.VARIABLE) { + rv = toField(parent) + "." + rv; + } + } + return rv; } } diff --git a/querydsl-lucene4/src/test/java/com/mysema/query/LuceneSerializerTest.java b/querydsl-lucene4/src/test/java/com/mysema/query/LuceneSerializerTest.java index db9174a082..11f669ce49 100644 --- a/querydsl-lucene4/src/test/java/com/mysema/query/LuceneSerializerTest.java +++ b/querydsl-lucene4/src/test/java/com/mysema/query/LuceneSerializerTest.java @@ -21,6 +21,7 @@ import com.mysema.query.lucene.QueryElement; import com.mysema.query.types.*; import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.path.CollectionPath; import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.PathBuilder; import com.mysema.query.types.path.StringPath; @@ -59,6 +60,7 @@ public class LuceneSerializerTest { private StringPath publisher; private NumberPath year; private NumberPath gross; + private CollectionPath titles; private NumberPath longField; private NumberPath shortField; @@ -109,6 +111,7 @@ public void setUp() throws Exception { year = entityPath.getNumber("year", Integer.class); rating = entityPath.getString("rating"); gross = entityPath.getNumber("gross", Double.class); + titles = entityPath.getCollection("title", String.class, StringPath.class); longField = entityPath.getNumber("longField", Long.class); shortField = entityPath.getNumber("shortField", Short.class); @@ -632,6 +635,11 @@ public void Boost() throws Exception { fail("Not yet implemented!"); } + @Test + public void PathAny() throws Exception { + testQuery(titles.any().eq("Jurassic"), "title:jurassic", 1); + } + private boolean unsupportedOperation(Predicate filter) { if (filter instanceof Operation) { Operator op = ((Operation) filter).getOperator(); From 2747c4a6d416c873ed4410c6e8c13491d16a8c12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 20 Aug 2014 21:37:03 +0300 Subject: [PATCH 0349/1968] Fix Firebird mappings --- .../main/java/com/mysema/query/sql/Configuration.java | 10 ++++++++-- .../java/com/mysema/query/sql/FirebirdTemplates.java | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index ce2a37584d..ce5eac195b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -292,7 +292,10 @@ private Type getType(@Nullable Path path, Class clazz) { * @return */ public String getTypeName(Class type) { - int jdbcType = jdbcTypeMapping.get(type); + Integer jdbcType = jdbcTypeMapping.get(type); + if (jdbcType == null) { + jdbcType = javaTypeMapping.getType(type).getSQLTypes()[0]; + } return templates.getTypeNameForCode(jdbcType); } @@ -302,7 +305,10 @@ public String getTypeName(Class type) { * @return */ public String getTypeNameForCast(Class type) { - int jdbcType = jdbcTypeMapping.get(type); + Integer jdbcType = jdbcTypeMapping.get(type); + if (jdbcType == null) { + jdbcType = javaTypeMapping.getType(type).getSQLTypes()[0]; + } return templates.getCastTypeNameForCode(jdbcType); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index e5f889b877..e80d4663ec 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -86,6 +86,8 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + addTypeNameToCode("smallint", Types.TINYINT, true); + addTypeNameToCode("decimal", Types.DOUBLE, true); addTypeNameToCode("blob sub_type 0", Types.LONGVARBINARY); addTypeNameToCode("blob sub_type 1", Types.LONGVARCHAR); addTypeNameToCode("double precision", Types.DOUBLE); From 5097bf44e42cdc3b6857bf99c2f366df316fc41d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 21 Aug 2014 22:18:50 +0300 Subject: [PATCH 0350/1968] Improve SQLTemplates usage in codegen --- .../query/sql/codegen/MetaDataExporter.java | 49 +++++++------------ .../query/sql/codegen/SQLCodegenModule.java | 2 +- .../mysema/query/sql/FirebirdTemplates.java | 1 + .../mysema/query/sql/PostgresTemplates.java | 2 +- .../com/mysema/query/sql/SQLTemplates.java | 4 +- .../query/sql/SQLTemplatesRegistry.java | 42 ++++++++++++++++ .../java/com/mysema/query/sql/TypesDump.java | 3 +- 7 files changed, 68 insertions(+), 35 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java index befa710f6a..c42b53c4f9 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java @@ -13,6 +13,7 @@ */ package com.mysema.query.sql.codegen; +import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.io.StringWriter; @@ -20,20 +21,7 @@ import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Nullable; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.*; import com.google.common.io.Files; import com.mysema.codegen.CodeWriter; @@ -43,21 +31,11 @@ import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; -import com.mysema.query.codegen.CodegenModule; -import com.mysema.query.codegen.EntityType; -import com.mysema.query.codegen.Property; -import com.mysema.query.codegen.QueryTypeFactory; -import com.mysema.query.codegen.Serializer; -import com.mysema.query.codegen.SimpleSerializerConfig; -import com.mysema.query.codegen.TypeMappings; -import com.mysema.query.sql.ColumnImpl; -import com.mysema.query.sql.ColumnMetadata; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.support.ForeignKeyData; -import com.mysema.query.sql.support.InverseForeignKeyData; -import com.mysema.query.sql.support.NotNullImpl; -import com.mysema.query.sql.support.PrimaryKeyData; -import com.mysema.query.sql.support.SizeImpl; +import com.mysema.query.codegen.*; +import com.mysema.query.sql.*; +import com.mysema.query.sql.support.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * MetadataExporter exports JDBC metadata to Querydsl query types @@ -77,6 +55,8 @@ public class MetaDataExporter { private static final Logger logger = LoggerFactory.getLogger(MetaDataExporter.class); + private final SQLTemplatesRegistry sqlTemplatesRegistry = new SQLTemplatesRegistry(); + private final SQLCodegenModule module = new SQLCodegenModule(); private final Set classes = new HashSet(); @@ -188,6 +168,13 @@ protected Property createProperty(EntityType classModel, String normalizedColumn * @throws SQLException */ public void export(DatabaseMetaData md) throws SQLException { + SQLTemplates templates = sqlTemplatesRegistry.getTemplates(md); + if (templates != null) { + module.bind(Configuration.class, new Configuration(templates)); + } else { + logger.info("Found no specific dialect for " + md.getDatabaseProductName()); + } + if (beanPackageName == null) { beanPackageName = module.getPackageName(); } @@ -536,7 +523,7 @@ public void setBeanSerializer(@Nullable Serializer beanSerializer) { /** * Set the Bean serializer class to create bean types as well * - * @param beanSerializer serializer for JavaBeans (default: null) + * @param beanSerializerClass serializer for JavaBeans (default: null) */ public void setBeanSerializerClass(Class beanSerializerClass) { module.bind(SQLCodegenModule.BEAN_SERIALIZER, beanSerializerClass); @@ -550,7 +537,7 @@ public void setInnerClassesForKeys(boolean innerClassesForKeys) { } /** - * @param columnComparator + * @param columnComparatorClass */ public void setColumnComparatorClass(Class> columnComparatorClass) { module.bind(SQLCodegenModule.COLUMN_COMPARATOR, columnComparatorClass); diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java index f6d872c4ad..3d5e207f5c 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java @@ -46,7 +46,7 @@ public class SQLCodegenModule extends CodegenModule{ public static final String SCHEMA_TO_PACKAGE = "schemaToPackage"; public static final String COLUMN_COMPARATOR = "columnComparator"; - + @Override protected void configure() { super.configure(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index e80d4663ec..0b9aba5914 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -86,6 +86,7 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + addTypeNameToCode("smallint", Types.BIT, true); addTypeNameToCode("smallint", Types.TINYINT, true); addTypeNameToCode("decimal", Types.DOUBLE, true); addTypeNameToCode("blob sub_type 0", Types.LONGVARBINARY); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index 9c0ec661b2..cd775e80ac 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -115,8 +115,8 @@ public PostgresTemplates(char escape, boolean quote) { addTypeNameToCode("name", Types.VARCHAR); addTypeNameToCode("int8", Types.BIGINT, true); addTypeNameToCode("bigserial", Types.BIGINT); - addTypeNameToCode("int2", Types.TINYINT, true); addTypeNameToCode("int2", Types.SMALLINT, true); + addTypeNameToCode("int2", Types.TINYINT, true); // secondary mapping addTypeNameToCode("int4", Types.INTEGER, true); addTypeNameToCode("serial", Types.INTEGER); addTypeNameToCode("text", Types.VARCHAR); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index f323ba2680..ddbba6308b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -416,7 +416,9 @@ public String escapeLiteral(String str) { } protected void addTypeNameToCode(String type, int code, boolean override) { - typeNameToCode.put(type, code); + if (!typeNameToCode.containsKey(type)) { + typeNameToCode.put(type, code); + } if (override || !codeToTypeName.containsKey(code)) { codeToTypeName.put(code, type); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java new file mode 100644 index 0000000000..642cad0345 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java @@ -0,0 +1,42 @@ +package com.mysema.query.sql; + +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.Map; + +import com.google.common.collect.Maps; + +/** + * + */ +public class SQLTemplatesRegistry { + + private final Map registry = Maps.newHashMap(); + + public SQLTemplatesRegistry() { + registry.put("h2", new H2Templates()); + registry.put("postgresql", new PostgresTemplates()); + registry.put("oracle", new OracleTemplates()); + registry.put("mysql", new MySQLTemplates()); + registry.put("hsql", new HSQLDBTemplates()); + registry.put("firebird", new FirebirdTemplates()); + registry.put("sqlite", new SQLiteTemplates()); + registry.put("apache", new DerbyTemplates()); + // TODO SQLServer + // TODO Teradata + } + + public SQLTemplates getTemplates(DatabaseMetaData md) { + try { + String name = md.getDatabaseProductName(); + int separator = name.indexOf(' '); + if (separator > -1) { + name = name.substring(0, separator); + } + return registry.get(name.toLowerCase()); + } catch (SQLException ex) { + throw new RuntimeException(ex.getMessage(), ex); + } + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java b/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java index a0838bd745..7687beb32e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/TypesDump.java @@ -19,10 +19,11 @@ public static void main(String[] args) throws Exception { } } - Connections.initCubrid(); + Connections.initOracle(); try { Connection c = Connections.getConnection(); DatabaseMetaData m = c.getMetaData(); + System.out.println(m.getDatabaseProductName()); ResultSet rs = m.getTypeInfo(); try { while (rs.next()) { From b87107fd0ccca90d96472e9973d8518de8da2fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 23 Aug 2014 19:12:16 +0300 Subject: [PATCH 0351/1968] Add valid eq/ne behaviour for RelationalPath --- .../query/types/expr/SimpleExpression.java | 6 +- .../mysema/query/sql/RelationalPathBase.java | 77 +++++++++++++++++++ .../java/com/mysema/query/SelectBase.java | 28 +++++++ 3 files changed, 110 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java index f61afb457e..ecd6a5c946 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java @@ -209,7 +209,11 @@ public BooleanExpression in(CollectionExpression right) { * @return */ public BooleanExpression ne(T right) { - return ne(ConstantImpl.create(right)); + if (right == null) { + throw new IllegalArgumentException("ne(null) is not allowed. Use isNotNull() instead"); + } else { + return ne(ConstantImpl.create(right)); + } } /** diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathBase.java b/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathBase.java index f9dfc8e2fb..dbdd2d3ce6 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathBase.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/RelationalPathBase.java @@ -21,6 +21,8 @@ import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mysema.query.types.*; +import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.expr.BooleanOperation; import com.mysema.query.types.expr.NumberExpression; import com.mysema.query.types.expr.NumberOperation; import com.mysema.query.types.path.BeanPath; @@ -129,6 +131,81 @@ public NumberExpression countDistinct() { return countDistinct; } + /** + * Compares the two relational paths using primary key columns + * + * @param right rhs of the comparison + * @return + */ + @Override + public BooleanExpression eq(T right) { + if (right instanceof RelationalPath) { + return primaryKeyOperation(Ops.EQ, primaryKey, ((RelationalPath) right).getPrimaryKey()); + } else { + return super.eq(right); + } + } + + /** + * Compares the two relational paths using primary key columns + * + * @param right rhs of the comparison + * @return + */ + @Override + public BooleanExpression eq(Expression right) { + if (right instanceof RelationalPath) { + return primaryKeyOperation(Ops.EQ, primaryKey, ((RelationalPath) right).getPrimaryKey()); + } else { + return super.eq(right); + } + } + + /** + * Compares the two relational paths using primary key columns + * + * @param right rhs of the comparison + * @return + */ + @Override + public BooleanExpression ne(T right) { + if (right instanceof RelationalPath) { + return primaryKeyOperation(Ops.NE, primaryKey, ((RelationalPath) right).getPrimaryKey()); + } else { + return super.ne(right); + } + } + + /** + * Compares the two relational paths using primary key columns + * + * @param right rhs of the comparison + * @return + */ + @Override + public BooleanExpression ne(Expression right) { + if (right instanceof RelationalPath) { + return primaryKeyOperation(Ops.NE, primaryKey, ((RelationalPath) right).getPrimaryKey()); + } else { + return super.ne(right); + } + } + + private BooleanExpression primaryKeyOperation(Operator op, PrimaryKey pk1, PrimaryKey pk2) { + if (pk1 == null || pk2 == null) { + throw new UnsupportedOperationException("No primary keys available"); + } + if (pk1.getLocalColumns().size() != pk2.getLocalColumns().size()) { + throw new UnsupportedOperationException("Size mismatch for primary key columns"); + } + BooleanExpression rv = null; + for (int i = 0; i < pk1.getLocalColumns().size(); i++) { + BooleanExpression pred = BooleanOperation.create(op, pk1.getLocalColumns().get(i), pk2.getLocalColumns().get(i)); + rv = rv != null ? rv.and(pred) : pred; + } + return rv; + } + @Override public FactoryExpression getProjection() { if (projection == null) { diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 83021e2a83..96cfdfd128 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -1082,6 +1082,34 @@ public void RelationalPath_Projection() { } } + @Test + public void RelationalPath_Eq() { + query().from(employee, employee2) + .where(employee.eq(employee2)) + .list(employee.id, employee2.id); + } + + @Test + public void RelationalPath_Ne() { + query().from(employee, employee2) + .where(employee.ne(employee2)) + .list(employee.id, employee2.id); + } + + @Test + public void RelationalPath_Eq2() { + query().from(survey, survey2) + .where(survey.eq(survey2)) + .list(survey.id, survey2.id); + } + + @Test + public void RelationalPath_Ne2() { + query().from(survey, survey2) + .where(survey.ne(survey2)) + .list(survey.id, survey2.id); + } + @Test @ExcludeIn(SQLITE) public void Right_Join() throws SQLException { From e4d74f2b8003272c0e751312e7f884070aeac8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 23 Aug 2014 20:56:47 +0300 Subject: [PATCH 0352/1968] Fix tests --- .../com/mysema/query/sql/JoinFlagsTest.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/JoinFlagsTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/JoinFlagsTest.java index 177e596683..0d9ba1f53b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/JoinFlagsTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/JoinFlagsTest.java @@ -13,16 +13,14 @@ */ package com.mysema.query.sql; -import static org.junit.Assert.assertEquals; - import java.sql.Connection; +import com.mysema.query.JoinFlag; +import com.mysema.query.sql.domain.QSurvey; import org.easymock.EasyMock; import org.junit.Before; import org.junit.Test; - -import com.mysema.query.JoinFlag; -import com.mysema.query.sql.domain.QSurvey; +import static org.junit.Assert.assertEquals; public class JoinFlagsTest { @@ -45,13 +43,13 @@ public void setUp() { } @Test - public void JoinFlag_BeforeCondition() { + public void JoinFlags_BeforeCondition() { query.innerJoin(s2).on(s1.eq(s2)); query.addJoinFlag(" a ", JoinFlag.Position.BEFORE_CONDITION); assertEquals("from SURVEY s\n" + "inner join SURVEY s2 a \n" + - "on s = ?", query.toString()); + "on s.ID = s2.ID", query.toString()); } @Test @@ -61,7 +59,7 @@ public void JoinFlags_BeforeTarget() { assertEquals("from SURVEY s\n" + "inner join b SURVEY s3\n" + - "on s = ?", query.toString()); + "on s.ID = s3.ID", query.toString()); } @Test @@ -71,7 +69,7 @@ public void JoinFlags_End() { assertEquals("from SURVEY s\n" + "inner join SURVEY s4\n" + - "on s = ? c", query.toString()); + "on s.ID = s4.ID c", query.toString()); } @Test @@ -80,7 +78,7 @@ public void JoinFlags_Override() { query.addJoinFlag(" d ", JoinFlag.Position.OVERRIDE); assertEquals("from SURVEY s d SURVEY s5\n" + - "on s = ?", query.toString()); + "on s.ID = s5.ID", query.toString()); } @Test @@ -90,7 +88,7 @@ public void JoinFlags_Start() { assertEquals("from SURVEY s e \n" + "inner join SURVEY s6\n" + - "on s = ?", query.toString()); + "on s.ID = s6.ID", query.toString()); } From 46f3a104561cb8b6e0d10123b0116deb7d026e76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 26 Aug 2014 21:47:39 +0300 Subject: [PATCH 0353/1968] Fix projection handling for embeddable types --- .../mysema/query/apt/GenericExporterTest.java | 2 + .../mysema/query/domain/Embeddable3Test.java | 37 +++++++++++++++++++ .../query/codegen/EmbeddableSerializer.java | 23 ++---------- 3 files changed, 43 insertions(+), 19 deletions(-) create mode 100644 querydsl-apt/src/test/java/com/mysema/query/domain/Embeddable3Test.java diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java index d5e1f8a641..2c3e91c86a 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/GenericExporterTest.java @@ -44,6 +44,7 @@ public void Execute() throws IOException { expected.add("QQueryProjectionTest_DTOWithProjection.java"); expected.add("QQueryProjectionTest_EntityWithProjection.java"); + expected.add("QEmbeddable3Test_EmbeddableClass.java"); // FIXME expected.add("QExternalEntityTest_MyEntity.java"); @@ -82,6 +83,7 @@ public void Execute2() throws IOException { expected.add("QTemporal2Test_Cheque.java"); expected.add("QQueryProjectionTest_DTOWithProjection.java"); expected.add("QQueryProjectionTest_EntityWithProjection.java"); + expected.add("QEmbeddable3Test_EmbeddableClass.java"); // FIXME expected.add("QGeneric4Test_HidaBez.java"); diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Embeddable3Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Embeddable3Test.java new file mode 100644 index 0000000000..6204f2600d --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Embeddable3Test.java @@ -0,0 +1,37 @@ +package com.mysema.query.domain; + +import com.mysema.query.annotations.QueryEmbeddable; +import com.mysema.query.annotations.QueryProjection; +import com.mysema.query.support.Expressions; +import org.junit.Test; + +public class Embeddable3Test { + + @QueryEmbeddable + public static class EmbeddableClass { + private Integer embeddedProperty; + + public EmbeddableClass() { } + + @QueryProjection + public EmbeddableClass(Integer embeddedProperty) { + super(); + this.embeddedProperty = embeddedProperty; + } + + public Integer getEmbeddedProperty() { + return embeddedProperty; + } + + public void setEmbeddedProperty(Integer embeddedProperty) { + this.embeddedProperty = embeddedProperty; + } + + } + + @Test + public void test() { + QEmbeddable3Test_EmbeddableClass.create(Expressions.path(Integer.class, "num")); + } + +} diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EmbeddableSerializer.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EmbeddableSerializer.java index daf2361549..aca0ac3361 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EmbeddableSerializer.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EmbeddableSerializer.java @@ -13,30 +13,20 @@ */ package com.mysema.query.codegen; -import static com.mysema.codegen.Symbols.UNCHECKED; - +import javax.inject.Inject; +import javax.inject.Named; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.Collection; -import javax.inject.Inject; -import javax.inject.Named; - import com.mysema.codegen.CodeWriter; import com.mysema.codegen.model.ClassType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; import com.mysema.query.types.Path; -import com.mysema.query.types.path.BeanPath; -import com.mysema.query.types.path.BooleanPath; -import com.mysema.query.types.path.ComparablePath; -import com.mysema.query.types.path.DatePath; -import com.mysema.query.types.path.DateTimePath; -import com.mysema.query.types.path.EnumPath; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; -import com.mysema.query.types.path.TimePath; +import com.mysema.query.types.path.*; +import static com.mysema.codegen.Symbols.UNCHECKED; /** * EmbeddableSerializer is a {@link Serializer} implementation for embeddable types @@ -96,9 +86,4 @@ protected void introClassHeader(CodeWriter writer, EntityType model) throws IOEx writer.privateStaticFinal(Types.LONG_P, "serialVersionUID", model.hashCode() + "L"); } - @Override - protected void introFactoryMethods(CodeWriter writer, EntityType model) throws IOException { - // no factory methods - } - } From 1c3d7ab16b591a43b02a4f00795426dcb5a35e9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 27 Aug 2014 22:06:30 +0300 Subject: [PATCH 0354/1968] Improve UUID support --- .../com/mysema/query/sql/JavaTypeMapping.java | 29 +--------- .../mysema/query/sql/types/UtilUUIDType.java | 27 ++++++++- .../java/com/mysema/query/Connections.java | 8 +++ .../java/com/mysema/query/InsertBase.java | 16 ++++-- .../com/mysema/query/sql/domain/QUuids.java | 52 ++++++++++++++++++ .../com/mysema/query/sql/types/TypeTest.java | 55 +++---------------- 6 files changed, 107 insertions(+), 80 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/domain/QUuids.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java b/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java index f87ad72bff..f61ef0e6c2 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java @@ -13,37 +13,13 @@ */ package com.mysema.query.sql; +import javax.annotation.Nullable; import java.util.HashMap; import java.util.Map; import java.util.Set; -import javax.annotation.Nullable; - import com.google.common.primitives.Primitives; -import com.mysema.query.sql.types.BigDecimalType; -import com.mysema.query.sql.types.BigIntegerType; -import com.mysema.query.sql.types.BlobType; -import com.mysema.query.sql.types.BooleanType; -import com.mysema.query.sql.types.ByteType; -import com.mysema.query.sql.types.BytesType; -import com.mysema.query.sql.types.CalendarType; -import com.mysema.query.sql.types.CharacterType; -import com.mysema.query.sql.types.ClobType; -import com.mysema.query.sql.types.CurrencyType; -import com.mysema.query.sql.types.DateType; -import com.mysema.query.sql.types.DoubleType; -import com.mysema.query.sql.types.FloatType; -import com.mysema.query.sql.types.IntegerType; -import com.mysema.query.sql.types.LocaleType; -import com.mysema.query.sql.types.LongType; -import com.mysema.query.sql.types.ObjectType; -import com.mysema.query.sql.types.ShortType; -import com.mysema.query.sql.types.StringType; -import com.mysema.query.sql.types.TimeType; -import com.mysema.query.sql.types.TimestampType; -import com.mysema.query.sql.types.Type; -import com.mysema.query.sql.types.URLType; -import com.mysema.query.sql.types.UtilDateType; +import com.mysema.query.sql.types.*; import com.mysema.util.ReflectionUtils; /** @@ -80,6 +56,7 @@ public class JavaTypeMapping { registerDefault(new TimeType()); registerDefault(new URLType()); registerDefault(new UtilDateType()); + registerDefault(new UtilUUIDType(true)); // initialize joda time converters only if joda time is available try { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/UtilUUIDType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/UtilUUIDType.java index 9ce744b1a5..66bbcb955a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/UtilUUIDType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/UtilUUIDType.java @@ -27,17 +27,33 @@ */ public class UtilUUIDType extends AbstractType { + private final boolean asString; + public UtilUUIDType() { - super(Types.OTHER); + this(Types.OTHER, true); + } + + public UtilUUIDType(boolean asString) { + this(Types.OTHER, asString); } public UtilUUIDType(int type) { + this(type, true); + } + + public UtilUUIDType(int type, boolean asString) { super(type); + this.asString = asString; } @Override public UUID getValue(ResultSet rs, int startIndex) throws SQLException { - return UUID.fromString(rs.getString(startIndex)); + if (asString) { + String str = rs.getString(startIndex); + return str != null ? UUID.fromString(str) : null; + } else { + return (UUID) rs.getObject(startIndex); + } } @Override @@ -47,6 +63,11 @@ public Class getReturnedClass() { @Override public void setValue(PreparedStatement st, int startIndex, UUID value) throws SQLException { - st.setString(startIndex, value.toString()); + if (asString) { + st.setString(startIndex, value.toString()); + } else { + st.setObject(startIndex, value); + } + } } \ No newline at end of file diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index a4d99bda49..4f05df8bbe 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -481,6 +481,10 @@ public static void initH2() throws SQLException, ClassNotFoundException{ stmt.execute("drop table QTEST if exists"); stmt.execute("create table QTEST (ID int IDENTITY(1,1) NOT NULL, C1 int NULL)"); + // uuids + stmt.execute("drop table if exists UUIDS"); + stmt.execute("create table UUIDS (FIELD uuid)"); + // survey stmt.execute("drop table SURVEY if exists"); stmt.execute(CREATE_TABLE_SURVEY); @@ -744,6 +748,10 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ "\"ID\" bigint primary key,\n" + "\"MYARRAY\" varchar(8)[])"); + // uuids + dropTable(templates, "UUIDS"); + stmt.execute("create table \"UUIDS\" (\"FIELD\" uuid)"); + // survey dropTable(templates, "SURVEY"); try { diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index d87fb82fae..7ec6607e9b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -15,16 +15,14 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.util.UUID; import com.mysema.query.QueryFlag.Position; import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.sql.dml.DefaultMapper; import com.mysema.query.sql.dml.Mapper; import com.mysema.query.sql.dml.SQLInsertClause; -import com.mysema.query.sql.domain.Employee; -import com.mysema.query.sql.domain.QDateTest; -import com.mysema.query.sql.domain.QEmployee; -import com.mysema.query.sql.domain.QSurvey; +import com.mysema.query.sql.domain.*; import com.mysema.query.support.Expressions; import com.mysema.query.types.Path; import com.mysema.query.types.PathImpl; @@ -49,6 +47,7 @@ private void reset() throws SQLException{ insert(survey).values(1, "Hello World", "Hello").execute(); delete(QDateTest.qDateTest).execute(); + delete(QUuids.uuids).execute(); } @Before @@ -422,4 +421,13 @@ public void Insert_With_TempateExpression_In_Batch() { .addBatch(); } + @Test + @IncludeIn({H2, POSTGRES}) + public void Uuids() { + QUuids uuids = QUuids.uuids; + UUID uuid = UUID.randomUUID(); + insert(uuids).set(uuids.field, uuid).execute(); + assertEquals(uuid, query().from(uuids).singleResult(uuids.field)); + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QUuids.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QUuids.java new file mode 100644 index 0000000000..da67ac0af1 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QUuids.java @@ -0,0 +1,52 @@ +package com.mysema.query.sql.domain; + +import javax.annotation.Generated; +import java.sql.Types; +import java.util.UUID; + +import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.sql.spatial.RelationalPathSpatial; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.SimplePath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; + + + +/** + * QUuids is a Querydsl query type for QUuids + */ +@Generated("com.mysema.query.sql.codegen.MetaDataSerializer") +public class QUuids extends RelationalPathSpatial { + + private static final long serialVersionUID = -1780705501; + + public static final QUuids uuids = new QUuids("UUIDS"); + + public final SimplePath field = createSimple("field", UUID.class); + + public QUuids(String variable) { + super(QUuids.class, forVariable(variable), "public", "UUIDS"); + addMetadata(); + } + + public QUuids(String variable, String schema, String table) { + super(QUuids.class, forVariable(variable), schema, table); + addMetadata(); + } + + public QUuids(Path path) { + super(path.getType(), path.getMetadata(), "public", "UUIDS"); + addMetadata(); + } + + public QUuids(PathMetadata metadata) { + super(QUuids.class, metadata, "public", "UUIDS"); + addMetadata(); + } + + public void addMetadata() { + addMetadata(field, ColumnMetadata.named("FIELD").withIndex(1).ofType(Types.OTHER).withSize(2147483647)); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java index 90e9e0e074..7c9176b2f3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java @@ -13,9 +13,6 @@ */ package com.mysema.query.sql.types; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; @@ -23,57 +20,18 @@ import java.math.BigInteger; import java.net.MalformedURLException; import java.net.URL; -import java.sql.Blob; -import java.sql.Clob; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Currency; -import java.util.List; +import java.sql.*; +import java.util.*; +import com.mysema.commons.lang.Pair; import org.easymock.EasyMock; import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; import org.joda.time.LocalTime; import org.junit.Test; - -import com.mysema.commons.lang.Pair; -import com.mysema.query.sql.types.BigDecimalType; -import com.mysema.query.sql.types.BigIntegerType; -import com.mysema.query.sql.types.BlobType; -import com.mysema.query.sql.types.ByteType; -import com.mysema.query.sql.types.BytesType; -import com.mysema.query.sql.types.CalendarType; -import com.mysema.query.sql.types.CharacterType; -import com.mysema.query.sql.types.ClobType; -import com.mysema.query.sql.types.CurrencyType; -import com.mysema.query.sql.types.DateTimeType; -import com.mysema.query.sql.types.DateType; -import com.mysema.query.sql.types.DoubleType; -import com.mysema.query.sql.types.EnumByNameType; -import com.mysema.query.sql.types.EnumByOrdinalType; -import com.mysema.query.sql.types.FloatType; -import com.mysema.query.sql.types.IntegerType; -import com.mysema.query.sql.types.LocalDateTimeType; -import com.mysema.query.sql.types.LocalDateType; -import com.mysema.query.sql.types.LocalTimeType; -import com.mysema.query.sql.types.LongType; -import com.mysema.query.sql.types.NumericBooleanType; -import com.mysema.query.sql.types.ObjectType; -import com.mysema.query.sql.types.ShortType; -import com.mysema.query.sql.types.StringType; -import com.mysema.query.sql.types.TimeType; -import com.mysema.query.sql.types.TimestampType; -import com.mysema.query.sql.types.TrueFalseType; -import com.mysema.query.sql.types.Type; -import com.mysema.query.sql.types.URLType; -import com.mysema.query.sql.types.UtilDateType; -import com.mysema.query.sql.types.YesNoType; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class TypeTest implements InvocationHandler{ @@ -136,6 +94,9 @@ public void test() throws MalformedURLException, SQLException{ valueAndType.add(Pair.of(EasyMock.createNiceMock(Blob.class), new BlobType())); valueAndType.add(Pair.of(EasyMock.createNiceMock(Clob.class), new ClobType())); + valueAndType.add(Pair.of(UUID.randomUUID(), new UtilUUIDType(true))); + valueAndType.add(Pair.of(UUID.randomUUID(), new UtilUUIDType(false))); + for (Pair pair : valueAndType) { value = null; Type type = (Type) pair.getSecond(); From 66e7ad5a60bda8fb34fb65a7f2b4dbe6cb4a6d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 27 Aug 2014 22:08:41 +0300 Subject: [PATCH 0355/1968] Use Object mapping as default --- .../src/main/java/com/mysema/query/sql/JavaTypeMapping.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java b/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java index f61ef0e6c2..e70e071b68 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java @@ -56,7 +56,7 @@ public class JavaTypeMapping { registerDefault(new TimeType()); registerDefault(new URLType()); registerDefault(new UtilDateType()); - registerDefault(new UtilUUIDType(true)); + registerDefault(new UtilUUIDType(false)); // initialize joda time converters only if joda time is available try { From 9c80cb886bf790dc0f77add86b245ec94fefc290 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 27 Aug 2014 22:26:08 +0300 Subject: [PATCH 0356/1968] Move deletion --- querydsl-sql/src/test/java/com/mysema/query/InsertBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index 7ec6607e9b..63cd931c5b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -47,7 +47,6 @@ private void reset() throws SQLException{ insert(survey).values(1, "Hello World", "Hello").execute(); delete(QDateTest.qDateTest).execute(); - delete(QUuids.uuids).execute(); } @Before @@ -424,6 +423,7 @@ public void Insert_With_TempateExpression_In_Batch() { @Test @IncludeIn({H2, POSTGRES}) public void Uuids() { + delete(QUuids.uuids).execute(); QUuids uuids = QUuids.uuids; UUID uuid = UUID.randomUUID(); insert(uuids).set(uuids.field, uuid).execute(); From 84670120e4273ba04730d4b65b73f3451ad9b7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 28 Aug 2014 18:31:41 +0300 Subject: [PATCH 0357/1968] Fix Boolean mapping --- .../src/main/java/com/mysema/query/sql/FirebirdTemplates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 0b9aba5914..7883ded58b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -86,6 +86,7 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + addTypeNameToCode("smallint", Types.BOOLEAN, true); addTypeNameToCode("smallint", Types.BIT, true); addTypeNameToCode("smallint", Types.TINYINT, true); addTypeNameToCode("decimal", Types.DOUBLE, true); From c366251f5d401186a7fab2e7f72ea9a2ffb21ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 28 Aug 2014 21:13:31 +0300 Subject: [PATCH 0358/1968] Improve array handling --- .../src/main/java/com/mysema/query/sql/Configuration.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index ce5eac195b..3d4a7b0df4 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -142,8 +142,9 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, if (type != null) { return type.getReturnedClass(); } else if (typeName != null && !typeToName.isEmpty()) { + typeName = typeName.toLowerCase(); // typename mapped class - Class clazz = typeToName.get(typeName.toLowerCase()); + Class clazz = typeToName.get(typeName); if (clazz != null) { return clazz; } @@ -153,6 +154,9 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, } else if (typeName.endsWith(" array")) { typeName = typeName.substring(0, typeName.length() - 6); } + if (typeName.contains("(")) { + typeName = typeName.substring(0, typeName.indexOf("(")); + } int sqlComponentType = templates.getCodeForTypeName(typeName); Class componentType = jdbcTypeMapping.get(sqlComponentType, size, digits); return Array.newInstance(componentType, 0).getClass(); From 1fe4a34fc1c431fdd9d5489092ace57dfe565c57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 28 Aug 2014 21:25:20 +0300 Subject: [PATCH 0359/1968] Make codegen usage safer --- .../main/java/com/mysema/query/sql/Configuration.java | 10 +++++++++- .../main/java/com/mysema/query/sql/SQLTemplates.java | 8 ++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 3d4a7b0df4..f8190a9160 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -29,6 +29,8 @@ import com.mysema.query.sql.types.Null; import com.mysema.query.sql.types.Type; import com.mysema.query.types.Path; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Configuration for SQLQuery instances @@ -38,6 +40,8 @@ */ public final class Configuration { + private static final Logger logger = LoggerFactory.getLogger(Configuration.class); + public static final Configuration DEFAULT = new Configuration(SQLTemplates.DEFAULT); private final JDBCTypeMapping jdbcTypeMapping = new JDBCTypeMapping(); @@ -157,7 +161,11 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, if (typeName.contains("(")) { typeName = typeName.substring(0, typeName.indexOf("(")); } - int sqlComponentType = templates.getCodeForTypeName(typeName); + Integer sqlComponentType = templates.getCodeForTypeName(typeName); + if (sqlComponentType == null) { + logger.warn("Found no JDBC type for " + typeName + " using OTHER instead"); + sqlComponentType = Types.OTHER; + } Class componentType = jdbcTypeMapping.get(sqlComponentType, size, digits); return Array.newInstance(componentType, 0).getClass(); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index ddbba6308b..4ad35368a3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -603,12 +603,8 @@ public String getCastTypeNameForCode(int code) { return getTypeNameForCode(code); } - public int getCodeForTypeName(String type) { - Integer code = typeNameToCode.get(type); - if (code == null) { - throw new IllegalArgumentException("No code for " + type); - } - return code.intValue(); + public Integer getCodeForTypeName(String type) { + return typeNameToCode.get(type); } public final String getUpdate() { From d169adb66f893cec1fb105bf1786d5c69bb1b11c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 28 Aug 2014 21:55:19 +0300 Subject: [PATCH 0360/1968] Add test for array types --- .../com/mysema/query/sql/Configuration.java | 6 +++- .../com/mysema/query/sql/ArrayTypesTest.java | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/ArrayTypesTest.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index f8190a9160..c92f1aeba5 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -145,7 +145,7 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, Type type = javaTypeMapping.getType(tableName, columnName); if (type != null) { return type.getReturnedClass(); - } else if (typeName != null && !typeToName.isEmpty()) { + } else if (typeName != null && !typeName.isEmpty()) { typeName = typeName.toLowerCase(); // typename mapped class Class clazz = typeToName.get(typeName); @@ -158,9 +158,13 @@ public Class getJavaType(int sqlType, String typeName, int size, int digits, } else if (typeName.endsWith(" array")) { typeName = typeName.substring(0, typeName.length() - 6); } + if (typeName.contains("[")) { + typeName = typeName.substring(0, typeName.indexOf("[")); + } if (typeName.contains("(")) { typeName = typeName.substring(0, typeName.indexOf("(")); } + Integer sqlComponentType = templates.getCodeForTypeName(typeName); if (sqlComponentType == null) { logger.warn("Found no JDBC type for " + typeName + " using OTHER instead"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/ArrayTypesTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/ArrayTypesTest.java new file mode 100644 index 0000000000..71b2f29746 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/ArrayTypesTest.java @@ -0,0 +1,28 @@ +package com.mysema.query.sql; + +import java.sql.Types; + +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class ArrayTypesTest { + + private Configuration configuration; + + @Before + public void setUp() { + configuration = Configuration.DEFAULT; + } + + @Test + public void test() { + assertEquals(Integer[].class, getJavaType("_integer")); + assertEquals(Integer[].class, getJavaType("integer[]")); + assertEquals(Integer[].class, getJavaType("INTEGER ARRAY")); + } + + private Class getJavaType(String typeName) { + return configuration.getJavaType(Types.ARRAY, typeName, 0, 0, "", ""); + } +} From 3a06e1a277ab288108e4b9b58f5fa2e63ef14215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 28 Aug 2014 22:08:37 +0300 Subject: [PATCH 0361/1968] Fix codegen configuration --- .../mysema/query/sql/codegen/MetaDataExporter.java | 14 +++++++------- .../mysema/query/sql/codegen/SQLCodegenModule.java | 3 ++- .../java/com/mysema/query/sql/Configuration.java | 9 ++++++++- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java index c42b53c4f9..a3f4d77761 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java @@ -168,13 +168,6 @@ protected Property createProperty(EntityType classModel, String normalizedColumn * @throws SQLException */ public void export(DatabaseMetaData md) throws SQLException { - SQLTemplates templates = sqlTemplatesRegistry.getTemplates(md); - if (templates != null) { - module.bind(Configuration.class, new Configuration(templates)); - } else { - logger.info("Found no specific dialect for " + md.getDatabaseProductName()); - } - if (beanPackageName == null) { beanPackageName = module.getPackageName(); } @@ -191,6 +184,13 @@ public void export(DatabaseMetaData md) throws SQLException { namingStrategy = module.get(NamingStrategy.class); configuration = module.get(Configuration.class); + SQLTemplates templates = sqlTemplatesRegistry.getTemplates(md); + if (templates != null) { + configuration.setTemplates(templates); + } else { + logger.info("Found no specific dialect for " + md.getDatabaseProductName()); + } + if (beanSerializer == null) { keyDataFactory = new KeyDataFactory(namingStrategy, module.getPackageName(), module.getPrefix(), module.getSuffix(), schemaToPackage); diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java index 3d5e207f5c..1aa81c355b 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SQLCodegenModule.java @@ -20,6 +20,7 @@ import com.mysema.query.codegen.Serializer; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.RelationalPathBase; +import com.mysema.query.sql.SQLTemplates; /** * SQLCodegenModule is a dependency injection module with codegen configuration @@ -51,7 +52,7 @@ public class SQLCodegenModule extends CodegenModule{ protected void configure() { super.configure(); bind(NamingStrategy.class, DefaultNamingStrategy.class); - bind(Configuration.class, Configuration.DEFAULT); + bind(Configuration.class, new Configuration(SQLTemplates.DEFAULT)); bind(Serializer.class, MetaDataSerializer.class); bind(QueryTypeFactory.class, SQLQueryTypeFactory.class); bind(BEAN_SERIALIZER, (Class)null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index c92f1aeba5..7fd4c69945 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -60,7 +60,7 @@ public final class Configuration { private final Map> typeToName = Maps.newHashMap(); - private final SQLTemplates templates; + private SQLTemplates templates; private SQLExceptionTranslator exceptionTranslator = DefaultSQLExceptionTranslator.DEFAULT; @@ -550,4 +550,11 @@ public void setExceptionTranslator(SQLExceptionTranslator exceptionTranslator) { this.exceptionTranslator = exceptionTranslator; } + /** + * @param templates + */ + public void setTemplates(SQLTemplates templates) { + this.templates = templates; + } + } From c10ae505439fa4e56cf5b84986934e6ecfb69735 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 31 Aug 2014 16:06:13 +0300 Subject: [PATCH 0362/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 6 +- .../main/docbook/en-US/Querydsl_Reference.xml | 2 +- .../main/docbook/ko-KR/Querydsl_Reference.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 1186 ++++++++--------- querydsl-scala/pom.xml | 6 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 6 +- 19 files changed, 617 insertions(+), 617 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 928fc0a9b3..5dfc5a0c5e 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 28dae1212f..56aa0f1253 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index a62aec51b8..fb168af3a9 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 133e11b14e..fdd5cf3cb9 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml @@ -141,4 +141,4 @@ 1.13 - + diff --git a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml index 95af242e67..6ff0d6366c 100644 --- a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml index 27af33bd97..006e73a8dc 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index cc66834f55..52b8034c16 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 6e2df50188..f090382b6f 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 4a1c6c38f9..1f6eed48a6 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index c383008b35..95e9214e85 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 8870c9c689..45363ffa0a 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 81c0c91370..1591dfcd37 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 376309e830..dc37c63b74 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 3c118e210b..d4419faef8 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index cf11e895d7..417bbd25ba 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,595 +1,595 @@ - - - 4.0.0 - com.mysema.querydsl - querydsl-root - 3.4.3.BUILD-SNAPSHOT - Querydsl - parent project for Querydsl modules - ${project.homepage} - - - com.mysema.home - mysema-source - 0.3.1 - - - pom - - 2007 - - - false - UTF-8 - http://www.querydsl.com - http://github.com/querydsl/querydsl - scm:git:git@github.com:querydsl/querydsl.git - - - 10.10.1.1 - 2.3.1 - 1.4.178 - 9.3-1101-jdbc41 - 11.1.0.7.0 - 5.1.30 - 1.3.1 - 8.4.0 - 3.7.2 - 13.10.00.35 - 2.2.5 - - 14.0 - 0.6.3 - 0.2.4 - 2.2.2 - 1.3.2 - 1.6.1 - - - - com.google.common.*;version=${@}, - * - - ${osgi.import.package.root} - - - - - junit - junit - 4.8.1 - test - - - javax.servlet - servlet-api - - - - - - org.easymock - easymock - 3.0 - test - - - cglib - cglib-nodep - - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - - - org.slf4j - slf4j-log4j12 - ${slf4j.version} - provided - - - - - - ${project.checkout} - ${project.checkout} - ${project.githubpage} - - - - - tiwe - Timo Westkämper - timo.westkamper@gmail.com - Mysema Ltd - - Project Manager - Architect - - - - sasa - Samppa Saarela - samppa.saarela@mysema.com - Mysema Ltd - - Developer - - - - vema - Vesa Marttila - vesa.marttila@mysema.com - Mysema Ltd - - Developer - - - - laim - Lassi Immonen - lassi.immonen@mysema.com - Mysema Ltd - - Developer - - - - - - - Apache License, Version 2.0 - LICENSE.txt - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 2.4 - - - com.mysema.maven - apt-maven-plugin - 1.1.2 - - - org.apache.maven.plugins - maven-surefire-plugin - 2.16 - - - org.apache.felix - maven-bundle-plugin - 2.4.0 - - - bundle-manifest - process-classes - - manifest - - true - - - - ${osgi.import.package} - - com.mysema.* - - - - - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.3.1 - - - check - verify - - enforce - - - - - - com/mysema/query/SearchResults - com/mysema/query/sql/SQLListeners - com/mysema/query/apt/TypeExtractor - - com/mysema/query/sql/QBeans - com/mysema/query/support/EnumConversion - com/mysema/query/support/NumberConversion - com/mysema/query/support/NumberConversions - com/mysema/query/types/ArrayConstructorExpression - com/mysema/query/types/ConstructorExpression - com/mysema/query/types/FactoryExpressionBase - com/mysema/query/types/MappingProjection - com/mysema/query/types/QBean - com/mysema/query/types/QList - com/mysema/query/types/QMap - com/mysema/query/types/QTuple - - BACKWARD_COMPATIBLE_USER - true - true - - - - - - - - org.semver - enforcer-rule - 0.9.26 - - - - - maven-assembly-plugin - - - ../querydsl-root/src/main/assembly.xml - - ../querydsl-root/target/dist - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - ${project.build.directory}/dist/apidocs - ${project.build.directory}/dist/apidocs - - - Core - com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* - - - APT - com.mysema.query.apt* - - - Spatial - com.mysema.query.spatial* - - - Collections - com.mysema.query.collections* - - - JPA - com.mysema.query.jpa* - - - JDO - com.mysema.query.jdo* - - - SQL - com.mysema.query.sql* - - - Spatial - com.mysema.query.spatial* - - - Lucene - com.mysema.query.lucene - - - Hibernate Search - com.mysema.query.search - - - Mongodb - com.mysema.query.mongodb* - - - - - - com.mysema.maven - maven-version-plugin - 0.1.0 - - - org.apache.maven.plugins - maven-pmd-plugin - 2.3 - - 1.6 - true - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - 1.6 - 1.6 - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - package - - jar - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - true - - - - org.apache.maven.plugins - maven-surefire-plugin - - -Xms256m -Xmx512m -XX:MaxPermSize=512m - com.mysema.testutil.ExternalDB - - - - org.apache.maven.surefire - surefire-junit47 - 2.16 - - - - - - - - - jahia - http://maven.jahia.org/maven2 - - - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release - - - geoapi - http://maven.geotoolkit.org - - - opengeo - http://repo.opengeo.org - - - nexus - https://maven.nuxeo.org/nexus/content/groups/public - - - - - - com.springsource.repository.bundles.release - http://repository.springsource.com/maven/bundles/release - - - com.springsource.repository.bundles.external - http://repository.springsource.com/maven/bundles/external - - - - - - all - true - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-collections - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - ../querydsl-jdo - - - ../querydsl-lucene3 - ../querydsl-lucene4 - ../querydsl-hibernate-search - - - ../querydsl-mongodb - - - ../querydsl-scala - - - - - hibernate-search - - ../querydsl-core - ../querydsl-codegen - ../querydsl-lucene3 - ../querydsl-hibernate-search - - - - - jpa - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - - - - - jdo - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - ../querydsl-jdo - - - - - lucene - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-lucene3 - ../querydsl-lucene4 - - - - - mongodb - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-mongodb - - - - - sql - - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-sql - ../querydsl-sql-codegen - ../querydsl-maven-plugin - - - - - collections - - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-collections - - - - - jenkins - - - - org.apache.maven.plugins - maven-surefire-plugin - - com.mysema.testutil.DummyInterface - - **/*$* - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java - - - - - - - - - travis - - - - org.apache.maven.plugins - maven-surefire-plugin - - com.mysema.testutil.DummyInterface - - **/*$* - **/ExportOracleTest.java - **/ExportTeradataTest.java - **/OracleSuiteTest.java - **/OracleWithQuotingTest.java - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java - - - - - - - - - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - true - - - - org.codehaus.mojo - junit-report-maven-plugin - devel - - true - - - - org.apache.maven.plugins - maven-jxr-plugin - 2.3 - - true - - - - - + + + 4.0.0 + com.mysema.querydsl + querydsl-root + 3.4.3 + Querydsl + parent project for Querydsl modules + ${project.homepage} + + + com.mysema.home + mysema-source + 0.3.1 + + + pom + + 2007 + + + false + UTF-8 + http://www.querydsl.com + http://github.com/querydsl/querydsl + scm:git:git@github.com:querydsl/querydsl.git + + + 10.10.1.1 + 2.3.1 + 1.4.178 + 9.3-1101-jdbc41 + 11.1.0.7.0 + 5.1.30 + 1.3.1 + 8.4.0 + 3.7.2 + 13.10.00.35 + 2.2.5 + + 14.0 + 0.6.3 + 0.2.4 + 2.2.2 + 1.3.2 + 1.6.1 + + + + com.google.common.*;version=${@}, + * + + ${osgi.import.package.root} + + + + + junit + junit + 4.8.1 + test + + + javax.servlet + servlet-api + + + + + + org.easymock + easymock + 3.0 + test + + + cglib + cglib-nodep + + + + + + + + + org.slf4j + slf4j-api + ${slf4j.version} + + + org.slf4j + slf4j-log4j12 + ${slf4j.version} + provided + + + + + + ${project.checkout} + ${project.checkout} + ${project.githubpage} + + + + + tiwe + Timo Westkämper + timo.westkamper@gmail.com + Mysema Ltd + + Project Manager + Architect + + + + sasa + Samppa Saarela + samppa.saarela@mysema.com + Mysema Ltd + + Developer + + + + vema + Vesa Marttila + vesa.marttila@mysema.com + Mysema Ltd + + Developer + + + + laim + Lassi Immonen + lassi.immonen@mysema.com + Mysema Ltd + + Developer + + + + + + + Apache License, Version 2.0 + LICENSE.txt + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.4 + + + com.mysema.maven + apt-maven-plugin + 1.1.2 + + + org.apache.maven.plugins + maven-surefire-plugin + 2.16 + + + org.apache.felix + maven-bundle-plugin + 2.4.0 + + + bundle-manifest + process-classes + + manifest + + true + + + + ${osgi.import.package} + + com.mysema.* + + + + + + + + + + + org.apache.maven.plugins + maven-enforcer-plugin + 1.3.1 + + + check + verify + + enforce + + + + + + com/mysema/query/SearchResults + com/mysema/query/sql/SQLListeners + com/mysema/query/apt/TypeExtractor + + com/mysema/query/sql/QBeans + com/mysema/query/support/EnumConversion + com/mysema/query/support/NumberConversion + com/mysema/query/support/NumberConversions + com/mysema/query/types/ArrayConstructorExpression + com/mysema/query/types/ConstructorExpression + com/mysema/query/types/FactoryExpressionBase + com/mysema/query/types/MappingProjection + com/mysema/query/types/QBean + com/mysema/query/types/QList + com/mysema/query/types/QMap + com/mysema/query/types/QTuple + + BACKWARD_COMPATIBLE_USER + true + true + + + + + + + + org.semver + enforcer-rule + 0.9.26 + + + + + maven-assembly-plugin + + + ../querydsl-root/src/main/assembly.xml + + ../querydsl-root/target/dist + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + ${project.build.directory}/dist/apidocs + ${project.build.directory}/dist/apidocs + + + Core + com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* + + + APT + com.mysema.query.apt* + + + Spatial + com.mysema.query.spatial* + + + Collections + com.mysema.query.collections* + + + JPA + com.mysema.query.jpa* + + + JDO + com.mysema.query.jdo* + + + SQL + com.mysema.query.sql* + + + Spatial + com.mysema.query.spatial* + + + Lucene + com.mysema.query.lucene + + + Hibernate Search + com.mysema.query.search + + + Mongodb + com.mysema.query.mongodb* + + + + + + com.mysema.maven + maven-version-plugin + 0.1.0 + + + org.apache.maven.plugins + maven-pmd-plugin + 2.3 + + 1.6 + true + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + package + + jar + + + + + + org.apache.maven.plugins + maven-jar-plugin + 2.4 + + true + + + + org.apache.maven.plugins + maven-surefire-plugin + + -Xms256m -Xmx512m -XX:MaxPermSize=512m + com.mysema.testutil.ExternalDB + + + + org.apache.maven.surefire + surefire-junit47 + 2.16 + + + + + + + + + jahia + http://maven.jahia.org/maven2 + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + geoapi + http://maven.geotoolkit.org + + + opengeo + http://repo.opengeo.org + + + nexus + https://maven.nuxeo.org/nexus/content/groups/public + + + + + + com.springsource.repository.bundles.release + http://repository.springsource.com/maven/bundles/release + + + com.springsource.repository.bundles.external + http://repository.springsource.com/maven/bundles/external + + + + + + all + true + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-apt + ../querydsl-collections + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jpa + ../querydsl-jpa-codegen + ../querydsl-jdo + + + ../querydsl-lucene3 + ../querydsl-lucene4 + ../querydsl-hibernate-search + + + ../querydsl-mongodb + + + ../querydsl-scala + + + + + hibernate-search + + ../querydsl-core + ../querydsl-codegen + ../querydsl-lucene3 + ../querydsl-hibernate-search + + + + + jpa + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-apt + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jpa + ../querydsl-jpa-codegen + + + + + jdo + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-apt + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + ../querydsl-jdo + + + + + lucene + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-lucene3 + ../querydsl-lucene4 + + + + + mongodb + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-mongodb + + + + + sql + + ../querydsl-core + ../querydsl-codegen + ../querydsl-spatial + ../querydsl-sql + ../querydsl-sql-codegen + ../querydsl-maven-plugin + + + + + collections + + ../querydsl-core + ../querydsl-codegen + ../querydsl-apt + ../querydsl-collections + + + + + jenkins + + + + org.apache.maven.plugins + maven-surefire-plugin + + com.mysema.testutil.DummyInterface + + **/*$* + **/MSSQLSuiteTest.java + **/TeradataSuiteTest.java + + + + + + + + + travis + + + + org.apache.maven.plugins + maven-surefire-plugin + + com.mysema.testutil.DummyInterface + + **/*$* + **/ExportOracleTest.java + **/ExportTeradataTest.java + **/OracleSuiteTest.java + **/OracleWithQuotingTest.java + **/MSSQLSuiteTest.java + **/TeradataSuiteTest.java + + + + + + + + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + true + + + + org.codehaus.mojo + junit-report-maven-plugin + devel + + true + + + + org.apache.maven.plugins + maven-jxr-plugin + 2.3 + + true + + + + + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index d755a0600c..234944f60b 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml @@ -267,4 +267,4 @@ - + diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 649dadf2c7..64bd7bc7f3 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 3facbe8965..4fbd178ebd 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 16925c7b23..0d439427a0 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,11 +1,11 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.4.3.BUILD-SNAPSHOT + 3.4.3 ../querydsl-root/pom.xml @@ -331,4 +331,4 @@ - + From 8f0bd7d7d3b9ec2af52d7623c8d07f67b574af24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 31 Aug 2014 16:32:02 +0300 Subject: [PATCH 0363/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 5dfc5a0c5e..94ae939a0b 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 56aa0f1253..24f9f615b3 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index fb168af3a9..914da3e5e1 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index fdd5cf3cb9..c78cbba4c0 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 52b8034c16..7b4e2e48fe 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index f090382b6f..bba33db6e0 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 1f6eed48a6..34fbebd5d7 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 95e9214e85..1813d2bea8 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 45363ffa0a..668464925e 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 1591dfcd37..b80805f9ad 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index dc37c63b74..b03ed5c63b 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index d4419faef8..d7f11d1b4c 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 417bbd25ba..91ad374db1 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 234944f60b..75e455f30e 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 64bd7bc7f3..b0a2c2c150 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 4fbd178ebd..b21c2b31b7 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 0d439427a0..231e398e13 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.3 + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml From 67c4fbced0c4aebda30e801047c5a57a8cc72a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 31 Aug 2014 17:04:48 +0300 Subject: [PATCH 0364/1968] Update contributors section --- querydsl-root/pom.xml | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 91ad374db1..0254db02d4 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -106,9 +106,8 @@ - tiwe + timowest Timo Westkämper - timo.westkamper@gmail.com Mysema Ltd Project Manager @@ -116,32 +115,36 @@ - sasa + ssaarela Samppa Saarela - samppa.saarela@mysema.com Mysema Ltd Developer - vema + ponzao Vesa Marttila - vesa.marttila@mysema.com Mysema Ltd Developer - laim + mangolas Lassi Immonen - lassi.immonen@mysema.com Mysema Ltd Developer - + + + Shredder121 + Ruben Dijkstra + + Developer + + @@ -592,4 +595,4 @@ - + From f1b89f6c0eba967f62ce019db7cc42f152204044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 31 Aug 2014 17:41:14 +0300 Subject: [PATCH 0365/1968] Improve SQLTemplatesRegistry contents --- .../query/sql/SQLTemplatesRegistry.java | 66 +++++++++++-------- .../query/sql/SQLTemplatesRegistryDump.java | 43 ++++++++++++ 2 files changed, 83 insertions(+), 26 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/SQLTemplatesRegistryDump.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java index 642cad0345..8abf9def7e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplatesRegistry.java @@ -2,41 +2,55 @@ import java.sql.DatabaseMetaData; import java.sql.SQLException; -import java.util.Map; - -import com.google.common.collect.Maps; /** * */ public class SQLTemplatesRegistry { - private final Map registry = Maps.newHashMap(); - - public SQLTemplatesRegistry() { - registry.put("h2", new H2Templates()); - registry.put("postgresql", new PostgresTemplates()); - registry.put("oracle", new OracleTemplates()); - registry.put("mysql", new MySQLTemplates()); - registry.put("hsql", new HSQLDBTemplates()); - registry.put("firebird", new FirebirdTemplates()); - registry.put("sqlite", new SQLiteTemplates()); - registry.put("apache", new DerbyTemplates()); - // TODO SQLServer - // TODO Teradata - } + private final SQLTemplates generic = SQLTemplates.DEFAULT; + + private final SQLTemplates cubrid = new CUBRIDTemplates(); + private final SQLTemplates derby = new DerbyTemplates(); + private final SQLTemplates firebird = new FirebirdTemplates(); + private final SQLTemplates h2 = new H2Templates(); + private final SQLTemplates hsqldb = new HSQLDBTemplates(); + private final SQLTemplates mysql = new MySQLTemplates(); + private final SQLTemplates oracle = new OracleTemplates(); + private final SQLTemplates postgres = new PostgresTemplates(); + private final SQLTemplates sqlite = new SQLiteTemplates(); + private final SQLTemplates teradata = new TeradataTemplates(); - public SQLTemplates getTemplates(DatabaseMetaData md) { - try { - String name = md.getDatabaseProductName(); - int separator = name.indexOf(' '); - if (separator > -1) { - name = name.substring(0, separator); + private final SQLTemplates sqlserver = new SQLServerTemplates(); + private final SQLTemplates sqlserver2005 = new SQLServer2005Templates(); + private final SQLTemplates sqlserver2008 = new SQLServer2008Templates(); + private final SQLTemplates sqlserver2012 = new SQLServer2012Templates(); + + public SQLTemplates getTemplates(DatabaseMetaData md) throws SQLException { + String name = md.getDatabaseProductName().toLowerCase(); + if (name.equals("cubrid")) return cubrid; + if (name.equals("apache derby")) return derby; + if (name.startsWith("firebird")) return firebird; + if (name.equals("h2")) return h2; + if (name.equals("hsql")) return hsqldb; + if (name.equals("mysql")) return mysql; + if (name.equals("oracle")) return oracle; + if (name.equals("postgresql")) return postgres; + if (name.equals("sqlite")) return sqlite; + if (name.startsWith("teradata")) return teradata; + + // sqlserver + if (name.equals("microsft sql server")) { + switch (md.getDatabaseMajorVersion()) { + case 12: + case 11: return sqlserver2012; + case 10: return sqlserver2008; + case 9: return sqlserver2005; + default: return sqlserver; } - return registry.get(name.toLowerCase()); - } catch (SQLException ex) { - throw new RuntimeException(ex.getMessage(), ex); } + + return generic; } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTemplatesRegistryDump.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTemplatesRegistryDump.java new file mode 100644 index 0000000000..2744f95101 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLTemplatesRegistryDump.java @@ -0,0 +1,43 @@ +package com.mysema.query.sql; + +import java.sql.DatabaseMetaData; +import java.sql.SQLException; + +import com.mysema.query.Connections; + +public class SQLTemplatesRegistryDump { + + public static void main(String[] args) throws SQLException, ClassNotFoundException { + Connections.initCubrid(); + dump(); + Connections.initDerby(); + dump(); + Connections.initFirebird(); + dump(); + Connections.initH2(); + dump(); + Connections.initHSQL(); + dump(); + Connections.initMySQL(); + dump(); + Connections.initOracle(); + dump(); + Connections.initPostgres(); + dump(); + Connections.initSQLite(); + dump(); + Connections.initSQLServer(); + dump(); + /*Connections.initTeradata(); + dump();*/ + } + + private static void dump() throws SQLException { + DatabaseMetaData md = Connections.getConnection().getMetaData(); + System.out.println(md.getDatabaseProductName()); + System.out.println(md.getDatabaseMajorVersion()); + System.out.println(md.getDatabaseMinorVersion()); + System.out.println(); + Connections.close(); + } +} From be3b5a09e4912f7afa45dae63d2c48fffa4b8a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 31 Aug 2014 20:56:28 +0300 Subject: [PATCH 0366/1968] Findbugs fixes --- .../com/mysema/query/jdo/sql/AbstractSQLQuery.java | 5 ----- .../java/com/mysema/query/jpa/impl/JPAUtil.java | 2 +- .../com/mysema/query/sql/dml/SQLInsertClause.java | 14 +++++++------- .../com/mysema/query/sql/dml/SQLMergeClause.java | 13 +++++++------ 4 files changed, 15 insertions(+), 19 deletions(-) diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java index f220ce32a1..2e81deaed9 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java @@ -70,11 +70,6 @@ public void close() throws IOException { protected final QueryMixin queryMixin; - @Nullable - protected Expression union; - - protected boolean unionAll; - @SuppressWarnings("unchecked") public AbstractSQLQuery(QueryMetadata metadata, Configuration conf, PersistenceManager persistenceManager, boolean detach) { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUtil.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUtil.java index fdf68a86bf..a3e888674a 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUtil.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAUtil.java @@ -44,7 +44,7 @@ public static void setConstants(Query query, Map constants, Map

stmts = null; if (batches.isEmpty()) { stmt = createStatement(true); listeners.notifyInsert(entity, metadata, columns, values, subQuery); @@ -321,18 +320,19 @@ public ResultSet executeWithKeys() { stmt.executeUpdate(); listeners.preExecute(context); } else { - stmts = createStatements(true); - + Collection stmts = createStatements(true); + if (stmts != null && stmts.size() > 1) { + throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); + } + stmt = stmts.iterator().next(); listeners.notifyInserts(entity, metadata, batches); listeners.preExecute(context); stmt.executeBatch(); listeners.executed(context); } - if (stmts != null && stmts.size() > 1) { - throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); - } - final Statement stmt2 = stmts != null ? stmts.iterator().next() : stmt; + + final Statement stmt2 = stmt; ResultSet rs = stmt.getGeneratedKeys(); return new ResultSetAdapter(rs) { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 33e0bde6fb..1a733e9e5e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -205,7 +205,6 @@ public ResultSet executeWithKeys() { try { if (configuration.getTemplates().isNativeMerge()) { PreparedStatement stmt = null; - Collection stmts = null; if (batches.isEmpty()) { stmt = createStatement(true); listeners.notifyMerge(entity, metadata, keys, columns, values, subQuery); @@ -214,17 +213,19 @@ public ResultSet executeWithKeys() { stmt.executeUpdate(); listeners.executed(context); } else { - stmts = createStatements(true); + Collection stmts = createStatements(true); + if (stmts != null && stmts.size() > 1) { + throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); + } + stmt = stmts.iterator().next(); listeners.notifyMerges(entity, metadata, batches); listeners.preExecute(context); stmt.executeBatch(); listeners.executed(context); } - if (stmts != null && stmts.size() > 1) { - throw new IllegalStateException("executeWithKeys called with batch statement and multiple SQL strings"); - } - final Statement stmt2 = stmts != null ? stmts.iterator().next() : stmt; + + final Statement stmt2 = stmt; ResultSet rs = stmt.getGeneratedKeys(); return new ResultSetAdapter(rs) { @Override From c851edd4e6d799549ca6312e8b043a8f9a59616b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 1 Sep 2014 20:31:33 +0300 Subject: [PATCH 0367/1968] Make equals and hashCode null schema safe --- .../com/mysema/query/sql/SchemaAndTable.java | 6 ++++-- .../com/mysema/query/sql/SchemaAndTableTest.java | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/SchemaAndTableTest.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SchemaAndTable.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SchemaAndTable.java index 733c2b51e4..eee1b19a2d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SchemaAndTable.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SchemaAndTable.java @@ -15,6 +15,8 @@ import java.io.Serializable; +import com.google.common.base.Objects; + /** * */ @@ -41,7 +43,7 @@ public boolean equals(Object o) { return true; } else if (o instanceof SchemaAndTable) { SchemaAndTable st = (SchemaAndTable)o; - return st.schema.equals(schema) && st.table.equals(table); + return Objects.equal(st.schema, schema) && Objects.equal(st.table, table); } else { return false; } @@ -49,7 +51,7 @@ public boolean equals(Object o) { @Override public int hashCode() { - return 31 * schema.hashCode() + table.hashCode(); + return (schema != null ? 31 * schema.hashCode() : 0) + table.hashCode(); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SchemaAndTableTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SchemaAndTableTest.java new file mode 100644 index 0000000000..6df704777d --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SchemaAndTableTest.java @@ -0,0 +1,16 @@ +package com.mysema.query.sql; + +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class SchemaAndTableTest { + + @Test + public void equalsAndHashCode() { + SchemaAndTable st1 = new SchemaAndTable(null, "table"); + SchemaAndTable st2 = new SchemaAndTable(null, "table"); + assertEquals(st1, st2); + assertEquals(st1.hashCode(), st2.hashCode()); + } + +} From 77a5cada316a9b3be3b9b32978ebe4c69ff55c2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Sep 2014 20:58:56 +0300 Subject: [PATCH 0368/1968] Use Expression import only when needed --- .../query/codegen/ProjectionSerializer.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/ProjectionSerializer.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/ProjectionSerializer.java index 8a7fa9f8e7..f420704d40 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/ProjectionSerializer.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/ProjectionSerializer.java @@ -13,6 +13,11 @@ */ package com.mysema.query.codegen; +import javax.annotation.Generated; +import javax.inject.Inject; +import java.io.IOException; +import java.util.Set; + import com.google.common.base.Function; import com.google.common.collect.Sets; import com.mysema.codegen.CodeWriter; @@ -21,11 +26,6 @@ import com.mysema.query.types.Expression; import com.mysema.query.types.expr.NumberExpression; -import javax.annotation.Generated; -import javax.inject.Inject; -import java.io.IOException; -import java.util.Set; - /** * ProjectionSerializer is a {@link Serializer} implementation for projection types * @@ -57,7 +57,15 @@ protected void intro(EntityType model, CodeWriter writer) throws IOException { // imports writer.imports(NumberExpression.class.getPackage()); - writer.imports(Expression.class, ConstructorExpression.class, Generated.class); + writer.imports(ConstructorExpression.class, Generated.class); + + Set sizes = Sets.newHashSet(); + for (Constructor c : model.getConstructors()) { + sizes.add(c.getParameters().size()); + } + if (sizes.size() != model.getConstructors().size()) { + writer.imports(Expression.class); + } // javadoc writer.javadoc(queryType + " is a Querydsl Projection type for " + simpleName); From 986b38be7f134df1aeaa01e7df291d31a2f87fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 3 Sep 2014 21:12:26 +0300 Subject: [PATCH 0369/1968] Add test for enum eq --- .../src/test/java/com/mysema/query/AbstractJPATest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index dc968a4ddb..fb733f4c5a 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -560,6 +560,12 @@ public void EndsWith3() { assertEquals(1, query().from(cat).where(cat.name.endsWith("_123")).count()); } + @Test + public void Enum_Eq() { + assertEquals(1, query().from(company).where(company.ratingOrdinal.eq(Rating.A)).count()); + assertEquals(1, query().from(company).where(company.ratingString.eq(Rating.AA)).count()); + } + @Test @NoBatooJPA public void Enum_in() { From 2b36037f84b4635f48265e78b0c7b58d62b592d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 3 Sep 2014 21:48:30 +0300 Subject: [PATCH 0370/1968] Improve docs for sql-spring --- querydsl-sql-spring/pom.xml | 2 +- .../sql/spring/SpringConnectionProvider.java | 24 +++++++++++++++++ .../sql/spring/SpringExceptionTranslator.java | 26 +++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index a74e977e03..ed6d71d1ad 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.4.2.BUILD-SNAPSHOT + 3.5.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java index 123beea774..96975a315a 100644 --- a/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java +++ b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringConnectionProvider.java @@ -1,3 +1,16 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.spring; import javax.inject.Provider; @@ -6,6 +19,17 @@ import org.springframework.jdbc.datasource.DataSourceUtils; +/** + * SpringConnectionProvider is a Provider implementation which provides a transactionally bound connection + * + *

Usage example

+ *
+ * {@code
+ * Provider provider = new SpringConnectionProvider(dataSource());
+ * SQLQueryFactory queryFactory = SQLQueryFactory(configuration, provider);
+ * }
+ * 
+ */ public class SpringConnectionProvider implements Provider { private final DataSource dataSource; diff --git a/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java index d6a532e734..b4923ff087 100644 --- a/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java +++ b/querydsl-sql-spring/src/main/java/com/mysema/query/sql/spring/SpringExceptionTranslator.java @@ -1,3 +1,16 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.spring; import java.sql.SQLException; @@ -6,6 +19,19 @@ import org.springframework.jdbc.support.SQLExceptionTranslator; import org.springframework.jdbc.support.SQLStateSQLExceptionTranslator; +/** + * SpringExceptionTranslator is an SQLExceptionTranslator implementation which uses Spring's + * exception translation functionality internally + * + *

>Usage example

+ *
+ * {@code
+ * Configuration configuration = new Configuration(templates);
+ * configuration.setExceptionTranslator(new SpringExceptionTranslator());
+ * }
+ * 
+ * + */ public class SpringExceptionTranslator implements com.mysema.query.sql.SQLExceptionTranslator { private final SQLExceptionTranslator translator; From c8fa5e498849a2ad27d2303c288546cf197dc44d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 3 Sep 2014 21:49:26 +0300 Subject: [PATCH 0371/1968] Add Batoo exclusion --- querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index fb733f4c5a..ee5942429c 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -561,6 +561,7 @@ public void EndsWith3() { } @Test + @NoBatooJPA public void Enum_Eq() { assertEquals(1, query().from(company).where(company.ratingOrdinal.eq(Rating.A)).count()); assertEquals(1, query().from(company).where(company.ratingString.eq(Rating.AA)).count()); From 109ee8d8e4918a36c1ce0322e10c6109c15b07ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 6 Sep 2014 21:22:02 +0300 Subject: [PATCH 0372/1968] Enforce unique aliases --- .../mysema/query/jpa/NativeSQLSerializer.java | 11 ++--- .../sql/AbstractHibernateSQLQuery.java | 23 +++++++++-- .../query/jpa/sql/AbstractJPASQLQuery.java | 41 +++++++++++++------ .../com/mysema/query/AbstractSQLTest.java | 24 +++++------ 4 files changed, 65 insertions(+), 34 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java index 76611e4dff..612ae5b6d7 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java @@ -13,15 +13,16 @@ */ package com.mysema.query.jpa; +import java.util.*; + +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.mysema.query.QueryMetadata; import com.mysema.query.sql.*; import com.mysema.query.types.*; -import java.util.*; - /** * NativeSQLSerializer extends the SQLSerializer class to extract referenced entity paths and change * some serialization formats @@ -31,7 +32,7 @@ */ public final class NativeSQLSerializer extends SQLSerializer { - private final Map, String> aliases = Maps.newHashMap(); + private final ListMultimap, String> aliases = ArrayListMultimap.create(); private final boolean wrapEntityProjections; @@ -48,7 +49,7 @@ private boolean isAlias(Expression expr) { return expr instanceof Operation && ((Operation)expr).getOperator() == Ops.ALIAS; } - public Map, String> getAliases() { + public ListMultimap, String> getAliases() { return aliases; } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index 847b5cf860..79bfadc836 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -15,8 +15,10 @@ import javax.annotation.Nullable; import java.util.List; -import java.util.Map; +import java.util.Set; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Sets; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.*; import com.mysema.query.NonUniqueResultException; @@ -86,7 +88,8 @@ private Query createQuery(boolean forCount) { HibernateUtil.setConstants(query, serializer.getConstantToLabel(), queryMixin.getMetadata().getParams()); if (!forCount) { - Map, String> aliases = serializer.getAliases(); + ListMultimap, String> aliases = serializer.getAliases(); + Set used = Sets.newHashSet(); // set entity paths List> projection = queryMixin.getMetadata().getProjection(); Expression proj = projection.get(0); @@ -95,13 +98,25 @@ private Query createQuery(boolean forCount) { if (isEntityExpression(expr)) { query.addEntity(extractEntityExpression(expr).toString(), expr.getType()); } else if (aliases.containsKey(expr)) { - query.addScalar(aliases.get(expr)); + for (String scalar : aliases.get(expr)) { + if (!used.contains(scalar)) { + query.addScalar(scalar); + used.add(scalar); + break; + } + } } } } else if (isEntityExpression(proj)) { query.addEntity(extractEntityExpression(proj).toString(), proj.getType()); } else if (aliases.containsKey(proj)) { - query.addScalar(aliases.get(proj)); + for (String scalar : aliases.get(proj)) { + if (!used.contains(scalar)) { + query.addScalar(scalar); + used.add(scalar); + break; + } + } } // set result transformer, if projection is a FactoryExpression instance diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java index 1ef72fab90..8caa326c52 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java @@ -13,8 +13,20 @@ */ package com.mysema.query.jpa.sql; +import javax.annotation.Nullable; +import javax.persistence.EntityManager; +import javax.persistence.FlushModeType; +import javax.persistence.LockModeType; +import javax.persistence.Query; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + import com.google.common.collect.HashMultimap; +import com.google.common.collect.ListMultimap; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.*; import com.mysema.query.jpa.AbstractSQLQuery; @@ -30,15 +42,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nullable; -import javax.persistence.EntityManager; -import javax.persistence.FlushModeType; -import javax.persistence.LockModeType; -import javax.persistence.Query; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - /** * AbstractJPASQLQuery is the base class for JPA Native SQL queries * @@ -113,19 +116,33 @@ private Query createQuery(boolean forCount) { query = entityManager.createNativeQuery(queryString); } if (!forCount) { - Map, String> aliases = serializer.getAliases(); + ListMultimap, String> aliases = serializer.getAliases(); + Set used = Sets.newHashSet(); if (proj instanceof FactoryExpression) { for (Expression expr : ((FactoryExpression)proj).getArgs()) { if (isEntityExpression(expr)) { queryHandler.addEntity(query, extractEntityExpression(expr).toString(), expr.getType()); } else if (aliases.containsKey(expr)) { - queryHandler.addScalar(query, aliases.get(expr), expr.getType()); + for (String scalar : aliases.get(expr)) { + if (!used.contains(scalar)) { + queryHandler.addScalar(query, scalar, expr.getType()); + used.add(scalar); + break; + } + + } } } } else if (isEntityExpression(proj)) { queryHandler.addEntity(query, extractEntityExpression(proj).toString(), proj.getType()); } else if (aliases.containsKey(proj)) { - queryHandler.addScalar(query, aliases.get(proj), proj.getType()); + for (String scalar : aliases.get(proj)) { + if (!used.contains(scalar)) { + queryHandler.addScalar(query, scalar, proj.getType()); + used.add(scalar); + break; + } + } } } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java index d10181690b..b2ffb34038 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java @@ -1,32 +1,23 @@ package com.mysema.query; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.UUID; -import org.junit.Ignore; -import org.junit.Test; - import com.mysema.query.jpa.AbstractSQLQuery; import com.mysema.query.jpa.domain.Cat; import com.mysema.query.jpa.domain.Color; import com.mysema.query.jpa.domain.QCat; import com.mysema.query.jpa.domain.sql.SAnimal; import com.mysema.query.sql.SQLSubQuery; -import com.mysema.query.types.ConstructorExpression; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Projections; -import com.mysema.query.types.SubQueryExpression; +import com.mysema.query.types.*; import com.mysema.query.types.expr.DateExpression; import com.mysema.query.types.expr.Wildcard; import com.mysema.testutil.ExcludeIn; +import org.junit.Ignore; +import org.junit.Test; +import static org.junit.Assert.*; public abstract class AbstractSQLTest { @@ -248,6 +239,12 @@ private void print(Iterable rows) { } } + @Test + public void Projections_DuplicateColumns() { + SAnimal cat = new SAnimal("cat"); + assertEquals(1, query().from(cat).list(new QList(cat.count(), cat.count())).size()); + } + @Test public void Single_Result() { query().from(cat).singleResult(cat.id); @@ -356,4 +353,5 @@ public void Wildcard() { // print(rows); } + } From 0427180f537a2b9a92e632eea8bda84bd5c67c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 6 Sep 2014 21:33:01 +0300 Subject: [PATCH 0373/1968] Exclude NativeSQLSerializer from compatibility check --- querydsl-root/pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 861226a6b9..4d2f0c6b6c 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -213,6 +213,9 @@ + + com/mysema/query/jpa/NativeSQLSerializer + BACKWARD_COMPATIBLE_USER true true From 64c0510c11df84fc8b1064d42e831fa09f9ef58f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 7 Sep 2014 21:59:31 +0300 Subject: [PATCH 0374/1968] Add suport Table/Column annotations in JPA native queries --- .../mysema/query/jpa/NativeSQLSerializer.java | 43 +++++++++++++++++-- .../com/mysema/query/AbstractSQLTest.java | 19 ++++---- .../com/mysema/query/jpa/domain/Company.java | 12 ++---- .../src/test/resources/log4j.properties | 2 +- .../com/mysema/query/sql/SQLSerializer.java | 8 ++-- 5 files changed, 59 insertions(+), 25 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java index 76611e4dff..756802c627 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java @@ -13,15 +13,18 @@ */ package com.mysema.query.jpa; +import javax.persistence.Table; +import javax.persistence.Column; +import java.util.*; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.mysema.query.JoinExpression; import com.mysema.query.QueryMetadata; import com.mysema.query.sql.*; import com.mysema.query.types.*; -import java.util.*; - /** * NativeSQLSerializer extends the SQLSerializer class to extract referenced entity paths and change * some serialization formats @@ -44,6 +47,33 @@ public NativeSQLSerializer(Configuration configuration, boolean wrapEntityProjec this.wrapEntityProjections = wrapEntityProjections; } + @Override + protected void appendAsColumnName(Path path) { + if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { + SQLTemplates templates = getTemplates(); + Column column = path.getAnnotatedElement().getAnnotation(Column.class); + append(templates.quoteIdentifier(column.name())); + } else { + super.appendAsColumnName(path); + } + } + + @Override + protected void handleJoinTarget(JoinExpression je) { + SQLTemplates templates = getTemplates(); + Class type = je.getTarget().getType(); + if (type.getAnnotation(Table.class) != null && templates.isSupportsAlias()) { + Table table = type.getAnnotation(Table.class); + if (!table.schema().isEmpty() && templates.isPrintSchema()) { + appendSchemaName(table.schema()); + append("."); + } + appendTableName(table.name()); + append(templates.getTableAlias()); + } + super.handleJoinTarget(je); + } + private boolean isAlias(Expression expr) { return expr instanceof Operation && ((Operation)expr).getOperator() == Ops.ALIAS; } @@ -77,6 +107,8 @@ public void serialize(QueryMetadata metadata, boolean forCountRow) { aliases.put(args[i], alias); args[i] = ExpressionUtils.as(args[i], alias); modified = true; + } else if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { + aliases.put(path, path.getAnnotatedElement().getAnnotation(Column.class).name()); } else { aliases.put(path, ColumnMetadata.getName(path)); } @@ -86,7 +118,12 @@ public void serialize(QueryMetadata metadata, boolean forCountRow) { for (int j = 0; j < fargs.size(); j++) { if (fargs.get(j) instanceof Path) { Path path = (Path) fargs.get(j); - String columnName = ColumnMetadata.getName(path); + String columnName; + if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { + columnName = path.getAnnotatedElement().getAnnotation(Column.class).name(); + } else { + columnName = ColumnMetadata.getName(path); + } if (!used.add(columnName)) { String alias = "col__"+(i+1)+"_"+(j+1); aliases.put(path, alias); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java index d10181690b..e723a4ea64 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractSQLTest.java @@ -1,23 +1,15 @@ package com.mysema.query; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.UUID; -import org.junit.Ignore; -import org.junit.Test; - import com.mysema.query.jpa.AbstractSQLQuery; import com.mysema.query.jpa.domain.Cat; import com.mysema.query.jpa.domain.Color; import com.mysema.query.jpa.domain.QCat; +import com.mysema.query.jpa.domain.QCompany; import com.mysema.query.jpa.domain.sql.SAnimal; import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.types.ConstructorExpression; @@ -27,6 +19,9 @@ import com.mysema.query.types.expr.DateExpression; import com.mysema.query.types.expr.Wildcard; import com.mysema.testutil.ExcludeIn; +import org.junit.Ignore; +import org.junit.Test; +import static org.junit.Assert.*; public abstract class AbstractSQLTest { @@ -159,6 +154,12 @@ public void EntityQueries6() { } } + @Test + public void EntityQueries7() { + QCompany company = QCompany.company; + query().from(company).list(company.officialName); + } + @Test public void In() { assertEquals(6l, query().from(cat).where(cat.dtype.in("C", "CX")).count()); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Company.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Company.java index 1a510d3795..621fe8982d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Company.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Company.java @@ -13,16 +13,9 @@ */ package com.mysema.query.jpa.domain; +import javax.persistence.*; import java.util.List; -import javax.persistence.Entity; -import javax.persistence.EnumType; -import javax.persistence.Enumerated; -import javax.persistence.Id; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; - import org.batoo.jpa.annotations.Index; /** @@ -51,4 +44,7 @@ public enum Rating { A, AA, AAA } public int id; public String name; + + @Column(name="official_name") + public String officialName; } diff --git a/querydsl-jpa/src/test/resources/log4j.properties b/querydsl-jpa/src/test/resources/log4j.properties index 945b555e69..e11c5d6ad0 100644 --- a/querydsl-jpa/src/test/resources/log4j.properties +++ b/querydsl-jpa/src/test/resources/log4j.properties @@ -12,5 +12,5 @@ log4j.appender.querydsl=org.apache.log4j.ConsoleAppender log4j.appender.querydsl.layout=org.apache.log4j.PatternLayout log4j.appender.querydsl.layout.ConversionPattern=Querydsl : %C#%M - %m%n -#log4j.logger.com.mysema.query.jpa.hibernate=DEBUG, querydsl +log4j.logger.com.mysema.query.jpa.hibernate=DEBUG, querydsl #log4j.logger.com.mysema.query.jpa.impl=DEBUG, querydsl \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index b51888e381..16cf6d0340 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -79,7 +79,7 @@ public SQLSerializer(Configuration conf, boolean dml) { this.dml = dml; } - private void appendAsColumnName(Path path) { + protected void appendAsColumnName(Path path) { String column = ColumnMetadata.getName(path); if (path.getMetadata().getParent() instanceof RelationalPath) { RelationalPath parent = (RelationalPath)path.getMetadata().getParent(); @@ -92,11 +92,11 @@ private SchemaAndTable getSchemaAndTable(RelationalPath path) { return configuration.getOverride(path.getSchemaAndTable()); } - private void appendSchemaName(String schema) { + protected void appendSchemaName(String schema) { append(templates.quoteIdentifier(schema)); } - private void appendTableName(String table) { + protected void appendTableName(String table) { append(templates.quoteIdentifier(table)); } @@ -162,7 +162,7 @@ public void handle(String template, Object... args) { handleTemplate(TemplateFactory.DEFAULT.create(template), Arrays.asList(args)); } - private void handleJoinTarget(JoinExpression je) { + protected void handleJoinTarget(JoinExpression je) { // type specifier if (je.getTarget() instanceof RelationalPath && templates.isSupportsAlias()) { final RelationalPath pe = (RelationalPath) je.getTarget(); From 6b3fbb510bc3632c480efe4d38cc39b4d5700bcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 7 Sep 2014 22:23:42 +0300 Subject: [PATCH 0375/1968] Revert logging changes --- querydsl-jpa/src/test/resources/log4j.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-jpa/src/test/resources/log4j.properties b/querydsl-jpa/src/test/resources/log4j.properties index e11c5d6ad0..945b555e69 100644 --- a/querydsl-jpa/src/test/resources/log4j.properties +++ b/querydsl-jpa/src/test/resources/log4j.properties @@ -12,5 +12,5 @@ log4j.appender.querydsl=org.apache.log4j.ConsoleAppender log4j.appender.querydsl.layout=org.apache.log4j.PatternLayout log4j.appender.querydsl.layout.ConversionPattern=Querydsl : %C#%M - %m%n -log4j.logger.com.mysema.query.jpa.hibernate=DEBUG, querydsl +#log4j.logger.com.mysema.query.jpa.hibernate=DEBUG, querydsl #log4j.logger.com.mysema.query.jpa.impl=DEBUG, querydsl \ No newline at end of file From 69a98ed82adc3d9822c987c520f932b4ad9a5e61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 9 Sep 2014 20:09:28 +0300 Subject: [PATCH 0376/1968] Add Hibernate Spatial templates --- .../src/main/java/com/mysema/query/types/Templates.java | 6 ++++++ .../src/main/java/com/mysema/query/jpa/HQLTemplates.java | 8 ++++++++ .../spatial/hibernate}/HibernateSpatialSupport.java | 9 +++++---- .../src/main/java/com/mysema/query/sql/SQLTemplates.java | 6 ------ 4 files changed, 19 insertions(+), 10 deletions(-) rename querydsl-spatial/src/{test/java/com/mysema/query/spatial => main/java/com/mysema/query/spatial/hibernate}/HibernateSpatialSupport.java (94%) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Templates.java b/querydsl-core/src/main/java/com/mysema/query/types/Templates.java index fd9b57120e..700dc6bad7 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Templates.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Templates.java @@ -280,6 +280,12 @@ protected final void add(Operator op, String pattern, int pre) { precedence.put(op, pre); } + protected final void add(Map, String> ops) { + for (Map.Entry, String> entry : ops.entrySet()) { + add(entry.getKey(), entry.getValue()); + } + } + public final char getEscapeChar() { return escape; } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java index 77b255616a..6af7ad8381 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java @@ -95,6 +95,14 @@ public HQLTemplates(char escape) { add(Ops.CONTAINS_KEY, "{1} in indices({0})"); add(Ops.CONTAINS_VALUE, "{1} in elements({0})"); + + // add Hibernate Spatial mappings, if on classpath + try { + Class cl = Class.forName("com.mysema.query.spatial.hibernate.HibernateSpatialSupport"); + add((Map)cl.getMethod("getSpatialOps").invoke(null)); + } catch (Exception e) { + // do nothing + } } @Override diff --git a/querydsl-spatial/src/test/java/com/mysema/query/spatial/HibernateSpatialSupport.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java similarity index 94% rename from querydsl-spatial/src/test/java/com/mysema/query/spatial/HibernateSpatialSupport.java rename to querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java index 8ae00df5de..37c21ed155 100644 --- a/querydsl-spatial/src/test/java/com/mysema/query/spatial/HibernateSpatialSupport.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java @@ -11,16 +11,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.spatial; +package com.mysema.query.spatial.hibernate; + +import java.util.Map; import com.google.common.collect.Maps; +import com.mysema.query.spatial.SpatialOps; import com.mysema.query.types.Operator; -import java.util.Map; - public class HibernateSpatialSupport { - public static Map, String> getSpatialOps(String prefix, boolean asFunction) { + public static Map, String> getSpatialOps() { Map, String> ops = Maps.newHashMap(); ops.put(SpatialOps.DIMENSION, "dimension({0})"); ops.put(SpatialOps.GEOMETRY_TYPE, "geometrytype({0}, {1})"); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 4ad35368a3..be7e136f69 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -428,12 +428,6 @@ protected void addTypeNameToCode(String type, int code) { addTypeNameToCode(type, code, false); } - protected void add(Map, String> ops) { - for (Map.Entry, String> entry : ops.entrySet()) { - add(entry.getKey(), entry.getValue()); - } - } - protected void addTableOverride(SchemaAndTable from, SchemaAndTable to) { tableOverrides.put(from, to); } From 533be55d9a6071ecb34fe6af0fb36e356a82cb8d Mon Sep 17 00:00:00 2001 From: John Tims Date: Sat, 13 Sep 2014 14:57:09 -0400 Subject: [PATCH 0377/1968] Synchronize class generation to prevent corruption --- src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java index faed3055da..1cd5cc0485 100644 --- a/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java +++ b/src/main/java/com/mysema/codegen/AbstractEvaluatorFactory.java @@ -114,7 +114,7 @@ public Evaluator createEvaluator(String source, Class projec */ @SuppressWarnings("unchecked") @Override - public Evaluator createEvaluator(String source, ClassType projection, String[] names, + public synchronized Evaluator createEvaluator(String source, ClassType projection, String[] names, Type[] types, Class[] classes, Map constants) { try { final String id = toId(source, projection.getJavaClass(), types, constants.values()); From 11980c59a46ba22a3cab3cf384503503b347f0ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 21:47:45 +0300 Subject: [PATCH 0378/1968] Upgrade Guava version to 18.0 --- querydsl-root/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 4d2f0c6b6c..ff619fac27 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -39,7 +39,7 @@ 13.10.00.35 2.2.5 - 14.0 + 18.0 0.6.3 0.2.4 2.2.2 @@ -373,7 +373,7 @@ opengeo - http://repo.opengeo.org + http://repo.boundlessgeo.com nexus From cca8e9b2647c1d9feeae1ba391ff8676112463ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 21:48:38 +0300 Subject: [PATCH 0379/1968] Update API usage --- querydsl-core/src/test/java/com/mysema/testutil/Runner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-core/src/test/java/com/mysema/testutil/Runner.java b/querydsl-core/src/test/java/com/mysema/testutil/Runner.java index fb0b05fbdf..9b7fd1e590 100644 --- a/querydsl-core/src/test/java/com/mysema/testutil/Runner.java +++ b/querydsl-core/src/test/java/com/mysema/testutil/Runner.java @@ -30,7 +30,7 @@ public static void run(String label, Benchmark benchmark) throws Exception { System.err.print("- "); // perform timing - Stopwatch stopwatch = new Stopwatch().start(); + Stopwatch stopwatch = Stopwatch.createStarted(); benchmark.run(BENCHMARK); System.err.println(label + " " + stopwatch.stop().toString()); } From b0e11100818d5546e3a218eec8430022d810c732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 21:48:47 +0300 Subject: [PATCH 0380/1968] Ignore Batoo test --- .../src/test/java/com/mysema/query/suites/H2BatooTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/suites/H2BatooTest.java b/querydsl-jpa/src/test/java/com/mysema/query/suites/H2BatooTest.java index 36d57e423c..612f9da7a4 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/suites/H2BatooTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/suites/H2BatooTest.java @@ -1,14 +1,15 @@ package com.mysema.query.suites; -import org.junit.BeforeClass; - import com.mysema.query.JPABase; import com.mysema.query.JPASQLBase; import com.mysema.query.Mode; import com.mysema.query.Target; import com.mysema.query.jpa.JPAIntegrationBase; import com.mysema.query.jpa.SerializationBase; +import org.junit.BeforeClass; +import org.junit.Ignore; +@Ignore public class H2BatooTest extends AbstractJPASuite { public static class JPA extends JPABase {} From 9af62a892597728dff45f92e88854ae6668c2bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 21:51:43 +0300 Subject: [PATCH 0381/1968] Bump Guava version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d13bcfb24b..dda798e9d7 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ com.google.guava guava - 11.0.2 + 18.0 From cf5add2a3ce5912170551df1e1cc0a36cb2ba07c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 22:02:39 +0300 Subject: [PATCH 0382/1968] Bump version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dda798e9d7..c23b0bf565 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.6.3 + 0.6.4 Codegen Code generation and compilation for Java From 38968611bb96ca71344f4f3cd3b5520c74365d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 22:10:15 +0300 Subject: [PATCH 0383/1968] Bump codegen version --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 4d2f0c6b6c..d51afc94c3 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -40,7 +40,7 @@ 2.2.5 14.0 - 0.6.3 + 0.6.4 0.2.4 2.2.2 1.3.2 From 759875961094288d9943e10c7fe035bbe636fec0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 22:15:01 +0300 Subject: [PATCH 0384/1968] Fix repo url --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ff619fac27..3ef732dda7 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -373,7 +373,7 @@ opengeo - http://repo.boundlessgeo.com + http://repo.boundlessgeo.com/main nexus From d3bd6876644c228aecbf1fa30360450daaac2dc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 22:34:49 +0300 Subject: [PATCH 0385/1968] Bump geodb version --- querydsl-sql/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 231e398e13..a804c656f8 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -134,7 +134,7 @@ org.opengeo geodb - 0.7 + 0.8 test @@ -331,4 +331,4 @@ - + From 3d4998f19e1ffd9438ba9eef0394a6ee219935ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Sep 2014 22:43:26 +0300 Subject: [PATCH 0386/1968] Bump geodb version --- querydsl-sql-codegen/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index b21c2b31b7..c1436ba30e 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -109,7 +109,7 @@ org.opengeo geodb - 0.7 + 0.8 test @@ -219,4 +219,4 @@ - + From 3d2124d77131c69255bd03b5556bd1c5dd82c327 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 17 Sep 2014 23:07:59 +0200 Subject: [PATCH 0387/1968] Update semantic versioning enforcer rule --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 4d2f0c6b6c..b62cc41501 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -228,7 +228,7 @@ org.semver enforcer-rule - 0.9.26 + 0.9.27 From a7897ca8c38a63f78ea4b562a166d268b95d69fa Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 18 Sep 2014 09:30:31 +0200 Subject: [PATCH 0388/1968] Remove unchecked behaviour in MathUtils.cast -use dynamic casting to ensure typesafety -shortcircuit if the Number already has the desired type --- .../main/java/com/mysema/util/MathUtils.java | 35 ++++++++----------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/util/MathUtils.java b/querydsl-core/src/main/java/com/mysema/util/MathUtils.java index 223a80ca61..2fcb05b96f 100644 --- a/querydsl-core/src/main/java/com/mysema/util/MathUtils.java +++ b/querydsl-core/src/main/java/com/mysema/util/MathUtils.java @@ -38,38 +38,33 @@ public static D difference(D num1, Number num2) { return MathUtils.cast(res, (Class)num1.getClass()); } - @SuppressWarnings("unchecked") public static D cast(Number num, Class type) { - Number rv; - if (type.equals(Byte.class)) { - rv = num.byteValue(); + D rv; + if (type.isInstance(num)) { + rv = type.cast(num); + } else if (type.equals(Byte.class)) { + rv = type.cast(num.byteValue()); } else if (type.equals(Double.class)) { - rv = num.doubleValue(); + rv = type.cast(num.doubleValue()); } else if (type.equals(Float.class)) { - rv = num.floatValue(); + rv = type.cast(num.floatValue()); } else if (type.equals(Integer.class)) { - rv = num.intValue(); + rv = type.cast(num.intValue()); } else if (type.equals(Long.class)) { - rv = num.longValue(); + rv = type.cast(num.longValue()); } else if (type.equals(Short.class)) { - rv = num.shortValue(); + rv = type.cast(num.shortValue()); } else if (type.equals(BigDecimal.class)) { - if (num instanceof BigDecimal) { - rv = num; - } else { - rv = new BigDecimal(num.toString()); - } + rv = type.cast(new BigDecimal(num.toString())); } else if (type.equals(BigInteger.class)) { - if (num instanceof BigInteger) { - rv = num; - } else if (num instanceof BigDecimal) { - rv = ((BigDecimal)num).toBigInteger(); + if (num instanceof BigDecimal) { + rv = type.cast(((BigDecimal) num).toBigInteger()); } else { - rv = new BigInteger(num.toString()); + rv = type.cast(new BigInteger(num.toString())); } } else { throw new IllegalArgumentException(String.format("Illegal type : %s", type.getSimpleName())); } - return (D) rv; + return rv; } } From 3a25a2184daebbb77c464cd747d9811aad260512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Sep 2014 21:47:13 +0300 Subject: [PATCH 0389/1968] Revert version bump --- querydsl-root/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 3ef732dda7..c04dc763b3 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -373,7 +373,7 @@ opengeo - http://repo.boundlessgeo.com/main + http://download.osgeo.org/webdav/geotools nexus diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index c1436ba30e..7225bb16ba 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -109,7 +109,7 @@ org.opengeo geodb - 0.8 + 0.7 test diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index a804c656f8..cb036f271e 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -134,7 +134,7 @@ org.opengeo geodb - 0.8 + 0.7 test From b3d4232ab9f57f0f9ec7e01dde402f3b02238159 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Sep 2014 22:23:02 +0300 Subject: [PATCH 0390/1968] Add repository --- querydsl-root/pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index c04dc763b3..2280328e0f 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -375,6 +375,10 @@ opengeo http://download.osgeo.org/webdav/geotools + + mapfish + http://dev.mapfish.org/maven/repository/repository + nexus https://maven.nuxeo.org/nexus/content/groups/public From b801f8bbc66892a7e4b3d0c0d8e16460fa25b95c Mon Sep 17 00:00:00 2001 From: Samppa Saarela Date: Fri, 19 Sep 2014 13:34:27 +0300 Subject: [PATCH 0391/1968] Fix Polygon import Use Geolatte Polygon instead of java.awt.Polygon. --- .../main/java/com/mysema/query/sql/codegen/SpatialSupport.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SpatialSupport.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SpatialSupport.java index 6b3b2b630b..c22e98341d 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SpatialSupport.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/SpatialSupport.java @@ -13,7 +13,6 @@ */ package com.mysema.query.sql.codegen; -import java.awt.Polygon; import java.util.Map; import java.util.Set; @@ -25,6 +24,7 @@ import org.geolatte.geom.MultiPoint; import org.geolatte.geom.MultiPolygon; import org.geolatte.geom.Point; +import org.geolatte.geom.Polygon; import org.geolatte.geom.PolyHedralSurface; import com.google.common.collect.ImmutableSet; From 2719564c8dc8c75134ce48d8d4c11c295cff7ff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Sep 2014 22:14:42 +0300 Subject: [PATCH 0392/1968] Fix cubrid dependency --- .travis.yml | 1 + travis/CUBRID-8.4.0_jdbc.jar | Bin 0 -> 183454 bytes travis/maven.sh | 4 ++++ 3 files changed, 5 insertions(+) create mode 100644 travis/CUBRID-8.4.0_jdbc.jar create mode 100755 travis/maven.sh diff --git a/.travis.yml b/.travis.yml index 4fc4346257..950edc2b4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ before_script: - mysql -u root -e "source travis/mysql.sql" - psql -U postgres -f travis/postgresql.sql - psql -c 'create extension postgis;' -d querydsl -U postgres + - ./travis/maven.sh - ./travis/cubrid.sh - ./travis/firebird.sh script: diff --git a/travis/CUBRID-8.4.0_jdbc.jar b/travis/CUBRID-8.4.0_jdbc.jar new file mode 100644 index 0000000000000000000000000000000000000000..952af2127b39137850db653972e1003e9f12e1c3 GIT binary patch literal 183454 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
I33P~ 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 LtmS~egu(s?NSo-W literal 0 HcmV?d00001 diff --git a/travis/maven.sh b/travis/maven.sh new file mode 100755 index 0000000000..da5198ef15 --- /dev/null +++ b/travis/maven.sh @@ -0,0 +1,4 @@ +#!/bin/sh +wget http://ftp.cubrid.org/CUBRID_Drivers/JDBC_Driver/CUBRID-8.4.0_jdbc.jar +mvn install:install-file -Dfile=CUBRID-8.4.0_jdbc.jar -DgroupId=cubrid -DartifactId=cubrid-jdbc -Dversion=8.4.0 -Dpackaging=jar + From 37c84da4702f90244ded78110652be93bf5e26f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Sep 2014 22:15:59 +0300 Subject: [PATCH 0393/1968] Remove jar --- travis/CUBRID-8.4.0_jdbc.jar | Bin 183454 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 travis/CUBRID-8.4.0_jdbc.jar diff --git a/travis/CUBRID-8.4.0_jdbc.jar b/travis/CUBRID-8.4.0_jdbc.jar deleted file mode 100644 index 952af2127b39137850db653972e1003e9f12e1c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183454 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 LtmS~egu(s?NSo-W From 6a7dde84cf44798a815775acff725ac7a8c9aca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Sep 2014 22:31:06 +0300 Subject: [PATCH 0394/1968] Comment cubrid repository entry out --- querydsl-sql/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index cb036f271e..53fb1fe9dd 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -320,10 +320,12 @@ + datanucleus From 639f4127c456e90697264d2832269c7fb84e31e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Sep 2014 22:41:39 +0300 Subject: [PATCH 0395/1968] Move maven.sh invocation --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 950edc2b4b..1c169eecc6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,12 +7,12 @@ services: addons: postgresql: "9.3" install: + - ./travis/maven.sh - sh -c 'cd querydsl-root && mvn -B -q install -Dmaven.javadoc.skip=true -DskipTests=true' before_script: - mysql -u root -e "source travis/mysql.sql" - psql -U postgres -f travis/postgresql.sql - psql -c 'create extension postgis;' -d querydsl -U postgres - - ./travis/maven.sh - ./travis/cubrid.sh - ./travis/firebird.sh script: From bd716f53274b6d737572470bfff8f791aa7580ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Sep 2014 23:21:02 +0300 Subject: [PATCH 0396/1968] Upgrade Geolatte --- querydsl-spatial/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index b0a2c2c150..4685fd2478 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -24,7 +24,7 @@ org.geolatte geolatte-geom - 0.11 + 0.13 @@ -72,4 +72,4 @@ 1.11 - + From 6c832e771b0a911b71488919e3d889570c175458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Sep 2014 18:06:54 +0300 Subject: [PATCH 0397/1968] Update API usage --- .../query/sql/spatial/GeoDBWkbType.java | 6 +-- .../query/sql/spatial/GeometryWkbType.java | 6 +-- .../sql/spatial/GeometryWktClobType.java | 6 +-- .../query/sql/spatial/GeometryWktType.java | 6 +-- .../query/sql/spatial/JGeometryConverter.java | 38 +++++-------------- .../query/sql/spatial/MySQLWkbType.java | 6 +-- .../sql/spatial/PGgeometryConverter.java | 9 +++-- .../query/sql/spatial/PGgeometryType.java | 2 +- .../sql/spatial/SQLServerGeometryReader.java | 26 +++++++------ .../sql/spatial/SQLServerGeometryType.java | 2 +- .../com/mysema/query/ConnectionsTest.java | 5 +-- .../sql/spatial/AbstractConverterTest.java | 14 +++---- 12 files changed, 56 insertions(+), 70 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java index c426aef753..4e42c43f5e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java @@ -59,7 +59,7 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { } else { wkb = bytes; } - WkbDecoder decoder = Wkb.newWkbDecoder(Wkb.Dialect.POSTGIS_EWKB_1); + WkbDecoder decoder = Wkb.newDecoder(Wkb.Dialect.POSTGIS_EWKB_1); return decoder.decode(ByteBuffer.from(wkb)); } else { return null; @@ -68,14 +68,14 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { @Override public void setValue(PreparedStatement st, int startIndex, Geometry value) throws SQLException { - WkbEncoder encoder = Wkb.newWkbEncoder(Wkb.Dialect.POSTGIS_EWKB_1); + WkbEncoder encoder = Wkb.newEncoder(Wkb.Dialect.POSTGIS_EWKB_1); ByteBuffer buffer = encoder.encode(value, byteOrder); st.setBytes(startIndex, buffer.toByteArray()); } @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); if (geometry.getSRID() > -1) { return "ST_GeomFromText('" + str + "', " + geometry.getSRID() + ")"; } else { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java index f5856567a3..cafe65ad49 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java @@ -55,7 +55,7 @@ public Class getReturnedClass() { public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { byte[] bytes = rs.getBytes(startIndex); if (bytes != null) { - WkbDecoder decoder = Wkb.newWkbDecoder(Wkb.Dialect.POSTGIS_EWKB_1); + WkbDecoder decoder = Wkb.newDecoder(Wkb.Dialect.POSTGIS_EWKB_1); return decoder.decode(ByteBuffer.from(bytes)); } else { return null; @@ -64,14 +64,14 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { @Override public void setValue(PreparedStatement st, int startIndex, Geometry value) throws SQLException { - WkbEncoder encoder = Wkb.newWkbEncoder(Wkb.Dialect.POSTGIS_EWKB_1); + WkbEncoder encoder = Wkb.newEncoder(Wkb.Dialect.POSTGIS_EWKB_1); ByteBuffer buffer = encoder.encode(value, byteOrder); st.setBytes(startIndex, buffer.toByteArray()); } @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); return "'" + str + "'"; } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java index 8309de5173..941ab62291 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java @@ -43,7 +43,7 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { Clob clob = rs.getClob(startIndex); String str = clob != null ? clob.getSubString(1, (int) clob.length()) : null; if (str != null) { - return Wkt.newWktDecoder(Wkt.Dialect.POSTGIS_EWKT_1).decode(str); + return Wkt.newDecoder(Wkt.Dialect.POSTGIS_EWKT_1).decode(str); } else { return null; } @@ -51,13 +51,13 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { @Override public void setValue(PreparedStatement st, int startIndex, Geometry value) throws SQLException { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(value); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(value); st.setString(startIndex, str); } @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); return "'" + str + "'"; } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java index d3bd8e2977..00abee4705 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java @@ -45,7 +45,7 @@ public Class getReturnedClass() { public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { String str = rs.getString(startIndex); if (str != null) { - return Wkt.newWktDecoder(Wkt.Dialect.POSTGIS_EWKT_1).decode(str); + return Wkt.newDecoder(Wkt.Dialect.POSTGIS_EWKT_1).decode(str); } else { return null; } @@ -53,13 +53,13 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { @Override public void setValue(PreparedStatement st, int startIndex, Geometry value) throws SQLException { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(value); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(value); st.setString(startIndex, str); } @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); return "'" + str + "'"; } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/JGeometryConverter.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/JGeometryConverter.java index 20df004615..9fce259dd9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/JGeometryConverter.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/JGeometryConverter.java @@ -13,30 +13,11 @@ */ package com.mysema.query.sql.spatial; -import static oracle.spatial.geometry.JGeometry.GTYPE_COLLECTION; -import static oracle.spatial.geometry.JGeometry.GTYPE_CURVE; -import static oracle.spatial.geometry.JGeometry.GTYPE_MULTICURVE; -import static oracle.spatial.geometry.JGeometry.GTYPE_MULTIPOINT; -import static oracle.spatial.geometry.JGeometry.GTYPE_MULTIPOLYGON; -import static oracle.spatial.geometry.JGeometry.GTYPE_POINT; -import static oracle.spatial.geometry.JGeometry.GTYPE_POLYGON; import oracle.spatial.geometry.JGeometry; - -import org.geolatte.geom.DimensionalFlag; -import org.geolatte.geom.Geometry; -import org.geolatte.geom.GeometryCollection; -import org.geolatte.geom.LineString; -import org.geolatte.geom.LinearRing; -import org.geolatte.geom.MultiLineString; -import org.geolatte.geom.MultiPoint; -import org.geolatte.geom.MultiPolygon; +import org.geolatte.geom.*; import org.geolatte.geom.Point; -import org.geolatte.geom.PointCollection; -import org.geolatte.geom.PointCollectionFactory; -import org.geolatte.geom.PointSequence; -import org.geolatte.geom.PolyHedralSurface; -import org.geolatte.geom.Polygon; import org.geolatte.geom.crs.CrsId; +import static oracle.spatial.geometry.JGeometry.*; /** * @author tiwe @@ -192,11 +173,12 @@ public static Geometry convert(JGeometry geometry) { } private static PointSequence getPoints(JGeometry geometry) { + CrsId crs = CrsId.valueOf(geometry.getSRID()); int dimensions = geometry.getDimensions(); boolean measured = geometry.isLRSGeometry(); DimensionalFlag flag = DimensionalFlag.valueOf(dimensions > (measured ? 3 : 2), measured); double[] ordinates = geometry.getOrdinatesArray(); - return PointCollectionFactory.create(ordinates, flag); + return PointCollectionFactory.create(ordinates, flag, crs); } private static Polygon convertPolygon(JGeometry geometry) { @@ -207,8 +189,8 @@ private static Polygon convertPolygon(JGeometry geometry) { Object[] elements = geometry.getOrdinatesOfElements(); LinearRing[] rings = new LinearRing[elements.length]; for (int i = 0; i < elements.length; i++) { - PointSequence points = PointCollectionFactory.create((double[]) elements[i], flag); - rings[i] = new LinearRing(points, crs); + PointSequence points = PointCollectionFactory.create((double[]) elements[i], flag, crs); + rings[i] = new LinearRing(points); } return new Polygon(rings); } @@ -219,13 +201,13 @@ private static Point convertPoint(JGeometry geometry) { int dimensions = geometry.getDimensions(); boolean measured = geometry.isLRSGeometry(); DimensionalFlag flag = DimensionalFlag.valueOf(dimensions > (measured ? 3 : 2), measured); - return new Point(PointCollectionFactory.create(point, flag), crs); + return new Point(PointCollectionFactory.create(point, flag, crs)); } private static LineString convertCurve(JGeometry geometry) { CrsId crs = CrsId.valueOf(geometry.getSRID()); PointSequence points = getPoints(geometry); - return new LineString(points, crs); + return new LineString(points); } private static MultiPoint convertMultiPoint(JGeometry geometry) { @@ -243,7 +225,7 @@ private static MultiPoint convertMultiPoint(JGeometry geometry) { for (int i = 0; i < points.length; i++) { double[] coords = new double[dimensions]; System.arraycopy(ordinates, offset, coords, 0, coords.length); - points[i] = new Point(PointCollectionFactory.create(coords, flag), crs); + points[i] = new Point(PointCollectionFactory.create(coords, flag, crs)); offset += dimensions; } return new MultiPoint(points); @@ -272,7 +254,7 @@ private static MultiLineString convertMultiCurve(JGeometry geometry) { LineString[] lineStrings = new LineString[elements.length]; for (int i = 0; i < elements.length; i++) { PointSequence points = getPoints(elements[i]); - lineStrings[i] = new LineString(points, crs); + lineStrings[i] = new LineString(points); } return new MultiLineString(lineStrings); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLWkbType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLWkbType.java index 8f19c6cbbe..0d9d3c345b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLWkbType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLWkbType.java @@ -56,7 +56,7 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { System.arraycopy(bytes, 4, wkb, 0, wkb.length); int srid = bytes[3] << 24 | (bytes[2] & 0xff) << 16 | (bytes[1] & 0xff) << 8 | (bytes[0] & 0xff); // TODO make sure srid is set - WkbDecoder decoder = Wkb.newWkbDecoder(Wkb.Dialect.POSTGIS_EWKB_1); + WkbDecoder decoder = Wkb.newDecoder(Wkb.Dialect.POSTGIS_EWKB_1); return decoder.decode(ByteBuffer.from(wkb)); } else { return null; @@ -65,7 +65,7 @@ public Geometry getValue(ResultSet rs, int startIndex) throws SQLException { @Override public void setValue(PreparedStatement st, int startIndex, Geometry value) throws SQLException { - WkbEncoder encoder = Wkb.newWkbEncoder(Wkb.Dialect.POSTGIS_EWKB_1); + WkbEncoder encoder = Wkb.newEncoder(Wkb.Dialect.POSTGIS_EWKB_1); ByteBuffer buffer = encoder.encode(value, byteOrder); int srid = value.getSRID(); @@ -83,7 +83,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); if (geometry.getSRID() > -1) { return "GeomFromText('" + str + "', " + geometry.getSRID() + ")"; } else { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryConverter.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryConverter.java index 489d9e4159..5532271302 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryConverter.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryConverter.java @@ -196,7 +196,7 @@ private static Point convert(org.postgis.Point geometry) { point[offset++] = geometry.m; } DimensionalFlag flag = DimensionalFlag.valueOf(d == 3, geometry.haveMeasure); - return new Point(PointCollectionFactory.create(point, flag), crs); + return new Point(PointCollectionFactory.create(point, flag, crs)); } private static PointSequence convertPoints(org.postgis.Point[] points) { @@ -204,8 +204,9 @@ private static PointSequence convertPoints(org.postgis.Point[] points) { return PointCollectionFactory.createEmpty(); } org.postgis.Point first = points[0]; + CrsId crs = CrsId.valueOf(first.srid); DimensionalFlag flag = DimensionalFlag.valueOf(first.dimension == 3, first.haveMeasure); - PointSequenceBuilder pointSequence = PointSequenceBuilders.variableSized(flag); + PointSequenceBuilder pointSequence = PointSequenceBuilders.variableSized(flag, crs); for (int i = 0; i < points.length; i++) { pointSequence.add(convert(points[i])); } @@ -254,13 +255,13 @@ private static Polygon convert(org.postgis.Polygon geometry) { private static LinearRing convert(org.postgis.LinearRing geometry) { PointSequence points = convertPoints(geometry.getPoints()); - return new LinearRing(points, CrsId.valueOf(geometry.getSrid())); + return new LinearRing(points); } private static LineString convert(org.postgis.LineString geometry) { PointSequence points = convertPoints(geometry.getPoints()); - return new LineString(points, CrsId.valueOf(geometry.getSrid())); + return new LineString(points); } private PGgeometryConverter() {} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java index ba658b4ffc..f35847f107 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java @@ -56,7 +56,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); return "'" + str + "'"; } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryReader.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryReader.java index a5de8315f4..b0a0dc1072 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryReader.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryReader.java @@ -107,15 +107,19 @@ public Geometry read(InStream is) throws IOException { } else if (!singlePoint) { numberOfPoints = dis.readInt(); } - dimensionalFlag = DimensionalFlag.XY; + //dimensionalFlag = DimensionalFlag.XY; + dimensionalFlag = DimensionalFlag.d2D; if (hasM) { if (hasZ) { - dimensionalFlag = DimensionalFlag.XYZM; + //dimensionalFlag = DimensionalFlag.XYZM; + dimensionalFlag = DimensionalFlag.d3DM; } else { - dimensionalFlag = DimensionalFlag.XYM; + //dimensionalFlag = DimensionalFlag.XYM; + dimensionalFlag = DimensionalFlag.d2DM; } } else if (hasZ) { - dimensionalFlag = DimensionalFlag.XYZ; + //dimensionalFlag = DimensionalFlag.XYZ; + dimensionalFlag = DimensionalFlag.d3D; } // points @@ -133,7 +137,7 @@ public Geometry read(InStream is) throws IOException { } else if (singleLine) { PointSequence points = createPoints(0, 2); - return new LineString(points, crsId); + return new LineString(points); } else { // figures @@ -211,14 +215,14 @@ private Polygon decodePolygon(int shapeIdx) { } List linearRings = Lists.newArrayList(); for (int i = figureOffset; i <= figureStopIdx; i++) { - linearRings.add(new LinearRing(createPoints(i), crsId)); + linearRings.add(new LinearRing(createPoints(i))); } return new Polygon(linearRings.toArray(new LinearRing[0])); } private LineString decodeLineString(int shapeIdx) { Shape shape = shapes[shapeIdx]; - return new LineString(createPoints(shape.figureOffset), crsId); + return new LineString(createPoints(shape.figureOffset)); } private Point decodePoint(int shapeIdx) { @@ -231,19 +235,19 @@ private Point createPoint(int idx) { double y = points[idx][1]; if (hasM) { if (hasZ) { - return Points.create(x, y, zValues[idx], mValues[idx], crsId); + return Points.create3DM(x, y, zValues[idx], mValues[idx], crsId); } else { - return Points.createMeasured(x, y, mValues[idx], crsId); + return Points.create2DM(x, y, mValues[idx], crsId); } } else if (hasZ) { return Points.create3D(x, y, zValues[idx], crsId); } else { - return Points.create(x, y, crsId); + return Points.create2D(x, y, crsId); } } private PointSequence createPoints(int idx1, int idx2) { - PointSequenceBuilder builder = PointSequenceBuilders.fixedSized(idx2 - idx1, dimensionalFlag); + PointSequenceBuilder builder = PointSequenceBuilders.fixedSized(idx2 - idx1, dimensionalFlag, crsId); for (int i = idx1; i < idx2; i++) { builder.add(createPoint(i)); } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryType.java index d98268a9bf..e74f8b1629 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServerGeometryType.java @@ -68,7 +68,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newWktEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); if (geometry.getSRID() > -1) { return "geometry::STGeomFromText('" + str + "', " + geometry.getSRID() + ")"; } else { diff --git a/querydsl-sql/src/test/java/com/mysema/query/ConnectionsTest.java b/querydsl-sql/src/test/java/com/mysema/query/ConnectionsTest.java index 78a8cfa6e9..2c66ca7f15 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/ConnectionsTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/ConnectionsTest.java @@ -1,16 +1,15 @@ package com.mysema.query; -import static org.junit.Assert.assertNotNull; - import org.geolatte.geom.codec.Wkt; import org.junit.Test; +import static org.junit.Assert.assertNotNull; public class ConnectionsTest { @Test public void Valid_Wkt() { for (String wkt : Connections.getSpatialData().values()) { - assertNotNull(Wkt.newWktDecoder(Wkt.Dialect.POSTGIS_EWKT_1).decode(wkt)); + assertNotNull(Wkt.newDecoder(Wkt.Dialect.POSTGIS_EWKT_1).decode(wkt)); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java index ffbb121057..ecb437502f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java @@ -22,8 +22,8 @@ public abstract class AbstractConverterTest { - protected PointSequence createSequence(Point... points) { - PointSequenceBuilder builder = PointSequenceBuilders.fixedSized(points.length, points[0].getDimensionalFlag()); + protected PointSequence createSequence(CrsId crs, Point... points) { + PointSequenceBuilder builder = PointSequenceBuilders.fixedSized(points.length, points[0].getDimensionalFlag(), crs); for (Point point : points) { builder.add(point); } @@ -35,17 +35,17 @@ protected List getGeometries() { List data = Lists.newArrayList(); // points // data.add(Points.createEmpty()); - data.add(Points.create(1, 2)); - data.add(Points.create(1, 2, crs)); + data.add(Points.create2D(1, 2)); + data.add(Points.create2D(1, 2, crs)); data.add(Points.create3D(1, 2, 3)); data.add(Points.create3D(1, 2, 3, crs)); - data.add(Points.createMeasured(1, 2, 3)); - data.add(Points.createMeasured(1, 2, 3, crs)); + data.add(Points.create2DM(1, 2, 3)); + data.add(Points.create2DM(1, 2, 3, crs)); // linestring data.add(LineString.createEmpty()); for (int i = 0; i < 6; i++) { - data.add(new LineString(createSequence((Point)data.get(i)), crs)); + data.add(new LineString(createSequence(crs, (Point)data.get(i)))); } // polgyon From b07c6f49bb7ab6c53ad0a3d33b0058c0b5690e6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Sep 2014 20:30:34 +0300 Subject: [PATCH 0398/1968] Fix LineString constraints --- .../com/mysema/query/sql/spatial/AbstractConverterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java index ecb437502f..dee8f0eda2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/spatial/AbstractConverterTest.java @@ -45,7 +45,7 @@ protected List getGeometries() { // linestring data.add(LineString.createEmpty()); for (int i = 0; i < 6; i++) { - data.add(new LineString(createSequence(crs, (Point)data.get(i)))); + data.add(new LineString(createSequence(crs, (Point)data.get(i), (Point)data.get(i)))); } // polgyon From 5f7303ea34cf9c9b07241c865c829087f1b81504 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Sep 2014 21:35:37 +0300 Subject: [PATCH 0399/1968] Add test case --- .../mysema/query/domain/CollectionTest.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java index ece0949574..d12a8f65c1 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/CollectionTest.java @@ -13,14 +13,10 @@ */ package com.mysema.query.domain; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.junit.Test; +import java.util.*; import com.mysema.query.annotations.QueryEntity; +import org.junit.Test; public class CollectionTest { @@ -51,6 +47,29 @@ public static class Person { Set set2; } + + @QueryEntity + public static class Classes { + + HashMap map1; + + HashMap map2; + + HashMap map3; + + ArrayList list1; + + ArrayList list2; + + ArrayList list3; + + HashSet set1; + + HashSet set2; + + HashSet set3; + + } @Test public void test() { From 64eaff40fea95082cf9f60e9251927ddb66cbbc1 Mon Sep 17 00:00:00 2001 From: John Tims Date: Sat, 20 Sep 2014 14:47:52 -0400 Subject: [PATCH 0400/1968] Fix typo --- querydsl-core/src/main/java/com/mysema/util/Annotations.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/mysema/util/Annotations.java b/querydsl-core/src/main/java/com/mysema/util/Annotations.java index bcfcd9e9f6..cb6b87be00 100644 --- a/querydsl-core/src/main/java/com/mysema/util/Annotations.java +++ b/querydsl-core/src/main/java/com/mysema/util/Annotations.java @@ -21,7 +21,7 @@ import javax.annotation.Nullable; /** - * Annotations is a merging apapter for the {@link AnnotatedElement} interface + * Annotations is a merging adapter for the {@link AnnotatedElement} interface * * @author tiwe * From 79aad5fc5915804ad3c855bbcb585a2163faa20d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Sep 2014 21:51:20 +0300 Subject: [PATCH 0401/1968] Better key handling --- .../mysema/query/sql/dml/SQLMergeClause.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 1a733e9e5e..84a474bdb4 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -97,6 +97,16 @@ public SQLMergeClause addFlag(Position position, Expression flag) { metadata.addFlag(new QueryFlag(position, flag)); return this; } + + private List> getKeys() { + if (!keys.isEmpty()) { + return keys; + } else if (entity.getPrimaryKey() != null) { + return entity.getPrimaryKey().getLocalColumns(); + } else { + throw new IllegalStateException("No keys where defined, invoke keys(..) to add keys"); + } + } /** * Add the current state of bindings as a batch item @@ -243,7 +253,7 @@ public void close() throws SQLException { // update SQLUpdateClause update = new SQLUpdateClause(connection, configuration.getTemplates(), entity); populate(update); - update.where(ExpressionUtils.in((Expression)keys.get(0),ids)); + update.where(ExpressionUtils.in((Expression)getKeys().get(0),ids)); return EmptyResultSet.DEFAULT; } else { // insert @@ -296,7 +306,7 @@ private List getIds() { query.where(ExpressionUtils.eq(columns.get(i),(Expression)values.get(i))); } } - return query.list(keys.get(0)); + return query.list(getKeys().get(0)); } @SuppressWarnings("unchecked") @@ -306,7 +316,7 @@ private long executeCompositeMerge() { // update SQLUpdateClause update = new SQLUpdateClause(connection, configuration.getTemplates(), entity); populate(update); - update.where(ExpressionUtils.in((Expression)keys.get(0),ids)); + update.where(ExpressionUtils.in((Expression)getKeys().get(0),ids)); return update.execute(); } else { // insert @@ -411,7 +421,7 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali if (withKeys) { String[] target = new String[keys.size()]; for (int i = 0; i < target.length; i++) { - target[i] = ColumnMetadata.getName(keys.get(i)); + target[i] = ColumnMetadata.getName(getKeys().get(i)); } stmt = connection.prepareStatement(queryString, target); } else { From c2a19cdad6343e696038fd7583c9876e69ea6d01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Sep 2014 23:36:39 +0300 Subject: [PATCH 0402/1968] Fix typo --- .../src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 84a474bdb4..86edfa1855 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -104,7 +104,7 @@ private List> getKeys() { } else if (entity.getPrimaryKey() != null) { return entity.getPrimaryKey().getLocalColumns(); } else { - throw new IllegalStateException("No keys where defined, invoke keys(..) to add keys"); + throw new IllegalStateException("No keys were defined, invoke keys(..) to add keys"); } } From 8758b1f0bf0e6faf32af18bc45cafd5d8eb8c605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 21 Sep 2014 21:11:54 +0300 Subject: [PATCH 0403/1968] Fix SQLMergeClause keys handling --- .../mysema/query/sql/dml/SQLMergeClause.java | 36 ++++++++++--------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index 86edfa1855..9e7baf3303 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -19,11 +19,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.JoinType; -import com.mysema.query.QueryFlag; +import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; -import com.mysema.query.QueryMetadata; import com.mysema.query.dml.StoreClause; import com.mysema.query.sql.*; import com.mysema.query.sql.types.Null; @@ -32,6 +29,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** /** * SQLMergeClause defines an MERGE INTO clause * @@ -248,12 +246,11 @@ public void close() throws SQLException { } }; } else { - List ids = getIds(); - if (!ids.isEmpty()) { + if (hasRow()) { // update SQLUpdateClause update = new SQLUpdateClause(connection, configuration.getTemplates(), entity); populate(update); - update.where(ExpressionUtils.in((Expression)getKeys().get(0),ids)); + addKeyConditions(update); return EmptyResultSet.DEFAULT; } else { // insert @@ -296,27 +293,32 @@ public List getSQL() { } } - private List getIds() { - // select + private boolean hasRow() { SQLQuery query = new SQLQuery(connection, configuration.getTemplates()).from(entity); + addKeyConditions(query); + return query.exists(); + } + + private void addKeyConditions(FilteredClause query) { + List> keys = getKeys(); for (int i=0; i < columns.size(); i++) { - if (values.get(i) instanceof NullExpression) { - query.where(ExpressionUtils.isNull(columns.get(i))); - } else { - query.where(ExpressionUtils.eq(columns.get(i),(Expression)values.get(i))); + if (keys.contains(columns.get(i))) { + if (values.get(i) instanceof NullExpression) { + query.where(ExpressionUtils.isNull(columns.get(i))); + } else { + query.where(ExpressionUtils.eq(columns.get(i),(Expression)values.get(i))); + } } } - return query.list(getKeys().get(0)); } @SuppressWarnings("unchecked") private long executeCompositeMerge() { - List ids = getIds(); - if (!ids.isEmpty()) { + if (hasRow()) { // update SQLUpdateClause update = new SQLUpdateClause(connection, configuration.getTemplates(), entity); populate(update); - update.where(ExpressionUtils.in((Expression)getKeys().get(0),ids)); + addKeyConditions(update); return update.execute(); } else { // insert From 4573cb8c4f123169afa654b1aff427ff60bb5f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 21 Sep 2014 21:31:26 +0300 Subject: [PATCH 0404/1968] Use single repository for external dependencies --- .travis.yml | 1 - querydsl-root/pom.xml | 10 ++++++---- travis/maven.sh | 4 ---- 3 files changed, 6 insertions(+), 9 deletions(-) delete mode 100755 travis/maven.sh diff --git a/.travis.yml b/.travis.yml index 1c169eecc6..4fc4346257 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,6 @@ services: addons: postgresql: "9.3" install: - - ./travis/maven.sh - sh -c 'cd querydsl-root && mvn -B -q install -Dmaven.javadoc.skip=true -DskipTests=true' before_script: - mysql -u root -e "source travis/mysql.sql" diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 68756bcfdb..55c42e8f2a 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -359,6 +359,11 @@ + + querydsl + http://www.querydsl.com/maven + + diff --git a/travis/maven.sh b/travis/maven.sh deleted file mode 100755 index da5198ef15..0000000000 --- a/travis/maven.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -wget http://ftp.cubrid.org/CUBRID_Drivers/JDBC_Driver/CUBRID-8.4.0_jdbc.jar -mvn install:install-file -Dfile=CUBRID-8.4.0_jdbc.jar -DgroupId=cubrid -DartifactId=cubrid-jdbc -Dversion=8.4.0 -Dpackaging=jar - From 8f120e1a656ae2582a627e1fb42c423942849283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 21 Sep 2014 22:01:06 +0300 Subject: [PATCH 0405/1968] Cleanup poms --- querydsl-root/pom.xml | 22 ---------------------- querydsl-sql/pom.xml | 15 --------------- 2 files changed, 37 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 55c42e8f2a..69d37aa969 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -363,28 +363,6 @@ querydsl http://www.querydsl.com/maven - diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 53fb1fe9dd..44de86a891 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -318,19 +318,4 @@ - - - - - - datanucleus - http://www.datanucleus.org/downloads/maven2 - - - From 2ff8cc6490fcd44c44259d1361334c9d77b637c9 Mon Sep 17 00:00:00 2001 From: Gili Tzabari Date: Mon, 22 Sep 2014 00:00:18 -0400 Subject: [PATCH 0406/1968] Javadoc build errors under JDK 8 #945 --- .../query/collections/AbstractCollQuery.java | 8 ++-- .../mysema/query/collections/CollQuery.java | 5 +-- .../java/com/mysema/query/BooleanBuilder.java | 4 +- .../java/com/mysema/query/group/Group.java | 4 +- .../com/mysema/query/support/QueryBase.java | 6 +-- .../query/types/CollectionExpression.java | 2 +- .../query/types/FactoryExpressionUtils.java | 2 +- .../query/types/expr/BooleanExpression.java | 2 +- .../query/types/expr/MathExpressions.java | 2 +- .../query/types/expr/NumberExpression.java | 16 ++++---- .../query/types/expr/SimpleExpression.java | 2 - .../com/mysema/query/types/path/BeanPath.java | 2 +- .../query/types/path/ComparablePath.java | 2 +- .../main/java/com/mysema/util/BeanMap.java | 38 +++++++++---------- 14 files changed, 46 insertions(+), 49 deletions(-) diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java b/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java index d7d9492efa..274905b335 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java @@ -127,7 +127,7 @@ protected QueryEngine getQueryEngine() { * Define an inner join from the Collection typed path to the alias * * @param

- * @param collectionPath + * @param target * @param alias * @return */ @@ -140,7 +140,7 @@ public

Q innerJoin(Path> target, Path

alias) { * Define an inner join from the Map typed path to the alias * * @param

- * @param mapPath + * @param target * @param alias * @return */ @@ -153,7 +153,7 @@ public

Q innerJoin(MapExpression target, Path

alias) { * Define a left join from the Collection typed path to the alias * * @param

- * @param collectionPath + * @param target * @param alias * @return */ @@ -166,7 +166,7 @@ public

Q leftJoin(Path> target, Path

alias) { * Define a left join from the Map typed path to the alias * * @param

- * @param mapPath + * @param target * @param alias * @return */ diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java index 510b4f05cd..a7beae44c0 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuery.java @@ -44,7 +44,7 @@ public CollQuery(CollQueryTemplates templates) { /** * Create a new CollQuery instance * - * @param evaluatorFactory + * @param queryEngine */ public CollQuery(QueryEngine queryEngine) { super(new DefaultQueryMetadata(), queryEngine); @@ -55,7 +55,6 @@ public CollQuery(QueryEngine queryEngine) { * Create a new CollQuery instance * * @param metadata - * @param evaluatorFactory */ public CollQuery(QueryMetadata metadata) { super(metadata, DefaultQueryEngine.getDefault()); @@ -65,7 +64,7 @@ public CollQuery(QueryMetadata metadata) { * Create a new CollQuery instance * * @param metadata - * @param evaluatorFactory + * @param queryEngine */ public CollQuery(QueryMetadata metadata, QueryEngine queryEngine) { super(metadata, queryEngine); diff --git a/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java b/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java index e2cfa97626..ead04c741f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/BooleanBuilder.java @@ -84,7 +84,7 @@ public BooleanBuilder and(@Nullable Predicate right) { /** * Create the intersection of this and the union of the given args - *

(this && (arg1 || arg2 ... || argN))

+ * {@code (this && (arg1 || arg2 ... || argN))} * * @param args * @return @@ -168,7 +168,7 @@ public BooleanBuilder or(@Nullable Predicate right) { /** * Create the union of this and the intersection of the given args - *

(this || (arg1 && arg2 ... && argN))

+ * {@code (this || (arg1 && arg2 ... && argN))} * * @param args * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/group/Group.java b/querydsl-core/src/main/java/com/mysema/query/group/Group.java index 612aa1d17a..01f135508c 100644 --- a/querydsl-core/src/main/java/com/mysema/query/group/Group.java +++ b/querydsl-core/src/main/java/com/mysema/query/group/Group.java @@ -36,8 +36,8 @@ public interface Group { /** * Returns the value of the given group. * - * @param Type of element in a single ResultSet row, i.e. type of Expression<T> - * @param Target type of this group, e.g. List<T> + * @param Type of element in a single ResultSet row, i.e. type of {@code Expression} + * @param Target type of this group, e.g. {@code List} * @param coldef * @throws NoSuchElementException if group is undefined. * @throws ClassCastException if group is of different type diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java index 7ec1a67345..6647fa4c72 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java @@ -46,7 +46,7 @@ public Q distinct() { /** * Add a single grouping expression * - * @param o + * @param e * @return */ public Q groupBy(Expression e) { @@ -66,7 +66,7 @@ public Q groupBy(Expression... o) { /** * Add a single filter for aggregation * - * @param o + * @param e * @return */ public Q having(Predicate e) { @@ -160,7 +160,7 @@ public Q restrict(QueryModifiers modifiers) { /** * Set the given parameter to the given value * - * @param + * @param

* @param param * @param value * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/types/CollectionExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/CollectionExpression.java index b1ee6247ac..39f7ea7891 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/CollectionExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/CollectionExpression.java @@ -20,7 +20,7 @@ * * @author tiwe * - * @param expression type + * @param expression type * @param element type * @see java.util.Collection */ diff --git a/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionUtils.java b/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionUtils.java index a6b1ab54d1..1bbeb30e1b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionUtils.java @@ -78,7 +78,7 @@ public boolean equals(Object o) { } /** - * @param exprs + * @param projection * @return */ public static FactoryExpression wrap(List> projection) { diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/BooleanExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/BooleanExpression.java index 73723f77ab..17f5d89da7 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/BooleanExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/BooleanExpression.java @@ -87,7 +87,7 @@ public BooleanExpression as(String alias) { * Get an intersection of this and the given expression * * @param right right hand side of the union - * @return this && right + * @return {@code this && right} */ public BooleanExpression and(@Nullable Predicate right) { right = (Predicate) ExpressionUtils.extract(right); diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/MathExpressions.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/MathExpressions.java index 6e4d5ea64c..3dfbbda876 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/MathExpressions.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/MathExpressions.java @@ -182,7 +182,7 @@ public static > NumberExpression round(Expre * Round to s decimal places * * @param num - * @params s + * @param s * @return */ public static > NumberExpression round(Expression num, int s) { diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java index 396db0b7b0..3c7e88eb4e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java @@ -269,7 +269,7 @@ public NumberExpression floor() { * * @param * @param right rhs of the comparison - * @return this >= right + * @return {@code this >= right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression goe(A right) { @@ -281,7 +281,7 @@ public final > BooleanExpression goe(A right) { * * @param * @param right rhs of the comparison - * @return this >= right + * @return {@code this >= right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression goe(Expression right) { @@ -309,7 +309,7 @@ public BooleanExpression goeAny(CollectionExpression right) { * * @param * @param right rhs of the comparison - * @return this > right + * @return {@code this > right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression gt(A right) { @@ -321,7 +321,7 @@ public final > BooleanExpression gt(A right) { * * @param * @param right rhs of the comparison - * @return this > right + * @return {@code this > right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression gt(Expression right) { @@ -441,7 +441,7 @@ public BooleanExpression like(Expression str) { * * @param * @param right rhs of the comparison - * @return this <= right + * @return {@code this <= right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression loe(A right) { @@ -453,7 +453,7 @@ public final > BooleanExpression loe(A right) { * * @param * @param right rhs of the comparison - * @return this <= right + * @return {@code this <= right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression loe(Expression right) { @@ -491,7 +491,7 @@ public NumberExpression longValue() { * * @param * @param right rhs of the comparison - * @return this < right + * @return {@code this < right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression lt(A right) { @@ -503,7 +503,7 @@ public final > BooleanExpression lt(A right) { * * @param * @param right rhs of the comparison - * @return this < right + * @return {@code this < right} * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression lt(Expression right) { diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java index ecd6a5c946..c63f5f1f2b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java @@ -284,7 +284,6 @@ public final BooleanExpression notIn(CollectionExpression right) /** * Get a nullif(this, other) expression * - * @param expr * @param other * @return */ @@ -296,7 +295,6 @@ public SimpleExpression nullif(Expression other) { /** * Get a nullif(this, other) expression * - * @param expr * @param other * @return */ diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java b/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java index 4f3c3d0513..b581da361d 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java @@ -78,7 +78,7 @@ public final R accept(Visitor v, C context) { /** * Cast the path to a subtype querytype * - * @param + * @param * @param clazz * @return */ diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/ComparablePath.java b/querydsl-core/src/main/java/com/mysema/query/types/path/ComparablePath.java index acef67f2d0..af951710f3 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/ComparablePath.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/ComparablePath.java @@ -28,7 +28,7 @@ * @author tiwe * * @param expression type - * @see java.util.ComparableType + * @see Comparable */ @SuppressWarnings({"unchecked"}) public class ComparablePath extends ComparableExpression implements Path { diff --git a/querydsl-core/src/main/java/com/mysema/util/BeanMap.java b/querydsl-core/src/main/java/com/mysema/util/BeanMap.java index 08ace542bf..2690051230 100644 --- a/querydsl-core/src/main/java/com/mysema/util/BeanMap.java +++ b/querydsl-core/src/main/java/com/mysema/util/BeanMap.java @@ -38,10 +38,10 @@ /** * An implementation of Map for JavaBeans which uses introspection to * get and put properties in the bean. - *

+ *

* If an exception occurs during attempts to get or set a property then the * property is considered non existent in the Map - *

+ *

* * @author James Strachan * @author Matt Hall, John Watkinson, Stephen Colebourne @@ -151,26 +151,26 @@ public String toString() { /** * Clone this bean map using the following process: - *

+ *

*

Config options @@ -117,7 +117,7 @@ class Customer{ @Entity public class User { //... -} +} ]]> Customization of package content: @@ -135,7 +135,7 @@ import com.mysema.query.annotations.Config; If you want to customize the serializer configuration globally, you can do this via the following APT options - +
APT options @@ -187,7 +187,7 @@ import com.mysema.query.annotations.Config; querydsl.includedClasses comma separated list of class names to be included into code generation (default: all) - + querydsl.excludedPackages comma separated list of packages to be excluded from code generation (default: none) @@ -196,10 +196,10 @@ import com.mysema.query.annotations.Config; querydsl.excludedClasses comma separated list of class names to be excluded from code generation (default: none) - + -
+ Using the Maven APT plugin this works for example like this: @@ -223,7 +223,7 @@ import com.mysema.query.annotations.Config; com.mysema.query.apt.jpa.JPAAnnotationProcessor true - + @@ -245,27 +245,27 @@ import com.mysema.query.annotations.Config; type. This can be useful for example in cases where comparison and String operations should be blocked on certain String paths or Date / Time support for custom types needs to be added. Support for Date / Time types of the Joda time API - and JDK (java.util.Date, Calendar and subtypes) is built in, but other APIs might need + and JDK (java.util.Date, Calendar and subtypes) is built in, but other APIs might need to be supported using this feature. The following example demonstrates the usage: - The value PropertyType.NONE can be used to skip a property in the + The value PropertyType.NONE can be used to skip a property in the query type generation. This case is different from @Transient or @QueryTransient annotated properties, where properties are not persisted. PropertyType.NONE just omits the property from the Querydsl query type. @@ -283,38 +283,38 @@ public class MyEntity{ Here is a simple example from a unit test: - - And the generated methods in the QUser query type: - Delegate methods can also be used to extend built-in types. Here are some examples - When delegate methods are declared for builtin types then subclasses with the proper delegate method usages are created: - { public QDate(BeanPath entity) { @@ -421,7 +421,7 @@ public class QTimestamp extends DateTimePath { Classpath based code generation - + For cases where annotated Java sources are not available, such as the usage of a different JVM language such as Scala or Groovy or annotation addition via bytecode manipulation the @@ -436,16 +436,16 @@ public class QTimestamp extends DateTimePath { Below is an example for JPA - This will export all the JPA annotated classes in the package of the DomainClass @@ -459,13 +459,13 @@ exporter.export(DomainClass.class.getPackage()); The goals generic-export, jpa-export and jdo-export of the querydsl-maven-plugin can be used for GenericExporter usage via Maven. - + - The different goals are mapped to the Querydsl, JPA and JDO annotations. + The different goals are mapped to the Querydsl, JPA and JDO annotations. - + The configuration elements are - + Maven configuration @@ -485,8 +485,8 @@ exporter.export(DomainClass.class.getPackage()); targetFolder target folder for generated sources - - boolean + + boolean scala true, if Scala sources should be generated instead (default: false) @@ -495,7 +495,7 @@ exporter.export(DomainClass.class.getPackage()); packages packages to be introspected for entity classes - + boolean handleFields true, if fields should be treated as properties (default: true) @@ -517,7 +517,7 @@ exporter.export(DomainClass.class.getPackage()); -
+ Here is an example for JPA annotated classes @@ -552,13 +552,13 @@ exporter.export(DomainClass.class.getPackage()); ]]>
This will export the JPA annotated classes of the com.example.domain package and - subpackages to the target/generated-sources/java directory. + subpackages to the target/generated-sources/java directory. - + If you need to compile the generated sources directly after that, then you can use the compile goal for that. - - compile @@ -566,11 +566,11 @@ exporter.export(DomainClass.class.getPackage()); target/generated-sources/scala - -]]> - + +]]> + The compile goal has the following configuration elements - + Maven configuration @@ -614,23 +614,23 @@ exporter.export(DomainClass.class.getPackage()); Map compilerOptions options for the compiler - + -
- + + All options except sourceFolder are optional. - + - + - - Scala support + + Scala support If you need Scala output of the classes, use a variant of the following configuration - + @@ -677,4 +677,4 @@ exporter.export(DomainClass.class.getPackage()); - + diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml index 955abca83a..5954d4f48a 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml @@ -3,13 +3,13 @@ Creating queries Query construction in Querydsl involves calling query methods with expression arguments. Since - query methods are mostly module specific and have already been presented in the tutorial section, + query methods are mostly module specific and have already been presented in the tutorial section, this part will focus on expressions. - - Expressions are normally constructed by accessing fields and calling methods on the generated - expression types of your domain module. For cases where code generation is not applicable generic ways + + Expressions are normally constructed by accessing fields and calling methods on the generated + expression types of your domain module. For cases where code generation is not applicable generic ways to construct expressions can be used instead. - + Complex predicates @@ -20,13 +20,13 @@ getCustomer(String... names){ - QCustomer customer = QCustomer.customer; - JPAQuery query = new JPAQuery(entityManager).from(customer); + QCustomer customer = QCustomer.customer; + JPAQuery query = new JPAQuery(entityManager).from(customer); BooleanBuilder builder = new BooleanBuilder(); for (String name : names){ builder.or(customer.name.eq(name)); } - query.where(builder); // customer.name eq name1 OR customer.name eq name2 OR ... + query.where(builder); // customer.name eq name1 OR customer.name eq name2 OR ... return query.list(customer); } ]]> @@ -34,7 +34,7 @@ public List getCustomer(String... names){ BooleanBuilder is mutable and represents initially null and after each and or or call the result of the operation. - + @@ -45,16 +45,16 @@ public List getCustomer(String... names){ class is a static factory class for dynamic expression construction. The factory methods are named by the returned type and are mostly self-documenting. - + In general the Expressions class should be used only in cases where fluent DSL forms - can't be used, such as dynamic paths, custom syntax or custom operations. + can't be used, such as dynamic paths, custom syntax or custom operations. - + The following expression @@ -73,9 +73,9 @@ Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant);
- + - + Dynamic paths In addition to the Expressions based expression creation Querydsl provides @@ -86,7 +86,7 @@ Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant); EntityPathBase and can be used as an alternative to class generation and alias-usage for path generation. - + Compared to the Expressions API PathBuilder doesn't provide direct support for unknown operations or custom syntax, but the syntax is closer to the normal DSL. @@ -138,33 +138,33 @@ entityPath.getMap("map", String.class, String.class, StringPath.class).get("key" CaseBuilder class like this: - cases = new CaseBuilder() .when(customer.annualSpending.gt(10000)).then("Premier") .when(customer.annualSpending.gt(5000)).then("Gold") .when(customer.annualSpending.gt(2000)).then("Silver") .otherwise("Bronze"); -// The cases expression can now be used in a projection or condition +// The cases expression can now be used in a projection or condition ]]> For case expressions with equals-operations use the following simpler form instead: - cases = customer.annualSpending .when(10000).then("Premier") .when(5000).then("Gold") .when(2000).then("Silver") .otherwise("Bronze"); -// The cases expression can now be used in a projection or condition +// The cases expression can now be used in a projection or condition ]]> Case expressions are not yet supported in JDOQL. - + Casting expressions @@ -194,9 +194,9 @@ QAccount extends EntityPathBase{ QBankAccount extends EntityPathBase{ public final QAccount _super = new QAccount(this); - + // ... -} +} ]]> To cast from a supertype to a subtype you can use the @@ -206,24 +206,24 @@ QBankAccount extends EntityPathBase{ - - + + - + Select literals - + Literals can be selected by refering to them via Constant expressions. Here is a simple example - + + Expressions.constant("abc")); +]]> + + Constant expressions are often used in subqueries. - Constant expressions are often used in subqueries. - - + diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml index 0db418c64c..1178351bda 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml @@ -1,43 +1,43 @@ Result handling - + Querydsl provides two ways to customize results, FactoryExpressions for row based transformation and ResultTransformer for aggregation. The com.mysema.query.types.FactoryExpression interface is used for Bean creation, - constructor invocation and for the creation of more complex objects. The functionality of the - FactoryExpression implementations of Querydsl can be accessed via the + constructor invocation and for the creation of more complex objects. The functionality of the + FactoryExpression implementations of Querydsl can be accessed via the com.mysema.query.types.Projections class. - + For the com.mysema.query.ResultTransformer interface GroupBy is the main implementation. - + Returning multiple columns - + Since Querydsl 3.0 the default type for multi-column results is com.mysema.query.Tuple. - Tuple provides provides a typesafe Map like interface to access column data from a Tuple row object. - + Tuple provides provides a typesafe Map like interface to access column data from a Tuple row object.
+ result = query.from(employee).list(employee.firstName, employee.lastName); for (Tuple row : result) { System.out.println("firstName " + row.get(employee.firstName)); - System.out.println("lastName " + row.get(employee.lastName)); -}} -]]> + System.out.println("lastName " + row.get(employee.lastName)); +}} +]]> This example could also have been written via the QTuple expression class like this - + result = query.from(employee).list(new QTuple(employee.firstName, employee.lastName)); for (Tuple row : result) { System.out.println("firstName " + row.get(employee.firstName)); - System.out.println("lastName " + row.get(employee.lastName)); -}} -]]> - + System.out.println("lastName " + row.get(employee.lastName)); +}} +]]> + @@ -46,7 +46,7 @@ for (Tuple row : result) { In cases where Beans need to be populated based on the results of the query, Bean projections can be used like this - + dtos = query.list( Projections.bean(UserDTO.class, user.firstName, user.lastName)); @@ -54,19 +54,19 @@ List dtos = query.list( When fields should be directly used instead of setters the following variant can be used instead - + dtos = query.list( Projections.fields(UserDTO.class, user.firstName, user.lastName)); -]]> +]]> Constructor usage - + Constructor based row transformation can be used like this - + dtos = query.list( Projections.bean(UserDTO.class, user.firstName, user.lastName)); @@ -92,7 +92,7 @@ class CustomerDTO { dtos = query.from(customer).list(new QCustomerDTO(customer.id, customer.name)); +List dtos = query.from(customer).list(new QCustomerDTO(customer.id, customer.name)); ]]> While the example is Hibernate specific, this feature is @@ -100,8 +100,8 @@ List dtos = query.from(customer).list(new QCustomerDTO(customer.id, If the type with the QueryProjection annotation is not an annotated entity - type, you can use the constructor projection like in the example, but if the - annotated type would be an entity type, then the constructor projection would need to be + type, you can use the constructor projection like in the example, but if the + annotated type would be an entity type, then the constructor projection would need to be created via a call to the static create method of the query type: @@ -120,7 +120,7 @@ class Customer { dtos = query.from(customer).list(QCustomer.create(customer.id, customer.name)); +List dtos = query.from(customer).list(QCustomer.create(customer.id, customer.name)); ]]> Alternatively, if code generation is not an option, you can @@ -129,7 +129,7 @@ List dtos = query.from(customer).list(QCustomer.create(customer.id, cu dtos = query.from(customer) - .list(ConstructorExpression.create(Customer.class, customer.id, customer.name)); + .list(ConstructorExpression.create(Customer.class, customer.id, customer.name)); ]]> @@ -151,7 +151,7 @@ List dtos = query.from(customer) > results = query.from(post, comment) .where(comment.post.id.eq(post.id)) .transform(groupBy(post.id).as(list(comment))); @@ -161,7 +161,7 @@ Map> results = query.from(post, comment) Multiple result columns - results = query.from(post, comment) .where(comment.post.id.eq(post.id)) .transform(groupBy(post.id).as(post.name, set(comment.id))); @@ -184,4 +184,4 @@ Map results = query.from(post, comment) - \ No newline at end of file + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/en-US/content/intro.xml b/querydsl-docs/src/main/docbook/en-US/content/intro.xml index ae25667e7f..e47c81a607 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/intro.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/intro.xml @@ -45,16 +45,16 @@ - All query instances can be reused multiple times. After the projection the paging data + All query instances can be reused multiple times. After the projection the paging data (limit and offset) and the definition of the projection are removed. To get an impression of the expressivity of the Querydsl query and expression types go to - the javadocs and explore com.mysema.query.Query, com.mysema.query.Projectable + the javadocs and explore com.mysema.query.Query, com.mysema.query.Projectable and com.mysema.query.types.Expression. - \ No newline at end of file + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml b/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml index 4e6b328c31..36a82fec98 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml @@ -14,7 +14,7 @@ When using improperly encoded fields or getters you might the following stacktrace: - names; // RIGHT - + private Map employeesByName; // WRONG - + private Map employeesByName; // RIGHT ]]> diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials.xml index d033996654..6d8aef3e5a 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials.xml @@ -2,13 +2,13 @@ Tutorials - + Instead of a general Getting started guide we provide integration guides for the main backends of Querydsl. - - + + @@ -18,5 +18,5 @@ - - \ No newline at end of file + + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml index 500b2d4056..73f009abeb 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml @@ -23,9 +23,9 @@ @@ -140,8 +140,8 @@ for (String name : from(cat,cats) querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-collections @@ -152,7 +152,7 @@ for (String name : from(cat,cats) org.slf4j slf4j-log4j12 1.6.1 - + ]]> @@ -205,18 +205,18 @@ for (String name : from(cat,cats) - + - + - + - + ]]> @@ -237,7 +237,7 @@ for (String name : from(cat,cats) Querydsl Collections provides Hamcrest matchers. With these imports - they can be used like this: - diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml index 50b98dd6a2..ade2d7fe69 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml @@ -24,8 +24,8 @@ querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-jdo @@ -36,7 +36,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]> @@ -105,18 +105,18 @@ - + - + - + - + ]]> @@ -150,19 +150,19 @@ public class Customer { private String firstName; private String lastName; - + public String getFirstName(){ return firstName; } - + public String getLastName(){ return lastName; } - + public void setFirstName(String fn){ firstName = fn; } - + public void setLastName(String ln)[ lastName = ln; } @@ -245,7 +245,7 @@ query.close(); @@ -254,7 +254,7 @@ query.from(customer, company); Or like this @@ -324,7 +324,7 @@ query.from(customer) The syntax for declaring ordering is - Grouping can be done in the following form - - The second parameter of the JDODeleteClause constructor is the entity to be - deleted. The where call is optional and the execute call performs the deletion and + deleted. The where call is optional and the execute call performs the deletion and returns the amount of deleted entities. @@ -373,8 +373,8 @@ new JDODeleteClause(pm, customer).where(customer.level.lt(3)).execute(); Subqueries - To create a subquery you create a JDOSubQuery instance, add the query parameters - via from, where etc and use unique or list to create a subquery, which is just a type-safe + To create a subquery you create a JDOSubQuery instance, add the query parameters + via from, where etc and use unique or list to create a subquery, which is just a type-safe expression for the query. unique is used for a unique result and list for a list result. @@ -384,14 +384,14 @@ QDepartment d = new QDepartment("d"); query.from(department) .where(department.employees.size().eq( new JDOSubQuery().from(d).unique(AggregationFunctions.max(d.employees.size())) - )).list(department); + )).list(department); ]]> represents the following native JDO query SELECT this FROM com.mysema.query.jdoql.models.company.Department -WHERE this.employees.size() == +WHERE this.employees.size() == (SELECT max(d.employees.size()) FROM com.mysema.query.jdoql.models.company.Department d) @@ -411,8 +411,8 @@ query.from(employee) which represents the following native JDO query -SELECT this FROM com.mysema.query.jdoql.models.company.Employee -WHERE this.weeklyhours > +SELECT this FROM com.mysema.query.jdoql.models.company.Employee +WHERE this.weeklyhours > (SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager) @@ -472,11 +472,11 @@ WHERE this.weeklyhours > names = query.from(cat).list(cat.name); ]]> diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml index 6a9c1c8abb..42e2329039 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml @@ -13,7 +13,7 @@ Querydsl for JPA is an alternative to both JPQL and Criteria queries. It combines the - dynamic nature of Criteria queries with the expressiveness of JPQL and all that in a fully + dynamic nature of Criteria queries with the expressiveness of JPQL and all that in a fully typesafe manner. @@ -30,8 +30,8 @@ querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-jpa @@ -42,7 +42,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]> @@ -116,18 +116,18 @@ - + - + - + - + ]]> @@ -158,7 +158,7 @@ @Entity annotated classes. - + APT based code generation doesn't work well with AspectJ IDTs. @@ -180,7 +180,7 @@ HibernateDomainExporter exporter = new HibernateDomainExporter( "Q", // name prefix new File("target/gen3"), // target folder - configuration); // instance of org.hibernate.cfg.Configuration + configuration); // instance of org.hibernate.cfg.Configuration exporter.export(); ]]> @@ -271,19 +271,19 @@ QCustomer customer = new QCustomer("myCustomer"); - If you are using the Hibernate API instead, you can instantiate a + If you are using the Hibernate API instead, you can instantiate a HibernateQuery like this: - + Both JPAQuery and HibernateQuery implement the JPQLQuery interface. @@ -313,7 +313,7 @@ Customer bob = query.from(customer) @@ -322,7 +322,7 @@ query.from(customer, company); Or like this @@ -357,7 +357,7 @@ query.from(customer) join and full join. Join usage is typesafe, and follows the following pattern: - Another example - With the following JPQL version - + from Cat as cat left join cat.kittens as kitten - on kitten.bodyWeight > 10.0 + on kitten.bodyWeight > 10.0 @@ -450,7 +450,7 @@ from Cat as cat The syntax for declaring ordering is - which is equivalent to the following native JPQL - + from Customer as customer order by customer.lastName asc, customer.firstName desc @@ -472,7 +472,7 @@ from Customer as customer Grouping can be done in the following form - which is equivalent to the following native JPQL - + select customer.lastName from Customer as customer group by customer.lastName @@ -496,12 +496,12 @@ select customer.lastName examples: - The second parameter of the JPADeleteClause constructor is the entity to @@ -512,24 +512,24 @@ new JPADeleteClause(entityManager, customer).where(customer.level.lt(3)).execute For Hibernate based Delete usage, use the HibernateDeleteClause instead. - - DML clauses in JPA don't take JPA level cascade rules into account and don't provide + + DML clauses in JPA don't take JPA level cascade rules into account and don't provide finegrained second level cache interaction. Update clauses - + Update clauses in Querydsl JPA follow a simple update-set/where-execute form. Here are some examples: - The second parameter of the JPAUpdateClause constructor is the entity to @@ -540,8 +540,8 @@ new JPAUpdateClause(session, customer).where(customer.name.eq("Bob")) For Hibernate based Update usage, use the HibernateUpdateClause instead. - - DML clauses in JPA don't take JPA level cascade rules into account and don't provide + + DML clauses in JPA don't take JPA level cascade rules into account and don't provide finegrained second level cache interaction. @@ -654,26 +654,26 @@ List results = jpaQuery.getResultList(); names = query.from(cat).list(cat.name); ]]> - If you mix entity (e.g. QCat) and table (e.g. SAnimal) references in your query you need to make sure that they + If you mix entity (e.g. QCat) and table (e.g. SAnimal) references in your query you need to make sure that they use the same variable names. SAnimal.animal has the variable name "animal", so a new instance (new SAnimal("cat")) was used instead. - + An alternative pattern could be - + +]]> Query multiple columns: diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml index 0c62b6e5f4..c09373800c 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml @@ -5,7 +5,7 @@ Querying Lucene This chapter describes the querying functionality of the Lucene module. - + Maven integration @@ -13,7 +13,7 @@ Querydsl Lucene can be used via the querydsl-lucene3 module for Lucene 3 and querydsl-lucene4 for Lucene 4 - + Lucene 3: org.slf4j slf4j-log4j12 1.6.1 - + ]]> Lucene 4: - + com.mysema.querydsl @@ -43,8 +43,8 @@ org.slf4j slf4j-log4j12 1.6.1 - -]]> + +]]> @@ -55,16 +55,16 @@ With fields year and title a manually created query type could look something like this: - { private static final long serialVersionUID = -4872833626508344081L; - + public QDocument(String var) { super(Document.class, PathMetadataFactory.forVariable(var)); } public final StringPath year = createString("year"); - + public final StringPath title = createString("title"); } ]]> @@ -81,11 +81,11 @@ public class QDocument extends EntityPathBase{ Querying with Querydsl Lucene is as simple as this: - documents = query .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) .list(); @@ -93,7 +93,7 @@ List documents = query which is transformed into the following Lucene query: - @@ -143,7 +143,7 @@ List documents = query The syntax for declaring ordering is - which is equivalent to the following Lucene query - + title:* @@ -163,7 +163,7 @@ title:* The syntax for declaring a limit is - The syntax for declaring an offset is - com.mysema.query.lucene.LuceneExpressions class: - It is possible to apply a single Lucene filter to the query like this: - A shortcut for distinct filtering is provided via the distinct(Path) method: - querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-mongodb @@ -31,7 +31,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]> @@ -99,7 +99,7 @@ query = new MorphiaQuery(morphia, datastore, user); List list = query @@ -153,7 +153,7 @@ List list = query The syntax for declaring ordering is - The syntax for declaring a limit is - The syntax for declaring an offset is - - - 5 expr goe 5 expr >= 5 expr notBetween(2,6) expr not between (2,6) expr negate -expr - + // numeric expr add 3 expr + 3 expr subtract 3 expr - 3 @@ -86,7 +86,7 @@ map.get("X") map("X") type Object[]. - @@ -100,7 +100,7 @@ query.from(person).list(person.firstName, person.lastName, person.age) @@ -121,7 +121,7 @@ query.from(person).select(person.firstName, person.lastName, person.age) Generation without Bean types : - Generation with Bean types : - @@ -174,15 +174,15 @@ exporter.export(connection.getMetaData) Instead of the following normal syntax - you could use the companion object of Employee or QEmployee and write it like this - Instead of giving expressions to orderBy, where, select, single and unique you @@ -190,8 +190,8 @@ Employee.select(_.firstName, _.lastName) the query and return another expression. The expanded form of the previous example would be - e.firstName }, { e => e.lastName }) + e.firstName }, { e => e.lastName }) ]]> @@ -267,7 +267,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) Here is a minimal example with JPA : - Long where @@ -323,8 +323,8 @@ query.from(person).orderBy(person.firstName asc).list(person) Not null @@ -344,4 +344,4 @@ val person = Person as "person" - + diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml index e9ea515015..2b7f9fa910 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml @@ -3,33 +3,33 @@ Querydsl Spatial - - Support for Spatial queries is available via the Querydsl Spatial module, which is an extension + + Support for Spatial queries is available via the Querydsl Spatial module, which is an extension module to the SQL module. The Spatial module supports the object model of Simple Feature Access in queries and object binding. - + The geolatte project is used for the object model. - + - + Maven integration - + Add the following dependency to your Maven project: - + com.mysema.querydsl querydsl-spatial ${querydsl.version} - + ]]> Additionally the following database specific extra dependencies: - - org.postgis @@ -46,16 +46,16 @@ provided ]]> - + - + Code generation via Maven - + The code generation for Querydsl SQL can be set to detect the usage of spatial types in database schemas and use geolatte types in these case via the spatial property: - + @@ -75,18 +75,18 @@ -]]> - - - +]]> + + + - + Runtime configuration - + The runtime configuration aspect of the spatial module is that instead of the normal SQLTemplates instances, spatial enabled instances are used. Below is a list of spatial enabled SQLTemplates classes. - + GeoDBTemplates (for H2) @@ -106,81 +106,81 @@ TeradataSpatialTemplates - - + + - + - + Querying - - With code generation and runtime configuration set for spatial types we can now try + + With code generation and runtime configuration set for spatial types we can now try queries with it. - + - + Filter by Distance - + +Geometry point = Wkt.fromWkt("Point(2 2)"); +query.where(table.geo.distance(point).lt(5.0)); +]]> In addition to straight distance between geometries spherical and spherodial distance are provided via distanceSphere and distanceSpheroid. - + - + - + Contains - + - +Geometry point = Wkt.fromWkt("Point(2 2)"); +query.where(table.geo.contains(point)); +]]> + - + - + Intersection - + - + - + - - Access to the SPATIAL_REF_SYS table - - Unified access to the SPATIAL_REF_SYS standard table is provided via the QSpatialRefSys + + Access to the SPATIAL_REF_SYS table + + Unified access to the SPATIAL_REF_SYS standard table is provided via the QSpatialRefSys and SpatialRefSys classes. SPATIAL_REF_SYS contains data about the supported spatial reference systems. - + referenceSystems = query.from(spatialRefSys).list(spatialRefSys); -]]> - +]]> + - + - + - + Inheritance - + In case you use only generic geometry types in your database schema you can use conversion methods in the object model to convert to more specific types. - + geometry = shapes.geometry; PointPath point = geometry.asPoint(); NumberExpression pointX = point.x(); // x() is not available on GeometryExpression/GeometryPath ]]> - + - - \ No newline at end of file + + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 8ea4b9e55e..93973373fe 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -19,8 +19,8 @@ com.mysema.querydsl querydsl-sql ${querydsl.version} - - + + com.mysema.querydsl querydsl-sql-codegen @@ -32,7 +32,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]> The querydsl-sql-codegen dependency can be skipped, if code generation happens @@ -165,7 +165,7 @@ tableNamePattern - a table name pattern; must match the table name as it is stored in the database, + a table name pattern; must match the table name as it is stored in the database, multiple can be separated by comma (default: null) @@ -253,18 +253,18 @@ - + Custom types can be used to register additional Type implementations: - - com.mysema.query.sql.types.InputStreamType -]]> +]]> Type mappings can be used to register table.column specific java types: - - IMAGE
@@ -272,11 +272,11 @@ java.io.InputStream
-]]>
- +]]>
+ The defaults for the numeric mappings are - + Numeric mappings @@ -324,21 +324,21 @@ > 0 > 0 Double - + -
- + + They can be customized for specific total/decimal digits combinations like this: - - 1 0 java.lang.Byte - + ]]> Imports can be used to add cross-schema foreign keys support. @@ -365,12 +365,12 @@ To get started export your schema into Querydsl query types like this: - This declares that the database schema is to be mirrored into the @@ -379,27 +379,27 @@ exporter.export(conn.getMetaData()); The generated types have the table name transformed to mixed case as the class name and a - similar mixed case transformation applied to the columns which are available as property + similar mixed case transformation applied to the columns which are available as property paths in the query type. - In addition to this primary key and foreign key constraints are provided as fields + In addition to this primary key and foreign key constraints are provided as fields which can be used for compact join declarations. - + - + Configuration - + The configuration is done via the com.mysema.query.sql.Configuration class which takes the Querydsl SQL dialect as an argument. For H2 you would create it like this - - Querydsl uses SQL dialects to customize the SQL serialization needed for @@ -449,11 +449,11 @@ Configuration configuration = new Configuration(templates); TeradataTemplates (tested with Teradata 14) - - - - For customized SQLTemplates instances you can use the builder pattern like this - + + + + For customized SQLTemplates instances you can use the builder pattern like this + +]]>
The methods of the Configuration class can be used to enable direct serialization of literals via setUseLiterals(true), override schema and tables and register custom types. For full details look at the javadocs of Configuration. - + @@ -475,10 +475,10 @@ Configuration configuration = new Configuration(templates); Querying with Querydsl SQL is as simple as this: - lastNames = query.from(customer) .where(customer.firstName.eq("Bob")) .list(customer.lastName); @@ -491,11 +491,11 @@ List lastNames = query.from(customer) and last_name: - +]]> @@ -555,7 +555,7 @@ WHERE c.first_name = 'Bob' Joins are constructed using the following syntax: - and for a left join: - Alternatively the join condition can also be written out: - The syntax for declaring ordering is - which is equivalent to the following native SQL - + SELECT c.first_name, c.last_name -FROM customer c +FROM customer c ORDER BY c.last_name ASC, c.first_name ASC @@ -610,7 +610,7 @@ ORDER BY c.last_name ASC, c.first_name ASC Grouping can be done in the following form - which is equivalent to the following native SQL - -SELECT c.last_name -FROM customer c + +SELECT c.last_name +FROM customer c GROUP BY c.last_name @@ -639,39 +639,39 @@ GROUP BY c.last_name list result. - Another example - - + Selecting literals - + To select literals you need to create constant instances for them like this: - + + Expressions.constant("abc")); +]]> The class com.mysema.query.support.Expressions offers also other useful static methods for projections, operation and template creation. - + @@ -683,32 +683,32 @@ query.list(Expressions.constant(1), in the given MySQLQuery example: - { - + public MySQLQuery(Connection conn) { this(conn, new MySQLTemplates(), new DefaultQueryMetadata()); } - + public MySQLQuery(Connection conn, SQLTemplates templates) { this(conn, templates, new DefaultQueryMetadata()); } - + protected MySQLQuery(Connection conn, SQLTemplates templates, QueryMetadata metadata) { super(conn, new Configuration(templates), metadata); } - + public MySQLQuery bigResult(){ return addFlag(Position.AFTER_SELECT, "SQL_BIG_RESULT "); } - + public MySQLQuery bufferResult(){ return addFlag(Position.AFTER_SELECT, "SQL_BUFFER_RESULT "); } - - - // ... -} + + + // ... +} ]]> @@ -718,15 +718,15 @@ public class MySQLQuery extends AbstractSQLQuery { - + - + Window functions - + Window functions are supported in Querydsl via the methods in the SQLExpressions class. - + Usage example: - + - + - + - + Other SQL expressions - + Other SQL expressions are also available from the SQLExpressions class as static methods. - + @@ -764,7 +764,7 @@ query.from(employee) As an alternative to the columns/values usage, Querydsl provides also a set method which can be used like this - + +]]> - which is equivalent to the first example. Usage of the set method always + which is equivalent to the first example. Usage of the set method always expands internally to columns and values. - + Beware that - + +]]> maps the result set of the given query to be inserted whereas - + To get the created keys out instead of modified rows count use one of the executeWithKey/s method. +]]> maps single columns and nulls are used for empty subquery results. - + To populate a clause instance based on the contents of a bean you can use This will exclude null bindings, if you need also null bindings use - + +]]> @@ -857,19 +857,19 @@ new SQLUpdateClause(conn, configuration, survey) Without where - Using bean population - + +]]> @@ -885,14 +885,14 @@ QSurvey survey = QSurvey.survey; new SQLDelecteClause(conn, configuration, survey) .where(survey.name.eq("XXX")) .execute(); - + ]]> Without where - @@ -911,7 +911,7 @@ new SQLDelecteClause(conn, configuration, survey) Update: - To create JavaBean DTO types for the tables of your schema use the MetaDataExporter like this: - Now you can use the bean types as arguments to the populate method in DML @@ -967,9 +967,9 @@ exporter.export(conn.getMetaData()); to bean types in queries. Here is a simple example in JUnit form: - The factory methods used in the previous example are here: - e){ return new SQLUpdateClause(Connections.getConnection(), templates, e); } @@ -1008,21 +1008,21 @@ protected SQLMergeClause merge(RelationalPath e){ } protected SQLQuery query() { - return new SQLQuery(Connections.getConnection(), templates); + return new SQLQuery(Connections.getConnection(), templates); } - + ]]> - + --> - + Extracting the SQL query and bindings - + The SQL query and bindings can be extracted via the getSQL method: - + - - If you need also all literals in the SQL string you can enable literal serialization on the +System.out.println(bindings.getSQL()); +]]> + + If you need also all literals in the SQL string you can enable literal serialization on the query or configuration level via setUseLiterals(true). @@ -1072,15 +1072,15 @@ System.out.println(bindings.getSQL()); arguments to the actual queries: - And for a table column - (Gender.class)); @@ -1089,24 +1089,24 @@ configuration.register("person", "gender", new EnumByNameType(Gender.cl To customize a numeric mapping you can use the registerNumeric method like this - This will map the Float type to the NUMERIC(5,2) type. - + - + Listening to queries and clauses - + SQLListener is a listener interface that can be used to listen to queries and DML clause. SQLListener instances can be registered either on the configuration and on the query/clause level via the addListener method. - + Use cases for listeners are data synchronization, logging, cacheing and validation. - + - + diff --git a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml index 99c53f5457..604e788978 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml @@ -8,7 +8,7 @@ Querydsl - 레퍼런스 문서 - Querydsl + Querydsl &versionNumber; @@ -32,7 +32,7 @@ Dijkstra - + @@ -40,7 +40,7 @@ - + ©rightYear; ©rightHolder; @@ -51,11 +51,11 @@ - + - - + + - + diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general.xml index ddd2a8c6f8..026446916d 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general.xml @@ -2,14 +2,14 @@ 일반 사용법 - + 본 장은 레퍼런스 튜토리얼에서 다루지 않은 내용을 설명한다. - + - - \ No newline at end of file + + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml index 3f97f64a20..cf69b2abff 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml @@ -62,7 +62,7 @@ for (String name : query.from($(c),cats) 기본 데이터 타입이 아니고 final이 아닌 모든 별칭 프로퍼티는 별칭 자체이다. - 따라서, $ 메서드 내에서 기본 데이터 타입이나 final 타입이 나오기 전까지 메서드를 + 따라서, $ 메서드 내에서 기본 데이터 타입이나 final 타입이 나오기 전까지 메서드를 이어서 호출할 수 있다. 다음은 예이다. @@ -88,4 +88,4 @@ $(c.getMate().getName().toLowerCase()) - + diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml index 467fc00a20..47446b02e6 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml @@ -5,7 +5,7 @@ Querydsl은 JPA, JDO, Mongodb 모듈에서 코드 생성을 위해 자바6의 APT 어노테이션 처리 기능을 사용한다. 이 절에서는 코드 생성을 위한 다양한 설정 옵션과 APT에 대한 대안을 설명한다. - + 경로 초기화 @@ -16,15 +16,15 @@ 직렬화 옵션은 다음과 같다. - + Config 옵션 @@ -110,7 +110,7 @@ class Customer{ @Entity public class User { //... -} +} ]]> 엔티티 타입 직렬화 커스터마이징:: @@ -127,7 +127,7 @@ import com.mysema.query.annotations.Config; 만약 직렬화 설정을 글로벌하게 변경하고 싶다면, 다음의 APT 옵셥을 사용하면 된다. - +
APT 옵션 @@ -179,7 +179,7 @@ import com.mysema.query.annotations.Config; querydsl.includedClasses 코드 생성에 포함될 클래스 이름 목록 (콤마로 구분) (default: all) - + querydsl.excludedPackages 코드 생성에서 제외할 패키지 이름 (콤마로 구분) (default: none) @@ -188,10 +188,10 @@ import com.mysema.query.annotations.Config; querydsl.excludedClasses 코드 생성에서 제외할 클래스 이름 (콤마로 구분) (default: none) - + -
+ 다음은 메이븐 APT 플러그인 옵션 사용 예다. @@ -215,7 +215,7 @@ import com.mysema.query.annotations.Config; com.mysema.query.apt.jpa.JPAAnnotationProcessor true - + @@ -233,8 +233,8 @@ import com.mysema.query.annotations.Config; 커스텀 타입 매핑 - 경로 타입을 바꾸고 싶으면 커스텀 타입 매핑을 사용하면 된다. 특정 String 경로에 대해 비교나 - String 연산을 막아야 하거나 커스텀 타입을 위해 Date/Time 지원이 추가되어야 하는 경우에 + 경로 타입을 바꾸고 싶으면 커스텀 타입 매핑을 사용하면 된다. 특정 String 경로에 대해 비교나 + String 연산을 막아야 하거나 커스텀 타입을 위해 Date/Time 지원이 추가되어야 하는 경우에 커스텀 타입 매핑을 유용하게 사용할 수 있다. Joda time API와 JDK(java.util.Date, Calendar 그리고 하위 타입)의 시간 타입은 기본으로 지원하며, 다른 API가 필요할 경우 이 기능을 사용하면 된다. @@ -242,17 +242,17 @@ import com.mysema.query.annotations.Config; 다음은 예시다. PropertyType.NONE은 쿼리 타입 생성시 프로퍼티를 생략할 때 사용된다. @@ -265,44 +265,44 @@ public class MyEntity{ 위임 메서드(Delegate methods) - 정적 메서드를 위임 메서드로 선언하려면, 해당하는 도메인 타입을 값으로 갖는 + 정적 메서드를 위임 메서드로 선언하려면, 해당하는 도메인 타입을 값으로 갖는 QueryDelegate 어노테이션을 정적 메서드에 적용하고, 정적 메서드의 첫 번째 파라미터로 해당하는 Querydsl 쿼리 타입을 제공한다. 다음은 예제다. - - QUser 쿼리 타입의 생성된 메서드는 다음과 같다. - 내장 타입을 확장하는데 위임 메서드를 사용할 수도 있다. 다음은 몇 가지 예제다. - 내장 타입을 위한 위임 메서드를 선언하면, 위임 메서드를 알맞게 사용하는 하위 클래스가 만들어진다. - { public QDate(BeanPath entity) { @@ -408,7 +408,7 @@ public class QTimestamp extends DateTimePath { 클래스패스 기반 코드 생성 - + 어노테이션이 적용된 자바 소스를 사용할 수 없는 경우(예를 들어, Scala나 Groovy와 같은 다른 JVM 언어를 사용했거나, 바이트코드 조작을 이용해서 어노테이션을 추가한 경우 등), GenericExporter 클래스를 사용해서 클래스패스에서 어노테이션이 적용된 클래스를 @@ -422,16 +422,16 @@ public class QTimestamp extends DateTimePath { 다음은 JPA를 위한 예제다. - 이 코드는 DomainClass의 패키지 및 그 하위패키지에 위치한 모든 JPA 애노테이션 적용 클래스를 @@ -445,13 +445,13 @@ exporter.export(DomainClass.class.getPackage()); querydsl-maven-plugin의 generic-export, jpa-exportㅡjdo-export 골을 통해 GenericExporter를 사용할 수 있다. - + 각 골은 Querydsl, JPA, JDO 어노테이션에 매핑된다. - + 설정 엘리먼트는 다음과 같다. - + 메이븐 설정 @@ -471,8 +471,8 @@ exporter.export(DomainClass.class.getPackage()); targetFolder 생성된 소스가 위치할 대상 폴더 - - boolean + + boolean scala Scala 소스를 생성하려면 true (기본값: false) @@ -481,7 +481,7 @@ exporter.export(DomainClass.class.getPackage()); packages 엔티티 클래스를 검색할 패키지 - + boolean handleFields 필드를 프로퍼티로 처리할 경우 true (기본값: true) @@ -503,7 +503,7 @@ exporter.export(DomainClass.class.getPackage()); -
+ 다음은 JPA 어노테이션이 적용된 클래스를 위한 예다. @@ -541,10 +541,10 @@ exporter.export(DomainClass.class.getPackage()); 위 메이븐 설정은 com.example.domain 및 그 하위 패키지의 JPA 애노테이션 적용 클래스를 찾아 target/generated-sources/java 디렉토리에 코드를 생성한다.
- + 생성 후에, 직접 생성된 소스를 컴파일하려면 그 소스 폴더를 위한 compile 골을 사용하면 된다. - - compile @@ -552,11 +552,11 @@ exporter.export(DomainClass.class.getPackage()); target/generated-sources/scala - -]]> - + +]]>
+ compile 골은 다음 설정 엘리먼트를 갖는다. - + 메이븐 설정 @@ -600,22 +600,22 @@ exporter.export(DomainClass.class.getPackage()); Map compilerOptions 컴파일러 옵션 - + -
- + + sourceFolder를 제외한 모든 옵션은 선택사항이다. - + - + - - Scala 지원 + + Scala 지원 Scala 출력을 원하면, 다음 설정을 사용하자. - + @@ -662,4 +662,4 @@ exporter.export(DomainClass.class.getPackage());
- + diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml index 1cc3d26573..3d9ca789f0 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml @@ -4,10 +4,10 @@ Querydsl에서 Query를 생성하려면 표현식 인자를 이용해서 query 메서드를 호출한다. query 메서드는 모듈에 따라 다르고 이미 튜토리얼에서 설명했으므로, 본 절에서는 표현식에 초점을 맞출 것이다. - + 표현식을 생성할 때에는 도메인 모듈에서 생성한 표현식 타입의 필드와 메서드를 이용한다. 코드 생성할 수 없는 경우, 표현식을 생성하기 위한 범용 방법을 사용하면 된다. - + 복합 조건(complext predicates) @@ -18,13 +18,13 @@ getCustomer(String... names){ - QCustomer customer = QCustomer.customer; - JPAQuery query = new JPAQuery(entityManager).from(customer); + QCustomer customer = QCustomer.customer; + JPAQuery query = new JPAQuery(entityManager).from(customer); BooleanBuilder builder = new BooleanBuilder(); for (String name : names){ builder.or(customer.name.eq(name)); } - query.where(builder); // customer.name eq name1 OR customer.name eq name2 OR ... + query.where(builder); // customer.name eq name1 OR customer.name eq name2 OR ... return query.list(customer); } ]]> @@ -33,7 +33,7 @@ public List getCustomer(String... names){ 각 and 또는 or 호출 뒤에는 오퍼레이션의 결과를 표현한다.
-
+ @@ -43,15 +43,15 @@ public List getCustomer(String... names){ com.mysema.query.support.Expressions 클래스는 동적인 표현식 생성을 위한 정적 팩토리 클래스다. 팩토리 메서드는 리턴 타입에 따라 이름을 지었으므로 쉽게 유추할 수 있다. - + 일반적으로 동적 경로, 커스텀 구문이나 커스텀 오퍼레이션과 같이 Fluent DSL 형식을 사용할 수 없는 경우에 한해 Expressions 클래스를 사용한다. - + 다음 표현식을 보자. @@ -69,9 +69,9 @@ Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant); - + - + 동적 경로 Expressions 기반의 표현식 생성 외에 Querydsl은 동적 경로 생성을 위한 더 표현력이 좋은 API를 제공한다. @@ -80,7 +80,7 @@ Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant); 동적 경로 생성을 위해 com.mysema.query.types.path.PathBuilder 클래스를 사용할 수 있다. 이 클래스는 EntityPathBase 클래스를 확장하고 있고 경로 생성을 위해 클래스 생성과 별칭 사용 대신에 사용가능하다. - + Expressions API와 비교하면 PathBuilder 커스텀 구문이나 unknown 오퍼레이션을 직접 지원하진 않지만, 구문이 일반 DSL에 더 가깝다. @@ -131,33 +131,33 @@ entityPath.getMap("map", String.class, String.class, StringPath.class).get("key" case-when-then-else 표현식을 만들 땐, 다음과 같이 CaseBuilder 클래스를 사용한다. - cases = new CaseBuilder() .when(customer.annualSpending.gt(10000)).then("Premier") .when(customer.annualSpending.gt(5000)).then("Gold") .when(customer.annualSpending.gt(2000)).then("Silver") .otherwise("Bronze"); -// The cases expression can now be used in a projection or condition +// The cases expression can now be used in a projection or condition ]]> equals-operations을 가진 case 표현식은 다음과 같이 단순한 형태를 사용하면 된다. - cases = customer.annualSpending .when(10000).then("Premier") .when(5000).then("Gold") .when(2000).then("Silver") .otherwise("Bronze"); -// The cases expression can now be used in a projection or condition +// The cases expression can now be used in a projection or condition ]]> JDOQL에서는 아직 Case 표현식을 지원하지 않는다. - + Casting 표현식 @@ -182,9 +182,9 @@ QAccount extends EntityPathBase{ QBankAccount extends EntityPathBase{ public final QAccount _super = new QAccount(this); - + // ... -} +} ]]>
상위 타입에서 하위 타입으로 변환하려면 EntityPathBase 클래스의 as 메서드를 사용하면 된다. @@ -192,24 +192,24 @@ QBankAccount extends EntityPathBase{ - - + + - + 리터럴 선택 - + Constant 표현식을 통해 리터럴을 선택할 수 있다. 다음은 간단한 예다. - + + Expressions.constant("abc")); +]]>
+ + 서브쿼리에서 Constant 표현식을 종종 사용한다. - 서브쿼리에서 Constant 표현식을 종종 사용한다. - - + diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml index dfc5d5f921..23f2cf930f 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml @@ -1,41 +1,41 @@ 결과 처리 - + Querydsl은 결과 처리를 커스터마이징 하기 위해 행 기반 변환을 위한 FactoryExpressions과 집합을 위한 ResultTransformer를 제공하고 있다. - com.mysema.query.types.FactoryExpression 인터페이스는 빈 생성, 생성자 호출 + com.mysema.query.types.FactoryExpression 인터페이스는 빈 생성, 생성자 호출 그리고 더 복잡한 객체를 생성하기 위해 사용된다. com.mysema.query.types.Projections 클래스를 이용해서 FactoryExpression 구현체 기능에 접근할 수 있다. - + com.mysema.query.ResultTransformer 인터페이스의 주요 구현체는 GroupBy 클래스이다. - + 다중 컬럼 리턴 - + Querydsl 3.0 부터 다중 컬럼 결과를 위한 기본 타입은 com.mysema.query.Tuple 이다. - Tuple은 타입에 안전한 Map을 제공하고, 이를 통해 Tuple 행 객체로부터 컬럼 데이터에 접근할 수 있다. - + Tuple은 타입에 안전한 Map을 제공하고, 이를 통해 Tuple 행 객체로부터 컬럼 데이터에 접근할 수 있다. + result = query.from(employee).list(employee.firstName, employee.lastName); for (Tuple row : result) { System.out.println("firstName " + row.get(employee.firstName)); - System.out.println("lastName " + row.get(employee.lastName)); -}} -]]> + System.out.println("lastName " + row.get(employee.lastName)); +}} +]]>
위 예제를 QTuple 클래스를 이용하면 다음과 같이 작성할 수 있다. - + result = query.from(employee).list(new QTuple(employee.firstName, employee.lastName)); for (Tuple row : result) { System.out.println("firstName " + row.get(employee.firstName)); - System.out.println("lastName " + row.get(employee.lastName)); -}} -]]> - + System.out.println("lastName " + row.get(employee.lastName)); +}} +]]>
+ @@ -43,26 +43,26 @@ for (Tuple row : result) { 빈 생성(population) 쿼리 결과로부터 빈을 생성하고 싶다면, Bean 프로젝션을 사용하면 된다. - + dtos = query.list( Projections.bean(UserDTO.class, user.firstName, user.lastName)); ]]> setter 메서드 대신 필드에 직접 접근해야 한다면 다음 코드를 사용하면 된다. - + dtos = query.list( Projections.fields(UserDTO.class, user.firstName, user.lastName)); -]]> +]]>
생성자 사용 - + 생성자 기반의 행 변환을 하는 방법은 다음과 같다. - + dtos = query.list( Projections.bean(UserDTO.class, user.firstName, user.lastName)); @@ -87,7 +87,7 @@ class CustomerDTO { dtos = query.from(customer).list(new QCustomerDTO(customer.id, customer.name)); +List dtos = query.from(customer).list(new QCustomerDTO(customer.id, customer.name)); ]]> 이 예제가 Hibernate용 코드이긴 하지만, 다른 모든 모듈에서도 이 기능을 사용할 수 있다. @@ -114,7 +114,7 @@ class Customer { dtos = query.from(customer).list(QCustomer.create(customer.id, customer.name)); +List dtos = query.from(customer).list(QCustomer.create(customer.id, customer.name)); ]]> 코드 생성을 할 수 없다면, 다음과 같이 생성자 프로젝션을 생성할 수 있다. @@ -122,7 +122,7 @@ List dtos = query.from(customer).list(QCustomer.create(customer.id, cu dtos = query.from(customer) - .list(ConstructorExpression.create(Customer.class, customer.id, customer.name)); + .list(ConstructorExpression.create(Customer.class, customer.id, customer.name)); ]]> @@ -142,7 +142,7 @@ List dtos = query.from(customer) > results = query.from(post, comment) .where(comment.post.id.eq(post.id)) .transform(groupBy(post.id).as(list(comment))); @@ -152,7 +152,7 @@ Map> results = query.from(post, comment) 다중 결과 컬럼 - results = query.from(post, comment) .where(comment.post.id.eq(post.id)) .transform(groupBy(post.id).as(post.name, set(comment.id))); @@ -164,7 +164,7 @@ Map results = query.from(post, comment) Group은 GroupBy에 대해 Tuple 인터페이스와 같은 역할을 한다. - 더 많은 예제는 + 더 많은 예제는 여기를 참고한다. @@ -173,4 +173,4 @@ Map results = query.from(post, comment) - \ No newline at end of file + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml b/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml index 222316443f..13a305c986 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml @@ -10,7 +10,7 @@ Querydsl은 타입에 안전한 방식으로 HQL 쿼리를 실행하기 위한 목적으로 만들어졌다. HQL 쿼리를 작성하다보면 String 연결을 이용하게 되고, 이는 결과적으로 읽기 어려운 코드를 만드는 문제를 야기한다. - String을 이용해서 도메인 타입과 프로퍼티를 참조하다보면 + String을 이용해서 도메인 타입과 프로퍼티를 참조하다보면 오타 등으로 잘못된 참조를 하게 될 수 있으며, 이는 String을 이용해서 HQL 작성할 때 발생하는 또 다른 문제다. @@ -50,11 +50,11 @@ - Javadoc에서 com.mysema.query.Query, com.mysema.query.Projectable 그리고 + Javadoc에서 com.mysema.query.Query, com.mysema.query.Projectable 그리고 com.mysema.query.types.Expression의 내용을 보면 Querydsl 쿼리와 표현 타입이 제공하는 표현력을 알게 될 것이다. - \ No newline at end of file + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/preface.xml b/querydsl-docs/src/main/docbook/ko-KR/content/preface.xml index 7fb7471488..c3818ddd25 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/preface.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/preface.xml @@ -5,7 +5,7 @@ Querydsl 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해 주는 프레임워크다. - 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, + 문자열로 작성하거나 XML 파일에 쿼리를 작성하는 대신, Querydsl이 제공하는 플루언트(Fluent) API를 이용해서 쿼리를 생성할 수 있다. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml b/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml index 286fed3964..5b3bb0c605 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml @@ -12,7 +12,7 @@ 올바르게 인코딩되지 않은 필드나 getter를 사용할 경우, 다음과 같은 에러가 발생한다. - names; // RIGHT - + private Map employeesByName; // WRONG - + private Map employeesByName; // RIGHT ]]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials.xml index 8114a0cef8..653a9b65c1 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials.xml @@ -2,12 +2,12 @@ 튜토리얼 - + 일반적인 시작 안내 문서 대신 Querydsl이 지원하는 주요 백엔드 기술에 대한 안내 문서를 제공한다. - - + + @@ -16,5 +16,5 @@ - - \ No newline at end of file + + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml index db6e7057f2..c9b7ce1ae8 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml @@ -20,9 +20,9 @@ @@ -32,8 +32,8 @@ import static com.mysema.query.alias.Alias.*; - $ 메서드로 감싸는 방법으로 Cat 타입의 별칭 인스턴스 및 그것의 getter 메서드 호출을 - 경로로 바꾼다. 예를 들어, c.getKittens()에 대한 호출은 + $ 메서드로 감싸는 방법으로 Cat 타입의 별칭 인스턴스 및 그것의 getter 메서드 호출을 + 경로로 바꾼다. 예를 들어, c.getKittens()에 대한 호출은 $ 메서드를 통해 c.kittends 경로로 바뀐다. @@ -60,7 +60,7 @@ for (String name : from($(c),cats) ]]> - 별칭의 모든 비-기본타입과 non-final 타입 프로퍼티는 별칭 그 자체이다. + 별칭의 모든 비-기본타입과 non-final 타입 프로퍼티는 별칭 그 자체이다. 따라서, $ 메서드 범위안에서 기본 타입이나 non-final 타입 (예, java.lang.String)을 만날 때 까지 연속된 메서드 호출이 가능하다. @@ -129,8 +129,8 @@ for (String name : from(cat,cats) querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-collections @@ -141,7 +141,7 @@ for (String name : from(cat,cats) org.slf4j slf4j-log4j12 1.6.1 - + ]]> @@ -190,18 +190,18 @@ for (String name : from(cat,cats) - + - + - + - + ]]> @@ -218,7 +218,7 @@ for (String name : from(cat,cats) Querydsl Collections 모듈은 Hamcrest matchers를 제공한다. 다음의 import를 통해 사용하면 된다. - 다음과 같이 사용할 수 있다. - diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml index 459b0cf7fa..fd0e86d80a 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml @@ -22,8 +22,8 @@ querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-jdo @@ -34,7 +34,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]>
@@ -99,18 +99,18 @@ - + - + - + - + ]]> @@ -139,19 +139,19 @@ public class Customer { private String firstName; private String lastName; - + public String getFirstName(){ return firstName; } - + public String getLastName(){ return lastName; } - + public void setFirstName(String fn){ firstName = fn; } - + public void setLastName(String ln)[ lastName = ln; } @@ -228,7 +228,7 @@ query.close(); @@ -237,7 +237,7 @@ query.from(customer, company); 또는, 다음과 같이 해도 된다. @@ -303,7 +303,7 @@ query.from(customer) 정렬을 위한 구문은 다음과 같다. - 그룹핑은 다음과 같은 코드로 처리한다. - - JDODeleteClause 생성자의 두 번째 파라미터는 삭제할 엔티티 대상이다. @@ -364,14 +364,14 @@ QDepartment d = new QDepartment("d"); query.from(department) .where(department.employees.size().eq( new JDOSubQuery().from(d).unique(AggregationFunctions.max(d.employees.size())) - )).list(department); + )).list(department); ]]> 위 코드는 다음의 네이티브 JDO 쿼리를 표현한다. SELECT this FROM com.mysema.query.jdoql.models.company.Department -WHERE this.employees.size() == +WHERE this.employees.size() == (SELECT max(d.employees.size()) FROM com.mysema.query.jdoql.models.company.Department d) @@ -391,8 +391,8 @@ query.from(employee) 위 코드는 다음의 네이티브 JDO 쿼리를 표현한다. -SELECT this FROM com.mysema.query.jdoql.models.company.Employee -WHERE this.weeklyhours > +SELECT this FROM com.mysema.query.jdoql.models.company.Employee +WHERE this.weeklyhours > (SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager) @@ -453,11 +453,11 @@ WHERE this.weeklyhours > names = query.from(cat).list(cat.name); ]]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml index acb2a5efc4..021dd1dd15 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml @@ -28,8 +28,8 @@ querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-jpa @@ -40,7 +40,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]>
@@ -95,7 +95,7 @@ - 생성된 Query 타입을 이용하면 JPA 쿼리 인스턴스와 + 생성된 Query 타입을 이용하면 JPA 쿼리 인스턴스와 쿼리 도메인 모델 인스턴스를 생성할 수 있다. @@ -113,18 +113,18 @@ - + - + - + - + ]]> @@ -147,7 +147,7 @@ @RooJpaEntity@RooJpaActiveRecord 애노테이션이 적용된 클래스를 처리한다. - + APT 기반의 코드 생성 기능은 AspectJ IDT에는 잘 동작하지 않는다. @@ -171,7 +171,7 @@ HibernateDomainExporter exporter = new HibernateDomainExporter( "Q", // name prefix new File("target/gen3"), // target folder - configuration); // instance of org.hibernate.cfg.Configuration + configuration); // instance of org.hibernate.cfg.Configuration exporter.export(); ]]>
@@ -258,17 +258,17 @@ QCustomer customer = new QCustomer("myCustomer"); Hibernate를 사용한다면, HibernateQuery를 사용하면 된다. - + JPAQuery와 HibernateQuery는 둘 다 JPQLQuery 인터페이스를 구현하고 있다. @@ -296,7 +296,7 @@ Customer bob = query.from(customer) @@ -305,7 +305,7 @@ query.from(customer, company); 또는, 다음과 같이 해도 된다. @@ -340,7 +340,7 @@ query.from(customer) 조인 역시 타입에 안전하며 다음 패턴에 따라 작성한다. - 다음은 조인을 사용하는 또 다른 예다. - 위 코드의 JPQL 버전은 다음과 같다. - + from Cat as cat left join cat.kittens as kitten - on kitten.bodyWeight > 10.0 + on kitten.bodyWeight > 10.0 @@ -430,7 +430,7 @@ from Cat as cat 정렬을 위한 구문은 다음과 같다. - 위 코드는 다음의 JPQL과 동일하다. - + from Customer as customer order by customer.lastName asc, customer.firstName desc @@ -452,7 +452,7 @@ from Customer as customer 그룹핑은 다음과 같은 코드로 처리한다. - 동등한 JPQL은 다음고 같다. - + select customer.lastName from Customer as customer group by customer.lastName @@ -475,12 +475,12 @@ select customer.lastName 다음은 몇 가지 예다. - JPADeleteClause 생성자의 두 번째 파라미터는 삭제할 엔티티 대상이다. @@ -489,24 +489,24 @@ new JPADeleteClause(entityManager, customer).where(customer.level.lt(3)).execute Hibernate 이용시, HibernateDeleteClause를 사용하면 된다. - + JPA의 DML 절은 JPA 레벨의 영속성 전파 규칙을 따르지 않고, 2차 레벨 캐시와의 연동되지 않는다. UpdateClause - + Querydsl JPA의 UpdateClause은 간단한 update-set/where-execute 형태를 취한다. 다음은 몇 가지 예다. - JPAUpdateClause 생성자의 두 번째 파라미터는 수정할 엔티티 대상이다. @@ -515,7 +515,7 @@ new JPAUpdateClause(session, customer).where(customer.name.eq("Bob")) Hibernate 이용시, HibernateUpdateClause를 사용한다. - + JPA에서 DML 절은 JPA 레벨의 영속성 전파 규칙을 따르지 않고, 2차 레벨 캐시와 연동되지 않는다. @@ -625,12 +625,12 @@ List results = jpaQuery.getResultList(); names = query.from(cat).list(cat.name); ]]> @@ -638,13 +638,13 @@ List names = query.from(cat).list(cat.name); 한 쿼리에서 엔티티(예, QCat)와 테이블(예, SAnimal)에 대한 참조를 섞어 쓰고 싶다면, 같은 변수명을 갖도록 해야 한다. SAnimal.animal은 "animal"이란 변수명을 가지므로 새로운 인스턴스 (new SAnimal("cat"))을 대신 사용했다. - + 다음과 같이 할 수도 있다. - + +]]> 다중 컬럼 쿼리: diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml index faec988c32..b6267f2b37 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml @@ -5,14 +5,14 @@ 루신 쿼리 이 절에서는 루신 모듈의 쿼리 기능을 설명한다. - + Maven integration Querydsl 루신을 사용하려면 루신 3은 querydsl-lucene3 모듈을 그리고 루신 4는 querydsl-lucene4 모듈을 사용한다. - + 루신 3: org.slf4j slf4j-log4j12 1.6.1 - + ]]> 루신 4: - + com.mysema.querydsl @@ -42,8 +42,8 @@ org.slf4j slf4j-log4j12 1.6.1 - -]]> + +]]> @@ -53,16 +53,16 @@ 다음과 같은 방식으로 year와 title 필드를 가진 쿼리 타입을 직접 작성할 수 있다. - { private static final long serialVersionUID = -4872833626508344081L; - + public QDocument(String var) { super(Document.class, PathMetadataFactory.forVariable(var)); } public final StringPath year = createString("year"); - + public final StringPath title = createString("title"); } ]]> @@ -79,11 +79,11 @@ public class QDocument extends EntityPathBase{ Querydsl 루신으로 쿼리하는 것은 간단하다. - documents = query .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) .list(); @@ -91,7 +91,7 @@ List documents = query 위 코드는 다음의 루신 쿼리로 바뀐다. - @@ -131,7 +131,7 @@ List documents = query 정렬 구문은 다음과 같다. - 위 코드는 다음 루신 쿼리와 동일하다. - + title:* @@ -150,7 +150,7 @@ title:* 결과 개수 제한은 다음과 같이 한다. - 오프셋은 다음과 같이 지정한다. - - 단일 루신 필터를 쿼리에 적용할 수 있다. - distinct 필터링을 위한 distinct(Path) 메서드를 제공한다. - querydsl-apt ${querydsl.version} provided - - + + com.mysema.querydsl querydsl-mongodb @@ -31,7 +31,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]> @@ -95,7 +95,7 @@ query = new MorphiaQuery(morphia, datastore, user); List list = query @@ -139,7 +139,7 @@ List list = query 정렬 구문은 다음과 같다. - 다음과 같이 결과 개수를 제한한다. - 다음과 같이 오프셋을 지정한다. - near(Douyble[]) 메서드를 이용해서 공간 검색을 할 수 있다. - - Scala에서 쿼리하기 - querydsl-scala 모듈을 통해 Scala에서 Querydsl을 사용할 수 있다. + querydsl-scala 모듈을 통해 Scala에서 Querydsl을 사용할 수 있다. 이 모듈을 사용하려면 메이븐 빌드에 다음의 코드를 추가한다. @@ -52,7 +52,7 @@ expr gt 5 expr > 5 expr goe 5 expr >= 5 expr notBetween(2,6) expr not between (2,6) expr negate -expr - + // numeric expr add 3 expr + 3 expr subtract 3 expr - 3 @@ -75,7 +75,7 @@ map.get("X") map("X") - Querydsl 쿼리에서 Scala 프로젝션을 활성화하려면 + Querydsl 쿼리에서 Scala 프로젝션을 활성화하려면 RichProjectableRichSimpleProjectable 래퍼를 사용해야 한다. com.mysema.query.scala.Helpers를 임포트 함으로써 필요한 임의 변환이 가능해진다. @@ -84,7 +84,7 @@ map.get("X") map("X") 예를 들어, 표준 API를 이용한 다음 쿼리는 Object[] 타입의 java.util.List를 리턴한다. - @@ -97,7 +97,7 @@ query.from(person).list(person.firstName, person.lastName, person.age) @@ -117,7 +117,7 @@ query.from(person).select(person.firstName, person.lastName, person.age) 빈 타입 없이 생성하기: - 빈 타입을 이용해서 생성하기: - @@ -167,14 +167,14 @@ exporter.export(connection.getMetaData) 다음의 일반 쿼리를 사용하는 대신에 - 다음과 같이 Employee 또는 QEmployee의 companio 객체를 사용할 수 있다. - 표현식에 orderBy, where, select, single, unique를 사용하는 대신, @@ -182,8 +182,8 @@ Employee.select(_.firstName, _.lastName) 다음은 앞 예제를 확장한 형식이다. - e.firstName }, { e => e.lastName }) + e.firstName }, { e => e.lastName }) ]]> @@ -257,7 +257,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) 다음은 JPA를 이용할 때의 예제다. - Long where @@ -313,8 +313,8 @@ query.from(person).orderBy(person.firstName asc).list(person) Not null @@ -335,4 +335,4 @@ val person = Person as "person" - + diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index 78a3a3c7bb..9b06392f90 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -18,8 +18,8 @@ com.mysema.querydsl querydsl-sql ${querydsl.version} - - + + com.mysema.querydsl querydsl-sql-codegen @@ -31,7 +31,7 @@ org.slf4j slf4j-log4j12 1.6.1 - + ]]> 코드 생성을 메이븐이나 Ant에서 할 경우 querydsl-sql-codegen 의존은 생략할 수 있다. @@ -243,18 +243,18 @@ - + 추가로 타입 구현을 등록하고 싶을 때 customTypes을 사용한다. - - com.mysema.query.sql.types.InputStreamType -]]> +]]> 테이블.컬럼을 위한 자바 타입을 등록하고 싶을 때 typeMappings를 사용한다. - - IMAGE
@@ -262,11 +262,11 @@ java.io.InputStream
-]]>
- +]]>
+ 숫자 매핑을 위한 기본 타입은 다음과 같다. - + 숫자 매핑 @@ -314,23 +314,23 @@ > 0 > 0 Double - + -
- + + 특정 크기/자리에 대한 커스텀 타입은 다음과 같이 설정한다. - - 1 0 java.lang.Byte - -]]> - + +]]>
+ Import를 사용하면 크로스 스키마 외래키 지원을 추가할 수 있다. APT 기반 코드 생성과 비교할 때 특정 기능은 사용할 수 없다. (예, QueryDelegate 애노테이션 처리) @@ -356,12 +356,12 @@ DB 스키마를 Querydsl의 쿼리 타입으로 만들려면 다음과 같이 하면 된다. - 위 코드를 실행하면 데이터베이스 스키마로부터 @@ -379,18 +379,18 @@ exporter.export(conn.getMetaData()); - + - + 설정 - + com.mysema.query.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어, H2 DB 사용시 다음과 같이 생성한다. - - Querydsl은 서로 다른 RDBMS를 위한 SQL 직렬화를 커스터마이징하기 위해 @@ -440,11 +440,11 @@ Configuration configuration = new Configuration(templates); TeradataTemplates (tested with Teradata 14) - - - - SQLTemplate 객체의 설정을 변경하려면 다음과 같이 빌더 패턴을 사용할 수 있다. - + + + + SQLTemplate 객체의 설정을 변경하려면 다음과 같이 빌더 패턴을 사용할 수 있다. + +]]>
Configuration 클래스를 이용하면 setUseLiterals(true)를 통한 리터럴의 직접 직렬화 활성, 스키마와 테이블 재정의, 커스텀 타입을 등록할 수 있다. 완전한 내용은 javadoc의 Configuration를 참고한다. - + @@ -466,10 +466,10 @@ Configuration configuration = new Configuration(templates); Querydsl SQL을 이용해서 쿼리하는 방법은 다음처럼 간단하다. - lastNames = query.from(customer) .where(customer.firstName.eq("Bob")) .list(customer.lastName); @@ -481,11 +481,11 @@ List lastNames = query.from(customer) last_name이라고 가정) - +]]> @@ -542,7 +542,7 @@ WHERE c.first_name = 'Bob' 다음 구문을 이용해서 조인을 한다. - 레프트 조인은 다음과 같다. - 조인 조건을 쓸 수도 있다. - 다음은 정렬 구문이다. - 위 코드는 아래 SQL 쿼리와 동등하다. - + SELECT c.first_name, c.last_name -FROM customer c +FROM customer c ORDER BY c.last_name ASC, c.first_name ASC @@ -597,7 +597,7 @@ ORDER BY c.last_name ASC, c.first_name ASC 다음 형식을 이용해서 그룹핑을 한다. - 다음은 위 코드에 해당하는 SQL 쿼리다. - -SELECT c.last_name -FROM customer c + +SELECT c.last_name +FROM customer c GROUP BY c.last_name @@ -626,39 +626,39 @@ GROUP BY c.last_name 서브쿼리도 쿼리처럼 타입에 안전한 Querydsl 표현식이다. - 다른 예제 - - + 리터럴 조회 - + 리터럴을 조회하려면, 다음과 같이 constant 인스턴스를 생성해주면 된다. - + + Expressions.constant("abc")); +]]> com.mysema.query.support.Expressions 클래스는 프로젝션, 오퍼레이션, 템플릿 생성을 위한 유용한 정적 메서드도 제공한다. - + @@ -670,32 +670,32 @@ query.list(Expressions.constant(1), 다음은 MySQLQuery 클래스에서 플래그를 추가하는 예를 보여주고 있다. - { - + public MySQLQuery(Connection conn) { this(conn, new MySQLTemplates(), new DefaultQueryMetadata()); } - + public MySQLQuery(Connection conn, SQLTemplates templates) { this(conn, templates, new DefaultQueryMetadata()); } - + protected MySQLQuery(Connection conn, SQLTemplates templates, QueryMetadata metadata) { super(conn, new Configuration(templates), metadata); } - + public MySQLQuery bigResult(){ return addFlag(Position.AFTER_SELECT, "SQL_BIG_RESULT "); } - + public MySQLQuery bufferResult(){ return addFlag(Position.AFTER_SELECT, "SQL_BUFFER_RESULT "); } - - - // ... -} + + + // ... +} ]]> @@ -704,15 +704,15 @@ public class MySQLQuery extends AbstractSQLQuery { - + - + 윈도우 함수 - + Querydsl은 SQLExpressions 클래스를 통해서 윈도우 함수를 지원한다. - + 다음은 사용 예다. - + - + - + - + 다른 SQL 표현식 - + SQLExpressions 클래스의 정적 메서드를 이용해서 다른 SQL 표현식을 사용할 수 있다. - + @@ -749,7 +749,7 @@ query.from(employee) columns/values를 사용하는 대신, set 메서드를 이용 - + +]]> 위 코드는 첫 번째 예제와 동일하다. set 메서드를 사용하면 내부적으로 columns/values가 사용된다. - + 아래 형식의 코드에서는 컬럼과 쿼리 결과 집합을 매핑하는 것에 주의하자. - + - +]]> + 변경된 행 개수 대신 생성된 키를 구하고 싶다면 executeWithKey/s 메서드를 사용한다. +]]> 위 코드는 한 개 컬럼을 매핑한다. 서브 쿼리 결과가 없으면 null을 사용한다. - + 빈의 데이터에 기반해서 clause 인스턴스를 생성하려면 다음의 코드를 사용한다. 위 코드는 빈의 데이터 중 null은 제외한다. null도 포함시키고 싶다면 아래 코드를 사용한다. - + +]]> @@ -840,19 +840,19 @@ new SQLUpdateClause(conn, configuration, survey) where 절 없이 - 빈을 이용 - + +]]> @@ -868,14 +868,14 @@ QSurvey survey = QSurvey.survey; new SQLDelecteClause(conn, configuration, survey) .where(survey.name.eq("XXX")) .execute(); - + ]]> where 없이 - @@ -894,7 +894,7 @@ new SQLDelecteClause(conn, configuration, survey) 수정: - MetaDataExporter를 이용해서 테이블에 대한 자바빈 DTO 타입을 생성한다. - DMLClause의 populate 메서드의 인자로 빈 타입을 사용할 수 있으며, 쿼리에서 빈 타입을 직접 선택할 수 있다. 다음은 JUnit으로 작성한 간단한 예이다. - 앞서 예제에서 사용한 팩토리 메서드는 다음과 같다. - e){ return new SQLUpdateClause(Connections.getConnection(), templates, e); } @@ -989,21 +989,21 @@ protected SQLMergeClause merge(RelationalPath e){ } protected SQLQuery query() { - return new SQLQuery(Connections.getConnection(), templates); + return new SQLQuery(Connections.getConnection(), templates); } - + ]]> - + --> - + SQL 쿼리와 바인딩 추출하기 - + getSQL 메서드를 통해서 SQL 쿼리와 바인딩 값을 구할 수 있다. - + - +System.out.println(bindings.getSQL()); +]]> + SQL 문자열에 포함된 모든 리터럴이 필요하다면, setUseLiterals(true)를 이용해서 쿼리의 리터럴 직렬화를 활성화하면 된다. @@ -1052,15 +1052,15 @@ System.out.println(bindings.getSQL()); Configuration 객체는 실제 쿼리의 생성자 인자로 제공된다. - 특정 테이블 컬럼을 위한 커스텀 타입 매핑 등록 - (Gender.class)); @@ -1069,24 +1069,24 @@ configuration.register("person", "gender", new EnumByNameType(Gender.cl 숫자에 대한 커스텀 타입 매핑을 등록하려면 registerNumeric 메서드를 사용한다. - 이는 Float 타입을 NUMERIC(5,2) 타입으로 매핑한다. - + - + Query와 Clause 리스닝 - + SQLListener는 쿼리와 DMLClause를 리스닝 할 때 사용되는 리스너 인터페이스이다. Configuration이나 Query, Clause의 addListener 메서드를 통해서 SQLListener 객체를 등록할 수 있다. - + 리스너의 적용 예로는 데이터 동기화, 로깅, 캐싱, 검증이 있다. - + - + diff --git a/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml b/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml index 2fa6055d6f..228f66a271 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml @@ -5,6 +5,6 @@ 저작권 Mysema Ltd, 2007-2013. 이 저작물은 Apache License, Version 2.0에 따라 - 누구나 사용, 편집, 복사, 재배포 가능합니다. + 누구나 사용, 편집, 복사, 재배포 가능합니다. From 64ebda492b53d40416bfa286dd08338f95b0f010 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 10 Oct 2014 17:18:44 +0200 Subject: [PATCH 0477/1968] Fix the links to the reference documentation of submodules --- querydsl-collections/README.md | 2 +- querydsl-jdo/README.md | 2 +- querydsl-jpa/README.md | 2 +- querydsl-lucene3/README.md | 2 +- querydsl-lucene4/README.md | 2 +- querydsl-mongodb/README.md | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/querydsl-collections/README.md b/querydsl-collections/README.md index 28be2b7e21..b6247e6c73 100644 --- a/querydsl-collections/README.md +++ b/querydsl-collections/README.md @@ -67,4 +67,4 @@ Querying with Querydsl Collections is as simple as this : System.out.println(name); } -For more information on the Querydsl Collections module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s07.html \ No newline at end of file +For more information on the Querydsl Collections module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s08.html diff --git a/querydsl-jdo/README.md b/querydsl-jdo/README.md index 3632d73dae..ffa0e772a0 100644 --- a/querydsl-jdo/README.md +++ b/querydsl-jdo/README.md @@ -73,4 +73,4 @@ Querying with Querydsl JDO is as simple as this : .uniqueResult(customer); query.close(); -For more information on the Querydsl JDO module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s02.html \ No newline at end of file +For more information on the Querydsl JDO module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s02.html diff --git a/querydsl-jpa/README.md b/querydsl-jpa/README.md index 650d6676e6..c4c1db3702 100644 --- a/querydsl-jpa/README.md +++ b/querydsl-jpa/README.md @@ -74,4 +74,4 @@ Querying with Querydsl JPA is as simple as this : .where(customer.firstName.eq("Bob")) .uniqueResult(customer); -For more information on the Querydsl JPA module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration \ No newline at end of file +For more information on the Querydsl JPA module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration diff --git a/querydsl-lucene3/README.md b/querydsl-lucene3/README.md index 1aca60249b..b945b4c304 100644 --- a/querydsl-lucene3/README.md +++ b/querydsl-lucene3/README.md @@ -55,4 +55,4 @@ which is transformed into the following Lucene query : +year:[1800 TO 2000] +title:huckle* -For more information on the Querydsl Lucene module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s04.html +For more information on the Querydsl Lucene module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s05.html diff --git a/querydsl-lucene4/README.md b/querydsl-lucene4/README.md index 0250337fab..9376076726 100644 --- a/querydsl-lucene4/README.md +++ b/querydsl-lucene4/README.md @@ -55,4 +55,4 @@ which is transformed into the following Lucene query : +year:[1800 TO 2000] +title:huckle* -For more information on the Querydsl Lucene module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s04.html \ No newline at end of file +For more information on the Querydsl Lucene module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s05.html diff --git a/querydsl-mongodb/README.md b/querydsl-mongodb/README.md index 943e67f719..e23fd2b23a 100644 --- a/querydsl-mongodb/README.md +++ b/querydsl-mongodb/README.md @@ -69,4 +69,4 @@ Querying with Querydsl Mongodb with Morphia is as simple as this : .list(); -For more information on the Querydsl Mongodb module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s06.html \ No newline at end of file +For more information on the Querydsl Mongodb module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s07.html From e83c592d068a3beeab2cb21220f896d381578002 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Oct 2014 00:57:14 +0300 Subject: [PATCH 0478/1968] Improve path in collection handling --- .../java/com/mysema/query/sql/SQLSerializer.java | 13 ++++++++----- .../src/test/java/com/mysema/query/SelectBase.java | 6 ++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 16cf6d0340..09bf696d0d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -745,7 +745,7 @@ public void visitConstant(Object constant) { append(")"); int size = ((Collection) constant).size() - 1; - Path lastPath = constantPaths.get(constantPaths.size() - 1); + Path lastPath = constantPaths.isEmpty() ? null : constantPaths.get(constantPaths.size() - 1); for (int i = 0; i < size; i++) { constantPaths.add(lastPath); } @@ -832,10 +832,13 @@ protected void visitOperation(Class type, Operator operator, List && args.get(1) instanceof Constant && operator != Ops.NUMCAST) { - for (Element element : templates.getTemplate(operator).getElements()) { - if (element instanceof Template.ByIndex && ((Template.ByIndex)element).getIndex() == 1) { - constantPaths.add((Path)args.get(0)); - break; + Object constant = ((Constant)args.get(1)).getConstant(); + if (!Collection.class.isInstance(constant) || !((Collection)constant).isEmpty()) { + for (Element element : templates.getTemplate(operator).getElements()) { + if (element instanceof Template.ByIndex && ((Template.ByIndex)element).getIndex() == 1) { + constantPaths.add((Path)args.get(0)); + break; + } } } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 50abada21a..eb9d52148d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -594,6 +594,12 @@ public void In() { query().from(employee).where(employee.id.in(Arrays.asList(1,2))).list(employee); } + @Test + @IncludeIn(H2) + public void In_Empty() { + query().from(employee).where(employee.id.in(ImmutableList.of())).list(employee); + } + @Test public void Inner_Join() throws SQLException { query().from(employee).innerJoin(employee2) From ca7b6371500bf75ae6e26395264c1fedb1d1bbc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Oct 2014 11:28:48 +0300 Subject: [PATCH 0479/1968] Generalize support for path.in(empty) --- .../main/java/com/mysema/query/jpa/JPQLSerializer.java | 2 +- .../src/test/java/com/mysema/query/AbstractJPATest.java | 5 ++--- .../main/java/com/mysema/query/sql/SQLSerializer.java | 8 ++++++++ .../src/test/java/com/mysema/query/SelectBase.java | 9 +++++++-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java index 136fe2bbac..915138d4e9 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java @@ -419,7 +419,7 @@ private void visitPathInCollection(Class type, Operator operator, @SuppressWarnings("unchecked") Constant> rhs = (Constant>) args.get(1); if (rhs.getConstant().isEmpty()) { - operator = Ops.EQ; + operator = operator == Ops.IN ? Ops.EQ : Ops.NE; args = ImmutableList.of(NumberTemplate.ONE, NumberTemplate.TWO); } else if (entityManager != null && !templates.isPathInEntitiesSupported() && args.get(0).getType().isAnnotationPresent(Entity.class)) { final Metamodel metamodel = entityManager.getMetamodel(); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index dcaae18ca1..b11b43f795 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -40,7 +40,6 @@ import com.mysema.query.types.expr.*; import com.mysema.query.types.path.*; import com.mysema.testutil.ExcludeIn; -import com.mysema.testutil.IncludeIn; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -950,10 +949,10 @@ public void Not_In() { } @Test - @IncludeIn(Target.H2) @NoBatooJPA public void Not_In_Empty() { - query().from(cat).where(cat.name.notIn(Collections.emptyList())).count(); + long count = query().from(cat).count(); + assertEquals(count, query().from(cat).where(cat.name.notIn(Collections.emptyList())).count()); } @Test diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 09bf696d0d..dc9b7a9816 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -30,6 +30,7 @@ import com.mysema.query.support.SerializerBase; import com.mysema.query.types.*; import com.mysema.query.types.Template.Element; +import com.mysema.query.types.template.NumberTemplate; /** * SqlSerializer serializes Querydsl queries into SQL @@ -874,6 +875,13 @@ protected void visitOperation(Class type, Operator operator, List)args.get(1)).getConstant().isEmpty()) { + super.visitOperation(type, operator == Ops.IN ? Ops.EQ : Ops.NE, + ImmutableList.of(NumberTemplate.ONE, NumberTemplate.TWO)); + } else if (operator == SQLOps.WITH_COLUMNS) { boolean oldSkipParent = skipParent; skipParent = true; diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index eb9d52148d..2bf2ed3366 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -595,9 +595,14 @@ public void In() { } @Test - @IncludeIn(H2) public void In_Empty() { - query().from(employee).where(employee.id.in(ImmutableList.of())).list(employee); + assertEquals(0, query().from(employee).where(employee.id.in(ImmutableList.of())).count()); + } + + @Test + public void NotIn_Empty() { + long count = query().from(employee).count(); + assertEquals(count, query().from(employee).where(employee.id.notIn(ImmutableList.of())).count()); } @Test From 7d6de92d7920a11066a9bc33f555db6473be271c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Oct 2014 11:53:45 +0300 Subject: [PATCH 0480/1968] Add element type handling --- .../types/path/PathBuilderValidator.java | 25 +++++++++++++-- .../types/path/PathBuilderValidatorTest.java | 32 +++++++++++++------ .../jpa/support/JPAPathBuilderValidator.java | 12 ++++++- .../support/JPAPathBuilderValidatorTest.java | 8 +++-- 4 files changed, 62 insertions(+), 15 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java index 4b27946f22..edad71b044 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java @@ -13,10 +13,14 @@ */ package com.mysema.query.types.path; +import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Map; import com.google.common.primitives.Primitives; import com.mysema.util.BeanUtils; +import com.mysema.util.ReflectionUtils; /** * PathBuilderValidator validates PathBuilder properties at creation time @@ -44,7 +48,14 @@ public Class validate(Class parent, String property, Class Class validate(Class parent, String property, Class propertyType) { while (!parent.equals(Object.class)) { try { - return (Class) parent.getDeclaredField(property).getType(); + Field field = parent.getDeclaredField(property); + if (Map.class.isAssignableFrom(field.getType())) { + return (Class) ReflectionUtils.getTypeParameterAsClass(field.getGenericType(), 1); + } else if (Collection.class.isAssignableFrom(field.getType())) { + return (Class) ReflectionUtils.getTypeParameterAsClass(field.getGenericType(), 0); + } else { + return (Class) Primitives.wrap(field.getType()); + } } catch (NoSuchFieldException e) { parent = parent.getSuperclass(); } @@ -60,7 +71,17 @@ public Class validate(Class parent, String property, Class) getter.getReturnType() : null; + if (getter != null) { + if (Map.class.isAssignableFrom(getter.getReturnType())) { + return (Class) ReflectionUtils.getTypeParameterAsClass(getter.getGenericReturnType(), 1); + } else if (Collection.class.isAssignableFrom(getter.getReturnType())) { + return (Class) ReflectionUtils.getTypeParameterAsClass(getter.getGenericReturnType(), 0); + } else { + return (Class) Primitives.wrap(getter.getReturnType()); + } + } else { + return null; + } } }; diff --git a/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderValidatorTest.java b/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderValidatorTest.java index 8f1751baea..d66ca2aa3f 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderValidatorTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/path/PathBuilderValidatorTest.java @@ -1,18 +1,26 @@ package com.mysema.query.types.path; +import java.util.Collection; +import java.util.Map; + import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class PathBuilderValidatorTest { public static class Customer { String name; + Collection collection; + Map map; } public static class ExtendedCustomer extends Customer {} public static class Project { public String getName() { return ""; } + public Collection getCollection() { return null; } + public Map getMap() { return null; } } public static class ExtendedProject extends Project { @@ -21,16 +29,18 @@ public static class ExtendedProject extends Project { @Test public void Default() { - assertNotNull(PathBuilderValidator.DEFAULT.validate(Customer.class, "name", String.class)); - assertNotNull(PathBuilderValidator.DEFAULT.validate(ExtendedCustomer.class, "name", String.class)); - assertNotNull(PathBuilderValidator.DEFAULT.validate(Project.class, "name", String.class)); - assertNotNull(PathBuilderValidator.DEFAULT.validate(ExtendedProject.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.DEFAULT.validate(Customer.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.DEFAULT.validate(ExtendedCustomer.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.DEFAULT.validate(Project.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.DEFAULT.validate(ExtendedProject.class, "name", String.class)); } @Test public void Fields() { - assertNotNull(PathBuilderValidator.FIELDS.validate(Customer.class, "name", String.class)); - assertNotNull(PathBuilderValidator.FIELDS.validate(ExtendedCustomer.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.FIELDS.validate(Customer.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.FIELDS.validate(ExtendedCustomer.class, "name", String.class)); + assertEquals(Integer.class, PathBuilderValidator.FIELDS.validate(Customer.class, "collection", Collection.class)); + assertEquals(Integer.class, PathBuilderValidator.FIELDS.validate(Customer.class, "map", Map.class)); assertNull(PathBuilderValidator.FIELDS.validate(Project.class, "name", String.class)); assertNull(PathBuilderValidator.FIELDS.validate(ExtendedProject.class, "name", String.class)); } @@ -39,8 +49,10 @@ public void Fields() { public void Properties() { assertNull(PathBuilderValidator.PROPERTIES.validate(Customer.class, "name", String.class)); assertNull(PathBuilderValidator.PROPERTIES.validate(ExtendedCustomer.class, "name", String.class)); - assertNotNull(PathBuilderValidator.PROPERTIES.validate(Project.class, "name", String.class)); - assertNotNull(PathBuilderValidator.PROPERTIES.validate(ExtendedProject.class, "name", String.class)); - assertNotNull(PathBuilderValidator.PROPERTIES.validate(ExtendedProject.class, "started", Boolean.class)); + assertEquals(String.class, PathBuilderValidator.PROPERTIES.validate(Project.class, "name", String.class)); + assertEquals(String.class, PathBuilderValidator.PROPERTIES.validate(ExtendedProject.class, "name", String.class)); + assertEquals(Boolean.class, PathBuilderValidator.PROPERTIES.validate(ExtendedProject.class, "started", Boolean.class)); + assertEquals(Integer.class, PathBuilderValidator.PROPERTIES.validate(Project.class, "collection", Collection.class)); + assertEquals(Integer.class, PathBuilderValidator.PROPERTIES.validate(Project.class, "map", Map.class)); } } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java index aba0a0da56..70b93ba6a7 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java @@ -14,8 +14,12 @@ package com.mysema.query.jpa.support; import javax.persistence.EntityManager; +import javax.persistence.metamodel.Attribute; +import javax.persistence.metamodel.ManagedType; import javax.persistence.metamodel.Metamodel; +import javax.persistence.metamodel.PluralAttribute; +import com.google.common.primitives.Primitives; import com.mysema.query.types.path.PathBuilderValidator; /** @@ -36,7 +40,13 @@ public JPAPathBuilderValidator(Metamodel metamodel) { @Override public Class validate(Class parent, String property, Class propertyType) { try { - return (Class)metamodel.managedType(parent).getAttribute(property).getJavaType(); + ManagedType managedType = metamodel.managedType(parent); + Attribute attribute = managedType.getAttribute(property); + if (attribute instanceof PluralAttribute) { + return ((PluralAttribute)attribute).getElementType().getJavaType(); + } else { + return Primitives.wrap(attribute.getJavaType()); + } } catch (IllegalArgumentException e) { return null; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/support/JPAPathBuilderValidatorTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/support/JPAPathBuilderValidatorTest.java index ea97e41378..0b3d5af93a 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/support/JPAPathBuilderValidatorTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/support/JPAPathBuilderValidatorTest.java @@ -2,12 +2,14 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; +import java.util.Collection; import com.mysema.query.jpa.domain.Cat; import org.junit.After; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; public class JPAPathBuilderValidatorTest { @@ -26,7 +28,9 @@ public void tearDown() { @Test public void validate() { JPAPathBuilderValidator validator = new JPAPathBuilderValidator(entityManagerFactory.getMetamodel()); - assertNotNull(validator.validate(Cat.class, "name", String.class)); + assertEquals(String.class, validator.validate(Cat.class, "name", String.class)); + assertEquals(Cat.class, validator.validate(Cat.class, "kittens", Collection.class)); + assertEquals(Cat.class, validator.validate(Cat.class, "mate", Cat.class)); assertNull(validator.validate(Cat.class, "xxx", String.class)); assertNull(validator.validate(Object.class, "name", String.class)); } From 13511012e9033c9458a508552c11b12c815d64e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 11 Oct 2014 23:13:25 +0300 Subject: [PATCH 0481/1968] Add tests fpr JDO --- .../java/com/mysema/query/jdo/BasicsTest.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java index ba38935797..8b51bedcbf 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java @@ -13,19 +13,11 @@ */ package com.mysema.query.jdo; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - -import java.io.IOException; - import javax.jdo.PersistenceManager; import javax.jdo.Transaction; +import java.io.IOException; -import com.mysema.query.types.Projections; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; - +import com.google.common.collect.ImmutableList; import com.mysema.query.BooleanBuilder; import com.mysema.query.NonUniqueResultException; import com.mysema.query.jdo.test.domain.Book; @@ -33,6 +25,12 @@ import com.mysema.query.jdo.test.domain.QBook; import com.mysema.query.jdo.test.domain.QProduct; import com.mysema.query.types.Expression; +import com.mysema.query.types.Projections; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; public class BasicsTest extends AbstractJDOTest { @@ -185,6 +183,17 @@ public void Ne() { assertEquals("ne", 2, query(product, product.price.ne(100.00)).size()); } + @Test + public void In_Empty() { + assertEquals(0, query(product, product.name.in(ImmutableList.of())).size()); + } + + @Test + public void Not_In_Empty() { + int count = query(product, product.name.isNotNull()).size(); + assertEquals(count, query(product, product.name.notIn(ImmutableList.of())).size()); + } + @Test public void Lt() { assertEquals("lt", 2, query(product, product.price.lt(300.00)).size()); From bedb2b7a07d111b5c42f656e6aa74d52224b8e70 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 11 Oct 2014 23:53:41 +0200 Subject: [PATCH 0482/1968] Normalize tabs to spaces --- querydsl-docs/src/main/docbook/en-US/content/general.xml | 8 ++++---- .../docbook/en-US/content/tutorials/hibernate-search.xml | 4 ++-- .../src/main/docbook/en-US/content/tutorials/mongodb.xml | 4 ++-- .../src/main/docbook/en-US/content/tutorials/sql.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/content/general.xml | 8 ++++---- .../docbook/ko-KR/content/tutorials/hibernate-search.xml | 4 ++-- .../src/main/docbook/ko-KR/content/tutorials/mongodb.xml | 4 ++-- .../src/main/docbook/ko-KR/content/tutorials/sql.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml | 4 ++-- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/general.xml b/querydsl-docs/src/main/docbook/en-US/content/general.xml index 5d51b140e9..003443f451 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general.xml @@ -8,9 +8,9 @@ It follows a use case oriented structure. - - - - + + + + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/hibernate-search.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/hibernate-search.xml index 0668d6f02b..6a986885c9 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/hibernate-search.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/hibernate-search.xml @@ -25,8 +25,8 @@ QUser user = QUser.user; SearchQuery query = new SearchQuery(session, user); List list = query - .where(user.firstName.eq("Bob")) - .list(); + .where(user.firstName.eq("Bob")) + .list(); ]]> diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml index a952578ea6..ddda556f6d 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml @@ -103,8 +103,8 @@ Datastore datastore; QUser user = new QUser("user"); MorphiaQuery query = new MorphiaQuery(morphia, datastore, user); List list = query - .where(user.firstName.eq("Bob")) - .list(); + .where(user.firstName.eq("Bob")) + .list(); ]]> diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 93973373fe..aa23b2db52 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -957,7 +957,7 @@ assertEquals(2, insert.execute()); java.sql.Connection conn = ...; MetaDataExporter exporter = new MetaDataExporter(); exporter.setPackageName("com.myproject.mydomain"); -exporter.setTargetFolder(new File("src/main/java")) ; +exporter.setTargetFolder(new File("src/main/java")); exporter.setBeanSerializer(new BeanSerializer()); exporter.export(conn.getMetaData()); ]]>
diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general.xml index 026446916d..c3d48a3762 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general.xml @@ -7,9 +7,9 @@ 본 장은 레퍼런스 튜토리얼에서 다루지 않은 내용을 설명한다. - - - - + + + + \ No newline at end of file diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/hibernate-search.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/hibernate-search.xml index 6b8f2ca4be..43c23d72ef 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/hibernate-search.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/hibernate-search.xml @@ -23,8 +23,8 @@ QUser user = QUser.user; SearchQuery query = new SearchQuery(session, user); List list = query - .where(user.firstName.eq("Bob")) - .list(); + .where(user.firstName.eq("Bob")) + .list(); ]]>
diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml index 3b2b5453ea..a0cdc002be 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml @@ -99,8 +99,8 @@ Datastore datastore; QUser user = new QUser("user"); MorphiaQuery query = new MorphiaQuery(morphia, datastore, user); List list = query - .where(user.firstName.eq("Bob")) - .list(); + .where(user.firstName.eq("Bob")) + .list(); ]]>
diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index 9b06392f90..5a19c7a482 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -939,7 +939,7 @@ assertEquals(2, insert.execute()); java.sql.Connection conn = ...; MetaDataExporter exporter = new MetaDataExporter(); exporter.setPackageName("com.myproject.mydomain"); -exporter.setTargetFolder(new File("src/main/java")) ; +exporter.setTargetFolder(new File("src/main/java")); exporter.setBeanSerializer(new BeanSerializer()); exporter.export(conn.getMetaData()); ]]>
diff --git a/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml b/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml index 228f66a271..8ad421dbef 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/legal_notice.xml @@ -4,7 +4,7 @@ Legal Notice 저작권 Mysema Ltd, 2007-2013. - 이 저작물은 Apache License, Version 2.0에 따라 - 누구나 사용, 편집, 복사, 재배포 가능합니다. + 이 저작물은 Apache License, Version 2.0에 따라 + 누구나 사용, 편집, 복사, 재배포 가능합니다. From d475d27db2ac19cddb35bbf9a0c9620719c8dbf6 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 11 Oct 2014 23:54:34 +0200 Subject: [PATCH 0483/1968] Remove some extra whitespace --- .../src/main/docbook/en-US/content/tutorials/scala.xml | 4 ++-- .../src/main/docbook/ko-KR/content/general/alias.xml | 1 - .../main/docbook/ko-KR/content/general/result-handling.xml | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml index e9a4587242..c02520c5b5 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml @@ -5,7 +5,7 @@ Querying in Scala Generic support for Querydsl usage in Scala is available via querydsl-scala - module. To add it to your Maven build, use the following snippet : + module. To add it to your Maven build, use the following snippet: Like with Querydsl SQL for Java you need to generate Query types to be able to construct - your queries. The following code examples show how this is done : + your queries. The following code examples show how this is done: Generation without Bean types : diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml index cf69b2abff..4714a2e3b3 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml @@ -88,4 +88,3 @@ $(c.getMate().getName().toLowerCase()) - diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml index 23f2cf930f..72297bc7aa 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml @@ -168,7 +168,6 @@ Map results = query.from(post, comment) 여기를 참고한다. - . From 9986b9f1291c8279898c8d015ea371486bec5c8b Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 12 Oct 2014 00:09:38 +0200 Subject: [PATCH 0484/1968] Normalize the braces style in the reference docs --- .../main/docbook/en-US/content/general/alias.xml | 6 +++--- .../docbook/en-US/content/general/codegen.xml | 16 ++++++++-------- .../en-US/content/general/creating-queries.xml | 8 ++++---- .../en-US/content/general/result-handling.xml | 4 ++-- .../en-US/content/tutorials/collections.xml | 6 +++--- .../main/docbook/en-US/content/tutorials/jdo.xml | 8 ++++---- .../main/docbook/en-US/content/tutorials/jpa.xml | 6 +++--- .../docbook/en-US/content/tutorials/lucene.xml | 2 +- .../main/docbook/en-US/content/tutorials/sql.xml | 12 ++++++------ .../main/docbook/ko-KR/content/general/alias.xml | 6 +++--- .../docbook/ko-KR/content/general/codegen.xml | 16 ++++++++-------- .../ko-KR/content/general/creating-queries.xml | 8 ++++---- .../ko-KR/content/general/result-handling.xml | 4 ++-- .../ko-KR/content/tutorials/collections.xml | 6 +++--- .../main/docbook/ko-KR/content/tutorials/jdo.xml | 8 ++++---- .../main/docbook/ko-KR/content/tutorials/jpa.xml | 2 +- .../docbook/ko-KR/content/tutorials/lucene.xml | 2 +- .../main/docbook/ko-KR/content/tutorials/sql.xml | 12 ++++++------ 18 files changed, 66 insertions(+), 66 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/alias.xml b/querydsl-docs/src/main/docbook/en-US/content/general/alias.xml index 16d18e39fd..51e6e7503d 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/alias.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/alias.xml @@ -21,7 +21,7 @@ QCat cat = new QCat("cat"); for (String name : query.from(cat,cats) .where(cat.kittens.size().gt(0)) - .list(cat.name)){ + .list(cat.name)) { System.out.println(name); } ]]> @@ -35,7 +35,7 @@ for (String name : query.from(cat,cats) Cat c = alias(Cat.class, "cat"); for (String name : query.from($(c),cats) .where($(c.getKittens()).size().gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]>
@@ -59,7 +59,7 @@ import static com.mysema.query.alias.Alias.alias; Cat c = alias(Cat.class, "cat"); for (String name : query.from($(c),cats) .where($(c.getKittens().size()).gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]>
diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml b/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml index e3b60202cf..fa9a343ef4 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml @@ -27,12 +27,12 @@ class Event { } @Entity -class Account{ +class Account { Customer customer; } @Entity -class Customer{ +class Customer { String name; Address address; // ... @@ -115,7 +115,7 @@ class Customer{ @@ -253,7 +253,7 @@ import com.mysema.query.annotations.Config; @@ -318,12 +318,12 @@ public BooleanPath isManagedBy(QUser other) { public class QueryExtensions { @QueryDelegate(Date.class) - public static BooleanExpression inPeriod(DatePath date, Pair period){ + public static BooleanExpression inPeriod(DatePath date, Pair period) { return date.goe(period.getFirst()).and(date.loe(period.getSecond())); } @QueryDelegate(Timestamp.class) - public static BooleanExpression inDatePeriod(DateTimePath timestamp, Pair period){ + public static BooleanExpression inDatePeriod(DateTimePath timestamp, Pair period) { Timestamp first = new Timestamp(DateUtils.truncate(period.getFirst(), Calendar.DAY_OF_MONTH).getTime()); Calendar second = Calendar.getInstance(); second.setTime(DateUtils.truncate(period.getSecond(), Calendar.DAY_OF_MONTH)); diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml index 5954d4f48a..c1b111f299 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml @@ -19,11 +19,11 @@ getCustomer(String... names){ +public List getCustomer(String... names) { QCustomer customer = QCustomer.customer; JPAQuery query = new JPAQuery(entityManager).from(customer); BooleanBuilder builder = new BooleanBuilder(); - for (String name : names){ + for (String name : names) { builder.or(customer.name.eq(name)); } query.where(builder); // customer.name eq name1 OR customer.name eq name2 OR ... @@ -186,12 +186,12 @@ Expression cases = customer.annualSpending { +QAccount extends EntityPathBase { // ... } // from BankAccount extends Account -QBankAccount extends EntityPathBase{ +QBankAccount extends EntityPathBase { public final QAccount _super = new QAccount(this); diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml index 1178351bda..cf0048dc79 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml @@ -80,7 +80,7 @@ List dtos = query.list( class CustomerDTO { @QueryProjection - public CustomerDTO(long id, String name){ + public CustomerDTO(long id, String name) { ... } @@ -110,7 +110,7 @@ List dtos = query.from(customer).list(new QCustomerDTO(customer.id, class Customer { @QueryProjection - public Customer(long id, String name){ + public Customer(long id, String name) { ... } diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml index 73f009abeb..75c4e083c0 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml @@ -48,7 +48,7 @@ import static com.mysema.query.alias.Alias.*; Cat c = alias(Cat.class, "cat"); for (String name : from($(c),cats) .where($(c.getKittens()).size().gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]> @@ -63,7 +63,7 @@ for (String name : from($(c),cats) Cat c = alias(Cat.class, "cat"); for (String name : from($(c),cats) .where($(c.getKittens().size()).gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]> @@ -114,7 +114,7 @@ $(c.getMate().getName().toLowerCase()) QCat cat = new QCat("cat"); for (String name : from(cat,cats) .where(cat.kittens.size().gt(0)) - .list(cat.name)){ + .list(cat.name)) { System.out.println(name); } ]]>
diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml index ade2d7fe69..c3acf7e89c 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml @@ -151,19 +151,19 @@ public class Customer { private String firstName; private String lastName; - public String getFirstName(){ + public String getFirstName() { return firstName; } - public String getLastName(){ + public String getLastName() { return lastName; } - public void setFirstName(String fn){ + public void setFirstName(String fn) { firstName = fn; } - public void setLastName(String ln)[ + public void setLastName(String ln) { lastName = ln; } } diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml index 42e2329039..8299eadf4a 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml @@ -215,15 +215,15 @@ public class Customer { private String firstName; private String lastName; - public String getFirstName(){ + public String getFirstName() { return firstName; } - public String getLastName(){ + public String getLastName() { return lastName; } - public void setFirstName(String fn){ + public void setFirstName(String fn) { firstName = fn; } diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml index c09373800c..35822df666 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml @@ -56,7 +56,7 @@ like this: { +public class QDocument extends EntityPathBase { private static final long serialVersionUID = -4872833626508344081L; public QDocument(String var) { diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index aa23b2db52..dc1e97214a 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -698,11 +698,11 @@ public class MySQLQuery extends AbstractSQLQuery { super(conn, new Configuration(templates), metadata); } - public MySQLQuery bigResult(){ + public MySQLQuery bigResult() { return addFlag(Position.AFTER_SELECT, "SQL_BIG_RESULT "); } - public MySQLQuery bufferResult(){ + public MySQLQuery bufferResult() { return addFlag(Position.AFTER_SELECT, "SQL_BUFFER_RESULT "); } @@ -991,19 +991,19 @@ assertEquals(1l, delete(e).where(e.id.eq(employee.getId())).execute()); The factory methods used in the previous example are here: e){ +protected SQLUpdateClause update(RelationalPath e) { return new SQLUpdateClause(Connections.getConnection(), templates, e); } -protected SQLInsertClause insert(RelationalPath e){ +protected SQLInsertClause insert(RelationalPath e) { return new SQLInsertClause(Connections.getConnection(), templates, e); } -protected SQLDeleteClause delete(RelationalPath e){ +protected SQLDeleteClause delete(RelationalPath e) { return new SQLDeleteClause(Connections.getConnection(), templates, e); } -protected SQLMergeClause merge(RelationalPath e){ +protected SQLMergeClause merge(RelationalPath e) { return new SQLMergeClause(Connections.getConnection(), templates, e); } diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml index 4714a2e3b3..9e26ae7bc3 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml @@ -19,7 +19,7 @@ QCat cat = new QCat("cat"); for (String name : query.from(cat,cats) .where(cat.kittens.size().gt(0)) - .list(cat.name)){ + .list(cat.name)) { System.out.println(name); } ]]> @@ -33,7 +33,7 @@ for (String name : query.from(cat,cats) Cat c = alias(Cat.class, "cat"); for (String name : query.from($(c),cats) .where($(c.getKittens()).size().gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]> @@ -55,7 +55,7 @@ import static com.mysema.query.alias.Alias.alias; Cat c = alias(Cat.class, "cat"); for (String name : query.from($(c),cats) .where($(c.getKittens().size()).gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]>
diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml index 47446b02e6..9cd68ab7eb 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml @@ -23,12 +23,12 @@ class Event { } @Entity -class Account{ +class Account { Customer customer; } @Entity -class Customer{ +class Customer { String name; Address address; // ... @@ -108,7 +108,7 @@ class Customer{ @@ -243,7 +243,7 @@ import com.mysema.query.annotations.Config; @@ -306,12 +306,12 @@ public BooleanPath isManagedBy(QUser other) { public class QueryExtensions { @QueryDelegate(Date.class) - public static BooleanExpression inPeriod(DatePath date, Pair period){ + public static BooleanExpression inPeriod(DatePath date, Pair period) { return date.goe(period.getFirst()).and(date.loe(period.getSecond())); } @QueryDelegate(Timestamp.class) - public static BooleanExpression inDatePeriod(DateTimePath timestamp, Pair period){ + public static BooleanExpression inDatePeriod(DateTimePath timestamp, Pair period) { Timestamp first = new Timestamp(DateUtils.truncate(period.getFirst(), Calendar.DAY_OF_MONTH).getTime()); Calendar second = Calendar.getInstance(); second.setTime(DateUtils.truncate(period.getSecond(), Calendar.DAY_OF_MONTH)); diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml index 3d9ca789f0..27b6cf6eeb 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml @@ -17,11 +17,11 @@ getCustomer(String... names){ +public List getCustomer(String... names) { QCustomer customer = QCustomer.customer; JPAQuery query = new JPAQuery(entityManager).from(customer); BooleanBuilder builder = new BooleanBuilder(); - for (String name : names){ + for (String name : names) { builder.or(customer.name.eq(name)); } query.where(builder); // customer.name eq name1 OR customer.name eq name2 OR ... @@ -174,12 +174,12 @@ Expression cases = customer.annualSpending { +QAccount extends EntityPathBase { // ... } // from BankAccount extends Account -QBankAccount extends EntityPathBase{ +QBankAccount extends EntityPathBase { public final QAccount _super = new QAccount(this); diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml index 72297bc7aa..6e51b1df93 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml @@ -75,7 +75,7 @@ List dtos = query.list( class CustomerDTO { @QueryProjection - public CustomerDTO(long id, String name){ + public CustomerDTO(long id, String name) { ... } @@ -104,7 +104,7 @@ List dtos = query.from(customer).list(new QCustomerDTO(customer.id, class Customer { @QueryProjection - public Customer(long id, String name){ + public Customer(long id, String name) { ... } diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml index c9b7ce1ae8..92ddc99932 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml @@ -41,7 +41,7 @@ import static com.mysema.query.alias.Alias.*; Cat c = alias(Cat.class, "cat"); for (String name : from($(c),cats) .where($(c.getKittens()).size().gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]> @@ -54,7 +54,7 @@ for (String name : from($(c),cats) Cat c = alias(Cat.class, "cat"); for (String name : from($(c),cats) .where($(c.getKittens().size()).gt(0)) - .list($(c.getName()))){ + .list($(c.getName()))) { System.out.println(name); } ]]> @@ -104,7 +104,7 @@ $(c.getMate().getName().toLowerCase()) QCat cat = new QCat("cat"); for (String name : from(cat,cats) .where(cat.kittens.size().gt(0)) - .list(cat.name)){ + .list(cat.name)) { System.out.println(name); } ]]>
diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml index fd0e86d80a..41b50fd2fd 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml @@ -140,19 +140,19 @@ public class Customer { private String firstName; private String lastName; - public String getFirstName(){ + public String getFirstName() { return firstName; } - public String getLastName(){ + public String getLastName() { return lastName; } - public void setFirstName(String fn){ + public void setFirstName(String fn) { firstName = fn; } - public void setLastName(String ln)[ + public void setLastName(String ln) { lastName = ln; } } diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml index 021dd1dd15..909ef1e641 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml @@ -218,7 +218,7 @@ public class Customer { firstName = fn; } - public void setLastName(String ln)[ + public void setLastName(String ln) { lastName = ln; } } diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml index b6267f2b37..691699dc3b 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml @@ -54,7 +54,7 @@ 다음과 같은 방식으로 year와 title 필드를 가진 쿼리 타입을 직접 작성할 수 있다. { +public class QDocument extends EntityPathBase { private static final long serialVersionUID = -4872833626508344081L; public QDocument(String var) { diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index 5a19c7a482..e0263fef79 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -685,11 +685,11 @@ public class MySQLQuery extends AbstractSQLQuery { super(conn, new Configuration(templates), metadata); } - public MySQLQuery bigResult(){ + public MySQLQuery bigResult() { return addFlag(Position.AFTER_SELECT, "SQL_BIG_RESULT "); } - public MySQLQuery bufferResult(){ + public MySQLQuery bufferResult() { return addFlag(Position.AFTER_SELECT, "SQL_BUFFER_RESULT "); } @@ -972,19 +972,19 @@ assertEquals(1l, delete(e).where(e.id.eq(employee.getId())).execute()); 앞서 예제에서 사용한 팩토리 메서드는 다음과 같다. e){ +protected SQLUpdateClause update(RelationalPath e) { return new SQLUpdateClause(Connections.getConnection(), templates, e); } -protected SQLInsertClause insert(RelationalPath e){ +protected SQLInsertClause insert(RelationalPath e) { return new SQLInsertClause(Connections.getConnection(), templates, e); } -protected SQLDeleteClause delete(RelationalPath e){ +protected SQLDeleteClause delete(RelationalPath e) { return new SQLDeleteClause(Connections.getConnection(), templates, e); } -protected SQLMergeClause merge(RelationalPath e){ +protected SQLMergeClause merge(RelationalPath e) { return new SQLMergeClause(Connections.getConnection(), templates, e); } From 10e7f5d5eaaba60be04fc71d0a0b416407d0d6b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 19:41:20 +0300 Subject: [PATCH 0485/1968] Use LinkedList for constantPaths --- .../src/main/java/com/mysema/query/sql/SQLSerializer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index dc9b7a9816..104f25a6cb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -45,7 +45,7 @@ protected enum Stage {SELECT, FROM, WHERE, GROUP_BY, HAVING, ORDER_BY, MODIFIERS private static final String COMMA = ", "; - private final List> constantPaths = new ArrayList>(); + private final LinkedList> constantPaths = new LinkedList>(); private final List constants = new ArrayList(); @@ -746,7 +746,7 @@ public void visitConstant(Object constant) { append(")"); int size = ((Collection) constant).size() - 1; - Path lastPath = constantPaths.isEmpty() ? null : constantPaths.get(constantPaths.size() - 1); + Path lastPath = constantPaths.peekLast(); for (int i = 0; i < size; i++) { constantPaths.add(lastPath); } From 88fa8229d3420a1d40e4e16263c8ee0bc5cc4a87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 19:47:44 +0300 Subject: [PATCH 0486/1968] Improve docs --- .../src/main/docbook/en-US/content/tutorials/sql.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 9335a259f7..28a4aa6fb1 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -748,6 +748,10 @@ query.with(employee, employee.id, employee.name) .from(...) ]]> + If the columns of the common table expression are a subset of an existing table or view + it is advisable to use a generated path type for it, e.g. QEmployee in this case, but if the + columns don't fit any existing table PathBuilder can be used instead. + From 19273100dff6649a0f3eb53425460c12f1e382af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 20:53:07 +0300 Subject: [PATCH 0487/1968] Improve Wildcard.all handling --- .../main/java/com/mysema/query/sql/AbstractSQLQuery.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index a8d4796fc0..9d7266bf77 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -27,6 +27,7 @@ import com.mysema.query.*; import com.mysema.query.support.QueryMixin; import com.mysema.query.types.*; +import com.mysema.query.types.expr.Wildcard; import com.mysema.util.ResultSetAdapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -250,7 +251,7 @@ public RT produceNext(ResultSet rs) throws Exception { return newInstance((FactoryExpression) expr, rs, 0); } }; - } else if (expr.getType().isArray()) { + } else if (expr.equals(Wildcard.all)) { return new SQLResultIterator(configuration, stmt, rs) { @Override public RT produceNext(ResultSet rs) throws Exception { @@ -311,7 +312,7 @@ public List list(Expression expr) { lastCell = null; final List rv = new ArrayList(); if (expr instanceof FactoryExpression) { - FactoryExpression fe = (FactoryExpression)expr; + FactoryExpression fe = (FactoryExpression) expr; while (rs.next()) { if (getLastCell) { lastCell = rs.getObject(fe.getArgs().size() + 1); @@ -319,7 +320,7 @@ public List list(Expression expr) { } rv.add(newInstance(fe, rs, 0)); } - } else if (expr.getType().isArray()) { + } else if (expr.equals(Wildcard.all)) { while (rs.next()) { Object[] row = new Object[rs.getMetaData().getColumnCount()]; if (getLastCell) { From f68a2639eb8cc00f5bdf3e091d3a8f3a7abecee3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 22:26:27 +0300 Subject: [PATCH 0488/1968] Improve array handling --- .../com/mysema/query/sql/Configuration.java | 26 +++++++++---- .../com/mysema/query/sql/MySQLTemplates.java | 1 + .../mysema/query/sql/SQLServerTemplates.java | 1 + .../com/mysema/query/sql/SQLTemplates.java | 10 +++++ .../com/mysema/query/sql/types/ArrayType.java | 38 +++++++++++++++---- .../java/com/mysema/query/SelectBase.java | 24 +++++++++++- 6 files changed, 83 insertions(+), 17 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 971a40e2ce..d9157d5c0b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; +import com.google.common.primitives.Primitives; import com.mysema.query.sql.types.ArrayType; import com.mysema.query.sql.types.Null; import com.mysema.query.sql.types.Type; @@ -84,15 +85,24 @@ public Configuration(SQLTemplates templates) { schemaTables.put(entry.getKey(), entry.getValue()); } - List> classes = ImmutableList.>of(String.class, Long.class, Integer.class, Short.class, - Byte.class, Boolean.class, java.sql.Date.class, java.sql.Timestamp.class, - java.sql.Time.class, Double.class, Float.class); - for (Class cl : classes) { - int code = jdbcTypeMapping.get(cl); - String name = templates.getTypeNameForCode(code); - Class arrType = Array.newInstance(cl, 0).getClass(); - javaTypeMapping.register(new ArrayType(arrType, name)); + if (templates.isArraysSupported()) { + // register array types + List> classes = ImmutableList.>of(String.class, Long.class, Integer.class, Short.class, + Byte.class, Boolean.class, java.sql.Date.class, java.sql.Timestamp.class, + java.sql.Time.class, Double.class, Float.class); + for (Class cl : classes) { + int code = jdbcTypeMapping.get(cl); + String name = templates.getTypeNameForCode(code); + Class arrType = Array.newInstance(cl, 0).getClass(); + javaTypeMapping.register(new ArrayType(arrType, name)); + if (Primitives.isWrapperType(cl) && !cl.equals(Byte.class)) { + cl = Primitives.unwrap(cl); + arrType = Array.newInstance(cl, 0).getClass(); + javaTypeMapping.register(new ArrayType(arrType, name)); + } + } } + } /** diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index a2a154e2e7..0f6c22567d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -46,6 +46,7 @@ public MySQLTemplates(boolean quote) { public MySQLTemplates(char escape, boolean quote) { super("`", escape, quote); + setArraysSupported(false); setParameterMetadataAvailable(false); setLimitRequired(true); setNullsFirst(null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index 9bafdc99ab..9ad40af024 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -55,6 +55,7 @@ public SQLServerTemplates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); setDefaultValues("\ndefault values"); + setArraysSupported(false); // String add(Ops.CONCAT, "{0} + {1}", 13); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 4ad35368a3..f40a8205dc 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -195,6 +195,8 @@ public SQLTemplates build() { private boolean wrapSelectParameters = false; + private boolean arraysSupported = true; + protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { super(escape); this.quoteStr = quoteStr; @@ -699,6 +701,10 @@ public boolean isWrapSelectParameters() { return wrapSelectParameters; } + public boolean isArraysSupported() { + return arraysSupported; + } + protected void newLineToSingleSpace() { for (Class cl : Arrays.>asList(getClass(), SQLTemplates.class)) { for (Field field : cl.getDeclaredFields()) { @@ -1057,4 +1063,8 @@ protected void setWrapSelectParameters(boolean b) { this.wrapSelectParameters = b; } + protected void setArraysSupported(boolean b) { + this.arraysSupported = b; + } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java index 0facf05094..331e56ebc7 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java @@ -7,33 +7,55 @@ * * @param */ -public class ArrayType extends AbstractType { +public class ArrayType extends AbstractType { - private final Class type; + private static void copy(Object source, Object target, int length) { + for (int i = 0; i < length; i++) { + Object val = java.lang.reflect.Array.get(source, i); + java.lang.reflect.Array.set(target, i, val); + } + } + + private final Class type; private final String typeName; - public ArrayType(Class type, String typeName) { + public ArrayType(Class type, String typeName) { super(Types.ARRAY); this.type = type; this.typeName = typeName; } @Override - public Class getReturnedClass() { + public Class getReturnedClass() { return type; } @Nullable @Override - public T[] getValue(ResultSet rs, int startIndex) throws SQLException { + public T getValue(ResultSet rs, int startIndex) throws SQLException { Array arr = rs.getArray(startIndex); - return arr != null ? (T[])arr.getArray() : null; + if (arr != null) { + Object[] rv = (Object[])arr.getArray(); + if (!type.isAssignableFrom(rv.getClass())) { + Object rv2 = java.lang.reflect.Array.newInstance(type.getComponentType(), rv.length); + copy(rv, rv2, rv.length); + return (T) rv2; + } else { + return (T) rv; + } + + } else { + return null; + } } @Override - public void setValue(PreparedStatement st, int startIndex, T[] value) throws SQLException { - Array arr = st.getConnection().createArrayOf(typeName, value); + public void setValue(PreparedStatement st, int startIndex, T value) throws SQLException { + if (!type.isAssignableFrom(value.getClass())) { + + } + Array arr = st.getConnection().createArrayOf(typeName, (Object[])value); st.setArray(startIndex, arr); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 50abada21a..7d787caf33 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -123,6 +123,28 @@ public void All() { } } + @Test + @IncludeIn(POSTGRES) // TODO generalize array literal projections + public void Array() { + Expression expr = Expressions.template(Integer[].class, "'{1,2,3}'::int[]"); + Integer[] result = query().singleResult(expr); + assertEquals(3, result.length); + assertEquals(1, result[0].intValue()); + assertEquals(2, result[1].intValue()); + assertEquals(3, result[2].intValue()); + } + + @Test + @IncludeIn(POSTGRES) // TODO generalize array literal projections + public void Array2() { + Expression expr = Expressions.template(int[].class, "'{1,2,3}'::int[]"); + int[] result = query().singleResult(expr); + assertEquals(3, result.length); + assertEquals(1, result[0]); + assertEquals(2, result[1]); + assertEquals(3, result[2]); + } + @Test public void Array_Projection() { List results = query().from(employee).list( @@ -572,7 +594,7 @@ public void GroupBy_YearMonth() { } @Test - @ExcludeIn({H2, DERBY}) + @ExcludeIn({H2, DERBY, SQLSERVER}) public void GroupBy_Validate() { NumberPath alias = new NumberPath(BigDecimal.class, "alias"); query().from(employee) From 1515ed0de376b54982360d6ff91a70b374fc463c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 22:46:19 +0300 Subject: [PATCH 0489/1968] Add another array test --- .../java/com/mysema/query/sql/FirebirdTemplates.java | 1 + .../main/java/com/mysema/query/sql/JavaTypeMapping.java | 4 +++- .../main/java/com/mysema/query/sql/SQLiteTemplates.java | 2 ++ .../src/test/java/com/mysema/query/SelectBase.java | 9 ++++++++- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 43242315d5..c4601b15e6 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -36,6 +36,7 @@ public FirebirdTemplates(char escape, boolean quote) { setDummyTable("RDB$DATABASE"); setUnionsWrapped(false); setWrapSelectParameters(true); + setArraysSupported(false); // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java b/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java index e70e071b68..56003938e4 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/JavaTypeMapping.java @@ -30,6 +30,8 @@ */ public class JavaTypeMapping { + private static final Type DEFAULT = new ObjectType(); + private static final Map,Type> defaultTypes = new HashMap,Type>(); static{ @@ -107,7 +109,7 @@ public Type getType(Class clazz) { if (resolvedType != null) { resolvedTypesByClass.put(clazz, resolvedType); } else { - throw new IllegalArgumentException("Found no type for " + clazz.getName()); + return (Type)DEFAULT; } } return (Type) resolvedType; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java index 40e035dcc1..df5d8cca03 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java @@ -60,6 +60,8 @@ public SQLiteTemplates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); setDefaultValues("\ndefault values"); + setArraysSupported(false); + add(Ops.MOD, "{0} % {1}"); add(Ops.INDEX_OF, "charindex({1},{0},1)-1"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 7d787caf33..bebb4f23d3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -145,6 +145,13 @@ public void Array2() { assertEquals(3, result[2]); } + @Test + @ExcludeIn({DERBY, HSQLDB}) + public void Array_Null() { + Expression expr = Expressions.template(Integer[].class, "null"); + assertNull(query().singleResult(expr)); + } + @Test public void Array_Projection() { List results = query().from(employee).list( @@ -594,7 +601,7 @@ public void GroupBy_YearMonth() { } @Test - @ExcludeIn({H2, DERBY, SQLSERVER}) + @ExcludeIn({H2, DERBY, ORACLE, SQLSERVER}) public void GroupBy_Validate() { NumberPath alias = new NumberPath(BigDecimal.class, "alias"); query().from(employee) From 0922b8f15b0152b687f4981bf06cc3cb0409da28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 23:04:19 +0300 Subject: [PATCH 0490/1968] Disable getArray for CUBRID --- .../src/main/java/com/mysema/query/sql/CUBRIDTemplates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java index 847f8c84e3..03e8b94f7d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java @@ -55,6 +55,7 @@ public CUBRIDTemplates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); setDefaultValues("\ndefault values"); + setArraysSupported(false); add(Ops.DateTimeOps.DAY_OF_YEAR, "dayofyear({0})"); add(Ops.DateTimeOps.DAY_OF_WEEK, "dayofweek({0})"); From 95a560675c30b3e9ae849b180ff888df183aebca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 12 Oct 2014 23:10:23 +0300 Subject: [PATCH 0491/1968] Add comment --- .../src/main/java/com/mysema/query/sql/types/ArrayType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java index 331e56ebc7..1ce137ed34 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java @@ -10,6 +10,7 @@ public class ArrayType extends AbstractType { private static void copy(Object source, Object target, int length) { + // Note: System.arrayCopy doesn't handle copying from/to primitive arrays properly for (int i = 0; i < length; i++) { Object val = java.lang.reflect.Array.get(source, i); java.lang.reflect.Array.set(target, i, val); From 3261030c2cf0910ed2d118bc5fad0eb3e94a9555 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 12 Oct 2014 22:57:59 +0200 Subject: [PATCH 0492/1968] Add padding support for MSSQL Server --- .../main/java/com/mysema/query/sql/SQLServerTemplates.java | 4 ++++ querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index 29260a48f6..9e403f0d15 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -71,6 +71,10 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.StringOps.LOCATE, "charindex({0},{1})"); add(Ops.StringOps.LOCATE2, "charindex({0},{1},{2})"); + add(Ops.StringOps.LPAD, "right(replicate(' ', {1}) + left({0}, {1}), {1})"); + add(Ops.StringOps.LPAD2, "right(replicate({2}, {1}) + left({0}, {1}), {1})"); + add(Ops.StringOps.RPAD, "left(left({0}, {1}) + replicate(' ', {1}), {1})"); + add(Ops.StringOps.RPAD2, "left(left({0}, {1}) + replicate({2}, {1}), {1})"); add(SQLOps.NEXTVAL, "{0s}.nextval"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index bf36ac4918..35c70cb05b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -783,7 +783,7 @@ private double log(double x, int y) { } @Test - @ExcludeIn({SQLITE, SQLSERVER, DERBY}) + @ExcludeIn({SQLITE, DERBY}) public void LPad() { assertEquals(" ab", singleResult(StringExpressions.lpad(ConstantImpl.create("ab"), 4))); assertEquals("!!ab", singleResult(StringExpressions.lpad(ConstantImpl.create("ab"), 4, '!'))); @@ -1138,7 +1138,7 @@ public void Round() { } @Test - @ExcludeIn({SQLITE, SQLSERVER, DERBY}) + @ExcludeIn({SQLITE, DERBY}) public void Rpad() { assertEquals("ab ", singleResult(StringExpressions.rpad(ConstantImpl.create("ab"), 4))); assertEquals("ab!!", singleResult(StringExpressions.rpad(ConstantImpl.create("ab"), 4,'!'))); From 7d5dd0d6149f30838a08f918136ddf1cbcf2344c Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 12 Oct 2014 23:38:55 +0200 Subject: [PATCH 0493/1968] Add round operator to SQLServerTemplates --- .../src/main/java/com/mysema/query/sql/SQLServerTemplates.java | 1 + querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index 9e403f0d15..72ccf99c81 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -84,6 +84,7 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.MathOps.LN, "LOG({0})"); add(Ops.MathOps.LOG, "LOG({0}, {1})"); add(Ops.MathOps.POWER, "POWER({0}, {1})"); + add(Ops.MathOps.ROUND, "round({0}, 0)"); add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 35c70cb05b..6457a1b311 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -1129,7 +1129,7 @@ public void Right_Join() throws SQLException { } @Test - @ExcludeIn({DERBY, SQLSERVER}) + @ExcludeIn(DERBY) public void Round() { Expression expr = Expressions.numberTemplate(Double.class, "1.32"); From 7c0311480a2caff4de30f265291621d1d3b54a7e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 12 Oct 2014 23:40:42 +0200 Subject: [PATCH 0494/1968] Change operators to lowercase in SQLServerTemplates --- .../main/java/com/mysema/query/sql/SQLServerTemplates.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index 72ccf99c81..d932b48c1c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -81,9 +81,9 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.MOD, "{0} % {1}", 10); add(Ops.MathOps.COSH, "(exp({0}) + exp({0} * -1)) / 2"); add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); - add(Ops.MathOps.LN, "LOG({0})"); - add(Ops.MathOps.LOG, "LOG({0}, {1})"); - add(Ops.MathOps.POWER, "POWER({0}, {1})"); + add(Ops.MathOps.LN, "log({0})"); + add(Ops.MathOps.LOG, "log({0}, {1})"); + add(Ops.MathOps.POWER, "power({0}, {1})"); add(Ops.MathOps.ROUND, "round({0}, 0)"); add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); From 2831a8efe1b7dd9d99c692433f9ccc5976ff3042 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 13 Oct 2014 21:20:24 +0300 Subject: [PATCH 0495/1968] Change exception message --- .../java/com/mysema/query/collections/CollQuerySerializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuerySerializer.java b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuerySerializer.java index cde69203c0..99c75382be 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuerySerializer.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQuerySerializer.java @@ -188,7 +188,7 @@ private void visitCast(Operator operator, Expression source, Class targ @Override protected void visitOperation(Class type, Operator operator, List> args) { if (Ops.aggOps.contains(operator)) { - throw new UnsupportedOperationException("Aggregation operators are supported only for single expression results"); + throw new UnsupportedOperationException("Aggregation operators are only supported as single expressions"); } if (args.size() == 2 && OPERATOR_SYMBOLS.containsKey(operator) && isPrimitive(args.get(0).getType()) && isPrimitive(args.get(1).getType())) { From 2e3ae103495d5fa1d554adc4932221d9f63e5566 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 13 Oct 2014 21:29:25 +0300 Subject: [PATCH 0496/1968] Improve conversion --- .../com/mysema/query/sql/types/ArrayType.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java index 1ce137ed34..5563a8e802 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/ArrayType.java @@ -3,6 +3,8 @@ import javax.annotation.Nullable; import java.sql.*; +import com.google.common.primitives.Primitives; + /** * * @param @@ -21,10 +23,13 @@ private static void copy(Object source, Object target, int length) { private final String typeName; + private final boolean convertPrimitives; + public ArrayType(Class type, String typeName) { super(Types.ARRAY); this.type = type; this.typeName = typeName; + this.convertPrimitives = type.getComponentType().isPrimitive(); } @Override @@ -38,14 +43,14 @@ public T getValue(ResultSet rs, int startIndex) throws SQLException { Array arr = rs.getArray(startIndex); if (arr != null) { Object[] rv = (Object[])arr.getArray(); - if (!type.isAssignableFrom(rv.getClass())) { + if (convertPrimitives) { + // primitives out Object rv2 = java.lang.reflect.Array.newInstance(type.getComponentType(), rv.length); copy(rv, rv2, rv.length); return (T) rv2; } else { return (T) rv; } - } else { return null; } @@ -53,8 +58,12 @@ public T getValue(ResultSet rs, int startIndex) throws SQLException { @Override public void setValue(PreparedStatement st, int startIndex, T value) throws SQLException { - if (!type.isAssignableFrom(value.getClass())) { - + if (convertPrimitives) { + // primitives in + int length = java.lang.reflect.Array.getLength(value); + Object value2 = java.lang.reflect.Array.newInstance(Primitives.wrap(type.getComponentType()), length); + copy(value, value2, length); + value = (T)value2; } Array arr = st.getConnection().createArrayOf(typeName, (Object[])value); st.setArray(startIndex, arr); From d3ffd3e3d2d1aec0804c64aaf97bf17c11798dc8 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 16 Oct 2014 18:05:24 +0200 Subject: [PATCH 0497/1968] Add additional SQLExceptions to the QueryException output Fixes #1007 When JRE6 is used, it adds an extra Exception with additional information. When JRE7 is used, it adds the extra SQLExceptions as suppressed exceptions. --- .../sql/DefaultSQLExceptionTranslator.java | 21 +++++- .../support/JavaSE6SQLExceptionWrapper.java | 66 +++++++++++++++++++ .../support/JaveSE7SQLExceptionWrapper.java | 50 ++++++++++++++ .../sql/support/SQLExceptionWrapper.java | 48 ++++++++++++++ .../com/mysema/query/AbstractBaseTest.java | 14 ++++ .../query/suites/H2ExceptionSuiteTest.java | 42 ++++++++++++ 6 files changed, 239 insertions(+), 2 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/support/JaveSE7SQLExceptionWrapper.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DefaultSQLExceptionTranslator.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DefaultSQLExceptionTranslator.java index e299de94bc..c0621b9408 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DefaultSQLExceptionTranslator.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DefaultSQLExceptionTranslator.java @@ -17,6 +17,7 @@ import java.util.List; import com.mysema.query.QueryException; +import com.mysema.query.sql.support.SQLExceptionWrapper; /** * Default implementation of the SQLExceptionTranslator interface @@ -28,14 +29,30 @@ public final class DefaultSQLExceptionTranslator implements SQLExceptionTranslat public static final SQLExceptionTranslator DEFAULT = new DefaultSQLExceptionTranslator(); + private static final SQLExceptionWrapper WRAPPER = SQLExceptionWrapper.INSTANCE; + @Override public RuntimeException translate(SQLException e) { - return new QueryException(e); + if (containsAdditionalExceptions(e)) { + return WRAPPER.wrap(e); + } else { + return new QueryException(e); + } } @Override public RuntimeException translate(String sql, List bindings, SQLException e) { - return new QueryException("Caught " + e.getClass().getSimpleName() + " for " + sql, e); + String message = "Caught " + e.getClass().getSimpleName() + + " for " + sql; + if (containsAdditionalExceptions(e)) { + return WRAPPER.wrap(message, e); + } else { + return new QueryException(message, e); + } + } + + private static boolean containsAdditionalExceptions(SQLException e) { + return e.getNextException() != null; } private DefaultSQLExceptionTranslator() {} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java new file mode 100644 index 0000000000..c433804562 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java @@ -0,0 +1,66 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.support; + +import java.sql.SQLException; + +import com.google.common.base.Function; +import com.google.common.collect.Iterables; +import com.mysema.query.QueryException; + +/** + * A {@link SQLExceptionWrapper} that wraps the additional exception + * information in a {@code WrappedSQLCauseException} and links it to the chain. + * + * @author Shredder121 + */ +class JavaSE6SQLExceptionWrapper extends SQLExceptionWrapper { + + @Override + public RuntimeException wrap(SQLException exception) { + return new QueryException(new WrappedSQLCauseException(exception)); + } + + @Override + public RuntimeException wrap(String message, SQLException exception) { + return new QueryException(message, new WrappedSQLCauseException(exception)); + } + + private static class WrappedSQLCauseException extends Exception { + + private static final long serialVersionUID = 1L; + + public WrappedSQLCauseException(SQLException exception) { + super("Detailed SQLException information:\n" + Iterables + .transform(exception, exceptionMessageFunction), exception); + } + } + private static final Function exceptionMessageFunction = new Function() { + @Override + public String apply(Throwable input) { + if (input instanceof SQLException) { + SQLException sqle = (SQLException) input; + return new StringBuilder() + .append("SQLState: ").append(sqle.getSQLState()) + .append(", ") + .append("ErrorCode: ").append(sqle.getErrorCode()) + .append(", ") + .append("Message: ").append(sqle.getMessage()) + .toString(); + } + return input.toString(); + } + }; + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/support/JaveSE7SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JaveSE7SQLExceptionWrapper.java new file mode 100644 index 0000000000..83158f088a --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JaveSE7SQLExceptionWrapper.java @@ -0,0 +1,50 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.support; + +import java.sql.SQLException; + +import com.mysema.query.QueryException; + +/** + * A {@link SQLExceptionWrapper} that adds the additional + * {@code SQLException}s as suppressed exceptions. + * + * @author Shredder121 + */ +class JaveSE7SQLExceptionWrapper extends SQLExceptionWrapper { + + @Override + public RuntimeException wrap(SQLException exception) { + QueryException rv = new QueryException(exception); + SQLException linkedException = exception.getNextException(); + while (linkedException != null) { + rv.addSuppressed(linkedException); + linkedException = linkedException.getNextException(); + } + return rv; + } + + @Override + public RuntimeException wrap(String message, SQLException exception) { + QueryException rv = new QueryException(message, exception); + SQLException linkedException = exception.getNextException(); + while (linkedException != null) { + rv.addSuppressed(linkedException); + linkedException = linkedException.getNextException(); + } + return rv; + } + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java new file mode 100644 index 0000000000..6544fd2442 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java @@ -0,0 +1,48 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.support; + +import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION; + +import java.sql.SQLException; + +/** + * A {@code SQLExceptionWrapper} is used to accommodate for + * {@literal Java™ 7}'s suppressed exceptions. + * + *

+ * When {@literal Java™ 6} is used, a fallback {@code SQLExceptionWrapper} + * that produces similar output is used instead. + *

+ * @author Shredder121 + */ +public abstract class SQLExceptionWrapper { + + public static final SQLExceptionWrapper INSTANCE; + + static { + double javaVersion + = Double.parseDouble(JAVA_SPECIFICATION_VERSION.value()); + if (javaVersion > 1.6) { + INSTANCE = new JaveSE7SQLExceptionWrapper(); + } else { + INSTANCE = new JavaSE6SQLExceptionWrapper(); + } + } + + public abstract RuntimeException wrap(SQLException exception); + + public abstract RuntimeException wrap(String message, SQLException exception); + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index 8721364545..d60a2dd9ed 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -14,7 +14,9 @@ package com.mysema.query; import java.util.List; + import javax.annotation.Nullable; + import java.sql.Connection; import com.mysema.query.sql.*; @@ -24,12 +26,16 @@ import com.mysema.query.sql.dml.SQLUpdateClause; import com.mysema.query.sql.mysql.MySQLReplaceClause; import com.mysema.query.sql.teradata.TeradataQuery; + import org.junit.Rule; import org.junit.rules.MethodRule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import static org.junit.Assert.assertEquals; +import com.mysema.query.dml.DMLClause; + public abstract class AbstractBaseTest { protected static final Logger logger = LoggerFactory.getLogger(AbstractBaseTest.class); @@ -157,4 +163,12 @@ protected SQLSubQuery sq() { return new SQLSubQuery(); } + protected long execute(DMLClause... clauses) { + long execute = 0; + for (DMLClause clause : clauses) { + execute += clause.execute(); + } + return execute; + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java new file mode 100644 index 0000000000..ce6e0150e4 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java @@ -0,0 +1,42 @@ +package com.mysema.query.suites; + +import static com.mysema.query.sql.domain.QSurvey.survey; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.google.common.base.Throwables; +import com.mysema.query.AbstractBaseTest; +import com.mysema.query.Connections; +import com.mysema.query.QueryException; +import com.mysema.query.sql.H2Templates; + +import org.junit.BeforeClass; +import org.junit.Test; + +public class H2ExceptionSuiteTest extends AbstractBaseTest { + + @BeforeClass + public static void setUp() throws Exception { + Connections.initH2(); + Connections.setTemplates(H2Templates.builder().build()); + + Connections.getConnection().createStatement() + .execute("ALTER TABLE SURVEY ADD CONSTRAINT UNIQUE_ID UNIQUE(ID)"); + } + + @Test + public void UpdateBatchFailed() { + execute(insert(survey).columns(survey.name, survey.name2) + .values("New Survey", "New Survey")); + Exception result = null; + try { + execute(update(survey).set(survey.id, 1) + .addBatch()); + } catch (QueryException e) { + result = e; + } + assertNotNull(result); + assertTrue(Throwables.getStackTraceAsString(result) + .contains("Suppressed")); + } +} From db1d0f332f12abcb00a1526720f888c064bec707 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 16 Oct 2014 22:01:02 +0200 Subject: [PATCH 0498/1968] Correctly get the linked SQLExceptions --- .../support/JavaSE6SQLExceptionWrapper.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java index c433804562..5050185a9c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java @@ -14,9 +14,11 @@ package com.mysema.query.sql.support; import java.sql.SQLException; +import java.util.ArrayList; import com.google.common.base.Function; import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; import com.mysema.query.QueryException; /** @@ -29,21 +31,35 @@ class JavaSE6SQLExceptionWrapper extends SQLExceptionWrapper { @Override public RuntimeException wrap(SQLException exception) { - return new QueryException(new WrappedSQLCauseException(exception)); + Iterable linkedSQLExceptions = getLinkedSQLExceptions(exception); + return new QueryException( + new WrappedSQLCauseException(linkedSQLExceptions, exception)); } @Override public RuntimeException wrap(String message, SQLException exception) { - return new QueryException(message, new WrappedSQLCauseException(exception)); + Iterable linkedSQLExceptions = getLinkedSQLExceptions(exception); + return new QueryException(message, + new WrappedSQLCauseException(linkedSQLExceptions, exception)); + } + + private static Iterable getLinkedSQLExceptions(SQLException exception) { + ArrayList rv = Lists.newArrayList(); + SQLException nextException = exception.getNextException(); + while (nextException != null) { + rv.add(nextException); + nextException = nextException.getNextException(); + } + return rv; } private static class WrappedSQLCauseException extends Exception { private static final long serialVersionUID = 1L; - public WrappedSQLCauseException(SQLException exception) { + private WrappedSQLCauseException(Iterable exceptions, SQLException exception) { super("Detailed SQLException information:\n" + Iterables - .transform(exception, exceptionMessageFunction), exception); + .transform(exceptions, exceptionMessageFunction), exception); } } private static final Function exceptionMessageFunction = new Function() { From 0a06d3212e0033b593ae3c798fc50f1778405477 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 17 Oct 2014 10:32:23 +0200 Subject: [PATCH 0499/1968] Separate the individual exceptions with a blank line --- .../support/JavaSE6SQLExceptionWrapper.java | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java index 5050185a9c..abaf31d1f9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/support/JavaSE6SQLExceptionWrapper.java @@ -13,10 +13,15 @@ */ package com.mysema.query.sql.support; +import static com.google.common.base.StandardSystemProperty.LINE_SEPARATOR; + +import java.io.PrintWriter; +import java.io.StringWriter; import java.sql.SQLException; import java.util.ArrayList; import com.google.common.base.Function; +import com.google.common.base.Joiner; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.mysema.query.QueryException; @@ -58,22 +63,24 @@ private static class WrappedSQLCauseException extends Exception { private static final long serialVersionUID = 1L; private WrappedSQLCauseException(Iterable exceptions, SQLException exception) { - super("Detailed SQLException information:\n" + Iterables - .transform(exceptions, exceptionMessageFunction), exception); + super("Detailed SQLException information:" + LINE_SEPARATOR.value() + + lineJoiner.join(Iterables + .transform(exceptions, exceptionMessageFunction)), exception); } } + + private static final Joiner lineJoiner = Joiner.on(LINE_SEPARATOR.value()); private static final Function exceptionMessageFunction = new Function() { @Override public String apply(Throwable input) { if (input instanceof SQLException) { SQLException sqle = (SQLException) input; - return new StringBuilder() - .append("SQLState: ").append(sqle.getSQLState()) - .append(", ") - .append("ErrorCode: ").append(sqle.getErrorCode()) - .append(", ") - .append("Message: ").append(sqle.getMessage()) - .toString(); + StringWriter writer = new StringWriter(); + new PrintWriter(writer, true) + .printf("SQLState: %s%n", sqle.getSQLState()) + .printf("ErrorCode: %s%n", sqle.getErrorCode()) + .printf("Message: %s%n", sqle.getMessage()); + return writer.toString(); } return input.toString(); } From fb9e9385fbb475f376b85e5a8de6ad8f6d724236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 17 Oct 2014 21:31:04 +0300 Subject: [PATCH 0500/1968] Move specific validate return type to PathBuilder --- .../java/com/mysema/query/types/path/PathBuilder.java | 2 +- .../com/mysema/query/types/path/PathBuilderValidator.java | 8 ++++---- .../mysema/query/jpa/support/JPAPathBuilderValidator.java | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java index af43f2a5e1..dc77df1c8c 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java @@ -108,7 +108,7 @@ private

> P addMetadataOf(P newPath, Path path) { } protected Class validate(String property, Class propertyType) { - Class validatedType = validator.validate(getType(), property, propertyType); + Class validatedType = (Class)validator.validate(getType(), property, propertyType); if (validatedType != null) { return validatedType; } else { diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java index edad71b044..29a7c8de42 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilderValidator.java @@ -34,18 +34,18 @@ public interface PathBuilderValidator { * @param property * @param propertyType */ - Class validate(Class parent, String property, Class propertyType); + Class validate(Class parent, String property, Class propertyType); public final PathBuilderValidator DEFAULT = new PathBuilderValidator() { @Override - public Class validate(Class parent, String property, Class propertyType) { + public Class validate(Class parent, String property, Class propertyType) { return propertyType; } }; public final PathBuilderValidator FIELDS = new PathBuilderValidator() { @Override - public Class validate(Class parent, String property, Class propertyType) { + public Class validate(Class parent, String property, Class propertyType) { while (!parent.equals(Object.class)) { try { Field field = parent.getDeclaredField(property); @@ -66,7 +66,7 @@ public Class validate(Class parent, String property, Class Class validate(Class parent, String property, Class propertyType) { + public Class validate(Class parent, String property, Class propertyType) { Method getter = BeanUtils.getAccessor("get", property, parent); if (getter == null && Primitives.wrap(propertyType).equals(Boolean.class)) { getter = BeanUtils.getAccessor("is", property, parent); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java index 70b93ba6a7..b54d52bd71 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/support/JPAPathBuilderValidator.java @@ -38,7 +38,7 @@ public JPAPathBuilderValidator(Metamodel metamodel) { } @Override - public Class validate(Class parent, String property, Class propertyType) { + public Class validate(Class parent, String property, Class propertyType) { try { ManagedType managedType = metamodel.managedType(parent); Attribute attribute = managedType.getAttribute(property); From 51c4af709ba523f404c42be5eaa5b9d067bca001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 17 Oct 2014 21:38:42 +0300 Subject: [PATCH 0501/1968] Add test --- .../java/com/mysema/query/DefaultQueryMetadataTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java b/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java index 5cbdc390ad..89d51f9979 100644 --- a/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/DefaultQueryMetadataTest.java @@ -58,9 +58,14 @@ public void Validation() { } @Test - public void Validation_No_Error() { + public void Validation_No_Error_For_GroupBy() { metadata.addGroupBy(str); } + + @Test + public void Validation_No_Error_For_Having() { + metadata.addHaving(str.isNull()); + } @Test public void GetGroupBy() { From 511955e1cc08721a6118d2bccf759a9c5574f2b0 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 18 Oct 2014 20:02:09 +0200 Subject: [PATCH 0502/1968] Remove the {@literal } wrapping in the JavaDoc --- .../com/mysema/query/sql/support/SQLExceptionWrapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java index 6544fd2442..3bd7ecbb31 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/support/SQLExceptionWrapper.java @@ -19,10 +19,10 @@ /** * A {@code SQLExceptionWrapper} is used to accommodate for - * {@literal Java™ 7}'s suppressed exceptions. + * Java™ 7's suppressed exceptions. * *

- * When {@literal Java™ 6} is used, a fallback {@code SQLExceptionWrapper} + * When Java™ 6 is used, a fallback {@code SQLExceptionWrapper} * that produces similar output is used instead. *

* @author Shredder121 From 16497e22bdf666880523e2a45ee11334ea0ab5bb Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 18 Oct 2014 20:03:19 +0200 Subject: [PATCH 0503/1968] Cleanup of the added unique constraint after the test --- .../java/com/mysema/query/suites/H2ExceptionSuiteTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java index ce6e0150e4..ec64055605 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java @@ -24,6 +24,11 @@ public static void setUp() throws Exception { .execute("ALTER TABLE SURVEY ADD CONSTRAINT UNIQUE_ID UNIQUE(ID)"); } + public static void tearDown() throws Exception { + Connections.getConnection().createStatement() + .execute("ALTER TABLE SURVEY DROP CONSTRAINT UNIQUE_ID"); + } + @Test public void UpdateBatchFailed() { execute(insert(survey).columns(survey.name, survey.name2) From a4e3dc622b82e483d33118da361a36661b457764 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 18 Oct 2014 20:44:59 +0200 Subject: [PATCH 0504/1968] Add another batch in the H2ExceptionSuiteTest --- .../java/com/mysema/query/suites/H2ExceptionSuiteTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java index ec64055605..5629c51b7f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java @@ -35,8 +35,9 @@ public void UpdateBatchFailed() { .values("New Survey", "New Survey")); Exception result = null; try { - execute(update(survey).set(survey.id, 1) - .addBatch()); + execute(update(survey) + .set(survey.id, 1).addBatch() + .set(survey.id, 2).addBatch()); } catch (QueryException e) { result = e; } From 974574dc902866e84db5e507c34ff36d0e49c12d Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 18 Oct 2014 20:52:21 +0200 Subject: [PATCH 0505/1968] Add support for access to the used Java version in tests --- .../com/mysema/query/JavaSpecVersion.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java diff --git a/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java b/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java new file mode 100644 index 0000000000..5a6928193f --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java @@ -0,0 +1,50 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query; + +import static com.google.common.base.StandardSystemProperty.JAVA_SPECIFICATION_VERSION; + +/** + * The different Java™ specification versions. + * + * @author Ruben + */ +public enum JavaSpecVersion { + + JAVA6("1.6"), + JAVA7("1.7"), + JAVA8("1.8"); + + public static final JavaSpecVersion CURRENT + = getByVersionNumber(JAVA_SPECIFICATION_VERSION.value()); + + private final String versionNumber; + + private JavaSpecVersion(String versionNumber) { + this.versionNumber = versionNumber; + } + + private boolean isVersion(String versionNumber) { + return this.versionNumber.equals(versionNumber); + } + + private static JavaSpecVersion getByVersionNumber(String versionNumber) { + for (JavaSpecVersion version : values()) { + if (version.isVersion(versionNumber)) { + return version; + } + } + throw new IllegalArgumentException("versionNumber " + versionNumber + " not found"); + } +} From 487950db98cff710b8045aed92745795bd68a4fb Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 18 Oct 2014 20:54:34 +0200 Subject: [PATCH 0506/1968] Add specific asserts for Java 6 and 7 --- .../mysema/query/suites/H2ExceptionSuiteTest.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java index 5629c51b7f..68ecc1db07 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java @@ -7,6 +7,7 @@ import com.google.common.base.Throwables; import com.mysema.query.AbstractBaseTest; import com.mysema.query.Connections; +import com.mysema.query.JavaSpecVersion; import com.mysema.query.QueryException; import com.mysema.query.sql.H2Templates; @@ -42,7 +43,15 @@ public void UpdateBatchFailed() { result = e; } assertNotNull(result); - assertTrue(Throwables.getStackTraceAsString(result) - .contains("Suppressed")); + String stackTraceAsString = Throwables.getStackTraceAsString(result); + switch (JavaSpecVersion.CURRENT) { + case JAVA6: + assertTrue(stackTraceAsString + .contains("Detailed SQLException information:")); + break; + default://Java™ 7 and higher + assertTrue(stackTraceAsString + .contains("Suppressed:")); + } } } From 5cb9097cffaf20a45f550f47d19aabd4bf72e3b1 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 18 Oct 2014 22:14:16 +0200 Subject: [PATCH 0507/1968] Change author tag in JavaDoc --- .../src/test/java/com/mysema/query/JavaSpecVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java b/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java index 5a6928193f..380bf3ee9f 100644 --- a/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java +++ b/querydsl-core/src/test/java/com/mysema/query/JavaSpecVersion.java @@ -18,7 +18,7 @@ /** * The different Java™ specification versions. * - * @author Ruben + * @author Shredder121 */ public enum JavaSpecVersion { From 60a8679a79949dec06f83afb824efa005d82b39d Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 20 Oct 2014 16:51:13 +0200 Subject: [PATCH 0508/1968] Add the simple exception creation case to the ExceptionSuiteTest --- .../query/suites/H2ExceptionSuiteTest.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java index 68ecc1db07..4a9ba41849 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java @@ -4,18 +4,24 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.sql.SQLException; + import com.google.common.base.Throwables; import com.mysema.query.AbstractBaseTest; import com.mysema.query.Connections; import com.mysema.query.JavaSpecVersion; import com.mysema.query.QueryException; +import com.mysema.query.sql.DefaultSQLExceptionTranslator; import com.mysema.query.sql.H2Templates; +import com.mysema.query.sql.SQLExceptionTranslator; import org.junit.BeforeClass; import org.junit.Test; public class H2ExceptionSuiteTest extends AbstractBaseTest { + private static final SQLExceptionTranslator exceptionTranslator = DefaultSQLExceptionTranslator.DEFAULT; + @BeforeClass public static void setUp() throws Exception { Connections.initH2(); @@ -30,6 +36,17 @@ public static void tearDown() throws Exception { .execute("ALTER TABLE SURVEY DROP CONSTRAINT UNIQUE_ID"); } + @Test + public void SQLExceptionCreationTranslated() { + SQLException e1 = new SQLException("Exception #1", "42001", 181); + SQLException e2 = new SQLException("Exception #2", "HY000", 1030); + e1.setNextException(e2); + SQLException sqlException = new SQLException("Batch operation failed"); + sqlException.setNextException(e1); + RuntimeException result = exceptionTranslator.translate(sqlException); + inspectExceptionResult(result); + } + @Test public void UpdateBatchFailed() { execute(insert(survey).columns(survey.name, survey.name2) @@ -43,6 +60,10 @@ public void UpdateBatchFailed() { result = e; } assertNotNull(result); + inspectExceptionResult(result); + } + + private void inspectExceptionResult(Exception result) { String stackTraceAsString = Throwables.getStackTraceAsString(result); switch (JavaSpecVersion.CURRENT) { case JAVA6: From df20f371857f73ac0d15b0c834fd5e2a49f0a5d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Oct 2014 21:53:22 +0300 Subject: [PATCH 0509/1968] Add return docs --- .../java/com/mysema/query/Detachable.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/Detachable.java b/querydsl-core/src/main/java/com/mysema/query/Detachable.java index 46ebc78f98..a94e887dec 100644 --- a/querydsl-core/src/main/java/com/mysema/query/Detachable.java +++ b/querydsl-core/src/main/java/com/mysema/query/Detachable.java @@ -58,7 +58,7 @@ public interface Detachable { * Create a multi row subquery expression for the given projection * * @param args - * @return + * @return a view of the subquery result as a list */ ListSubQuery list(Expression... args); @@ -67,7 +67,7 @@ public interface Detachable { * Non expression arguments are converted into constant expressions * * @param args - * @return + * @return a view of the subquery result as a list */ ListSubQuery list(Object... args); @@ -77,7 +77,7 @@ public interface Detachable { * @param * generic type of the List * @param projection - * @return + * @return a view of the subquery result as a list */ ListSubQuery list(Expression projection); @@ -102,7 +102,7 @@ public interface Detachable { * Non expression arguments are converted into constant expressions * * @param args - * @return + * @return a view of the subquery result as a single value */ SimpleSubQuery unique(Object... args); @@ -112,7 +112,7 @@ public interface Detachable { * @param * return type * @param projection - * @return + * @return a view of the subquery result as a single value */ SimpleSubQuery unique(Expression projection); @@ -120,7 +120,7 @@ public interface Detachable { * Create a single row subquery expression for the given projection * * @param projection - * @return + * @return a view of the subquery result as a single value */ BooleanSubQuery unique(Predicate projection); @@ -128,7 +128,7 @@ public interface Detachable { * Create a single row subquery expression for the given projection * * @param projection - * @return + * @return a view of the subquery result as a single value */ StringSubQuery unique(StringExpression projection); @@ -137,7 +137,7 @@ public interface Detachable { * * @param * @param projection - * @return + * @return a view of the subquery result as a single value */ > ComparableSubQuery unique(ComparableExpression projection); @@ -146,7 +146,7 @@ public interface Detachable { * * @param * @param projection - * @return + * @return a view of the subquery result as a single value */ > DateSubQuery unique(DateExpression projection); @@ -155,7 +155,7 @@ public interface Detachable { * * @param * @param projection - * @return + * @return a view of the subquery result as a single value */ > DateTimeSubQuery unique(DateTimeExpression projection); @@ -164,7 +164,7 @@ public interface Detachable { * * @param * @param projection - * @return + * @return a view of the subquery result as a single value */ > TimeSubQuery unique(TimeExpression projection); @@ -173,7 +173,7 @@ public interface Detachable { * * @param * @param projection - * @return + * @return a view of the subquery result as a single value */ > NumberSubQuery unique(NumberExpression projection); From 76f122186840b71195d1d45ce40340d7bc837fed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Oct 2014 22:33:19 +0300 Subject: [PATCH 0510/1968] Add examples --- .../java/com/mysema/query/Detachable.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/querydsl-core/src/main/java/com/mysema/query/Detachable.java b/querydsl-core/src/main/java/com/mysema/query/Detachable.java index a94e887dec..bd21fc897f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/Detachable.java +++ b/querydsl-core/src/main/java/com/mysema/query/Detachable.java @@ -43,6 +43,10 @@ public interface Detachable { /** * Return the count of matched rows as a sub query * + *

Usage

+ * + * {@code query.where(subQuery.from(customer).where(...).count().gt(1)) } + * * @return */ NumberSubQuery count(); @@ -50,6 +54,10 @@ public interface Detachable { /** * Create an exists(this) expression * + *

Usage

+ * + * {@code query.where(subQuery.from(customer).where(...).exists()) } + * * @return */ BooleanExpression exists(); @@ -74,6 +82,10 @@ public interface Detachable { /** * Create a multi row subquery expression for the given projection * + *

Usage

+ * + * {@code customer.name.in(subQuery.from(customer).where(...).list(customer.name))} + * * @param * generic type of the List * @param projection @@ -85,6 +97,10 @@ public interface Detachable { /** * Create an not exists(this) expression * + *

Usage

+ * + * {@code query.where(subQuery.from(customer).where(...).notExists()) } + * * @return */ BooleanExpression notExists(); @@ -109,6 +125,10 @@ public interface Detachable { /** * Create a single row subquery expression for the given projection * + *

Usage

+ * + * {@code person.age.eq(subQuery.from(person).unique(person.age.max())) } + * * @param * return type * @param projection From b7e97fd7864ec28d77c8e5db841726c34662d8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Oct 2014 22:41:02 +0300 Subject: [PATCH 0511/1968] Add more examples --- .../java/com/mysema/query/Detachable.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/Detachable.java b/querydsl-core/src/main/java/com/mysema/query/Detachable.java index bd21fc897f..2a9321f955 100644 --- a/querydsl-core/src/main/java/com/mysema/query/Detachable.java +++ b/querydsl-core/src/main/java/com/mysema/query/Detachable.java @@ -65,6 +65,10 @@ public interface Detachable { /** * Create a multi row subquery expression for the given projection * + *

Usage

+ * + * {@code subQuery.from(person).list(person.firstName, person.lastName).countDistinct() } + * * @param args * @return a view of the subquery result as a list */ @@ -72,7 +76,11 @@ public interface Detachable { /** * Create a multi row subquery expression for the given projection - * Non expression arguments are converted into constant expressions + *

Non expression arguments are converted into constant expressions

+ * + *

Usage

+ * + * {@code subQuery.from(person).list(person.firstName, "M")} * * @param args * @return a view of the subquery result as a list @@ -108,6 +116,10 @@ public interface Detachable { /** * Create a single row subquery expression for the given projection * + *

Usage

+ * + * {@code subQuery.from(person).unique(person.firstName, person.lastName)} + * * @param args * @return */ @@ -115,7 +127,11 @@ public interface Detachable { /** * Create a single row subquery expression for the given projection - * Non expression arguments are converted into constant expressions + *

Non expression arguments are converted into constant expressions

+ * + *

Usage

+ * + * {@code subQuery.from(person).unique(person.firstName, "M")} * * @param args * @return a view of the subquery result as a single value From d9e9c620af738af889c2514d39f0668f8f38eddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 20 Oct 2014 23:05:44 +0300 Subject: [PATCH 0512/1968] Update docs --- .../src/main/java/com/mysema/query/Detachable.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/querydsl-core/src/main/java/com/mysema/query/Detachable.java b/querydsl-core/src/main/java/com/mysema/query/Detachable.java index 2a9321f955..9c8c4ef208 100644 --- a/querydsl-core/src/main/java/com/mysema/query/Detachable.java +++ b/querydsl-core/src/main/java/com/mysema/query/Detachable.java @@ -157,6 +157,7 @@ public interface Detachable { * * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ BooleanSubQuery unique(Predicate projection); @@ -165,6 +166,7 @@ public interface Detachable { * * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ StringSubQuery unique(StringExpression projection); @@ -174,6 +176,7 @@ public interface Detachable { * @param * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ > ComparableSubQuery unique(ComparableExpression projection); @@ -183,6 +186,7 @@ public interface Detachable { * @param * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ > DateSubQuery unique(DateExpression projection); @@ -192,6 +196,7 @@ public interface Detachable { * @param * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ > DateTimeSubQuery unique(DateTimeExpression projection); @@ -201,6 +206,7 @@ public interface Detachable { * @param * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ > TimeSubQuery unique(TimeExpression projection); @@ -210,6 +216,7 @@ public interface Detachable { * @param * @param projection * @return a view of the subquery result as a single value + * @see #unique(com.mysema.query.types.Expression) */ > NumberSubQuery unique(NumberExpression projection); From fb18269f31e6fe7b27d5a5f258439b9c07e933f9 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 6 Oct 2014 20:41:50 +0200 Subject: [PATCH 0513/1968] Equalize field signature reserved keyword list --- .../src/main/java/com/mysema/query/sql/FirebirdTemplates.java | 4 ++++ .../src/main/java/com/mysema/query/sql/MySQLTemplates.java | 3 ++- .../src/main/java/com/mysema/query/sql/PostgresTemplates.java | 2 +- .../src/main/java/com/mysema/query/sql/SQLTemplates.java | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 7883ded58b..156e3992c1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -1,13 +1,17 @@ package com.mysema.query.sql; import java.sql.Types; +import java.util.Set; +import com.google.common.collect.ImmutableSet; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; public class FirebirdTemplates extends SQLTemplates { + protected static final Set FIREBIRD_RESERVED_WORDS + = ImmutableSet.of(); private String limitOffsetTemplate = "\nrows {0} to {1}"; private String limitTemplate = "\nrows {0}"; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index 3422f0c98d..6881324f3d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -14,6 +14,7 @@ package com.mysema.query.sql; import java.sql.Types; +import java.util.Set; import com.google.common.collect.ImmutableSet; import com.mysema.query.types.Ops; @@ -28,7 +29,7 @@ */ public class MySQLTemplates extends SQLTemplates { - protected static final ImmutableSet MYSQL_RESERVED_WORDS + protected static final Set MYSQL_RESERVED_WORDS = ImmutableSet.of( "ACCESSIBLE", "ADD", "ALL", "ALTER", "ANALYZE", "AND", "AS", "ASC", "ASENSITIVE", "BEFORE", "BETWEEN", "BIGINT", "BINARY", diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index 424356507f..e2cde5c09e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -29,7 +29,7 @@ */ public class PostgresTemplates extends SQLTemplates { - private static final Set POSTGRES_RESERVED_WORDS + protected static final Set POSTGRES_RESERVED_WORDS = ImmutableSet.of( "ALL", "ANALYSE", "ANALYZE", "AND", "ANY", "ARRAY", "AS", "ASC", "ASYMMETRIC", "AUTHORIZATION", "BINARY", "BOTH", diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 13e8e16387..f2744c94a9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -40,7 +40,7 @@ */ public class SQLTemplates extends Templates { - protected static final ImmutableSet SQL_RESERVED_WORDS + protected static final Set SQL_RESERVED_WORDS = ImmutableSet.of( "ABS", "ALL", "ALLOCATE", "ALTER", "AND", "ANY", "ARE", "ARRAY", "ARRAY_AGG", "AS", "ASENSITIVE", "ASYMMETRIC", From 9bb4d79a4542f7af68a5f29518726245ce4ecba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 21 Oct 2014 21:08:43 +0300 Subject: [PATCH 0514/1968] Remove unused FIREBIRD_RESERVED_WORDS --- .../src/main/java/com/mysema/query/sql/FirebirdTemplates.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index 7aa78de0c5..c4601b15e6 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -1,17 +1,13 @@ package com.mysema.query.sql; import java.sql.Types; -import java.util.Set; -import com.google.common.collect.ImmutableSet; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; public class FirebirdTemplates extends SQLTemplates { - protected static final Set FIREBIRD_RESERVED_WORDS - = ImmutableSet.of(); private String limitOffsetTemplate = "\nrows {0} to {1}"; private String limitTemplate = "\nrows {0}"; From cd8ee7409b353dff098e16d4b1888a01d4dbe5a5 Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Fri, 24 Oct 2014 10:29:58 -0500 Subject: [PATCH 0515/1968] Added support for JTS Geometries --- .../query/apt/DefaultConfiguration.java | 8 ++++++ .../com/mysema/query/apt/SpatialSupport.java | 28 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java index 422eeffb24..b5524a4890 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java @@ -183,6 +183,14 @@ public DefaultConfiguration( } catch (Exception e) { // do nothing } + + try { + // register additional mappings, if querydsl-spatial and JTS is on the classpath + Class.forName("com.mysema.query.spatial.jts.JTSGeometryExpression"); + SpatialSupport.addJTSSupport(module); + } catch (Exception e) { + // do nothing + } defaultSerializerConfig = new SimpleSerializerConfig(entityAccessors, listAccessors, mapAccessors, createDefaultVariable, ""); diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java index e2f89b81e5..762bdbb999 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java @@ -31,10 +31,27 @@ private static void registerTypes(TypeMappings typeMappings) { new SimpleType("com.mysema.query.spatial.path." + entry.getValue())); } } + + private static void registerJTSTypes(TypeMappings typeMappings) { + Map additions = Maps.newHashMap(); + additions.put("Geometry", "GeometryPath"); + additions.put("GeometryCollection", "GeometryCollectionPath"); + additions.put("LinearRing", "LinearRingPath"); + additions.put("LineString", "LineStringPath"); + additions.put("MultiLineString", "MultiLineStringPath"); + additions.put("MultiPoint", "MultiPointPath"); + additions.put("MultiPolygon", "MultiPolygonPath"); + additions.put("Point", "PointPath"); + additions.put("Polygon", "PolygonPath"); + for (Map.Entry entry : additions.entrySet()) { + typeMappings.register( + new SimpleType("com.vividsolutions.jts.geom."+ entry.getKey()), + new SimpleType("com.mysema.query.spatial.jts.path." + entry.getValue())); + } + } - private static void addImports(AbstractModule module) { + private static void addImports(AbstractModule module, String packageName) { Set imports = module.get(Set.class, CodegenModule.IMPORTS); - String packageName = "com.mysema.query.spatial.path"; if (imports.isEmpty()) { imports = ImmutableSet.of(packageName); } else { @@ -48,7 +65,12 @@ private static void addImports(AbstractModule module) { public static void addSupport(AbstractModule module) { registerTypes(module.get(TypeMappings.class)); - addImports(module); + addImports(module,"com.mysema.query.spatial.path"); + } + + public static void addJTSSupport(AbstractModule module) { + registerJTSTypes(module.get(TypeMappings.class)); + addImports(module,"com.mysema.query.spatial.jts.path"); } private SpatialSupport() {} From fc6d7eb9207ed52588f4e7a7cd1a10433f8cc75b Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Fri, 24 Oct 2014 11:02:02 -0500 Subject: [PATCH 0516/1968] Added prefix for JTS Geometries --- .../com/mysema/query/apt/SpatialSupport.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java index 762bdbb999..460e788a20 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java @@ -34,15 +34,15 @@ private static void registerTypes(TypeMappings typeMappings) { private static void registerJTSTypes(TypeMappings typeMappings) { Map additions = Maps.newHashMap(); - additions.put("Geometry", "GeometryPath"); - additions.put("GeometryCollection", "GeometryCollectionPath"); - additions.put("LinearRing", "LinearRingPath"); - additions.put("LineString", "LineStringPath"); - additions.put("MultiLineString", "MultiLineStringPath"); - additions.put("MultiPoint", "MultiPointPath"); - additions.put("MultiPolygon", "MultiPolygonPath"); - additions.put("Point", "PointPath"); - additions.put("Polygon", "PolygonPath"); + additions.put("Geometry", "JTSGeometryPath"); + additions.put("GeometryCollection", "JTSGeometryCollectionPath"); + additions.put("LinearRing", "JTSLinearRingPath"); + additions.put("LineString", "JTSLineStringPath"); + additions.put("MultiLineString", "JTSMultiLineStringPath"); + additions.put("MultiPoint", "JTSMultiPointPath"); + additions.put("MultiPolygon", "JTSMultiPolygonPath"); + additions.put("Point", "JTSPointPath"); + additions.put("Polygon", "JTSPolygonPath"); for (Map.Entry entry : additions.entrySet()) { typeMappings.register( new SimpleType("com.vividsolutions.jts.geom."+ entry.getKey()), From 111c01b04771423d45eea446c01ccf331d434a79 Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Fri, 24 Oct 2014 11:02:48 -0500 Subject: [PATCH 0517/1968] Added support for JTS Geometries --- .../query/spatial/jts/JTSCurveExpression.java | 114 ++++ .../jts/JTSGeometryCollectionExpression.java | 66 +++ .../spatial/jts/JTSGeometryExpression.java | 527 ++++++++++++++++++ .../spatial/jts/JTSGeometryExpressions.java | 192 +++++++ .../spatial/jts/JTSGeometryOperation.java | 79 +++ .../query/spatial/jts/JTSLineExpression.java | 35 ++ .../spatial/jts/JTSLineStringExpression.java | 67 +++ .../spatial/jts/JTSLineStringOperation.java | 79 +++ .../spatial/jts/JTSLinearRingExpression.java | 35 ++ .../spatial/jts/JTSMultiCurveExpression.java | 73 +++ .../jts/JTSMultiLineStringExpression.java | 35 ++ .../spatial/jts/JTSMultiPointExpression.java | 37 ++ .../jts/JTSMultiPolygonExpression.java | 35 ++ .../jts/JTSMultiSurfaceExpression.java | 87 +++ .../query/spatial/jts/JTSPointExpression.java | 91 +++ .../query/spatial/jts/JTSPointOperation.java | 78 +++ .../spatial/jts/JTSPolygonExpression.java | 82 +++ .../spatial/jts/JTSPolygonOperation.java | 78 +++ .../spatial/jts/JTSSurfaceExpression.java | 83 +++ .../jts/path/JTSGeometryCollectionPath.java | 83 +++ .../spatial/jts/path/JTSGeometryPath.java | 163 ++++++ .../spatial/jts/path/JTSGeometryPaths.java | 50 ++ .../spatial/jts/path/JTSLineStringPath.java | 83 +++ .../spatial/jts/path/JTSLinearRingPath.java | 83 +++ .../jts/path/JTSMultiLineStringPath.java | 83 +++ .../spatial/jts/path/JTSMultiPointPath.java | 83 +++ .../spatial/jts/path/JTSMultiPolygonPath.java | 83 +++ .../query/spatial/jts/path/JTSPointPath.java | 83 +++ .../spatial/jts/path/JTSPolygonPath.java | 83 +++ .../query/spatial/jts/JTSGeometryEntity.java | 27 + .../spatial/jts/path/JTSGeometryPathTest.java | 30 + 31 files changed, 2807 insertions(+) create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpressions.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java create mode 100644 querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java create mode 100644 querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/JTSGeometryEntity.java create mode 100644 querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/path/JTSGeometryPathTest.java diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java new file mode 100644 index 0000000000..1129d0e126 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java @@ -0,0 +1,114 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.expr.BooleanOperation; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Point; + +/** + * A Curve is a 1-dimensional geometric object usually stored as a sequence of Points, with the subtype of Curve + * specifying the form of the interpolation between Points. This standard defines only one subclass of Curve, + * LineString, which uses linear interpolation between Points. + * + * @author tiwe + * + * @param + */ +public abstract class JTSCurveExpression extends JTSGeometryExpression { + + private static final long serialVersionUID = 6139188586728676033L; + + @Nullable + private volatile NumberExpression length; + + @Nullable + private volatile JTSPointExpression startPoint, endPoint; + + @Nullable + private volatile BooleanExpression closed, ring; + + public JTSCurveExpression(Expression mixin) { + super(mixin); + } + + /** + * The length of this Curve in its associated spatial reference. + * + * @return + */ + public NumberExpression length() { + if (length == null) { + length = NumberOperation.create(Double.class, SpatialOps.LENGTH, mixin); + } + return length; + } + + /** + * The start Point of this Curve. + * + * @return + */ + public JTSPointExpression startPoint() { + if (startPoint == null) { + startPoint = JTSPointOperation.create(Point.class, SpatialOps.START_POINT, mixin); + } + return startPoint; + } + + /** + * The end Point of this Curve. + * + * @return + */ + public JTSPointExpression endPoint() { + if (endPoint == null) { + endPoint = JTSPointOperation.create(Point.class, SpatialOps.END_POINT, mixin); + } + return endPoint; + } + + /** + * Returns 1 (TRUE) if this Curve is closed [StartPoint ( ) = EndPoint ( )]. + * + * @return + */ + public BooleanExpression isClosed() { + if (closed == null) { + closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + } + return closed; + } + + /** + * Returns 1 (TRUE) if this Curve is closed [StartPoint ( ) = EndPoint ( )] and this Curve is + * simple (does not pass through the same Point more than once). + * + * @return + */ + public BooleanExpression isRing() { + if (ring == null) { + ring = BooleanOperation.create(SpatialOps.IS_RING, mixin); + } + return ring; + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java new file mode 100644 index 0000000000..175fc5330c --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java @@ -0,0 +1,66 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; + +/** + * A GeometryCollection is a geometric object that is a collection of some number of geometric objects. + * + * @author tiwe + * + * @param + */ +public abstract class JTSGeometryCollectionExpression extends JTSGeometryExpression { + + private static final long serialVersionUID = 8874174644259834690L; + + @Nullable + private volatile NumberExpression numGeometries; + + public JTSGeometryCollectionExpression(Expression mixin) { + super(mixin); + } + + /** + * Returns the number of geometries in this GeometryCollection. + * + * @return + */ + public NumberExpression numGeometries() { + if (numGeometries == null) { + numGeometries = NumberOperation.create(Integer.class, SpatialOps.NUM_GEOMETRIES, mixin); + } + return numGeometries; + } + + /** + * Returns the Nth geometry in this GeometryCollection. + * + * @param n + * @return + */ + public JTSGeometryExpression geometryN(Integer n) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.GEOMETRYN, mixin, ConstantImpl.create(n)); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java new file mode 100644 index 0000000000..4470e98594 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java @@ -0,0 +1,527 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.expr.BooleanOperation; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.mysema.query.types.expr.SimpleExpression; +import com.mysema.query.types.expr.SimpleOperation; +import com.mysema.query.types.expr.StringExpression; +import com.mysema.query.types.expr.StringOperation; +import com.vividsolutions.jts.geom.Geometry; + +/** + * Geometry is the root class of the hierarchy. Geometry is an abstract (non-instantiable) class. + * + * @author tiwe + * + * @param + */ +public abstract class JTSGeometryExpression extends SimpleExpression { + + private static final long serialVersionUID = -1183228394472681995L; + + @Nullable + private volatile NumberExpression dimension, coordinateDimension, spatialDimension, srid; + + @Nullable + private volatile StringExpression geometryType; + + @Nullable + private volatile StringExpression text; + + @Nullable + private volatile JTSGeometryExpression envelope, boundary, convexHull; + + @Nullable + private volatile BooleanExpression empty, simple, threed, measured; + + private volatile SimpleExpression binary; + + public JTSGeometryExpression(Expression mixin) { + super(mixin); + } + + /** + * The inherent dimension of this geometric object, which must be less than or equal + * to the coordinate dimension. In non-homogeneous collections, this will return the largest topological + * dimension of the contained objects. + * + * @return + */ + public NumberExpression dimension() { + if (dimension == null) { + dimension = NumberOperation.create(Integer.class, SpatialOps.DIMENSION, mixin); + } + return dimension; + } + + /** + * Returns the name of the instantiable subtype of Geometry of which this + * geometric object is an instantiable member. The name of the subtype of Geometry is returned as a string. + * + * @return + */ + public StringExpression geometryType() { + if (geometryType == null) { + geometryType = StringOperation.create(SpatialOps.GEOMETRY_TYPE, mixin); + } + return geometryType; + } + + /** + * Returns the Spatial Reference System ID for this geometric object. This will normally be a + * foreign key to an index of reference systems stored in either the same or some other datastore. + * + * @return + */ + public NumberExpression srid() { + if (srid == null) { + srid = NumberOperation.create(Integer.class, SpatialOps.SRID, mixin); + } + return srid; + } + + /** + * The minimum bounding box for this Geometry, returned as a Geometry. The + * polygon is defined by the corner points of the bounding box [(MINX, MINY), (MAXX, MINY), (MAXX, MAXY), + * (MINX, MAXY), (MINX, MINY)]. Minimums for Z and M may be added. The simplest representation of an + * Envelope is as two direct positions, one containing all the minimums, and another all the maximums. In some + * cases, this coordinate will be outside the range of validity for the Spatial Reference System. + * + * @return + */ + public JTSGeometryExpression envelope() { + if (envelope == null) { + envelope = JTSGeometryOperation.create(Geometry.class, SpatialOps.ENVELOPE, mixin); + } + return envelope; + } + + /** + * Exports this geometric object to a specific Well-known Text Representation of Geometry. + * + * @return + */ + public StringExpression asText() { + if (text == null) { + text = StringOperation.create(SpatialOps.AS_TEXT, mixin); + } + return text; + } + + /** + * Exports this geometric object to a specific Well-known Binary Representation of + * Geometry. + * + * @return + */ + public SimpleExpression asBinary() { + if (binary == null) { + binary = SimpleOperation.create(byte[].class, SpatialOps.AS_BINARY, mixin); + } + return binary; + } + + /** + * Returns 1 (TRUE) if this geometric object is the empty Geometry. If true, then this + * geometric object represents the empty point set ∅ for the coordinate space. + * + * @return + */ + public BooleanExpression isEmpty() { + if (empty == null) { + empty = BooleanOperation.create(SpatialOps.IS_EMPTY, mixin); + } + return empty; + } + + /** + * Returns 1 (TRUE) if this geometric object has no anomalous geometric points, such + * as self intersection or self tangency. The description of each instantiable geometric class + * will include the specific conditions that cause an instance of that class to be classified as not simple. + * + * @return + */ + public BooleanExpression isSimple() { + if (simple == null) { + simple = BooleanOperation.create(SpatialOps.IS_SIMPLE, mixin); + } + return simple; + } + + /** + * Returns the closure of the combinatorial boundary of this geometric object + * + * @return + */ + public JTSGeometryExpression boundary() { + if (boundary == null) { + boundary = JTSGeometryOperation.create(Geometry.class, SpatialOps.BOUNDARY, mixin); + } + return boundary; + } + + // query + + /* (non-Javadoc) + * @see com.mysema.query.types.expr.SimpleExpression#eq(java.lang.Object) + */ + @Override + public BooleanExpression eq(Geometry right) { + return eq(ConstantImpl.create(right)); + } + + /* (non-Javadoc) + * @see com.mysema.query.types.expr.SimpleExpression#eq(com.mysema.query.types.Expression) + */ + @Override + public BooleanExpression eq(Expression right) { + return BooleanOperation.create(SpatialOps.EQUALS, mixin, right); + } + + /** + * Returns 1 (TRUE) if this geometric object is “spatially disjoint” from anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression disjoint(Geometry geometry) { + return disjoint(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object is “spatially disjoint” from anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression disjoint(Expression geometry) { + return BooleanOperation.create(SpatialOps.DISJOINT, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially intersects” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression intersects(Geometry geometry) { + return intersects(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially intersects” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression intersects(Expression geometry) { + return BooleanOperation.create(SpatialOps.INTERSECTS, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially touches” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression touches(Geometry geometry) { + return touches(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially touches” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression touches(Expression geometry) { + return BooleanOperation.create(SpatialOps.TOUCHES, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially crosses’ anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression crosses(Geometry geometry) { + return crosses(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially crosses’ anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression crosses(Expression geometry) { + return BooleanOperation.create(SpatialOps.CROSSES, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object is “spatially within” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression within(Geometry geometry) { + return within(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object is “spatially within” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression within(Expression geometry) { + return BooleanOperation.create(SpatialOps.WITHIN, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially contains” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression contains(Geometry geometry) { + return contains(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially contains” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression contains(Expression geometry) { + return BooleanOperation.create(SpatialOps.CONTAINS, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially overlaps” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression overlaps(Geometry geometry) { + return overlaps(ConstantImpl.create(geometry)); + } + + /** + * Returns 1 (TRUE) if this geometric object “spatially overlaps” anotherGeometry. + * + * @param geometry + * @return + */ + public BooleanExpression overlaps(Expression geometry) { + return BooleanOperation.create(SpatialOps.OVERLAPS, mixin, geometry); + } + + /** + * Returns 1 (TRUE) if this geometric object is spatially related to anotherGeometry by testing + * for intersections between the interior, boundary and exterior of the two geometric objects + * as specified by the values in the intersectionPatternMatrix. This returns FALSE if all the + * tested intersections are empty except exterior (this) intersect exterior (another). + * + * @param geometry + * @param matrix + * @return + */ + public BooleanExpression relate(Geometry geometry, String matrix) { + return relate(ConstantImpl.create(geometry), matrix); + } + + /** + * Returns 1 (TRUE) if this geometric object is spatially related to anotherGeometry by testing + * for intersections between the interior, boundary and exterior of the two geometric objects + * as specified by the values in the intersectionPatternMatrix. This returns FALSE if all the + * tested intersections are empty except exterior (this) intersect exterior (another). + * + * @param geometry + * @param matrix + * @return + */ + public BooleanExpression relate(Expression geometry, String matrix) { + return BooleanOperation.create(SpatialOps.RELATE, mixin, geometry, ConstantImpl.create(matrix)); + } + + // analysis + + /** + * Returns the shortest distance between any two Points in the two geometric objects as + * calculated in the spatial reference system of this geometric object. Because the geometries + * are closed, it is possible to find a point on each geometric object involved, such that the + * distance between these 2 points is the returned distance between their geometric objects. + * + * @param geometry + * @return + */ + public NumberExpression distance(Geometry geometry) { + return distance(ConstantImpl.create(geometry)); + } + + /** + * Returns the shortest distance between any two Points in the two geometric objects as + * calculated in the spatial reference system of this geometric object. Because the geometries + * are closed, it is possible to find a point on each geometric object involved, such that the + * distance between these 2 points is the returned distance between their geometric objects. + * + * @param geometry + * @return + */ + public NumberExpression distance(Expression geometry) { + return NumberOperation.create(Double.class, SpatialOps.DISTANCE, mixin, geometry); + } + + // TODO maybe move out + public NumberExpression distanceSphere(Expression geometry) { + return NumberOperation.create(Double.class, SpatialOps.DISTANCE_SPHERE, mixin, geometry); + } + + // TODO maybe move out + public NumberExpression distanceSpheroid(Expression geometry) { + return NumberOperation.create(Double.class, SpatialOps.DISTANCE_SPHEROID, mixin, geometry); + } + + /** + * Returns a geometric object that represents all Points whose distance from this geometric + * object is less than or equal to distance. Calculations are in the spatial reference system + * of this geometric object. Because of the limitations of linear interpolation, there will + * often be some relatively small error in this distance, but it should be near the resolution + * of the coordinates used. + * + * @param distance + * @return + */ + public JTSGeometryExpression buffer(double distance) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.BUFFER, mixin, ConstantImpl.create(distance)); + } + + /** + * Returns a geometric object that represents the convex hull of this geometric object. + * Convex hulls, being dependent on straight lines, can be accurately represented in linear + * interpolations for any geometry restricted to linear interpolations. + * + * @return + */ + public JTSGeometryExpression convexHull() { + if (convexHull == null) { + convexHull = JTSGeometryOperation.create(Geometry.class, SpatialOps.CONVEXHULL, mixin); + } + return convexHull; + } + + /** + * Returns a geometric object that represents the Point set intersection of this geometric + * object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression intersection(Geometry geometry) { + return intersection(ConstantImpl.create(geometry)); + } + + /** + * Returns a geometric object that represents the Point set intersection of this geometric + * object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression intersection(Expression geometry) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.INTERSECTION, mixin, geometry); + } + + /** + * Returns a geometric object that represents the Point set + * union of this geometric object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression union(Geometry geometry) { + return union(ConstantImpl.create(geometry)); + } + + /** + * Returns a geometric object that represents the Point set + * union of this geometric object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression union(Expression geometry) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.UNION, mixin, geometry); + } + + /** + * Returns a geometric object that represents the Point + * set difference of this geometric object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression difference(Geometry geometry) { + return difference(ConstantImpl.create(geometry)); + } + + /** + * Returns a geometric object that represents the Point + * set difference of this geometric object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression difference(Expression geometry) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.DIFFERENCE, mixin, geometry); + } + + /** + * Returns a geometric object that represents the + * Point set symmetric difference of this geometric object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression symDifference(Geometry geometry) { + return symDifference(ConstantImpl.create(geometry)); + } + + /** + * Returns a geometric object that represents the + * Point set symmetric difference of this geometric object with anotherGeometry. + * + * @param geometry + * @return + */ + public JTSGeometryExpression symDifference(Expression geometry) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.SYMDIFFERENCE, mixin, geometry); + } + + public JTSGeometryExpression transform(int srid) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.TRANSFORM, mixin, ConstantImpl.create(srid)); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpressions.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpressions.java new file mode 100644 index 0000000000..e61d6a89ea --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpressions.java @@ -0,0 +1,192 @@ +package com.mysema.query.spatial.jts; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.expr.BooleanOperation; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.mysema.query.types.expr.StringExpression; +import com.mysema.query.types.expr.StringOperation; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; + +/** + * GeometryExpressions contains static functions for GEO operations + */ +public final class JTSGeometryExpressions { + + /** + * Return a specified ST_Geometry value from Extended Well-Known Text representation (EWKT). + * + * @param expr + * @return + */ + public static StringExpression asEWKT(JTSGeometryExpression expr) { + return StringOperation.create(SpatialOps.AS_EWKT, expr); + } + + /** + * Return a specified ST_Geometry value from Well-Known Text representation (WKT). + * + * @param text + * @return + */ + public static JTSGeometryExpression fromText(String text) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, ConstantImpl.create(text)); + } + + /** + * Return a specified ST_Geometry value from Well-Known Text representation (WKT). + * + * @param text + * @return + */ + public static JTSGeometryExpression fromText(Expression text) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, text); + } + + /** + * Sets the SRID on a geometry to a particular integer value. + * + * @param expr + * @param srid + * @param + * @return + */ + public static JTSGeometryExpression setSRID(Expression expr, int srid) { + return (JTSGeometryExpression)JTSGeometryOperation.create(expr.getType(), SpatialOps.SET_SRID, + expr, ConstantImpl.create(srid)); + } + + /** + * Returns X minima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression xmin(JTSGeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.XMIN, expr); + } + + /** + * Returns X maxima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression xmax(JTSGeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.XMAX, expr); + } + + /** + * Returns Y minima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression ymin(JTSGeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.YMIN, expr); + } + + /** + * Returns Y maxima of a bounding box 2d or 3d or a geometry. + * + * @param expr + * @return + */ + public static NumberExpression ymax(JTSGeometryExpression expr) { + return NumberOperation.create(Double.class, SpatialOps.YMAX, expr); + } + + /** + * Returns true if the geometries are within the specified distance of one another. + * For geometry units are in those of spatial reference and For geography units are in meters. + * + * @param expr1 + * @param expr2 + * @param distance + * @return + */ + public static BooleanExpression dwithin(Expression expr1, + Expression expr2, Expression distance) { + return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, distance); + } + + /** + * Returns true if the geometries are within the specified distance of one another. + * For geometry units are in those of spatial reference and For geography units are in meters. + * + * @param expr1 + * @param expr2 + * @param distance + * @return + */ + public static BooleanExpression dwithin(Expression expr1, + Expression expr2, double distance) { + return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, ConstantImpl.create(distance)); + } + + /** + * Returns the bounding box that bounds rows of geometries. + * + * @param collection + * @return + */ + public static JTSGeometryExpression extent(Expression collection) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.EXTENT, collection); + } + + /** + * Return a specified ST_Geometry value from a collection of other geometries. + * + * @param collection + * @return + */ + public static JTSGeometryExpression collect(Expression collection) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.COLLECT, collection); + } + + /** + * Return a specified ST_Geometry value from a collection of other geometries. + * + * @param expr1 + * @param expr2 + * @return + */ + public static JTSGeometryExpression collect(Expression expr1, Expression expr2) { + return JTSGeometryOperation.create(Geometry.class, SpatialOps.COLLECT2, expr1, expr2); + } + + /** + * Translates the geometry to a new location using the numeric parameters as offsets. + * + * @param expr + * @param deltax + * @param deltay + * @param + * @return + */ + public static JTSGeometryExpression translate(Expression expr, float deltax, float deltay) { + return (JTSGeometryExpression)JTSGeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE, + expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay)); + } + + /** + * Translates the geometry to a new location using the numeric parameters as offsets. + * + * @param expr + * @param deltax + * @param deltay + * @param deltaz + * @param + * @return + */ + public static JTSGeometryExpression translate(Expression expr, float deltax, float deltay, float deltaz) { + return (JTSGeometryExpression)JTSGeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE2, + expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay), ConstantImpl.create(deltaz)); + } + + private JTSGeometryExpressions() {} +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java new file mode 100644 index 0000000000..fa6274f092 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java @@ -0,0 +1,79 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import java.util.List; + +import com.vividsolutions.jts.geom.Geometry; + +import com.google.common.collect.ImmutableList; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Operation; +import com.mysema.query.types.OperationImpl; +import com.mysema.query.types.Operator; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSGeometryOperation extends JTSGeometryExpression implements Operation { + + private static final long serialVersionUID = 3433471874808633698L; + + public static JTSGeometryOperation create(Class type, Operator op, Expression one) { + return new JTSGeometryOperation(type, op, ImmutableList.>of(one)); + } + + public static JTSGeometryOperation create(Class type, Operator op, Expression one, Expression two) { + return new JTSGeometryOperation(type, op, ImmutableList.of(one, two)); + } + + public static JTSGeometryOperation create(Class type, Operator op, Expression... args) { + return new JTSGeometryOperation(type, op, args); + } + + private final OperationImpl< T> opMixin; + + protected JTSGeometryOperation(Class type, Operator op, Expression... args) { + this(type, op, ImmutableList.copyOf(args)); + } + + protected JTSGeometryOperation(Class type, Operator op, ImmutableList> args) { + super(new OperationImpl(type, op, args)); + this.opMixin = (OperationImpl)mixin; + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(opMixin, context); + } + + @Override + public Expression getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java new file mode 100644 index 0000000000..e4fdb105f2 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java @@ -0,0 +1,35 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import com.vividsolutions.jts.geom.LineString; + +import com.mysema.query.types.Expression; + +/** + * A Line is a LineString with exactly 2 Points. + * + * @author tiwe + * + * @param + */ +public abstract class JTSLineExpression extends JTSLineStringExpression { + + private static final long serialVersionUID = -4849454664355502296L; + + public JTSLineExpression(Expression mixin) { + super(mixin); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java new file mode 100644 index 0000000000..d9aa8b925e --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java @@ -0,0 +1,67 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.Point; + +/** + * A LineString is a Curve with linear interpolation between Points. Each consecutive pair of Points defines a Line + * segment. + * + * @author tiwe + * + * @param + */ +public abstract class JTSLineStringExpression extends JTSCurveExpression { + + private static final long serialVersionUID = -6572984614863252657L; + + @Nullable + private volatile NumberExpression numPoints; + + public JTSLineStringExpression(Expression mixin) { + super(mixin); + } + + /** + * The number of Points in this LineString. + * + * @return + */ + public NumberExpression numPoints() { + if (numPoints == null) { + numPoints = NumberOperation.create(Integer.class, SpatialOps.NUM_POINTS, mixin); + } + return numPoints; + } + + /** + * Returns the specified Point N in this LineString. + * + * @param idx + * @return + */ + public JTSPointExpression pointN(int idx) { + return JTSPointOperation.create(Point.class, SpatialOps.POINTN, mixin, ConstantImpl.create(idx)); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java new file mode 100644 index 0000000000..22e5c44cf0 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java @@ -0,0 +1,79 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import java.util.List; + +import com.vividsolutions.jts.geom.LineString; + +import com.google.common.collect.ImmutableList; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Operation; +import com.mysema.query.types.OperationImpl; +import com.mysema.query.types.Operator; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSLineStringOperation extends JTSLineStringExpression implements Operation { + + private static final long serialVersionUID = 3433471874808633698L; + + public static JTSLineStringOperation create(Class type, Operator op, Expression one) { + return new JTSLineStringOperation(type, op, ImmutableList.>of(one)); + } + + public static JTSLineStringOperation create(Class type, Operator op, Expression one, Expression two) { + return new JTSLineStringOperation(type, op, ImmutableList.of(one, two)); + } + + public static JTSLineStringOperation create(Class type, Operator op, Expression... args) { + return new JTSLineStringOperation(type, op, args); + } + + private final OperationImpl< T> opMixin; + + protected JTSLineStringOperation(Class type, Operator op, Expression... args) { + this(type, op, ImmutableList.copyOf(args)); + } + + protected JTSLineStringOperation(Class type, Operator op, ImmutableList> args) { + super(new OperationImpl(type, op, args)); + this.opMixin = (OperationImpl)mixin; + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(opMixin, context); + } + + @Override + public Expression getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java new file mode 100644 index 0000000000..1b522b04e5 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java @@ -0,0 +1,35 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import com.vividsolutions.jts.geom.LineString; + +import com.mysema.query.types.Expression; + +/** + * A LinearRing is a LineString that is both closed and simple. + * + * @author tiwe + * + * @param + */ +public abstract class JTSLinearRingExpression extends JTSLineStringExpression { + + private static final long serialVersionUID = -759466658721392938L; + + public JTSLinearRingExpression(Expression mixin) { + super(mixin); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java new file mode 100644 index 0000000000..34df4eb79e --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java @@ -0,0 +1,73 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.BooleanExpression; +import com.mysema.query.types.expr.BooleanOperation; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.GeometryCollection; + +/** + * A MultiCurve is a 1-dimensional GeometryCollection whose elements are Curves. + * + * @author tiwe + * + * @param + */ +public abstract class JTSMultiCurveExpression extends JTSGeometryCollectionExpression { + + private static final long serialVersionUID = 6983316799469849656L; + + @Nullable + private volatile BooleanExpression closed; + + @Nullable + private volatile NumberExpression length; + + public JTSMultiCurveExpression(Expression mixin) { + super(mixin); + } + + /** + * Returns 1 (TRUE) if this MultiCurve is closed [StartPoint ( ) = EndPoint ( ) for each + * Curve in this MultiCurve]. + * + * @return + */ + public BooleanExpression isClosed() { + if (closed == null) { + closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + } + return closed; + } + + /** + * The Length of this MultiCurve which is equal to the sum of the lengths of the element + * Curves. + * + * @return + */ + public NumberExpression length() { + if (length == null) { + length = NumberOperation.create(Double.class, SpatialOps.LENGTH, mixin); + } + return length; + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java new file mode 100644 index 0000000000..3c0c399582 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java @@ -0,0 +1,35 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import com.vividsolutions.jts.geom.MultiLineString; + +import com.mysema.query.types.Expression; + +/** + * A MultiLineString is a MultiCurve whose elements are LineStrings. + * + * @author tiwe + * + * @param + */ +public abstract class JTSMultiLineStringExpression extends JTSMultiCurveExpression { + + private static final long serialVersionUID = -3103756880812584473L; + + public JTSMultiLineStringExpression(Expression mixin) { + super(mixin); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java new file mode 100644 index 0000000000..73bf106ea2 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java @@ -0,0 +1,37 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import com.vividsolutions.jts.geom.MultiPoint; + +import com.mysema.query.types.Expression; + +/** + * A MultiPoint is a 0-dimensional GeometryCollection. The elements of a MultiPoint are restricted to Points. The + * Points are not connected or ordered in any semantically important way (see the discussion at + * GeometryCollection). + * + * @author tiwe + * + * @param + */ +public abstract class JTSMultiPointExpression extends JTSGeometryCollectionExpression { + + private static final long serialVersionUID = 7221702165705045865L; + + public JTSMultiPointExpression(Expression mixin) { + super(mixin); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java new file mode 100644 index 0000000000..942d9e6e0a --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java @@ -0,0 +1,35 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import com.vividsolutions.jts.geom.MultiPolygon; + +import com.mysema.query.types.Expression; + +/** + * A MultiPolygon is a MultiSurface whose elements are Polygons. + * + * @author tiwe + * + * @param + */ +public abstract class JTSMultiPolygonExpression extends JTSMultiSurfaceExpression { + + private static final long serialVersionUID = -2285946852207189655L; + + public JTSMultiPolygonExpression(Expression mixin) { + super(mixin); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java new file mode 100644 index 0000000000..c334ee7d7f --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java @@ -0,0 +1,87 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.GeometryCollection; +import com.vividsolutions.jts.geom.Point; + +/** + * A MultiSurface is a 2-dimensional GeometryCollection whose elements are Surfaces, all using coordinates from + * the same coordinate reference system. The geometric interiors of any two Surfaces in a MultiSurface may not + * intersect in the full coordinate system. The boundaries of any two coplanar elements in a MultiSurface may + * intersect, at most, at a finite number of Points. If they were to meet along a curve, they could be merged into a + * single surface. + * + * @author tiwe + * + * @param + */ +public abstract class JTSMultiSurfaceExpression extends JTSGeometryCollectionExpression { + + private static final long serialVersionUID = 4133386816772862010L; + + @Nullable + private volatile JTSPointExpression centroid, pointOnSurface; + + @Nullable + private volatile NumberExpression area; + + public JTSMultiSurfaceExpression(Expression mixin) { + super(mixin); + } + + /** + * The area of this MultiSurface, as measured in the spatial reference system of this MultiSurface. + * + * @return + */ + public NumberExpression area() { + if (area == null) { + area = NumberOperation.create(Double.class, SpatialOps.AREA, mixin); + } + return area; + } + + /** + * The mathematical centroid for this MultiSurface. The result is not guaranteed to be on + * this MultiSurface. + * + * @return + */ + public JTSPointExpression centroid() { + if (centroid == null) { + centroid = JTSPointOperation.create(Point.class, SpatialOps.CENTROID, mixin); + } + return centroid; + } + + /** + * A Point guaranteed to be on this MultiSurface. + * + * @return + */ + public JTSPointExpression pointOnSurface() { + if (pointOnSurface == null) { + pointOnSurface = JTSPointOperation.create(Point.class, SpatialOps.POINT_ON_SURFACE, mixin); + } + return pointOnSurface; + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java new file mode 100644 index 0000000000..bb6d0c48cf --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java @@ -0,0 +1,91 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.Point; + +/** + * A Point is a 0-dimensional geometric object and represents a single location in coordinate space. A Point has an + * x-coordinate value, a y-coordinate value. If called for by the associated Spatial Reference System, it may also + * have coordinate values for z and m. + * + * @author tiwe + * + * @param + */ +public abstract class JTSPointExpression extends JTSGeometryExpression { + + private static final long serialVersionUID = -3549448861390349654L; + + @Nullable + private volatile NumberExpression x, y, z, m; + + public JTSPointExpression(Expression mixin) { + super(mixin); + } + + /** + * The x-coordinate value for this Point. + * + * @return + */ + public NumberExpression x() { + if (x == null) { + x = NumberOperation.create(Double.class, SpatialOps.X, mixin); + } + return x; + } + + /** + * The y-coordinate value for this Point. + * + * @return + */ + public NumberExpression y() { + if (y == null) { + y = NumberOperation.create(Double.class, SpatialOps.Y, mixin); + } + return y; + } + + /** + * The z-coordinate value for this Point, if it has one. Returns NIL otherwise. + * + * @return + */ + public NumberExpression z() { + if (z == null) { + z = NumberOperation.create(Double.class, SpatialOps.Z, mixin); + } + return z; + } + + /** + * The m-coordinate value for this Point, if it has one. Returns NIL otherwise. + * + * @return + */ + public NumberExpression m() { + if (m == null) { + m = NumberOperation.create(Double.class, SpatialOps.M, mixin); + } + return m; + } +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java new file mode 100644 index 0000000000..c646e017f4 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java @@ -0,0 +1,78 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import java.util.List; + +import com.vividsolutions.jts.geom.Point; + +import com.google.common.collect.ImmutableList; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Operation; +import com.mysema.query.types.OperationImpl; +import com.mysema.query.types.Operator; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSPointOperation extends JTSPointExpression implements Operation { + + private static final long serialVersionUID = 3433471874808633698L; + + public static JTSPointOperation create(Class type, Operator op, Expression one) { + return new JTSPointOperation(type, op, ImmutableList.>of(one)); + } + + public static JTSPointOperation create(Class type, Operator op, Expression one, Expression two) { + return new JTSPointOperation(type, op, ImmutableList.of(one, two)); + } + + public static JTSPointOperation create(Class type, Operator op, Expression... args) { + return new JTSPointOperation(type, op, args); + } + + private final OperationImpl< T> opMixin; + + protected JTSPointOperation(Class type, Operator op, Expression... args) { + this(type, op, ImmutableList.copyOf(args)); + } + + protected JTSPointOperation(Class type, Operator op, ImmutableList> args) { + super(new OperationImpl(type, op, args)); + this.opMixin = (OperationImpl)mixin; + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(opMixin, context); + } + + @Override + public Expression getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java new file mode 100644 index 0000000000..cc5588194c --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java @@ -0,0 +1,82 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.ConstantImpl; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.Polygon; + +/** + * A Polygon is a planar Surface defined by 1 exterior boundary and 0 or more interior boundaries. Each interior + * boundary defines a hole in the Polygon. A Triangle is a polygon with 3 distinct, non-collinear vertices and no + * interior boundary. + * + * @author tiwe + * + * @param + */ +public abstract class JTSPolygonExpression extends JTSSurfaceExpression { + + private static final long serialVersionUID = 7544382956232485312L; + + @Nullable + private volatile NumberExpression numInteriorRing; + + @Nullable + private volatile JTSLineStringExpression exterorRing; + + public JTSPolygonExpression(Expression mixin) { + super(mixin); + } + + /** + * Returns the exterior ring of this Polygon. + * + * @return + */ + public JTSLineStringExpression exteriorRing() { + if (exterorRing == null) { + exterorRing = JTSLineStringOperation.create(LineString.class, SpatialOps.EXTERIOR_RING, mixin); + } + return exterorRing; + } + + /** + * Returns the number of interior rings in this Polygon. + * + * @return + */ + public NumberExpression numInteriorRing() { + if (numInteriorRing == null) { + numInteriorRing = NumberOperation.create(Integer.class, SpatialOps.NUM_INTERIOR_RING, mixin); + } + return numInteriorRing; + } + + /** + * Returns the N th interior ring for this Polygon as a LineString. + * + * @param idx + * @return + */ + public JTSLineStringExpression interiorRingN(int idx) { + return JTSLineStringOperation.create(LineString.class, SpatialOps.INTERIOR_RINGN, mixin, ConstantImpl.create(idx)); + } +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java new file mode 100644 index 0000000000..354d3dd397 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java @@ -0,0 +1,78 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import java.util.List; + +import com.vividsolutions.jts.geom.Polygon; + +import com.google.common.collect.ImmutableList; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Operation; +import com.mysema.query.types.OperationImpl; +import com.mysema.query.types.Operator; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSPolygonOperation extends JTSPolygonExpression implements Operation { + + private static final long serialVersionUID = 3433471874808633698L; + + public static JTSPolygonOperation create(Class type, Operator op, Expression one) { + return new JTSPolygonOperation(type, op, ImmutableList.>of(one)); + } + + public static JTSPolygonOperation create(Class type, Operator op, Expression one, Expression two) { + return new JTSPolygonOperation(type, op, ImmutableList.of(one, two)); + } + + public static JTSPolygonOperation create(Class type, Operator op, Expression... args) { + return new JTSPolygonOperation(type, op, args); + } + + private final OperationImpl< T> opMixin; + + protected JTSPolygonOperation(Class type, Operator op, Expression... args) { + this(type, op, ImmutableList.copyOf(args)); + } + + protected JTSPolygonOperation(Class type, Operator op, ImmutableList> args) { + super(new OperationImpl(type, op, args)); + this.opMixin = (OperationImpl)mixin; + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(opMixin, context); + } + + @Override + public Expression getArg(int index) { + return opMixin.getArg(index); + } + + @Override + public List> getArgs() { + return opMixin.getArgs(); + } + + @Override + public Operator getOperator() { + return opMixin.getOperator(); + } +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java new file mode 100644 index 0000000000..3bf2609658 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts; + +import javax.annotation.Nullable; + +import com.mysema.query.spatial.SpatialOps; +import com.mysema.query.types.Expression; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.expr.NumberOperation; +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.Point; + +/** + * A Surface is a 2-dimensional geometric object. + * + * @author tiwe + * + * @param + */ +public abstract class JTSSurfaceExpression extends JTSGeometryExpression { + + private static final long serialVersionUID = 3534197011234723698L; + + @Nullable + private volatile JTSPointExpression centroid, pointOnSurface; + + @Nullable + private volatile NumberExpression area; + + public JTSSurfaceExpression(Expression mixin) { + super(mixin); + } + + /** + * The area of this Surface, as measured in the spatial reference system of this Surface. + * + * @return + */ + public NumberExpression area() { + if (area == null) { + area = NumberOperation.create(Double.class, SpatialOps.AREA, mixin); + } + return area; + } + + /** + * The mathematical centroid for this Surface as a Point. The result is not guaranteed to + * be on this Surface. + * + * @return + */ + public JTSPointExpression centroid() { + if (centroid == null) { + centroid = JTSPointOperation.create(Point.class, SpatialOps.CENTROID, mixin); + } + return centroid; + } + + /** + * A Point guaranteed to be on this Surface. + * + * @return + */ + public JTSPointExpression pointOnSurface() { + if (pointOnSurface == null) { + pointOnSurface = JTSPointOperation.create(Point.class, SpatialOps.POINT_ON_SURFACE, mixin); + } + return pointOnSurface; + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java new file mode 100644 index 0000000000..038eb10a9d --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.GeometryCollection; + +import com.mysema.query.spatial.jts.JTSGeometryCollectionExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSGeometryCollectionPath extends JTSGeometryCollectionExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSGeometryCollectionPath(Path parent, String property) { + this((Class) GeometryCollection.class, parent, property); + } + + public JTSGeometryCollectionPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSGeometryCollectionPath(PathMetadata metadata) { + this((Class) GeometryCollection.class, metadata); + } + + public JTSGeometryCollectionPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSGeometryCollectionPath(String var) { + this((Class) GeometryCollection.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSGeometryCollectionPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java new file mode 100644 index 0000000000..6abbb9fb1c --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java @@ -0,0 +1,163 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; +import com.vividsolutions.jts.geom.MultiLineString; +import com.vividsolutions.jts.geom.MultiPoint; +import com.vividsolutions.jts.geom.MultiPolygon; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; + +import com.mysema.query.spatial.jts.JTSGeometryExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSGeometryPath extends JTSGeometryExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + private volatile JTSGeometryCollectionPath collection; + + private volatile JTSLinearRingPath linearRing; + + private volatile JTSLineStringPath lineString; + + private volatile JTSMultiLineStringPath multiLineString; + + private volatile JTSMultiPointPath multiPoint; + + private volatile JTSMultiPolygonPath multiPolygon; + + private volatile JTSPointPath point; + + private volatile JTSPolygonPath polygon; + + public JTSGeometryPath(Path parent, String property) { + this((Class) Geometry.class, parent, property); + } + + public JTSGeometryPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSGeometryPath(PathMetadata metadata) { + this((Class) Geometry.class, metadata); + } + + public JTSGeometryPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSGeometryPath(String var) { + this((Class) Geometry.class, PathMetadataFactory.forVariable(var)); + } + + public JTSGeometryCollectionPath asCollection() { + if (collection == null) { + collection = new JTSGeometryCollectionPath(pathMixin.getMetadata()); + } + return collection; + } + + public JTSLinearRingPath asLinearRing() { + if (linearRing == null) { + linearRing = new JTSLinearRingPath(pathMixin.getMetadata()); + } + return linearRing; + } + + public JTSLineStringPath asLineString() { + if (lineString == null) { + lineString = new JTSLineStringPath(pathMixin.getMetadata()); + } + return lineString; + } + + public JTSMultiLineStringPath asMultiLineString() { + if (multiLineString == null) { + multiLineString = new JTSMultiLineStringPath(pathMixin.getMetadata()); + } + return multiLineString; + } + + public JTSMultiPointPath asMultiPoint() { + if (multiPoint == null) { + multiPoint = new JTSMultiPointPath(pathMixin.getMetadata()); + } + return multiPoint; + } + + public JTSMultiPolygonPath asMultiPolygon() { + if (multiPolygon == null) { + multiPolygon = new JTSMultiPolygonPath(pathMixin.getMetadata()); + } + return multiPolygon; + } + + public JTSPointPath asPoint() { + if (point == null) { + point = new JTSPointPath(pathMixin.getMetadata()); + } + return point; + } + + public JTSPolygonPath asPolygon() { + if (polygon == null) { + polygon = new JTSPolygonPath(pathMixin.getMetadata()); + } + return polygon; + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSGeometryPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java new file mode 100644 index 0000000000..3feace638e --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java @@ -0,0 +1,50 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; +import com.vividsolutions.jts.geom.MultiLineString; +import com.vividsolutions.jts.geom.MultiPoint; +import com.vividsolutions.jts.geom.MultiPolygon; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; + +/** + * @author tiwe + * + */ +public interface JTSGeometryPaths { + + JTSGeometryCollectionPath createGeometryCollection(String property, Class type); + + JTSGeometryPath createGeometry(String property, Class type); + + JTSLinearRingPath createLinearRing(String property, Class type); + + JTSLineStringPath createLineString(String property, Class type); + + JTSMultiLineStringPath createMultiLineString(String property, Class type); + + JTSMultiPointPath createMultiPoint(String property, Class type); + + JTSMultiPolygonPath createMultiPolygon(String property, Class type); + + JTSPointPath createPoint(String property, Class type); + + JTSPolygonPath createPolygon(String property, Class type); + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java new file mode 100644 index 0000000000..51415c1bbf --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.LineString; + +import com.mysema.query.spatial.jts.JTSLineStringExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSLineStringPath extends JTSLineStringExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSLineStringPath(Path parent, String property) { + this((Class) LineString.class, parent, property); + } + + public JTSLineStringPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSLineStringPath(PathMetadata metadata) { + this((Class) LineString.class, metadata); + } + + public JTSLineStringPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSLineStringPath(String var) { + this((Class) LineString.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSLineStringPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java new file mode 100644 index 0000000000..5598102382 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.LinearRing; + +import com.mysema.query.spatial.jts.JTSLinearRingExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSLinearRingPath extends JTSLinearRingExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSLinearRingPath(Path parent, String property) { + this((Class) LinearRing.class, parent, property); + } + + public JTSLinearRingPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSLinearRingPath(PathMetadata metadata) { + this((Class) LinearRing.class, metadata); + } + + public JTSLinearRingPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSLinearRingPath(String var) { + this((Class) LinearRing.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSLinearRingPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java new file mode 100644 index 0000000000..024ae725fb --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.MultiLineString; + +import com.mysema.query.spatial.jts.JTSMultiLineStringExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSMultiLineStringPath extends JTSMultiLineStringExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSMultiLineStringPath(Path parent, String property) { + this((Class) MultiLineString.class, parent, property); + } + + public JTSMultiLineStringPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSMultiLineStringPath(PathMetadata metadata) { + this((Class) MultiLineString.class, metadata); + } + + public JTSMultiLineStringPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSMultiLineStringPath(String var) { + this((Class) MultiLineString.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSMultiLineStringPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java new file mode 100644 index 0000000000..eee5e8e33e --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.MultiPoint; + +import com.mysema.query.spatial.jts.JTSMultiPointExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSMultiPointPath extends JTSMultiPointExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSMultiPointPath(Path parent, String property) { + this((Class) MultiPoint.class, parent, property); + } + + public JTSMultiPointPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSMultiPointPath(PathMetadata metadata) { + this((Class) MultiPoint.class, metadata); + } + + public JTSMultiPointPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSMultiPointPath(String var) { + this((Class) MultiPoint.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSMultiPointPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java new file mode 100644 index 0000000000..e0d99ecaa8 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.MultiPolygon; + +import com.mysema.query.spatial.jts.JTSMultiPolygonExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSMultiPolygonPath extends JTSMultiPolygonExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSMultiPolygonPath(Path parent, String property) { + this((Class) MultiPolygon.class, parent, property); + } + + public JTSMultiPolygonPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSMultiPolygonPath(PathMetadata metadata) { + this((Class) MultiPolygon.class, metadata); + } + + public JTSMultiPolygonPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSMultiPolygonPath(String var) { + this((Class) MultiPolygon.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSMultiPolygonPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java new file mode 100644 index 0000000000..0731635a42 --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.Point; + +import com.mysema.query.spatial.jts.JTSPointExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSPointPath extends JTSPointExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSPointPath(Path parent, String property) { + this((Class) Point.class, parent, property); + } + + public JTSPointPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSPointPath(PathMetadata metadata) { + this((Class) Point.class, metadata); + } + + public JTSPointPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSPointPath(String var) { + this((Class) Point.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSPointPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java new file mode 100644 index 0000000000..8916b4dfde --- /dev/null +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java @@ -0,0 +1,83 @@ +/* + * Copyright 2014, Mysema Ltd + * + * 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 com.mysema.query.spatial.jts.path; + +import java.lang.reflect.AnnotatedElement; + +import com.vividsolutions.jts.geom.Polygon; + +import com.mysema.query.spatial.jts.JTSPolygonExpression; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.Visitor; + +/** + * @author tiwe + * + * @param + */ +public class JTSPolygonPath extends JTSPolygonExpression implements Path { + + private static final long serialVersionUID = 312776751843333543L; + + private final PathImpl pathMixin; + + public JTSPolygonPath(Path parent, String property) { + this((Class) Polygon.class, parent, property); + } + + public JTSPolygonPath(Class type, Path parent, String property) { + this(type, PathMetadataFactory.forProperty(parent, property)); + } + + public JTSPolygonPath(PathMetadata metadata) { + this((Class) Polygon.class, metadata); + } + + public JTSPolygonPath(Class type, PathMetadata metadata) { + super(new PathImpl(type, metadata)); + this.pathMixin = (PathImpl)mixin; + } + + public JTSPolygonPath(String var) { + this((Class) Polygon.class, PathMetadataFactory.forVariable(var)); + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(pathMixin, context); + } + + public JTSPolygonPath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + + @Override + public PathMetadata getMetadata() { + return pathMixin.getMetadata(); + } + + @Override + public Path getRoot() { + return pathMixin.getRoot(); + } + + @Override + public AnnotatedElement getAnnotatedElement() { + return pathMixin.getAnnotatedElement(); + } + +} diff --git a/querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/JTSGeometryEntity.java b/querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/JTSGeometryEntity.java new file mode 100644 index 0000000000..2f50faa1a4 --- /dev/null +++ b/querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/JTSGeometryEntity.java @@ -0,0 +1,27 @@ +package com.mysema.query.spatial.jts; + +import com.mysema.query.annotations.QueryEntity; +import com.vividsolutions.jts.geom.*; + +@QueryEntity +public class JTSGeometryEntity { + + Geometry geometry; + + GeometryCollection geometryCollection; + + LinearRing linearRing; + + LineString lineString; + + MultiLineString multiLineString; + + MultiPoint multiPoint; + + MultiPolygon multiPolygon; + + Point point; + + Polygon polygon; + +} diff --git a/querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/path/JTSGeometryPathTest.java b/querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/path/JTSGeometryPathTest.java new file mode 100644 index 0000000000..7d8f84f1aa --- /dev/null +++ b/querydsl-spatial/src/test/java/com/mysema/query/spatial/jts/path/JTSGeometryPathTest.java @@ -0,0 +1,30 @@ +package com.mysema.query.spatial.jts.path; + +import static org.junit.Assert.assertEquals; + +import com.vividsolutions.jts.geom.Geometry; +import com.vividsolutions.jts.geom.GeometryCollection; +import com.vividsolutions.jts.geom.LineString; +import com.vividsolutions.jts.geom.LinearRing; +import com.vividsolutions.jts.geom.MultiLineString; +import com.vividsolutions.jts.geom.MultiPoint; +import com.vividsolutions.jts.geom.MultiPolygon; +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.geom.Polygon; +import org.junit.Test; + +public class JTSGeometryPathTest { + + @Test + public void Convert() { + JTSGeometryPath geometry = new JTSGeometryPath("geometry"); + assertEquals(new JTSGeometryCollectionPath("geometry"), geometry.asCollection()); + assertEquals(new JTSLinearRingPath("geometry"), geometry.asLinearRing()); + assertEquals(new JTSLineStringPath("geometry"), geometry.asLineString()); + assertEquals(new JTSMultiLineStringPath("geometry"), geometry.asMultiLineString()); + assertEquals(new JTSMultiPointPath("geometry"), geometry.asMultiPoint()); + assertEquals(new JTSMultiPolygonPath("geometry"), geometry.asMultiPolygon()); + assertEquals(new JTSPointPath("geometry"), geometry.asPoint()); + assertEquals(new JTSPolygonPath("geometry"), geometry.asPolygon()); + } +} From d6a17a759992760fee2e6e4cf880584afca32c8a Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Fri, 24 Oct 2014 11:58:46 -0500 Subject: [PATCH 0518/1968] hibernate expects a logical expression for spatial relations --- .../hibernate/HibernateSpatialSupport.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java index 37c21ed155..c83b23b51a 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/hibernate/HibernateSpatialSupport.java @@ -33,15 +33,15 @@ public static Map, String> getSpatialOps() { ops.put(SpatialOps.IS_SIMPLE, "issimple({0})"); ops.put(SpatialOps.BOUNDARY, "boundary({0})"); - ops.put(SpatialOps.EQUALS, "equals({0}, {1})"); - ops.put(SpatialOps.DISJOINT, "disjoint({0}, {1})"); - ops.put(SpatialOps.INTERSECTS, "intersects({0}, {1})"); - ops.put(SpatialOps.TOUCHES, "touches({0}, {1})"); - ops.put(SpatialOps.CROSSES, "crosses({0}, {1})"); - ops.put(SpatialOps.WITHIN, "within({0}, {1})"); - ops.put(SpatialOps.CONTAINS, "contains({0}, {1})"); - ops.put(SpatialOps.OVERLAPS, "overlaps({0}, {1})"); - ops.put(SpatialOps.RELATE, "relate({0}, {1}, {2})"); + ops.put(SpatialOps.EQUALS, "equals({0}, {1}) = true"); + ops.put(SpatialOps.DISJOINT, "disjoint({0}, {1}) = true"); + ops.put(SpatialOps.INTERSECTS, "intersects({0}, {1}) = true"); + ops.put(SpatialOps.TOUCHES, "touches({0}, {1}) = true"); + ops.put(SpatialOps.CROSSES, "crosses({0}, {1}) = true"); + ops.put(SpatialOps.WITHIN, "within({0}, {1}) = true"); + ops.put(SpatialOps.CONTAINS, "contains({0}, {1}) = true"); + ops.put(SpatialOps.OVERLAPS, "overlaps({0}, {1}) = true"); + ops.put(SpatialOps.RELATE, "relate({0}, {1}, {2}) = true"); ops.put(SpatialOps.DISTANCE, "distance({0}, {1})"); ops.put(SpatialOps.BUFFER, "buffer({0}, {1})"); From 245e437fd75d7c3d76ae0a287f6e289c86aa569a Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Fri, 24 Oct 2014 16:35:47 -0500 Subject: [PATCH 0519/1968] combined type registration since querydsl-spatial depends on geolatte and JTS --- .../java/com/mysema/query/apt/DefaultConfiguration.java | 8 -------- .../main/java/com/mysema/query/apt/SpatialSupport.java | 3 --- 2 files changed, 11 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java index b5524a4890..422eeffb24 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java @@ -183,14 +183,6 @@ public DefaultConfiguration( } catch (Exception e) { // do nothing } - - try { - // register additional mappings, if querydsl-spatial and JTS is on the classpath - Class.forName("com.mysema.query.spatial.jts.JTSGeometryExpression"); - SpatialSupport.addJTSSupport(module); - } catch (Exception e) { - // do nothing - } defaultSerializerConfig = new SimpleSerializerConfig(entityAccessors, listAccessors, mapAccessors, createDefaultVariable, ""); diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java index 460e788a20..9ce8ff61bb 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/SpatialSupport.java @@ -66,9 +66,6 @@ private static void addImports(AbstractModule module, String packageName) { public static void addSupport(AbstractModule module) { registerTypes(module.get(TypeMappings.class)); addImports(module,"com.mysema.query.spatial.path"); - } - - public static void addJTSSupport(AbstractModule module) { registerJTSTypes(module.get(TypeMappings.class)); addImports(module,"com.mysema.query.spatial.jts.path"); } From bfaa61dcee2f3ed898ef314d79aa68c4a306e22a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 26 Oct 2014 21:00:27 +0200 Subject: [PATCH 0520/1968] Disable validation for DefaultQueryMetadata created in ReplaceVisitor --- .../java/com/mysema/query/support/ReplaceVisitor.java | 9 +++++---- .../src/test/java/com/mysema/query/AbstractJPATest.java | 8 ++++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java index 82ea2e915d..b53c4c26f2 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java @@ -13,15 +13,15 @@ */ package com.mysema.query.support; +import javax.annotation.Nullable; +import java.util.List; +import java.util.Map; + import com.google.common.collect.ImmutableList; import com.mysema.query.*; import com.mysema.query.types.*; import com.mysema.query.types.template.BooleanTemplate; -import javax.annotation.Nullable; -import java.util.List; -import java.util.Map; - /** * ReplaceVisitor is a deep visitor that can be customized to replace segments of * expression trees @@ -80,6 +80,7 @@ public Expression visit(Path expr, @Nullable Void context) { @Override public Expression visit(SubQueryExpression expr, @Nullable Void context) { QueryMetadata md = new DefaultQueryMetadata(); + md.setValidate(false); md.setDistinct(expr.getMetadata().isDistinct()); md.setModifiers(expr.getMetadata().getModifiers()); md.setUnique(expr.getMetadata().isUnique()); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index b11b43f795..e27e770fa5 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -1171,6 +1171,14 @@ public void SubQuery3() { .list(cat); } + @Test + public void SubQuery4() { + QCat cat = QCat.cat; + QCat other = new QCat("other"); + query().from(cat) + .list(cat.name, new JPASubQuery().from(other).where(other.name.eq(cat.name)).count()); + } + @Test public void Substring() { for (String str : query().from(cat).list(cat.name.substring(1,2))) { From 69199a040279cd8500e15df86ce2131866d64a7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 27 Oct 2014 22:19:34 +0200 Subject: [PATCH 0521/1968] Fix count serialization --- .../com/mysema/query/jdo/JDOQLSerializer.java | 34 +++---------------- .../com/mysema/query/jdo/CollectionTest.java | 5 +++ 2 files changed, 9 insertions(+), 30 deletions(-) diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java index a110011502..d631bc01c0 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java @@ -13,35 +13,16 @@ */ package com.mysema.query.jdo; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Stack; - import javax.annotation.Nullable; +import java.util.*; +import java.util.Map.Entry; import com.google.common.collect.ImmutableList; import com.google.common.primitives.Primitives; import com.mysema.query.JoinExpression; import com.mysema.query.QueryMetadata; import com.mysema.query.support.SerializerBase; -import com.mysema.query.types.Constant; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.Operation; -import com.mysema.query.types.Operator; -import com.mysema.query.types.Ops; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.SubQueryExpression; +import com.mysema.query.types.*; import com.mysema.query.types.expr.Param; /** @@ -132,14 +113,7 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, boolean subQu append(SELECT_COUNT_THIS); } else { append(SELECT_COUNT); - boolean first = true; - for (JoinExpression je : joins) { - if (!first) { - append(COMMA); - } - handle(je.getTarget()); - first = false; - } + handle(joins.get(0).getTarget()); append(")"); } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java index ee8020eeb6..022afea9cb 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java @@ -70,6 +70,11 @@ public void Collection_Any() { public void Collection_Any_And() { query(store, store.products.any().name.eq("Sony Discman").and(store.products.any().price.gt(10.0))); } + + @Test + public void Collection_Any_Count() { + query().from(store).where(store.products.any().name.eq("Sony Discman")).count(); + } @Test @Ignore // Not supported From c90273fa0802d5a3185749c28e3f7ebc78024c96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 27 Oct 2014 22:30:41 +0200 Subject: [PATCH 0522/1968] Fix equals implementation --- .../mysema/query/types/FactoryExpressionBase.java | 8 +++++++- .../test/java/com/mysema/query/types/QBeanTest.java | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java b/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java index fe24da58c2..cd0bc996ef 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/FactoryExpressionBase.java @@ -44,7 +44,13 @@ public R accept(Visitor v, @Nullable C context) { @Override public boolean equals(Object o) { - return expr.equals(o); + if (o == this) { + return true; + } else if (o instanceof FactoryExpressionWrapper) { + return expr.equals(((FactoryExpressionWrapper)o).expr); + } else { + return false; + } } } diff --git a/querydsl-core/src/test/java/com/mysema/query/types/QBeanTest.java b/querydsl-core/src/test/java/com/mysema/query/types/QBeanTest.java index ca2d5c7ed6..f300cfd1d5 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/QBeanTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/QBeanTest.java @@ -20,8 +20,7 @@ import com.mysema.query.types.path.*; import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; public class QBeanTest { @@ -171,4 +170,13 @@ public void Supertype_Population() { assertEquals(true, bean.isMarried()); } + @Test + public void skipNulls() { + QBean bean = Projections.bean(Object.class); + assertEquals(bean, bean); + assertEquals(bean.skipNulls(), bean.skipNulls()); + assertFalse(bean.skipNulls().equals(bean)); + assertFalse(bean.equals(bean.skipNulls())); + } + } From b9bd34fcfc8983a147b6625f08abd4072c59b582 Mon Sep 17 00:00:00 2001 From: Steven Thomson Date: Mon, 27 Oct 2014 15:45:15 -0500 Subject: [PATCH 0523/1968] updated copyright --- .../java/com/mysema/query/spatial/jts/JTSCurveExpression.java | 2 +- .../query/spatial/jts/JTSGeometryCollectionExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSGeometryExpression.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSGeometryOperation.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSLineExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSLineStringExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSLineStringOperation.java | 2 +- .../com/mysema/query/spatial/jts/JTSLinearRingExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSMultiCurveExpression.java | 2 +- .../mysema/query/spatial/jts/JTSMultiLineStringExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSMultiPointExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java | 2 +- .../com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSPointExpression.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSPointOperation.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSPolygonExpression.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSPolygonOperation.java | 2 +- .../java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java | 2 +- .../query/spatial/jts/path/JTSGeometryCollectionPath.java | 2 +- .../java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java | 2 +- .../com/mysema/query/spatial/jts/path/JTSGeometryPaths.java | 2 +- .../com/mysema/query/spatial/jts/path/JTSLineStringPath.java | 2 +- .../com/mysema/query/spatial/jts/path/JTSLinearRingPath.java | 2 +- .../mysema/query/spatial/jts/path/JTSMultiLineStringPath.java | 2 +- .../com/mysema/query/spatial/jts/path/JTSMultiPointPath.java | 2 +- .../com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java | 2 +- .../java/com/mysema/query/spatial/jts/path/JTSPointPath.java | 2 +- .../java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java | 2 +- 28 files changed, 28 insertions(+), 28 deletions(-) diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java index 1129d0e126..de3b3f7476 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSCurveExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java index 175fc5330c..7fb45cbdc7 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryCollectionExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java index 4470e98594..67cd2d64e9 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java index fa6274f092..74951d418e 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSGeometryOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java index e4fdb105f2..8ad5fffe2b 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java index d9aa8b925e..a8a516e378 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java index 22e5c44cf0..00f1832b08 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLineStringOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java index 1b522b04e5..172fc51f54 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSLinearRingExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java index 34df4eb79e..55c04a9827 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiCurveExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java index 3c0c399582..2871524096 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiLineStringExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java index 73bf106ea2..a356f9492a 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPointExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java index 942d9e6e0a..3a231bd7a1 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiPolygonExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java index c334ee7d7f..d587980cc6 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSMultiSurfaceExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java index bb6d0c48cf..4eded371c3 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java index c646e017f4..54355da91d 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPointOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java index cc5588194c..1a62b8fea0 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java index 354d3dd397..71bdb67101 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSPolygonOperation.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java index 3bf2609658..3fa6dc860e 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/JTSSurfaceExpression.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java index 038eb10a9d..8bedcbbc59 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryCollectionPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java index 6abbb9fb1c..d9a5626cd8 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java index 3feace638e..a8cc101e37 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSGeometryPaths.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java index 51415c1bbf..6259519dda 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLineStringPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java index 5598102382..a7389fb917 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSLinearRingPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java index 024ae725fb..95cd83adb4 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiLineStringPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java index eee5e8e33e..88663ed6b2 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPointPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java index e0d99ecaa8..375b8ffa82 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSMultiPolygonPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java index 0731635a42..f709eb41a4 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPointPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java index 8916b4dfde..a047bce476 100644 --- a/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java +++ b/querydsl-spatial/src/main/java/com/mysema/query/spatial/jts/path/JTSPolygonPath.java @@ -1,5 +1,5 @@ /* - * Copyright 2014, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From ee53603614d9e1ba2cf6649723368dd4351b6c5a Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 27 Oct 2014 22:27:10 +0100 Subject: [PATCH 0524/1968] Tell Travis to wait for the build to complete --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index cb7987c2e8..7b09d55584 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ services: addons: postgresql: "9.3" install: - - sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true' + - travis_wait sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true' before_script: - mysql -u root -e "source travis/mysql.sql" - psql -U postgres -f travis/postgresql.sql From 4485df4de65a238d849b0130340572ecb40fff4e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 29 Oct 2014 21:02:24 +0100 Subject: [PATCH 0525/1968] Update test case for #750 to reflect the mismatched names --- .../com/mysema/query/domain/Generic14Test.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java index fc01b201b1..de0a0f83a1 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java @@ -1,11 +1,14 @@ package com.mysema.query.domain; +import static org.junit.Assert.assertNotNull; + +import java.io.Serializable; + import javax.persistence.Entity; import javax.persistence.MappedSuperclass; -import java.io.Serializable; import org.junit.Test; -import static org.junit.Assert.assertNotNull; + public class Generic14Test { @@ -22,6 +25,13 @@ public static abstract class BaseReferencablePersistable extends AbstractPersistable implements UpdateInfo { + private T id; + + @Override + public T getId() { + return id; + } + } @MappedSuperclass @@ -30,6 +40,7 @@ public static abstract class AbstractPersistable implem } public interface Persistable { + T getId(); } From 5d66d052246f8a9121f7565fe6c7fac4f419a62d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 30 Oct 2014 19:32:30 +0200 Subject: [PATCH 0526/1968] Use source variable instead --- .../src/main/java/com/mysema/query/jdo/JDOQLSerializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java index d631bc01c0..921d1ddccf 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java @@ -113,7 +113,7 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, boolean subQu append(SELECT_COUNT_THIS); } else { append(SELECT_COUNT); - handle(joins.get(0).getTarget()); + handle(source); append(")"); } From bd6c0786bbfdd4d496a2fac950bf8802714930b7 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 30 Oct 2014 22:09:50 +0100 Subject: [PATCH 0527/1968] Added problematic codegen test case Reusing type parameter names proves to be challenging --- .../mysema/query/domain/Generic14Test.java | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java index de0a0f83a1..1ffa4f9968 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java @@ -1,6 +1,7 @@ package com.mysema.query.domain; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.io.Serializable; @@ -9,16 +10,25 @@ import org.junit.Test; - public class Generic14Test { @Entity - public static class UserAccount extends BaseReferencablePersistable { + public static class UserAccount extends BaseReferencablePersistable { + + public UserAccount() { + super(UserAccount.class); + } } @MappedSuperclass - public static abstract class BaseReferencablePersistable extends BasePersistable { + public static abstract class BaseReferencablePersistable extends BasePersistable { + + private Class entityClass; + + public BaseReferencablePersistable(Class entityClass) { + this.entityClass = entityClass; + } } @@ -40,6 +50,7 @@ public static abstract class AbstractPersistable implem } public interface Persistable { + T getId(); } @@ -54,5 +65,7 @@ public void test() { assertNotNull(QGeneric14Test_BaseReferencablePersistable.baseReferencablePersistable); assertNotNull(QGeneric14Test_BasePersistable.basePersistable); assertNotNull(QGeneric14Test_AbstractPersistable.abstractPersistable); + assertTrue(QGeneric14Test_UserAccount.userAccount.id + .getType().isAssignableFrom(Long.class)); } } From fb3a00147c66192075a716176f5d1e56e0f1e8bc Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 31 Oct 2014 10:31:30 +0100 Subject: [PATCH 0528/1968] JDO uses field names in queries Fixes #1023 --- .../com/mysema/query/apt/jdo/JDOAnnotationProcessor.java | 6 +++++- .../src/test/java/com/mysema/query/domain/JDOTest.java | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java index bd42ffcd09..3fd924adc4 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java @@ -46,7 +46,11 @@ protected Configuration createConfiguration(RoundEnvironment roundEnv) { Class embeddable = EmbeddedOnly.class; Class embedded = QueryEmbedded.class; Class skip = NotPersistent.class; - return new DefaultConfiguration(roundEnv, processingEnv.getOptions(), Keywords.JDO, + DefaultConfiguration configuration = new DefaultConfiguration( + roundEnv, processingEnv.getOptions(), Keywords.JDO, entities, entity, superType, embeddable, embedded, skip); + + configuration.setUseGetters(false); + return configuration; } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java index c74a9b3f2a..218208cd7f 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java @@ -42,6 +42,10 @@ public static class JDOEntity2 { private String stringField2; + public String getStringfield1() { + return stringField1; + } + public String getStringField2() { return stringField2; } @@ -56,6 +60,7 @@ public void test() throws SecurityException, NoSuchFieldException { cl = QJDOTest_JDOEntity2.class; match(StringPath.class, "stringField1"); + assertMissing("stringfield1"); match(StringPath.class, "stringField2"); } From 95a752b77bd11a72d312edbcb506e5451651a96a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 31 Oct 2014 19:50:38 +0200 Subject: [PATCH 0529/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- .../src/main/docbook/en-US/Querydsl_Reference.xml | 2 +- .../src/main/docbook/ko-KR/Querydsl_Reference.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 7 ++++--- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql-spring/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 20 files changed, 23 insertions(+), 22 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 54cd8ce7a4..2b83fb96a7 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index a8f9516b5a..b16c3296e9 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 7ad95bf6bf..f15c5ac7e3 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 0eda2b2035..bfc4746892 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml index 06b5c53007..04bde89ed8 100644 --- a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml index 99c53f5457..8e3f96d89d 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 460a31d317..2991e94acc 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 7387054cb7..6db672bc71 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index b4d3848939..d246264a19 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index a270844d53..8d1c689157 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 38716f49a1..383c7d63f5 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 694f0202be..7ed4d55073 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 12161b9bb6..265231559f 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 3f2fd4882d..7b988b0c97 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 8c41d44278..26809f061d 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,10 +1,10 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 Querydsl parent project for Querydsl modules ${project.homepage} @@ -215,6 +215,7 @@ com/mysema/query/jpa/NativeSQLSerializer + com/mysema/query/sql/types/ArrayType BACKWARD_COMPATIBLE_USER true @@ -568,4 +569,4 @@ - + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index aad27dba23..bf3391b8ab 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 341bfcece8..927cc231e1 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 7032111c1e..0448dd335c 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index ab5fc75046..aaefab35a8 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index dad0132790..e3b5356b9e 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1.BUILD-SNAPSHOT + 3.5.1 ../querydsl-root/pom.xml From a2c7b2dcb01af60946b0ba6ecfed2d94877844bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 31 Oct 2014 19:51:28 +0200 Subject: [PATCH 0530/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 6 +++--- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql-spring/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 18 files changed, 20 insertions(+), 20 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 2b83fb96a7..e9a4341d49 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index b16c3296e9..e6bcf158e4 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index f15c5ac7e3..cecd14b87d 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index bfc4746892..010b6bb7e8 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 2991e94acc..f013abe4f8 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 6db672bc71..f781ab9a2c 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index d246264a19..c6da1faa8e 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 8d1c689157..d91609a4ca 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 383c7d63f5..8e248e586e 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 7ed4d55073..6af6e683bb 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 265231559f..7a6b7662e1 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 7b988b0c97..961efa3047 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 26809f061d..d27628a064 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,10 +1,10 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} @@ -569,4 +569,4 @@ - + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index bf3391b8ab..a002b56aff 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 927cc231e1..cb9c066fe7 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 0448dd335c..3577398aaf 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index aaefab35a8..12a68b73ce 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index e3b5356b9e..30ba340171 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.1 + 3.5.2.BUILD-SNAPSHOT ../querydsl-root/pom.xml From a8034ab226d3ab6548289bffe50f606ff03e8bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 1 Nov 2014 12:53:33 +0200 Subject: [PATCH 0531/1968] Partition lists when needed --- .../mysema/query/types/ExpressionUtils.java | 31 ++++++++++++++-- .../com/mysema/query/sql/OracleTemplates.java | 1 + .../com/mysema/query/sql/SQLSerializer.java | 35 ++++++++++++++----- .../com/mysema/query/sql/SQLTemplates.java | 17 +++++++-- .../java/com/mysema/query/SelectBase.java | 22 ++++++++++++ .../mysema/query/sql/SQLSerializerTest.java | 25 +++++++++++++ 6 files changed, 118 insertions(+), 13 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java index 035ec70a75..b712da3ac0 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java @@ -13,13 +13,12 @@ */ package com.mysema.query.types; +import javax.annotation.Nullable; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; -import javax.annotation.Nullable; - import com.google.common.collect.ImmutableList; import com.mysema.query.QueryException; @@ -389,6 +388,34 @@ public static Predicate ne(Expression left, Expression right) return PredicateOperation.create(Ops.NE, left, right); } + /** + * Create an left not in right expression + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate notIn(Expression left, CollectionExpression right) { + return PredicateOperation.create(Ops.NOT_IN, left, right); + } + + /** + * Create an left not in right expression + * + * @param + * @param left + * @param right + * @return + */ + public static Predicate notIn(Expression left, Collection right) { + if (right.size() == 1) { + return neConst(left, right.iterator().next()); + } else { + return PredicateOperation.create(Ops.NOT_IN, left, ConstantImpl.create(right)); + } + } + /** * Create a left or right expression * diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java index 94a201e193..42d2c1231c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java @@ -68,6 +68,7 @@ public OracleTemplates(char escape, boolean quote) { setBatchCountViaGetUpdateCount(true); setWithRecursive("with "); setCountViaAnalytics(true); + setListMaxSize(1000); add(Ops.ALIAS, "{0} {1}"); add(SQLOps.NEXTVAL, "{0s}.nextval"); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 104f25a6cb..f525ba3ae2 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -18,13 +18,11 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; -import com.mysema.query.JoinExpression; -import com.mysema.query.JoinFlag; -import com.mysema.query.QueryFlag; +import com.mysema.query.*; import com.mysema.query.QueryFlag.Position; -import com.mysema.query.QueryMetadata; import com.mysema.query.sql.types.Null; import com.mysema.query.support.Expressions; import com.mysema.query.support.SerializerBase; @@ -828,6 +826,7 @@ public Void visit(TemplateExpression expr, Void context) { @Override protected void visitOperation(Class type, Operator operator, List> args) { + boolean pathAdded = false; if (args.size() == 2 && !useLiterals && args.get(0) instanceof Path @@ -838,6 +837,7 @@ protected void visitOperation(Class type, Operator operator, List)args.get(0)); + pathAdded = true; break; } } @@ -877,10 +877,29 @@ protected void visitOperation(Class type, Operator operator, List)args.get(1)).getConstant().isEmpty()) { - super.visitOperation(type, operator == Ops.IN ? Ops.EQ : Ops.NE, - ImmutableList.of(NumberTemplate.ONE, NumberTemplate.TWO)); + && args.get(1) instanceof Constant) { + Collection coll = ((Constant)args.get(1)).getConstant(); + if (coll.isEmpty()) { + super.visitOperation(type, operator == Ops.IN ? Ops.EQ : Ops.NE, + ImmutableList.of(NumberTemplate.ONE, NumberTemplate.TWO)); + } else { + if (templates.getListMaxSize() == 0 || coll.size() <= templates.getListMaxSize()) { + super.visitOperation(type, operator, args); + } else { + if (!constantPaths.isEmpty()) { + constantPaths.removeLast(); + } + BooleanBuilder b = new BooleanBuilder(); + for (List part : Iterables.partition(coll, templates.getListMaxSize())) { + if (operator == Ops.IN) { + b.or(ExpressionUtils.in(args.get(0), part)); + } else { + b.and(ExpressionUtils.notIn(args.get(0), part)); + } + } + b.getValue().accept(this, null); + } + } } else if (operator == SQLOps.WITH_COLUMNS) { boolean oldSkipParent = skipParent; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index ef09374380..1b6ecc20ec 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -13,11 +13,12 @@ */ package com.mysema.query.sql; -import static com.google.common.base.CharMatcher.inRange; - import java.lang.reflect.Field; import java.sql.Types; -import java.util.*; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; import com.google.common.base.CharMatcher; import com.google.common.collect.ImmutableSet; @@ -31,6 +32,7 @@ import com.mysema.query.QueryModifiers; import com.mysema.query.sql.types.Type; import com.mysema.query.types.*; +import static com.google.common.base.CharMatcher.inRange; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -273,6 +275,8 @@ public SQLTemplates build() { private boolean arraysSupported = true; + private int listMaxSize = 0; + @Deprecated protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { this(SQL_RESERVED_WORDS, quoteStr, escape, useQuotes); @@ -787,6 +791,10 @@ public boolean isArraysSupported() { return arraysSupported; } + public int getListMaxSize() { + return listMaxSize; + } + protected void newLineToSingleSpace() { for (Class cl : Arrays.>asList(getClass(), SQLTemplates.class)) { for (Field field : cl.getDeclaredFields()) { @@ -1147,4 +1155,7 @@ protected void setArraysSupported(boolean b) { this.arraysSupported = b; } + protected void setListMaxSize(int i ) { + listMaxSize = i; + } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index e8d14bf30f..a9eb31e25b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -623,6 +623,28 @@ public void In() { query().from(employee).where(employee.id.in(Arrays.asList(1,2))).list(employee); } + @Test + @ExcludeIn(SQLITE) + public void In_Long_List() { + List ids = Lists.newArrayList(); + for (int i = 0; i < 20000; i++) { + ids.add(i); + } + assertEquals( + query().from(employee).count(), + query().from(employee).where(employee.id.in(ids)).count()); + } + + @Test + @ExcludeIn(SQLITE) + public void NotIn_Long_List() { + List ids = Lists.newArrayList(); + for (int i = 0; i < 20000; i++) { + ids.add(i); + } + assertEquals(0, query().from(employee).where(employee.id.notIn(ids)).count()); + } + @Test public void In_Empty() { assertEquals(0, query().from(employee).where(employee.id.in(ImmutableList.of())).count()); diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java index f4434a92a2..beb7f7e231 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java @@ -27,6 +27,7 @@ import com.mysema.query.sql.domain.QSurvey; import com.mysema.query.support.Expressions; import com.mysema.query.types.Expression; +import com.mysema.query.types.ExpressionUtils; import com.mysema.query.types.Path; import com.mysema.query.types.SubQueryExpression; import com.mysema.query.types.expr.Wildcard; @@ -110,6 +111,30 @@ public void DynamicQuery2() { "where \"user\".id = ?)", serializer.toString()); } + @Test + public void In() { + StringPath path = Expressions.stringPath("str"); + Expression expr = ExpressionUtils.in(path, Arrays.asList("1", "2", "3")); + + SQLSerializer serializer = new SQLSerializer(Configuration.DEFAULT); + serializer.handle(expr); + assertEquals(Arrays.asList(path, path, path), serializer.getConstantPaths()); + assertEquals(3, serializer.getConstants().size()); + } + + @Test + public void Or_In() { + StringPath path = Expressions.stringPath("str"); + Expression expr = ExpressionUtils.anyOf( + ExpressionUtils.in(path, Arrays.asList("1", "2", "3")), + ExpressionUtils.in(path, Arrays.asList("4", "5", "6"))); + + SQLSerializer serializer = new SQLSerializer(Configuration.DEFAULT); + serializer.handle(expr); + assertEquals(Arrays.asList(path, path, path, path, path, path), serializer.getConstantPaths()); + assertEquals(6, serializer.getConstants().size()); + } + @Test public void Some() { //select some((e.FIRSTNAME is not null)) from EMPLOYEE From 0c1768a4d9a7aed304ed67eedcfccc309a69d533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 1 Nov 2014 13:11:20 +0200 Subject: [PATCH 0532/1968] Exclude tests in Derby --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index a9eb31e25b..774f75f821 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -624,7 +624,7 @@ public void In() { } @Test - @ExcludeIn(SQLITE) + @ExcludeIn({DERBY, SQLITE}) public void In_Long_List() { List ids = Lists.newArrayList(); for (int i = 0; i < 20000; i++) { @@ -636,7 +636,7 @@ public void In_Long_List() { } @Test - @ExcludeIn(SQLITE) + @ExcludeIn({DERBY, SQLITE}) public void NotIn_Long_List() { List ids = Lists.newArrayList(); for (int i = 0; i < 20000; i++) { From 2073164a02ee2ffcd80ed092bb7870cb25740ef2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 1 Nov 2014 20:25:57 +0200 Subject: [PATCH 0533/1968] Exclude tests in Firebird --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 774f75f821..fc3e59aaf9 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -624,7 +624,7 @@ public void In() { } @Test - @ExcludeIn({DERBY, SQLITE}) + @ExcludeIn({DERBY, FIREBIRD, SQLITE}) public void In_Long_List() { List ids = Lists.newArrayList(); for (int i = 0; i < 20000; i++) { @@ -636,7 +636,7 @@ public void In_Long_List() { } @Test - @ExcludeIn({DERBY, SQLITE}) + @ExcludeIn({DERBY, FIREBIRD, SQLITE}) public void NotIn_Long_List() { List ids = Lists.newArrayList(); for (int i = 0; i < 20000; i++) { From eadaeb41ccc6590a3a8b21304742a11af70d01e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 2 Nov 2014 21:30:36 +0200 Subject: [PATCH 0534/1968] Support Predicate expressions in CaseBuilder --- .../mysema/query/types/expr/CaseBuilder.java | 49 ++++++++++++++----- .../mysema/query/types/CaseBuilderTest.java | 29 +++++++---- 2 files changed, 55 insertions(+), 23 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java index 9e20cba999..c92787984b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java @@ -19,10 +19,7 @@ import java.util.ArrayList; import java.util.List; -import com.mysema.query.types.ConstantImpl; -import com.mysema.query.types.Expression; -import com.mysema.query.types.NullExpression; -import com.mysema.query.types.Ops; +import com.mysema.query.types.*; /** * CaseBuilder enables the construction of typesafe case-when-then-else @@ -45,16 +42,16 @@ public final class CaseBuilder { private static class CaseElement { @Nullable - private final BooleanExpression condition; + private final Predicate condition; private final Expression target; - public CaseElement(@Nullable BooleanExpression condition, Expression target) { + public CaseElement(@Nullable Predicate condition, Expression target) { this.condition = condition; this.target = target; } - public BooleanExpression getCondition() { + public Predicate getCondition() { return condition; } @@ -81,7 +78,7 @@ public Cases(Class type) { this.type = type; } - Cases addCase(BooleanExpression condition, Expression expr) { + Cases addCase(Predicate condition, Expression expr) { cases.add(0, new CaseElement(condition, expr)); return this; } @@ -116,6 +113,11 @@ public Q otherwise(Expression expr) { return createResult(type, last); } + public CaseWhen when(Predicate b) { + return new CaseWhen(this, b); + } + + // TODO remove in 4.0.0 public CaseWhen when(BooleanExpression b) { return new CaseWhen(this, b); } @@ -131,10 +133,16 @@ public CaseWhen when(BooleanExpression b) { */ public static class CaseWhen> { - private final BooleanExpression b; + private final Predicate b; private final Cases cases; + public CaseWhen(Cases cases, Predicate b) { + this.cases = cases; + this.b = b; + } + + // TODO remove in 4.0.0 public CaseWhen(Cases cases, BooleanExpression b) { this.cases = cases; this.b = b; @@ -157,15 +165,20 @@ public Cases then(Expression expr) { */ public static class Initial { - private final BooleanExpression when; + private final Predicate when; + + public Initial(Predicate b) { + this.when = b; + } + // TODO remove in 4.0.0 public Initial(BooleanExpression b) { this.when = b; } public Cases> then(Expression expr) { - if (expr instanceof BooleanExpression) { - return (Cases) then((BooleanExpression) expr); + if (expr instanceof Predicate) { + return (Cases) then((Predicate) expr); } else if (expr instanceof StringExpression) { return (Cases) then((StringExpression) expr); } else if (expr instanceof NumberExpression) { @@ -200,10 +213,16 @@ public Cases> then(A constant) { // Boolean + public Cases then(Predicate expr) { + return thenBoolean(expr); + } + + // TODO remove in 4.0.0 public Cases then(BooleanExpression expr) { return thenBoolean(expr); } + private Cases thenBoolean(Expression expr) { return new Cases(Boolean.class) { @SuppressWarnings("unchecked") @@ -382,8 +401,12 @@ public Cases> then(Time time) { } - public Initial when(BooleanExpression b) { + public Initial when(Predicate b) { return new Initial(b); } + // TODO remove in 4.0.0 + public Initial when(BooleanExpression b) { + return new Initial(b); + } } diff --git a/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java b/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java index 1f52f77958..cf0a2a0aae 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/CaseBuilderTest.java @@ -13,21 +13,14 @@ */ package com.mysema.query.types; +import com.mysema.query.types.expr.*; +import com.mysema.query.types.template.BooleanTemplate; +import org.junit.Test; import static com.mysema.query.alias.Alias.$; import static com.mysema.query.alias.Alias.alias; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import org.junit.Test; - -import com.mysema.query.types.expr.BooleanExpression; -import com.mysema.query.types.expr.CaseBuilder; -import com.mysema.query.types.expr.EnumExpression; -import com.mysema.query.types.expr.NumberExpression; -import com.mysema.query.types.expr.SimpleExpression; -import com.mysema.query.types.expr.StringExpression; -import com.mysema.query.types.template.BooleanTemplate; - public class CaseBuilderTest { public enum Gender { @@ -63,6 +56,22 @@ public void BooleanTyped() { "end", cases.toString()); } + @Test + public void BooleanTyped_Predicate() { + Customer c = alias(Customer.class, "customer"); + BooleanExpression cases = new CaseBuilder() + .when((Predicate)$(c.getAnnualSpending()).gt(20000)).then(false) + .when((Predicate)$(c.getAnnualSpending()).gt(10000)).then(true) + .otherwise(false); + + assertEquals( + "case " + + "when customer.annualSpending > 20000 then false " + + "when customer.annualSpending > 10000 then true " + + "else false " + + "end", cases.toString()); + } + @Test public void EnumTyped() { Customer c = alias(Customer.class, "customer"); From d39b2c388446f3a923c7a512eb07b42cbe5c5ba4 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 2 Nov 2014 20:47:55 +0100 Subject: [PATCH 0535/1968] Enable customizable defaultConfiguration in APT --- .../src/main/java/com/mysema/query/apt/VisitorConfig.java | 8 +++++--- .../java/com/mysema/query/apt/jpa/JPAConfiguration.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java b/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java index 48994e6d98..d74567d90f 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java @@ -42,13 +42,15 @@ public enum VisitorConfig { private final boolean visitFieldProperties, visitMethodProperties, visitConstructors; - public static VisitorConfig get(boolean fields, boolean methods) { - if (fields && !methods) { + public static VisitorConfig get(boolean fields, boolean methods, VisitorConfig defaultConfig) { + if (fields && methods) { + return VisitorConfig.ALL; + } else if (fields && !methods) { return VisitorConfig.FIELDS_ONLY; } else if (methods && !fields) { return VisitorConfig.METHODS_ONLY; } else { - return VisitorConfig.ALL; + return defaultConfig; } } diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java index 98b2928c2b..f74f46421c 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jpa/JPAConfiguration.java @@ -86,7 +86,7 @@ public VisitorConfig getConfig(TypeElement e, List elements) methods |= element.getKind().equals(ElementKind.METHOD); } } - return VisitorConfig.get(fields, methods); + return VisitorConfig.get(fields, methods, VisitorConfig.ALL); } @Override From b40cadfcce558b71bf2999d9fa7ae25d4b88b62d Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 2 Nov 2014 21:44:20 +0100 Subject: [PATCH 0536/1968] Added JDOConfiguration with JDO specific annotation configuration --- .../query/apt/jdo/JDOAnnotationProcessor.java | 8 +- .../query/apt/jdo/JDOConfiguration.java | 77 +++++++++++++++++++ .../java/com/mysema/query/domain/JDOTest.java | 30 +++++++- 3 files changed, 105 insertions(+), 10 deletions(-) create mode 100644 querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOConfiguration.java diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java index 3fd924adc4..c3f079c52a 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOAnnotationProcessor.java @@ -25,8 +25,6 @@ import com.mysema.query.annotations.QuerySupertype; import com.mysema.query.apt.AbstractQuerydslProcessor; import com.mysema.query.apt.Configuration; -import com.mysema.query.apt.DefaultConfiguration; -import com.mysema.query.codegen.Keywords; /** * AnnotationProcessor for JDO which takes {@link PersistenceCapable}, {@link EmbeddedOnly} and @@ -46,11 +44,7 @@ protected Configuration createConfiguration(RoundEnvironment roundEnv) { Class embeddable = EmbeddedOnly.class; Class embedded = QueryEmbedded.class; Class skip = NotPersistent.class; - DefaultConfiguration configuration = new DefaultConfiguration( - roundEnv, processingEnv.getOptions(), Keywords.JDO, + return new JDOConfiguration(roundEnv, processingEnv.getOptions(), entities, entity, superType, embeddable, embedded, skip); - - configuration.setUseGetters(false); - return configuration; } } diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOConfiguration.java new file mode 100644 index 0000000000..854dda06d8 --- /dev/null +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/jdo/JDOConfiguration.java @@ -0,0 +1,77 @@ +/* + * Copyright 2014 Timo Westkämper + * + * 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 com.mysema.query.apt.jdo; + +import java.lang.annotation.Annotation; +import java.util.List; +import java.util.Map; + +import javax.annotation.processing.RoundEnvironment; +import javax.jdo.annotations.*; +import javax.lang.model.element.Element; +import javax.lang.model.element.ElementKind; +import javax.lang.model.element.TypeElement; + +import com.google.common.collect.ImmutableSet; +import com.mysema.query.apt.DefaultConfiguration; +import com.mysema.query.apt.VisitorConfig; +import com.mysema.query.codegen.Keywords; + +public class JDOConfiguration extends DefaultConfiguration { + + @SuppressWarnings("unchecked") + private static final Iterable> relevantAnnotations + = ImmutableSet.of( + Cacheable.class, Column.class, Columns.class, + javax.jdo.annotations.Element.class, Embedded.class, + Extension.class, Extensions.class, ForeignKey.class, + Index.class, Join.class, Key.class, NotPersistent.class, + Order.class, Persistent.class, PrimaryKey.class, + Serialized.class, Transactional.class, Unique.class, Value.class); + + public JDOConfiguration(RoundEnvironment roundEnv, + Map options, + Class entitiesAnn, + Class entityAnn, + Class superTypeAnn, + Class embeddableAnn, + Class embeddedAnn, Class skipAnn) { + super(roundEnv, options, Keywords.JDO, entitiesAnn, entityAnn, superTypeAnn, + embeddableAnn, embeddedAnn, skipAnn); + } + + @Override + public VisitorConfig getConfig(TypeElement e, List elements) { + boolean fields = false, methods = false; + for (Element element : elements) { + if (hasRelevantAnnotation(element)) { + fields |= element.getKind().equals(ElementKind.FIELD); + methods |= element.getKind().equals(ElementKind.METHOD); + } + } + return VisitorConfig.get(fields, methods, VisitorConfig.FIELDS_ONLY); + } + + private boolean hasRelevantAnnotation(Element element) { + for (Class relevantAnnotation : relevantAnnotations) { + if (element.getAnnotation(relevantAnnotation) != null) { + return true; + } + } + return false; + } + +} diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java index 218208cd7f..8505964ea0 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java @@ -15,11 +15,14 @@ import javax.jdo.annotations.NotPersistent; import javax.jdo.annotations.PersistenceCapable; +import javax.jdo.annotations.Persistent; +import javax.jdo.annotations.PrimaryKey; -import org.junit.Test; - +import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.StringPath; +import org.junit.Test; + public class JDOTest extends AbstractTest { @PersistenceCapable @@ -37,7 +40,6 @@ public static class JDOEntity { @PersistenceCapable public static class JDOEntity2 { - @SuppressWarnings("unused") private String stringField1; private String stringField2; @@ -51,6 +53,24 @@ public String getStringField2() { } } + @PersistenceCapable + public static class JDOEntity3 { + + private Integer integerField; + + private String stringField; + + @PrimaryKey + public Integer getId() { + return integerField; + } + + @Persistent + public String getName() { + return stringField; + } + } + @Test public void test() throws SecurityException, NoSuchFieldException { cl = QJDOTest_JDOEntity.class; @@ -62,6 +82,10 @@ public void test() throws SecurityException, NoSuchFieldException { match(StringPath.class, "stringField1"); assertMissing("stringfield1"); match(StringPath.class, "stringField2"); + + cl = QJDOTest_JDOEntity3.class; + match(NumberPath.class, "id"); + match(StringPath.class, "name"); } } From 9f8d87a138a99183017c827ce9b9af3ef5c5e1f6 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 29 Oct 2014 20:59:34 +0100 Subject: [PATCH 0537/1968] Added support for unquoted keywords after dot --- .../mysema/query/jpa/NativeSQLSerializer.java | 12 +++++--- .../com/mysema/query/sql/MySQLTemplates.java | 1 + .../com/mysema/query/sql/SQLSerializer.java | 28 +++++++++++++------ .../com/mysema/query/sql/SQLTemplates.java | 27 +++++++++++++++--- 4 files changed, 52 insertions(+), 16 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java index 4231b08593..1243cc395e 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/NativeSQLSerializer.java @@ -52,13 +52,13 @@ public NativeSQLSerializer(Configuration configuration, boolean wrapEntityProjec } @Override - protected void appendAsColumnName(Path path) { + protected void appendAsColumnName(Path path, boolean precededByDot) { if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { SQLTemplates templates = getTemplates(); Column column = path.getAnnotatedElement().getAnnotation(Column.class); - append(templates.quoteIdentifier(column.name())); + append(templates.quoteIdentifier(column.name(), precededByDot)); } else { - super.appendAsColumnName(path); + super.appendAsColumnName(path, precededByDot); } } @@ -68,11 +68,15 @@ protected void handleJoinTarget(JoinExpression je) { Class type = je.getTarget().getType(); if (type.getAnnotation(Table.class) != null && templates.isSupportsAlias()) { Table table = type.getAnnotation(Table.class); + boolean precededByDot; if (!table.schema().isEmpty() && templates.isPrintSchema()) { appendSchemaName(table.schema()); append("."); + precededByDot = true; + } else { + precededByDot = false; } - appendTableName(table.name()); + appendTableName(table.name(), precededByDot); append(templates.getTableAlias()); } super.handleJoinTarget(je); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index 5df1ba6e97..6428972ecc 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -96,6 +96,7 @@ public MySQLTemplates(char escape, boolean quote) { setArraysSupported(false); setParameterMetadataAvailable(false); setLimitRequired(true); + setUnquotedReservedWordsAsIdentifierSupported(true); setNullsFirst(null); setNullsLast(null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 104f25a6cb..6397214743 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -80,13 +80,13 @@ public SQLSerializer(Configuration conf, boolean dml) { this.dml = dml; } - protected void appendAsColumnName(Path path) { + protected void appendAsColumnName(Path path, boolean precededByDot) { String column = ColumnMetadata.getName(path); if (path.getMetadata().getParent() instanceof RelationalPath) { RelationalPath parent = (RelationalPath)path.getMetadata().getParent(); column = configuration.getColumnOverride(parent.getSchemaAndTable(), column); } - append(templates.quoteIdentifier(column)); + append(templates.quoteIdentifier(column, precededByDot)); } private SchemaAndTable getSchemaAndTable(RelationalPath path) { @@ -97,8 +97,8 @@ protected void appendSchemaName(String schema) { append(templates.quoteIdentifier(schema)); } - protected void appendTableName(String table) { - append(templates.quoteIdentifier(table)); + protected void appendTableName(String table, boolean precededByDot) { + append(templates.quoteIdentifier(table, precededByDot)); } public List getConstants() { @@ -169,11 +169,15 @@ protected void handleJoinTarget(JoinExpression je) { final RelationalPath pe = (RelationalPath) je.getTarget(); if (pe.getMetadata().getParent() == null) { SchemaAndTable schemaAndTable = getSchemaAndTable(pe); + boolean precededByDot; if (templates.isPrintSchema()) { appendSchemaName(schemaAndTable.getSchema()); append("."); + precededByDot = true; + } else { + precededByDot = false; } - appendTableName(schemaAndTable.getTable()); + appendTableName(schemaAndTable.getTable(), precededByDot); append(templates.getTableAlias()); } } @@ -782,23 +786,31 @@ public Void visit(Path path, Void context) { if (dml) { if (path.equals(entity) && path instanceof RelationalPath) { SchemaAndTable schemaAndTable = getSchemaAndTable((RelationalPath) path); + boolean precededByDot; if (dmlWithSchema && templates.isPrintSchema()) { appendSchemaName(schemaAndTable.getSchema()); append("."); + precededByDot = true; + } else { + precededByDot = false; } - appendTableName(schemaAndTable.getTable()); + appendTableName(schemaAndTable.getTable(), precededByDot); return null; } else if (entity.equals(path.getMetadata().getParent()) && skipParent) { - appendAsColumnName(path); + appendAsColumnName(path, false); return null; } } final PathMetadata metadata = path.getMetadata(); + boolean precededByDot; if (metadata.getParent() != null && (!skipParent || dml)) { visit(metadata.getParent(), context); append("."); + precededByDot = true; + } else { + precededByDot = false; } - appendAsColumnName(path); + appendAsColumnName(path, precededByDot); return null; } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index ef09374380..8b1fa3391a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -273,6 +273,8 @@ public SQLTemplates build() { private boolean arraysSupported = true; + private boolean unquotedReservedWordsAsIdentifierSupported = false; + @Deprecated protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { this(SQL_RESERVED_WORDS, quoteStr, escape, useQuotes); @@ -787,6 +789,10 @@ public boolean isArraysSupported() { return arraysSupported; } + public boolean isUnquotedReservedWordsAsIdentifierSupported() { + return unquotedReservedWordsAsIdentifierSupported; + } + protected void newLineToSingleSpace() { for (Class cl : Arrays.>asList(getClass(), SQLTemplates.class)) { for (Field field : cl.getDeclaredFields()) { @@ -807,16 +813,25 @@ protected void newLineToSingleSpace() { } public final String quoteIdentifier(String identifier) { - if (useQuotes || requiresQuotes(identifier)) { + return quoteIdentifier(identifier, false); + } + + public final String quoteIdentifier(String identifier, boolean precededByDot) { + if (useQuotes || requiresQuotes(identifier, precededByDot)) { return quoteStr + identifier + quoteStr; } else { return identifier; } } - protected boolean requiresQuotes(final String identifier) { - return NON_UNDERSCORE_ALPHA_NUMERIC.matchesAnyOf(identifier) - || isReservedWord(identifier); + protected boolean requiresQuotes(final String identifier, final boolean precededByDot) { + if (NON_UNDERSCORE_ALPHA_NUMERIC.matchesAnyOf(identifier)) { + return true; + } else if (precededByDot && isUnquotedReservedWordsAsIdentifierSupported()) { + return false; + } else { + return isReservedWord(identifier); + } } private boolean isReservedWord(String identifier) { @@ -1147,4 +1162,8 @@ protected void setArraysSupported(boolean b) { this.arraysSupported = b; } + public void setUnquotedReservedWordsAsIdentifierSupported(boolean unquotedReservedWordsAsIdentifierSupported) { + this.unquotedReservedWordsAsIdentifierSupported = unquotedReservedWordsAsIdentifierSupported; + } + } From 812201f9b7b2424bdacdfead400941e18416acbe Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 3 Nov 2014 09:51:25 +0100 Subject: [PATCH 0538/1968] Add serializer test case for unquoted keywords after dot --- .../com/mysema/query/sql/SQLSerializerTest.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java index f4434a92a2..25eba6b32b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SQLSerializerTest.java @@ -13,6 +13,9 @@ */ package com.mysema.query.sql; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -33,8 +36,8 @@ import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.path.PathBuilder; import com.mysema.query.types.path.StringPath; + import org.junit.Test; -import static org.junit.Assert.assertEquals; public class SQLSerializerTest { @@ -151,6 +154,14 @@ public void Join_To_Function_In_Derby() { assertEquals("from SURVEY SURVEY\njoin table(functionCall()) as fc\nwhere SURVEY.NAME is not null", query.toString()); } + @Test + public void Keyword_After_Dot() { + SQLQuery query = new SQLQuery(MySQLTemplates.DEFAULT); + PathBuilder surveyBuilder = new PathBuilder(Survey.class, "survey"); + query.from(surveyBuilder).where(surveyBuilder.get("not").isNotNull()); + assertFalse(query.toString().contains("`")); + } + @Test public void Like() { Expression expr = Expressions.stringTemplate("'%a%'").contains("%a%"); From 2a800b3cc0f7485e9ccfc274d489d5c924a2bb1f Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 4 Nov 2014 00:14:28 +0100 Subject: [PATCH 0539/1968] Add keyword quoting test suite --- .../mysema/query/sql/PostgresTemplates.java | 1 + .../com/mysema/query/KeywordQuotingBase.java | 85 +++++++++++++++++++ .../java/com/mysema/query/SelectBase.java | 6 -- .../mysema/query/suites/MySQLSuiteTest.java | 22 ++--- .../query/suites/PostgreSQLSuiteTest.java | 42 +++++---- 5 files changed, 116 insertions(+), 40 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/KeywordQuotingBase.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index e2cde5c09e..1f0e937868 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -73,6 +73,7 @@ public PostgresTemplates(char escape, boolean quote) { setCountDistinctMultipleColumns(true); setCountViaAnalytics(true); setDefaultValues("\ndefault values"); + setUnquotedReservedWordsAsIdentifierSupported(true); // String add(Ops.MATCHES, "{0} ~ {1}"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/KeywordQuotingBase.java b/querydsl-sql/src/test/java/com/mysema/query/KeywordQuotingBase.java new file mode 100644 index 0000000000..f4e261fe20 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/KeywordQuotingBase.java @@ -0,0 +1,85 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query; + + +import static org.junit.Assert.assertEquals; + +import com.mysema.query.ddl.CreateTableClause; +import com.mysema.query.ddl.DropTableClause; +import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.sql.RelationalPathBase; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.PathMetadataFactory; +import com.mysema.query.types.path.BooleanPath; +import com.mysema.query.types.path.StringPath; + +import org.junit.*; + +public class KeywordQuotingBase extends AbstractBaseTest { + + private static class Quoting extends RelationalPathBase { + + public static final Quoting quoting = new Quoting("quoting"); + + public final StringPath from = createString("from"); + public final BooleanPath all = createBoolean("all"); + + private Quoting(String path) { + super(Quoting.class, PathMetadataFactory.forVariable(path), "PUBLIC", "quoting"); + addMetadata(); + } + + public Quoting(PathMetadata metadata) { + super(Quoting.class, metadata, "PUBLIC", "quoting"); + addMetadata(); + } + + protected void addMetadata() { + addMetadata(from, ColumnMetadata.named("from")); + addMetadata(all, ColumnMetadata.named("all")); + } + } + + private final Quoting quoting = Quoting.quoting; + + @Before + public void setUp() throws Exception { + new CreateTableClause(connection, configuration, "quoting") + .column("from", String.class).size(30) + .column("all", Boolean.class) + .execute(); + execute(insert(quoting) + .columns(quoting.from, quoting.all) + .values("from", true)); + } + + @After + public void tearDown() throws Exception { + new DropTableClause(connection, configuration, "quoting") + .execute(); + } + + @Test + public void Keywords() { + Quoting from = new Quoting("from"); + assertEquals("from", query().from(quoting.as(from)) + .where(from.from.eq("from") + .and(from.all.isNotNull())) + .singleResult(from.from)); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index e8d14bf30f..010a01a754 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -667,12 +667,6 @@ public void Joins() throws SQLException { } } - @Test - public void Keywords() { - QEmployee from = new QEmployee("from"); - query().from(QEmployee.employee.as(from)).singleResult(from.firstname.as("from")); - } - @Test public void Left_Join() throws SQLException { query().from(employee).leftJoin(employee2) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java index 4a0321d99b..a35d4e8ff6 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java @@ -1,31 +1,19 @@ package com.mysema.query.suites; -import org.junit.BeforeClass; -import org.junit.experimental.categories.Category; - -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SpatialBase; -import com.mysema.query.SelectMySQLBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; +import com.mysema.query.*; import com.mysema.query.sql.spatial.MySQLSpatialTemplates; import com.mysema.testutil.ExternalDB; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + @Category(ExternalDB.class) public class MySQLSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java index beacc2b8b9..aa677f69b2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java @@ -1,31 +1,39 @@ package com.mysema.query.suites; -import org.junit.BeforeClass; -import org.junit.experimental.categories.Category; - -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SpatialBase; -import com.mysema.query.SelectWindowFunctionsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; +import com.mysema.query.*; +import com.mysema.query.sql.Configuration; import com.mysema.query.sql.spatial.PostGISTemplates; import com.mysema.testutil.ExternalDB; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + @Category(ExternalDB.class) public class PostgreSQLSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase { + + private Configuration previous; + + @Override + public void setUp() throws Exception { + //NOTE: replacing the templates with a non-quoting one + previous = configuration; + configuration = new Configuration(PostGISTemplates.builder().newLineToSingleSpace().build()); + super.setUp(); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + //NOTE: restoring old templates + configuration = previous; + } + + } public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} From a69725377bf2737b553549b4b43b1a9c5ce25da5 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 4 Nov 2014 19:40:58 +0100 Subject: [PATCH 0540/1968] Use the supportsUnquotedReservedWordsAsIdentifier field directly --- .../java/com/mysema/query/sql/MySQLTemplates.java | 2 +- .../java/com/mysema/query/sql/PostgresTemplates.java | 2 +- .../main/java/com/mysema/query/sql/SQLTemplates.java | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index 6428972ecc..242b658c5d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -96,7 +96,7 @@ public MySQLTemplates(char escape, boolean quote) { setArraysSupported(false); setParameterMetadataAvailable(false); setLimitRequired(true); - setUnquotedReservedWordsAsIdentifierSupported(true); + setSupportsUnquotedReservedWordsAsIdentifier(true); setNullsFirst(null); setNullsLast(null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index 1f0e937868..a28dd2bd96 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -73,7 +73,7 @@ public PostgresTemplates(char escape, boolean quote) { setCountDistinctMultipleColumns(true); setCountViaAnalytics(true); setDefaultValues("\ndefault values"); - setUnquotedReservedWordsAsIdentifierSupported(true); + setSupportsUnquotedReservedWordsAsIdentifier(true); // String add(Ops.MATCHES, "{0} ~ {1}"); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 8b1fa3391a..b9f8c60fd9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -273,7 +273,7 @@ public SQLTemplates build() { private boolean arraysSupported = true; - private boolean unquotedReservedWordsAsIdentifierSupported = false; + private boolean supportsUnquotedReservedWordsAsIdentifier = false; @Deprecated protected SQLTemplates(String quoteStr, char escape, boolean useQuotes) { @@ -789,8 +789,8 @@ public boolean isArraysSupported() { return arraysSupported; } - public boolean isUnquotedReservedWordsAsIdentifierSupported() { - return unquotedReservedWordsAsIdentifierSupported; + public boolean isSupportsUnquotedReservedWordsAsIdentifier() { + return supportsUnquotedReservedWordsAsIdentifier; } protected void newLineToSingleSpace() { @@ -827,7 +827,7 @@ public final String quoteIdentifier(String identifier, boolean precededByDot) { protected boolean requiresQuotes(final String identifier, final boolean precededByDot) { if (NON_UNDERSCORE_ALPHA_NUMERIC.matchesAnyOf(identifier)) { return true; - } else if (precededByDot && isUnquotedReservedWordsAsIdentifierSupported()) { + } else if (precededByDot && supportsUnquotedReservedWordsAsIdentifier) { return false; } else { return isReservedWord(identifier); @@ -1162,8 +1162,8 @@ protected void setArraysSupported(boolean b) { this.arraysSupported = b; } - public void setUnquotedReservedWordsAsIdentifierSupported(boolean unquotedReservedWordsAsIdentifierSupported) { - this.unquotedReservedWordsAsIdentifierSupported = unquotedReservedWordsAsIdentifierSupported; + public void setSupportsUnquotedReservedWordsAsIdentifier(boolean b) { + this.supportsUnquotedReservedWordsAsIdentifier = b; } } From 5e7e3d39b2afe8e7266dd3e3a8ea209520b9e7b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 5 Nov 2014 20:24:07 +0200 Subject: [PATCH 0541/1968] Improve equals contract --- pom.xml | 2 +- .../com/mysema/codegen/model/TypeExtends.java | 15 ++++++++++++++- .../java/com/mysema/codegen/model/TypeSuper.java | 14 ++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index c23b0bf565..4f751bbe36 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.codegen codegen - 0.6.4 + 0.6.5 Codegen Code generation and compilation for Java diff --git a/src/main/java/com/mysema/codegen/model/TypeExtends.java b/src/main/java/com/mysema/codegen/model/TypeExtends.java index 90197dddc0..5e83a0a950 100644 --- a/src/main/java/com/mysema/codegen/model/TypeExtends.java +++ b/src/main/java/com/mysema/codegen/model/TypeExtends.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.Set; +import com.google.common.base.Objects; import com.google.common.base.Strings; /** @@ -45,7 +46,7 @@ public String getGenericName(boolean asArgType) { @Override public String getGenericName(boolean asArgType, Set packages, Set classes) { if (!asArgType) { - if (type.equals(Types.OBJECT)) { + if (Types.OBJECT.equals(type)) { return "?"; } else { String genericName = super.getGenericName(true, packages, classes); @@ -60,4 +61,16 @@ public String getVarName() { return varName; } + @Override + public boolean equals(Object o) { + if (o == this) { + return true; + } else if (o instanceof TypeExtends) { + return Objects.equal(((TypeExtends) o).varName, varName) + && ((TypeExtends) o).type.equals(type); + } else { + return false; + } + } + } diff --git a/src/main/java/com/mysema/codegen/model/TypeSuper.java b/src/main/java/com/mysema/codegen/model/TypeSuper.java index 294d9a0422..62d668c672 100644 --- a/src/main/java/com/mysema/codegen/model/TypeSuper.java +++ b/src/main/java/com/mysema/codegen/model/TypeSuper.java @@ -16,6 +16,8 @@ import java.util.Collections; import java.util.Set; +import com.google.common.base.Objects; + /** * TypeSuper is a Type for type variables and wildcard types * @@ -63,4 +65,16 @@ public String getGenericName(boolean asArgType, Set packages, Set Date: Wed, 5 Nov 2014 20:37:12 +0200 Subject: [PATCH 0542/1968] Improve type comparisons --- .../com/mysema/query/apt/ExtendedTypeFactory.java | 2 +- .../com/mysema/query/domain/Generic8Test.java | 15 ++++++++++++++- .../java/com/mysema/query/codegen/EntityType.java | 10 ++++++---- .../java/com/mysema/query/codegen/Property.java | 6 +----- .../com/mysema/query/codegen/TypeResolver.java | 8 +++++--- querydsl-root/pom.xml | 6 +++--- 6 files changed, 30 insertions(+), 17 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java index cfc9d2a24d..4167988ded 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/ExtendedTypeFactory.java @@ -558,7 +558,7 @@ private Set getSupertypes(TypeMirror typeMirror, Type type, boolean deep) } // interface } else { - superTypes = new HashSet(e.getInterfaces().size()); + superTypes = new LinkedHashSet(e.getInterfaces().size()); for (TypeMirror mirror : e.getInterfaces()) { Type iface = getType(mirror, deep); if (!iface.getFullName().startsWith("java")) { diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic8Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic8Test.java index 322c4e8e50..f5e3ac08fd 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic8Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic8Test.java @@ -6,6 +6,7 @@ import com.mysema.query.annotations.QueryEntity; import com.mysema.query.annotations.QuerySupertype; +import static org.junit.Assert.assertEquals; public class Generic8Test { @@ -19,6 +20,11 @@ public static class Superclass { List values2; } + + @QueryEntity + public static class IntermediateEntity extends Superclass { + + } @QueryEntity public static class Entity extends Superclass { @@ -31,9 +37,16 @@ public static class Entity2 extends Superclass { } + @QueryEntity + public static class Entity3 extends IntermediateEntity { + + } + @Test public void test() { - + assertEquals(String.class, QGeneric8Test_Entity.entity.values.getElementType()); + assertEquals(Integer.class, QGeneric8Test_Entity2.entity2.values.getElementType()); + assertEquals(String.class, QGeneric8Test_Entity3.entity3.values.getElementType()); } } diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java index 97ce4814bb..9314b070ac 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntityType.java @@ -57,7 +57,7 @@ public class EntityType extends TypeAdapter implements Comparable { * @param type */ public EntityType(Type type) { - this(type, new HashSet()); + this(type, new LinkedHashSet()); } /** @@ -88,9 +88,11 @@ public void addDelegate(Delegate delegate) { } public void addProperty(Property field) { - propertyNames.add(field.getName()); - escapedPropertyNames.add(field.getEscapedName()); - properties.add(validateField(field)); + if (!propertyNames.contains(field.getName())) { + propertyNames.add(field.getName()); + escapedPropertyNames.add(field.getEscapedName()); + properties.add(validateField(field)); + } } public void addSupertype(Supertype entityType) { diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/Property.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/Property.java index ee4ec7c30e..6e782b90b5 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/Property.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/Property.java @@ -14,11 +14,7 @@ package com.mysema.query.codegen; import java.lang.annotation.Annotation; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import com.google.common.base.Objects; import com.mysema.codegen.model.Type; diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java index 884b94ff65..acae29b681 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java @@ -55,7 +55,7 @@ public static Type resolve(Type type, Type declaringType, EntityType context) { resolved = type; } } - + return resolved; } @@ -73,12 +73,14 @@ private static Type resolveVar(Type resolved, String varName, Type declaringType Type param = unwrap(declaringType.getParameters().get(i)); if (param instanceof TypeExtends && Objects.equal(((TypeExtends)param).getVarName(), varName)) { index = i; + } else if (param instanceof TypeSuper && Objects.equal(((TypeSuper) param).getVarName(), varName)) { + index = i; } } if (index == -1) { throw new IllegalStateException("Did not find type " + varName - + " in " + declaringType.getParameters()); + + " in " + declaringType + " for " + context); } Supertype type = context.getSuperType(); @@ -86,7 +88,7 @@ private static Type resolveVar(Type resolved, String varName, Type declaringType type = type.getEntityType().getSuperType(); } if (!type.getType().getParameters().isEmpty()) { - return type.getType().getParameters().get(index); + return type.getType().getParameters().get(index); } else { // raw type return resolved; diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 8c41d44278..18d83a4d47 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -40,7 +40,7 @@ 2.2.5 18.0 - 0.6.4 + 0.6.5 0.2.4 2.2.2 1.3.2 @@ -568,4 +568,4 @@ - + From f79abfb7fd8a52364f287df0b0015d7d9ad8b0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 5 Nov 2014 20:42:54 +0200 Subject: [PATCH 0543/1968] Fix variable usage --- .../src/main/java/com/mysema/query/sql/SQLSerializer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index f525ba3ae2..f12ca3f851 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -886,7 +886,7 @@ protected void visitOperation(Class type, Operator operator, List Date: Wed, 5 Nov 2014 22:18:01 +0200 Subject: [PATCH 0544/1968] Simplify conditions --- .../src/main/java/com/mysema/query/codegen/TypeResolver.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java index acae29b681..a85db3bc87 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/TypeResolver.java @@ -71,9 +71,7 @@ private static Type resolveVar(Type resolved, String varName, Type declaringType int index = -1; for (int i = 0; i < declaringType.getParameters().size(); i++) { Type param = unwrap(declaringType.getParameters().get(i)); - if (param instanceof TypeExtends && Objects.equal(((TypeExtends)param).getVarName(), varName)) { - index = i; - } else if (param instanceof TypeSuper && Objects.equal(((TypeSuper) param).getVarName(), varName)) { + if (Objects.equal(getVarName(param), varName)) { index = i; } } From f893cafee1aa544dcec9a8eb0515a14b0835d93c Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 6 Nov 2014 11:02:39 +0100 Subject: [PATCH 0545/1968] Refactor inAny and notInAny to ExpressionUtils This enables compile time checking of the parameters --- .../mysema/query/types/ExpressionUtils.java | 34 +++++++++++++++++++ .../query/types/ExpressionUtilsTest.java | 19 ++++++++++- .../com/mysema/query/sql/SQLSerializer.java | 29 ++++++++++------ 3 files changed, 70 insertions(+), 12 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java index b712da3ac0..bf5e801465 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java @@ -14,12 +14,14 @@ package com.mysema.query.types; import javax.annotation.Nullable; + import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; import com.google.common.collect.ImmutableList; +import com.mysema.query.BooleanBuilder; import com.mysema.query.QueryException; @@ -223,6 +225,22 @@ public static Predicate in(Expression left, Collection right } } + /** + * Create a {@code left in right or...} expression for each list + * + * @param + * @param left + * @param lists + * @return a {@code left in right or...} expression + */ + public static Predicate inAny(Expression left, Iterable> lists) { + BooleanBuilder rv = new BooleanBuilder(); + for (Collection list : lists) { + rv.or(in(left, list)); + } + return rv; + } + /** * Create a left is null expression * @@ -416,6 +434,22 @@ public static Predicate notIn(Expression left, Collection ri } } + /** + * Create a {@code left not in right and...} expression for each list + * + * @param + * @param left + * @param lists + * @return a {@code left not in right and...} expression + */ + public static Predicate notInAny(Expression left, Iterable> lists) { + BooleanBuilder rv = new BooleanBuilder(); + for (Collection list : lists) { + rv.and(notIn(left, list)); + } + return rv; + } + /** * Create a left or right expression * diff --git a/querydsl-core/src/test/java/com/mysema/query/types/ExpressionUtilsTest.java b/querydsl-core/src/test/java/com/mysema/query/types/ExpressionUtilsTest.java index 40364e9b8f..ea987c0acc 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/ExpressionUtilsTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/ExpressionUtilsTest.java @@ -16,6 +16,9 @@ import static org.junit.Assert.assertEquals; import java.util.Arrays; +import java.util.List; + +import com.google.common.collect.ImmutableSet; import org.junit.Ignore; import org.junit.Test; @@ -143,7 +146,14 @@ public void Eq() { public void In() { assertEquals("str in [a, b, c]", ExpressionUtils.in(str, Arrays.asList("a","b","c")).toString()); } - + + @Test + public void InAny() { + ImmutableSet> of = ImmutableSet.of(Arrays.asList("a", "b", "c"), Arrays.asList("d", "e", "f")); + assertEquals("str in [a, b, c] || str in [d, e, f]", + ExpressionUtils.inAny(str, of).toString()); + } + @Test public void IsNull() { assertEquals("str is null", ExpressionUtils.isNull(str).toString()); @@ -164,4 +174,11 @@ public void Ne() { assertEquals("str != str2", ExpressionUtils.ne(str, str2).toString()); } + @Test + public void NotInAny() { + ImmutableSet> of = ImmutableSet.of(Arrays.asList("a", "b", "c"), Arrays.asList("d", "e", "f")); + assertEquals("str not in [a, b, c] && str not in [d, e, f]", + ExpressionUtils.notInAny(str, of).toString()); + } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index f12ca3f851..0c46d965fb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -876,9 +876,12 @@ protected void visitOperation(Class type, Operator operator, List coll = ((Constant)args.get(1)).getConstant(); + && args.get(0) instanceof Path + && args.get(1) instanceof Constant) { + //The type of the constant expression is compatible with the left + //expression, since the compile time checking mandates it to be. + @SuppressWarnings("unchecked") + Collection coll = ((Constant>)args.get(1)).getConstant(); if (coll.isEmpty()) { super.visitOperation(type, operator == Ops.IN ? Ops.EQ : Ops.NE, ImmutableList.of(NumberTemplate.ONE, NumberTemplate.TWO)); @@ -886,18 +889,22 @@ protected void visitOperation(Class type, Operator operator, List path = (Expression) args.get(0); if (pathAdded) { constantPaths.removeLast(); } - BooleanBuilder b = new BooleanBuilder(); - for (List part : Iterables.partition(coll, templates.getListMaxSize())) { - if (operator == Ops.IN) { - b.or(ExpressionUtils.in(args.get(0), part)); - } else { - b.and(ExpressionUtils.notIn(args.get(0), part)); - } + Iterable> partitioned = Iterables + .partition(coll, templates.getListMaxSize()); + Predicate result; + if (operator == Ops.IN) { + result = ExpressionUtils.inAny(path, partitioned); + } else { + result = ExpressionUtils.notInAny(path, partitioned); } - b.getValue().accept(this, null); + result.accept(this, null); } } From dfefd0c982a2c821f44085150052e90d1d534ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 6 Nov 2014 22:11:02 +0200 Subject: [PATCH 0546/1968] Add SQLXML support --- .../mysema/query/sql/types/SQLXMLType.java | 51 ++++++++++++++++++ .../query/sql/types/XMLAsStringType.java | 54 +++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/types/SQLXMLType.java create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/types/XMLAsStringType.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/SQLXMLType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/SQLXMLType.java new file mode 100644 index 0000000000..5973ad8672 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/SQLXMLType.java @@ -0,0 +1,51 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.types; + +import java.sql.*; + +/** + * SQLXMLType maps SQLXML to SQLXML on the JDBC level + * + * @author tiwe + * + */ +public class SQLXMLType extends AbstractType { + + public SQLXMLType() { + super(Types.SQLXML); + } + + public SQLXMLType(int type) { + super(type); + } + + @Override + public SQLXML getValue(ResultSet rs, int startIndex) throws SQLException { + return rs.getSQLXML(startIndex); + } + + @Override + public Class getReturnedClass() { + return SQLXML.class; + } + + @Override + public void setValue(PreparedStatement st, int startIndex, SQLXML value) + throws SQLException { + st.setSQLXML(startIndex, value); + + } + +} diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/XMLAsStringType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/XMLAsStringType.java new file mode 100644 index 0000000000..cc6fc536bb --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/XMLAsStringType.java @@ -0,0 +1,54 @@ +/* + * Copyright 2014, Timo Westkämper + * + * 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 com.mysema.query.sql.types; + +import java.sql.*; + +/** + * SQLXMLType maps String to SQLXML on the JDBC level + * + * @author tiwe + * + */ +public class XMLAsStringType extends AbstractType { + + public XMLAsStringType() { + super(Types.SQLXML); + } + + public XMLAsStringType(int type) { + super(type); + } + + @Override + public String getValue(ResultSet rs, int startIndex) throws SQLException { + SQLXML value = rs.getSQLXML(startIndex); + return value != null ? value.getString() : null; + } + + @Override + public Class getReturnedClass() { + return String.class; + } + + @Override + public void setValue(PreparedStatement st, int startIndex, String value) + throws SQLException { + SQLXML xml = st.getConnection().createSQLXML(); + xml.setString(value); + st.setSQLXML(startIndex, xml); + + } + +} From d4f7a5d851747a1a07c28e80493d11422e3ef777 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 6 Nov 2014 22:38:44 +0100 Subject: [PATCH 0547/1968] Exclude `In_Long_List()` for MSSQL Server The jTDS Driver puts a limit of 2000 parameter markers on the generated SQL --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 90fb9f715d..df9fb20dde 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -624,7 +624,7 @@ public void In() { } @Test - @ExcludeIn({DERBY, FIREBIRD, SQLITE}) + @ExcludeIn({DERBY, FIREBIRD, SQLITE, SQLSERVER}) public void In_Long_List() { List ids = Lists.newArrayList(); for (int i = 0; i < 20000; i++) { @@ -636,7 +636,7 @@ public void In_Long_List() { } @Test - @ExcludeIn({DERBY, FIREBIRD, SQLITE}) + @ExcludeIn({DERBY, FIREBIRD, SQLITE, SQLSERVER}) public void NotIn_Long_List() { List ids = Lists.newArrayList(); for (int i = 0; i < 20000; i++) { From 3b90c09574b4a604b6d724a901fd12c3dc7372f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 8 Nov 2014 22:39:13 +0200 Subject: [PATCH 0548/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql-spring/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index e9a4341d49..2e1d0c6719 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index e6bcf158e4..2c33c9e920 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index cecd14b87d..ffd72e92b7 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 010b6bb7e8..e27e4f0912 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index f013abe4f8..56fe6322e1 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index f781ab9a2c..f97fd6aa6f 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index c6da1faa8e..d65f0d7fbd 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index d91609a4ca..bb33c021ac 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 8e248e586e..c929a04c01 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 6af6e683bb..da3abb5b34 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 7a6b7662e1..4eab4f7f14 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index 961efa3047..e045408a8e 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index d27628a064..c1df71f091 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index a002b56aff..855b4978a8 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index cb9c066fe7..5005fcbf93 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 3577398aaf..795eef1351 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index 12a68b73ce..7900111e79 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 30ba340171..5f2d46e863 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.5.2.BUILD-SNAPSHOT + 3.6.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml From 661d0c8564a5c70dba93eb49909801da739f27a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 9 Nov 2014 00:16:54 +0200 Subject: [PATCH 0549/1968] Add tests --- .../com/mysema/query/AbstractBaseTest.java | 17 ++++--- .../java/com/mysema/query/Connections.java | 50 ++++++++++++++++++ .../java/com/mysema/query/InsertBase.java | 11 +++- .../com/mysema/query/sql/domain/QXmlTest.java | 51 +++++++++++++++++++ 4 files changed, 121 insertions(+), 8 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index d60a2dd9ed..cea0b17438 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -13,12 +13,11 @@ */ package com.mysema.query; -import java.util.List; - import javax.annotation.Nullable; - import java.sql.Connection; +import java.util.List; +import com.mysema.query.dml.DMLClause; import com.mysema.query.sql.*; import com.mysema.query.sql.dml.SQLDeleteClause; import com.mysema.query.sql.dml.SQLInsertClause; @@ -26,16 +25,13 @@ import com.mysema.query.sql.dml.SQLUpdateClause; import com.mysema.query.sql.mysql.MySQLReplaceClause; import com.mysema.query.sql.teradata.TeradataQuery; - +import com.mysema.query.sql.types.XMLAsStringType; import org.junit.Rule; import org.junit.rules.MethodRule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import static org.junit.Assert.assertEquals; -import com.mysema.query.dml.DMLClause; - public abstract class AbstractBaseTest { protected static final Logger logger = LoggerFactory.getLogger(AbstractBaseTest.class); @@ -81,6 +77,13 @@ public TestQuery clone(Connection conn) { @Nullable protected String expectedQuery; + public AbstractBaseTest() { + // TODO enable registration of (jdbc type, java type) -> usertype mappings + if (target == Target.POSTGRES || target == Target.ORACLE) { + configuration.register("xml_test", "col", new XMLAsStringType()); + } + } + @Rule public static MethodRule skipForQuotedRule = new SkipForQuotedRule(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 816fd35e3f..f336ea5972 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -286,6 +286,11 @@ public static void initCubrid() throws SQLException, ClassNotFoundException{ stmt.execute("drop table if exists DATE_TEST"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + stmt.execute("drop table if exists XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + cubridInited = true; } @@ -341,6 +346,11 @@ public static void initDerby() throws SQLException, ClassNotFoundException { dropTable(templates, "DATE_TEST"); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + derbyInited = true; } @@ -450,6 +460,11 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ dropTable(templates, "DATE_TEST"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + firebirdInited = true; } @@ -517,6 +532,11 @@ public static void initH2() throws SQLException, ClassNotFoundException{ stmt.execute("drop table DATE_TEST if exists"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + h2Inited = true; } @@ -578,6 +598,11 @@ public static void initHSQL() throws SQLException, ClassNotFoundException{ stmt.execute("drop table DATE_TEST if exists"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + hsqlInited = true; } @@ -643,6 +668,11 @@ public static void initMySQL() throws SQLException, ClassNotFoundException{ stmt.execute("drop table if exists DATE_TEST"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + stmt.execute("drop table if exists XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + mysqlInited = true; } @@ -716,6 +746,11 @@ public static void initOracle() throws SQLException, ClassNotFoundException{ // date_test and time_test dropTable(templates, "DATE_TEST"); stmt.execute("create table date_test(date_test date)"); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(col XMLTYPE)"); + oracleInited = true; } @@ -803,6 +838,11 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ dropTable(templates, "DATE_TEST"); stmt.execute(quote(CREATE_TABLE_TIMETEST, "TIME_TEST")); stmt.execute(quote(CREATE_TABLE_DATETEST, "DATE_TEST")); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table \"XML_TEST\"(\"col\" XML)"); + postgresInited = true; } @@ -865,6 +905,11 @@ public static void initSQLite() throws SQLException, ClassNotFoundException{ stmt.execute("drop table if exists DATE_TEST"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + stmt.execute("drop table if exists XML_TEST"); + stmt.execute("create table XML_TEST(col varchar(128))"); + sqliteInited = true; } @@ -916,6 +961,11 @@ public static void initSQLServer() throws SQLException, ClassNotFoundException { dropTable(templates, "DATE_TEST"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(col XML)"); + sqlServerInited = true; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index 63cd931c5b..b1785a2d6c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -50,7 +50,7 @@ private void reset() throws SQLException{ } @Before - public void setUp() throws SQLException{ + public void setUp() throws SQLException { reset(); } @@ -430,4 +430,13 @@ public void Uuids() { assertEquals(uuid, query().from(uuids).singleResult(uuids.field)); } + @Test + public void XML() { + delete(QXmlTest.xmlTest).execute(); + QXmlTest xmlTest = QXmlTest.xmlTest; + String contents = ""; + insert(xmlTest).set(xmlTest.col, contents).execute(); + assertEquals(contents, query().from(xmlTest).singleResult(xmlTest.col)); + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java new file mode 100644 index 0000000000..35c8f45b9c --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java @@ -0,0 +1,51 @@ +package com.mysema.query.sql.domain; + +import javax.annotation.Generated; +import java.sql.Types; + +import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.sql.spatial.RelationalPathSpatial; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.StringPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; + + + +/** + * QXmlTest is a Querydsl query type for QXmlTest + */ +@Generated("com.mysema.query.sql.codegen.MetaDataSerializer") +public class QXmlTest extends RelationalPathSpatial { + + private static final long serialVersionUID = 574759316; + + public static final QXmlTest xmlTest = new QXmlTest("xml_test"); + + public final StringPath col = createString("col"); + + public QXmlTest(String variable) { + super(QXmlTest.class, forVariable(variable), "public", "xml_test"); + addMetadata(); + } + + public QXmlTest(String variable, String schema, String table) { + super(QXmlTest.class, forVariable(variable), schema, table); + addMetadata(); + } + + public QXmlTest(Path path) { + super(path.getType(), path.getMetadata(), "public", "xml_test"); + addMetadata(); + } + + public QXmlTest(PathMetadata metadata) { + super(QXmlTest.class, metadata, "public", "xml_test"); + addMetadata(); + } + + public void addMetadata() { + addMetadata(col, ColumnMetadata.named("col").withIndex(1).ofType(Types.SQLXML).withSize(2147483647)); + } + +} From 5f057a4e71990d60392e56aa07c9efa800b3fab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 9 Nov 2014 12:10:52 +0200 Subject: [PATCH 0550/1968] Improve tests --- .../com/mysema/query/AbstractBaseTest.java | 2 +- .../java/com/mysema/query/Connections.java | 25 +++++++++++-------- .../com/mysema/query/sql/domain/QXmlTest.java | 12 ++++----- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index cea0b17438..82e3abf3c1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -80,7 +80,7 @@ public TestQuery clone(Connection conn) { public AbstractBaseTest() { // TODO enable registration of (jdbc type, java type) -> usertype mappings if (target == Target.POSTGRES || target == Target.ORACLE) { - configuration.register("xml_test", "col", new XMLAsStringType()); + configuration.register("XML_TEST", "COL", new XMLAsStringType()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index f336ea5972..29b7b4c7cd 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -289,7 +289,7 @@ public static void initCubrid() throws SQLException, ClassNotFoundException{ // xml stmt.execute("drop table if exists XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); cubridInited = true; } @@ -349,7 +349,7 @@ public static void initDerby() throws SQLException, ClassNotFoundException { // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); derbyInited = true; } @@ -463,7 +463,7 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); firebirdInited = true; } @@ -535,7 +535,7 @@ public static void initH2() throws SQLException, ClassNotFoundException{ // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); h2Inited = true; } @@ -601,7 +601,7 @@ public static void initHSQL() throws SQLException, ClassNotFoundException{ // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); hsqlInited = true; } @@ -671,7 +671,7 @@ public static void initMySQL() throws SQLException, ClassNotFoundException{ // xml stmt.execute("drop table if exists XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); mysqlInited = true; } @@ -749,7 +749,7 @@ public static void initOracle() throws SQLException, ClassNotFoundException{ // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table XML_TEST(col XMLTYPE)"); + stmt.execute("create table XML_TEST(COL XMLTYPE)"); oracleInited = true; } @@ -841,7 +841,7 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table \"XML_TEST\"(\"col\" XML)"); + stmt.execute("create table \"XML_TEST\"(\"COL\" XML)"); postgresInited = true; } @@ -908,7 +908,7 @@ public static void initSQLite() throws SQLException, ClassNotFoundException{ // xml stmt.execute("drop table if exists XML_TEST"); - stmt.execute("create table XML_TEST(col varchar(128))"); + stmt.execute("create table XML_TEST(COL varchar(128))"); sqliteInited = true; } @@ -964,7 +964,7 @@ public static void initSQLServer() throws SQLException, ClassNotFoundException { // xml dropTable(templates, "XML_TEST"); - stmt.execute("create table XML_TEST(col XML)"); + stmt.execute("create table XML_TEST(COL XML)"); sqlServerInited = true; } @@ -1032,6 +1032,11 @@ public static void initTeradata() throws SQLException, ClassNotFoundException{ dropTable(templates, "DATE_TEST"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(COL varchar(128))"); + teradataInited = true; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java index 35c8f45b9c..27bbf3cd0a 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QXmlTest.java @@ -20,12 +20,12 @@ public class QXmlTest extends RelationalPathSpatial { private static final long serialVersionUID = 574759316; - public static final QXmlTest xmlTest = new QXmlTest("xml_test"); + public static final QXmlTest xmlTest = new QXmlTest("XML_TEST"); - public final StringPath col = createString("col"); + public final StringPath col = createString("COL"); public QXmlTest(String variable) { - super(QXmlTest.class, forVariable(variable), "public", "xml_test"); + super(QXmlTest.class, forVariable(variable), "PUBLIC", "XML_TEST"); addMetadata(); } @@ -35,17 +35,17 @@ public QXmlTest(String variable, String schema, String table) { } public QXmlTest(Path path) { - super(path.getType(), path.getMetadata(), "public", "xml_test"); + super(path.getType(), path.getMetadata(), "PUBLIC", "XML_TEST"); addMetadata(); } public QXmlTest(PathMetadata metadata) { - super(QXmlTest.class, metadata, "public", "xml_test"); + super(QXmlTest.class, metadata, "PUBLIC", "XML_TEST"); addMetadata(); } public void addMetadata() { - addMetadata(col, ColumnMetadata.named("col").withIndex(1).ofType(Types.SQLXML).withSize(2147483647)); + addMetadata(col, ColumnMetadata.named("COL").withIndex(1).ofType(Types.SQLXML).withSize(2147483647)); } } From 397cafe793a686f1e7904c20171ec9da0e5780f1 Mon Sep 17 00:00:00 2001 From: ddonciu Date: Sat, 15 Nov 2014 14:19:33 +0000 Subject: [PATCH 0551/1968] changed the NumberExpression.cast(Number number) method to check that the number param is an instance of type or one of its children --- .../main/java/com/mysema/query/types/expr/NumberExpression.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java index 3c7e88eb4e..720bc8cd3f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java @@ -151,7 +151,7 @@ public NumberExpression byteValue() { @SuppressWarnings("unchecked") private T cast(Number number) { Class type = (Class) getType(); - if (type.equals(number.getClass())) { + if (type.isAssignableFrom(number.getClass())) { return (T) number; } else if (Byte.class.equals(type)) { return (T) Byte.valueOf(number.byteValue()); From d80cb18b7f6585fa1922df00173b75c1cd8d2939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 15 Nov 2014 21:06:34 +0200 Subject: [PATCH 0552/1968] Upgrade apt-maven-plugin version in docs --- querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml | 2 +- querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml | 2 +- .../src/main/docbook/en-US/content/tutorials/mongodb.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml | 2 +- .../src/main/docbook/ko-KR/content/tutorials/mongodb.xml | 2 +- querydsl-jdo/README.md | 2 +- querydsl-jpa/README.md | 2 +- querydsl-mongodb/README.md | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml index 50b98dd6a2..5dae11a684 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml @@ -53,7 +53,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml index 6a9c1c8abb..fabea82458 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml @@ -57,7 +57,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml index aa6444c823..12fc20783f 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml @@ -47,7 +47,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml index 459b0cf7fa..e8b6a4d6bb 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml @@ -49,7 +49,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml index acb2a5efc4..01d8bc4190 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml @@ -55,7 +55,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml index 718595b01a..2ea49bac8e 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml @@ -46,7 +46,7 @@ com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-jdo/README.md b/querydsl-jdo/README.md index ffa0e772a0..020f87dd8d 100644 --- a/querydsl-jdo/README.md +++ b/querydsl-jdo/README.md @@ -35,7 +35,7 @@ And now, configure the Maven APT plugin which generates the query types used by com.mysema.maven apt-maven-plugin - 1.0.6 + 1.1.2 diff --git a/querydsl-jpa/README.md b/querydsl-jpa/README.md index c4c1db3702..e459ee5bd0 100644 --- a/querydsl-jpa/README.md +++ b/querydsl-jpa/README.md @@ -35,7 +35,7 @@ And now, configure the Maven APT plugin : com.mysema.maven apt-maven-plugin - 1.0.6 + 1.1.2 diff --git a/querydsl-mongodb/README.md b/querydsl-mongodb/README.md index e23fd2b23a..4222879132 100644 --- a/querydsl-mongodb/README.md +++ b/querydsl-mongodb/README.md @@ -28,7 +28,7 @@ And now, configure the Maven APT plugin which generates the query types used by com.mysema.maven apt-maven-plugin - 1.0.6 + 1.1.2 From 9a8500ce42b1c9c492a6e6fcdc5f29d38f15407f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 15 Nov 2014 21:32:10 +0200 Subject: [PATCH 0553/1968] Upgrade apt-maven-plugin version in docs --- querydsl-collections/README.md | 2 +- .../src/main/docbook/en-US/content/general/codegen.xml | 4 ++-- .../src/main/docbook/en-US/content/tutorials/collections.xml | 2 +- .../src/main/docbook/ko-KR/content/general/codegen.xml | 4 ++-- .../src/main/docbook/ko-KR/content/tutorials/collections.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/querydsl-collections/README.md b/querydsl-collections/README.md index b6247e6c73..11c2a63117 100644 --- a/querydsl-collections/README.md +++ b/querydsl-collections/README.md @@ -35,7 +35,7 @@ If you are not using JPA or JDO you can generate Querydsl query types for your d com.mysema.maven apt-maven-plugin - 1.0.6 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml b/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml index 1b7818e6a7..d375b29ca8 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml @@ -212,7 +212,7 @@ import com.mysema.query.annotations.Config; com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 @@ -397,7 +397,7 @@ public class QTimestamp extends DateTimePath { com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml index 500b2d4056..41523001e5 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml @@ -173,7 +173,7 @@ for (String name : from(cat,cats) com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml index 467fc00a20..e6a40ee6f6 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml @@ -204,7 +204,7 @@ import com.mysema.query.annotations.Config; com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 @@ -384,7 +384,7 @@ public class QTimestamp extends DateTimePath { com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml index db6e7057f2..8c4f5f4540 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml @@ -159,7 +159,7 @@ for (String name : from(cat,cats) com.mysema.maven apt-maven-plugin - 1.0.9 + 1.1.2 From 2921123f6198120a315cdc1fe6f8ff918ba6118c Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 16 Nov 2014 23:17:27 +0100 Subject: [PATCH 0554/1968] Refactor APT AbstractTest to enable expression type checking --- .../com/mysema/query/domain/AbstractTest.java | 26 ++++++++++++++++--- .../com/mysema/query/domain/BlockingTest.java | 11 +++----- .../query/domain/InterfaceTypeTest.java | 8 +++--- .../java/com/mysema/query/domain/JDOTest.java | 4 +-- .../java/com/mysema/query/domain/JPATest.java | 2 +- .../query/domain/JodaTimeSupportTest.java | 2 +- .../mysema/query/domain/QueryTypeTest.java | 3 ++- .../com/mysema/query/domain/RelationTest.java | 2 +- .../mysema/query/domain/SimpleTypesTest.java | 20 +++++++------- .../query/inheritance/Inheritance3Test.java | 20 +++++++------- .../query/inheritance/Inheritance4Test.java | 11 +++++--- 11 files changed, 67 insertions(+), 42 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/AbstractTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/AbstractTest.java index d3aefdbc86..cdca701f9f 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/AbstractTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/AbstractTest.java @@ -14,20 +14,40 @@ package com.mysema.query.domain; import static org.junit.Assert.*; -import junit.framework.Assert; public abstract class AbstractTest { - public Class cl; + private Class cl; + + private com.mysema.query.types.Expression standardVariable; + + protected > void start(Class cl, T standardVariable) { + this.cl = cl; + this.standardVariable = standardVariable; + + } protected void match(Class expectedType, String name) throws SecurityException, NoSuchFieldException { assertTrue(cl.getSimpleName()+"."+name + " failed", expectedType.isAssignableFrom(cl.getField(name).getType())); } + protected void matchType(Class expectedType, String name) throws NoSuchFieldException, IllegalAccessException { + Class type = ((com.mysema.query.types.Expression)cl.getField(name).get(standardVariable)).getType(); + assertTrue(cl.getSimpleName()+"."+name + " failed", expectedType.isAssignableFrom(type)); + } + + protected void assertPresent(String name) { + try { + cl.getField(name); + } catch (NoSuchFieldException e) { + fail("Expected present field : " + cl.getSimpleName() + "." + name); + } + } + protected void assertMissing(String name) { try { cl.getField(name); - Assert.fail("Expected missing field : " + cl.getSimpleName() + "." + name); + fail("Expected missing field : " + cl.getSimpleName() + "." + name); } catch (NoSuchFieldException e) { // expected } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/BlockingTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/BlockingTest.java index ddf8958f11..31ec95885c 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/BlockingTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/BlockingTest.java @@ -13,15 +13,13 @@ */ package com.mysema.query.domain; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - import com.mysema.query.annotations.PropertyType; import com.mysema.query.annotations.QueryEntity; import com.mysema.query.annotations.QueryTransient; import com.mysema.query.annotations.QueryType; +import org.junit.Test; + public class BlockingTest extends AbstractTest { @QueryEntity @@ -50,9 +48,8 @@ public static abstract class Entity2 { @Test public void Entity_Fields_are_available() { - assertTrue(QBlockingTest_Entity.entity.field1 != null); - - cl = QBlockingTest_Entity.class; + start(QBlockingTest_Entity.class, QBlockingTest_Entity.entity); + assertPresent("field1"); assertMissing("blockedField"); } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/InterfaceTypeTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/InterfaceTypeTest.java index 5f8581d3ef..91f3736bf2 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/InterfaceTypeTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/InterfaceTypeTest.java @@ -66,25 +66,25 @@ public interface InterfaceType5 extends InterfaceType3, InterfaceType4 { @Test public void QInterfaceType_relation() throws SecurityException, NoSuchFieldException { - cl = QInterfaceTypeTest_InterfaceType.class; + start(QInterfaceTypeTest_InterfaceType.class, QInterfaceTypeTest_InterfaceType.interfaceType); match(QInterfaceTypeTest_InterfaceType.class, "relation"); } @Test public void QInterfaceType_relation2() throws SecurityException, NoSuchFieldException { - cl = QInterfaceTypeTest_InterfaceType.class; + start(QInterfaceTypeTest_InterfaceType.class, QInterfaceTypeTest_InterfaceType.interfaceType); match(ListPath.class, "relation2"); } @Test public void QInterfaceType_relation3() throws SecurityException, NoSuchFieldException { - cl = QInterfaceTypeTest_InterfaceType.class; + start(QInterfaceTypeTest_InterfaceType.class, QInterfaceTypeTest_InterfaceType.interfaceType); match(ListPath.class, "relation3"); } @Test public void QInterfaceType_relation4() throws SecurityException, NoSuchFieldException { - cl = QInterfaceTypeTest_InterfaceType.class; + start(QInterfaceTypeTest_InterfaceType.class, QInterfaceTypeTest_InterfaceType.interfaceType); match(NumberPath.class, "relation4"); } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java index c74a9b3f2a..2dbde0690a 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java @@ -49,12 +49,12 @@ public String getStringField2() { @Test public void test() throws SecurityException, NoSuchFieldException { - cl = QJDOTest_JDOEntity.class; + start(QJDOTest_JDOEntity.class, QJDOTest_JDOEntity.jDOEntity); match(StringPath.class, "prop"); assertMissing("skipped"); assertMissing("skippedEntity"); - cl = QJDOTest_JDOEntity2.class; + start(QJDOTest_JDOEntity2.class, QJDOTest_JDOEntity2.jDOEntity2); match(StringPath.class, "stringField1"); match(StringPath.class, "stringField2"); } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JPATest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JPATest.java index a744b37389..f4c891f7bc 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JPATest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JPATest.java @@ -37,7 +37,7 @@ public static class JPAEntity { @Test public void test() throws SecurityException, NoSuchFieldException { - cl = QJPATest_JPAEntity.class; + start(QJPATest_JPAEntity.class, QJPATest_JPAEntity.jPAEntity); match(StringPath.class, "prop"); assertMissing("skipped"); assertMissing("skippedEntity"); diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java index 02e1af7691..0362086e22 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java @@ -51,7 +51,7 @@ public static class JodaTimeSupport { @Test public void test() throws SecurityException, NoSuchFieldException { - cl = QJodaTimeSupportTest_JodaTimeSupport.class; + start(QJodaTimeSupportTest_JodaTimeSupport.class, QJodaTimeSupportTest_JodaTimeSupport.jodaTimeSupport); match(DateTimePath.class, "dateMidnight"); match(DateTimePath.class, "dateTime"); match(DateTimePath.class, "instant"); diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/QueryTypeTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/QueryTypeTest.java index 162f8e4bc6..a0de2e55a2 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/QueryTypeTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/QueryTypeTest.java @@ -50,11 +50,12 @@ public static class QueryTypeEntity { @Test public void test() throws SecurityException, NoSuchFieldException{ - cl = QQueryTypeTest_QueryTypeEntity.class; + start(QQueryTypeTest_QueryTypeEntity.class, QQueryTypeTest_QueryTypeEntity.queryTypeEntity); match(SimplePath.class, "stringAsSimple"); match(ComparablePath.class, "stringAsComparable"); match(DatePath.class, "stringAsDate"); match(DateTimePath.class, "stringAsDateTime"); match(TimePath.class, "stringAsTime"); + assertMissing("stringNotInQuerydsl"); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/RelationTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/RelationTest.java index 2b620a8ae0..ccc40ed506 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/RelationTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/RelationTest.java @@ -115,7 +115,7 @@ public static class RelationType { @Test public void test() throws SecurityException, NoSuchFieldException { - cl = QRelationTest_RelationType.class; + start(QRelationTest_RelationType.class, QRelationTest_RelationType.relationType); match(EnumPath.class, "enumProperty"); match(ListPath.class, "enumList"); match(MapPath.class, "enumMap1"); diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java index e4faa94e3b..38e7bc0345 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java @@ -264,7 +264,7 @@ public void List_Access() { @Test public void Simple_Types() throws SecurityException, NoSuchFieldException { - cl = QSimpleTypesTest_SimpleTypes.class; + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(NumberPath.class, "id"); match(NumberPath.class, "bigDecimal"); match(NumberPath.class, "bigInteger"); @@ -304,36 +304,38 @@ public void Simple_Types() throws SecurityException, NoSuchFieldException { @Test public void Custom_Literal() throws SecurityException, NoSuchFieldException { - cl = QSimpleTypesTest_SimpleTypes.class; + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(SimplePath.class, "customLiteral"); } @Test public void Custom_ComparableLiteral() throws SecurityException, NoSuchFieldException { - cl = QSimpleTypesTest_SimpleTypes.class; + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(ComparablePath.class, "customComparableLiteral"); } @Test public void Custom_Number() throws SecurityException, NoSuchFieldException { - cl = QSimpleTypesTest_SimpleTypes.class; + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(SimplePath.class, "customNumber"); } @Test public void Custom_ComparableNumber() throws SecurityException, NoSuchFieldException { - cl = QSimpleTypesTest_SimpleTypes.class; + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(NumberPath.class, "customComparableNumber"); } - @Test(expected=NoSuchFieldException.class) + @Test public void Skipped_Field1() throws SecurityException, NoSuchFieldException { - QSimpleTypesTest_SimpleTypes.class.getField("skipMe"); + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); + assertMissing("skipMe"); } - @Test(expected=NoSuchFieldException.class) + @Test public void Skipped_Field2() throws SecurityException, NoSuchFieldException { - QSimpleTypesTest_SimpleTypes.class.getField("test"); + start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); + assertMissing("test"); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance3Test.java b/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance3Test.java index aa8c35fd1d..f37dc4b7e7 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance3Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance3Test.java @@ -59,26 +59,28 @@ public class GenericSupertypeS2 extends GenericSupertype{ } @Test - public void GenericSupertype() throws SecurityException, NoSuchFieldException { - cl = QInheritance3Test_GenericSupertype.class; + public void GenericSupertype() throws IllegalAccessException, NoSuchFieldException { + start(QInheritance3Test_GenericSupertype.class, QInheritance3Test_GenericSupertype.genericSupertype); match(SimplePath.class, "field"); + matchType(Object.class, "field"); } @Test - public void GenericSupertypeC() throws SecurityException, NoSuchFieldException { - cl = QInheritance3Test_GenericSupertypeC.class; - match(SimplePath.class, "field"); + public void GenericSupertypeC() throws IllegalAccessException, NoSuchFieldException { + start(QInheritance3Test_GenericSupertypeC.class, QInheritance3Test_GenericSupertypeC.genericSupertypeC); + match(SimplePath.class, "field"); + matchType(Comparable.class, "field"); } @Test - public void GenericSupertypeS() throws SecurityException, NoSuchFieldException { - cl = QInheritance3Test_GenericSupertypeS.class; + public void GenericSupertypeS() throws IllegalAccessException, NoSuchFieldException { + start(QInheritance3Test_GenericSupertypeS.class, QInheritance3Test_GenericSupertypeS.genericSupertypeS); match(StringPath.class, "field"); } @Test - public void GenericSupertypeS2() throws SecurityException, NoSuchFieldException { - cl = QInheritance3Test_GenericSupertypeS2.class; + public void GenericSupertypeS2() throws IllegalAccessException, NoSuchFieldException { + start(QInheritance3Test_GenericSupertypeS2.class, QInheritance3Test_GenericSupertypeS2.genericSupertypeS2); match(StringPath.class, "field"); } diff --git a/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance4Test.java b/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance4Test.java index f16cdc65c6..6462c64c6c 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance4Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/inheritance/Inheritance4Test.java @@ -54,15 +54,18 @@ public String getField() { } @Test - public void test() throws SecurityException, NoSuchFieldException{ - cl = QInheritance4Test_EntityWithComparable.class; + public void test() throws IllegalAccessException, NoSuchFieldException{ + start(QInheritance4Test_EntityWithComparable.class, QInheritance4Test_EntityWithComparable.entityWithComparable); match(SimplePath.class, "field"); + matchType(Comparable.class, "field"); - cl = QInheritance4Test_EntityWithNumber.class; + start(QInheritance4Test_EntityWithNumber.class, QInheritance4Test_EntityWithNumber.entityWithNumber); match(NumberPath.class, "field"); + matchType(Long.class, "field"); - cl = QInheritance4Test_EntityWithString.class; + start(QInheritance4Test_EntityWithString.class, QInheritance4Test_EntityWithString.entityWithString); match(StringPath.class, "field"); + matchType(String.class, "field"); } } From 423d0b02ee04b39d7feb05b25e3baafec4dbbfbb Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 16 Nov 2014 23:30:21 +0100 Subject: [PATCH 0555/1968] Enrich the JodaTimeSupportTest with expression type checking --- .../com/mysema/query/domain/JodaTimeSupportTest.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java index 0362086e22..d0a87e0864 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JodaTimeSupportTest.java @@ -50,14 +50,21 @@ public static class JodaTimeSupport { } @Test - public void test() throws SecurityException, NoSuchFieldException { + public void test() throws IllegalAccessException, NoSuchFieldException { start(QJodaTimeSupportTest_JodaTimeSupport.class, QJodaTimeSupportTest_JodaTimeSupport.jodaTimeSupport); match(DateTimePath.class, "dateMidnight"); + matchType(DateMidnight.class, "dateMidnight"); match(DateTimePath.class, "dateTime"); + matchType(DateTime.class, "dateTime"); match(DateTimePath.class, "instant"); + matchType(Instant.class, "instant"); match(DatePath.class, "localDate"); + matchType(LocalDate.class, "localDate"); match(DateTimePath.class, "localDateTime"); + matchType(LocalDateTime.class, "localDateTime"); match(TimePath.class, "localTime"); + matchType(LocalTime.class, "localTime"); match(ComparablePath.class, "partial"); + matchType(Partial.class, "partial"); } } From 6322c643c4aac833f008151799469b6d2f72fb20 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 17 Nov 2014 10:14:41 +0100 Subject: [PATCH 0556/1968] Enrich the SimpleTypesTest with expression type checking --- .../mysema/query/domain/SimpleTypesTest.java | 44 ++++++++++++++++--- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java index 38e7bc0345..4781fd8ff1 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/SimpleTypesTest.java @@ -16,6 +16,8 @@ import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; +import java.sql.Blob; +import java.sql.Clob; import java.sql.Time; import java.util.Calendar; import java.util.Date; @@ -263,77 +265,105 @@ public void List_Access() { } @Test - public void Simple_Types() throws SecurityException, NoSuchFieldException { + public void Simple_Types() throws IllegalAccessException, NoSuchFieldException { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(NumberPath.class, "id"); + matchType(Long.class, "id"); match(NumberPath.class, "bigDecimal"); + matchType(BigDecimal.class, "bigDecimal"); match(NumberPath.class, "bigInteger"); + matchType(BigInteger.class, "bigInteger"); // match(PNumber.class, "bbyte"); match(NumberPath.class, "bbyte2"); + matchType(Byte.class, "bbyte"); match(NumberPath.class, "ddouble"); + matchType(Double.class, "ddouble"); match(NumberPath.class, "ddouble2"); + matchType(Double.class, "ddouble2"); match(NumberPath.class, "ffloat"); + matchType(Float.class, "ffloat"); match(NumberPath.class, "ffloat2"); + matchType(Float.class, "ffloat2"); // match(PNumber.class, "iint"); match(NumberPath.class, "iint2"); + matchType(Integer.class, "iint2"); match(NumberPath.class, "llong"); + matchType(Long.class, "llong"); match(NumberPath.class, "llong2"); + matchType(Long.class, "llong2"); match(ComparablePath.class, "cchar"); + matchType(Character.class, "cchar"); match(ComparablePath.class, "cchar2"); + matchType(Character.class, "cchar2"); match(StringPath.class, "sstring"); match(DateTimePath.class, "date"); + matchType(Date.class, "date"); match(DateTimePath.class, "calendar"); + matchType(Calendar.class, "calendar"); // match(PDateTime.class, "timestamp"); match(TimePath.class, "time"); + matchType(Time.class, "time"); match(SimplePath.class, "llocale"); + matchType(Locale.class, "llocale"); match(SimplePath.class, "serializable"); + matchType(Serializable.class, "serializable"); match(SimplePath.class, "object"); + matchType(Object.class, "object"); match(SimplePath.class, "clazz"); + matchType(Class.class, "clazz"); match(SimplePath.class, "packageAsLiteral"); + matchType(Package.class, "packageAsLiteral"); match(SimplePath.class, "clob"); + matchType(Clob.class, "clob"); match(SimplePath.class, "blob"); + matchType(Blob.class, "blob"); match(EnumPath.class, "myEnum"); + matchType(MyEnum.class, "myEnum"); } @Test - public void Custom_Literal() throws SecurityException, NoSuchFieldException { + public void Custom_Literal() throws IllegalAccessException, NoSuchFieldException { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(SimplePath.class, "customLiteral"); + matchType(CustomLiteral.class, "customLiteral"); } @Test - public void Custom_ComparableLiteral() throws SecurityException, NoSuchFieldException { + public void Custom_ComparableLiteral() throws IllegalAccessException, NoSuchFieldException { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(ComparablePath.class, "customComparableLiteral"); + matchType(CustomComparableLiteral.class, "customComparableLiteral"); } @Test - public void Custom_Number() throws SecurityException, NoSuchFieldException { + public void Custom_Number() throws IllegalAccessException, NoSuchFieldException { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(SimplePath.class, "customNumber"); + matchType(CustomNumber.class, "customNumber"); } @Test - public void Custom_ComparableNumber() throws SecurityException, NoSuchFieldException { + public void Custom_ComparableNumber() throws IllegalAccessException, NoSuchFieldException { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); match(NumberPath.class, "customComparableNumber"); + matchType(CustomComparableNumber.class, "customComparableNumber"); } @Test - public void Skipped_Field1() throws SecurityException, NoSuchFieldException { + public void Skipped_Field1() { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); assertMissing("skipMe"); } @Test - public void Skipped_Field2() throws SecurityException, NoSuchFieldException { + public void Skipped_Field2() { start(QSimpleTypesTest_SimpleTypes.class, QSimpleTypesTest_SimpleTypes.simpleTypes); assertMissing("test"); } From ee803a7932e66f33e6dbe08fd305c2cf939e3555 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 17 Nov 2014 10:27:44 +0100 Subject: [PATCH 0557/1968] Add Generic*Test test content --- .../mysema/query/domain/Generic10Test.java | 32 +++++++++++++------ .../mysema/query/domain/Generic13Test.java | 20 +++++++++--- .../mysema/query/domain/Generic14Test.java | 20 +++++++----- .../mysema/query/domain/Generic15Test.java | 11 ++++--- .../mysema/query/domain/Generic16Test.java | 10 ++++-- .../com/mysema/query/domain/Generic2Test.java | 8 +++-- .../com/mysema/query/domain/Generic3Test.java | 10 ++++-- .../com/mysema/query/domain/GenericTest.java | 30 ++++++++++++++--- 8 files changed, 102 insertions(+), 39 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic10Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic10Test.java index ed9302b9c2..b365fc4435 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic10Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic10Test.java @@ -1,25 +1,25 @@ package com.mysema.query.domain; +import static org.junit.Assert.assertNotNull; + import javax.persistence.Entity; import javax.persistence.MappedSuperclass; import javax.persistence.OneToOne; -import org.junit.Ignore; +import org.junit.Test; + +public class Generic10Test extends AbstractTest { -@Ignore -public class Generic10Test { - public interface Tradable {} public interface Market {} - + @Entity public static class FutureTrade implements Tradable {} @MappedSuperclass - public static abstract class AbstractTradingMarket implements Market{ + public static abstract class AbstractTradingMarket implements Market { - // XXX @OneToOne private TradingMarketLedger> ledger; } @@ -27,11 +27,25 @@ public static abstract class AbstractTradingMarket implement @Entity public static abstract class AbstractFuturesMarket extends AbstractTradingMarket {} - // XXX @Entity public static class CommonFuturesMarket extends AbstractFuturesMarket {} @Entity public static class TradingMarketLedger> {} - + + @Test + public void test() { + assertNotNull(QGeneric10Test_FutureTrade.futureTrade); + + start(QGeneric10Test_AbstractTradingMarket.class, QGeneric10Test_AbstractTradingMarket.abstractTradingMarket); + assertPresent("ledger"); + + start(QGeneric10Test_AbstractFuturesMarket.class, QGeneric10Test_AbstractFuturesMarket.abstractFuturesMarket); + assertPresent("ledger"); + + start(QGeneric10Test_CommonFuturesMarket.class, QGeneric10Test_CommonFuturesMarket.commonFuturesMarket); + assertPresent("ledger"); + + start(QGeneric10Test_TradingMarketLedger.class, QGeneric10Test_TradingMarketLedger.tradingMarketLedger); + } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic13Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic13Test.java index 468d3dd4a1..ae6af404c9 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic13Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic13Test.java @@ -1,11 +1,10 @@ package com.mysema.query.domain; -import org.junit.Ignore; - import com.mysema.query.annotations.QueryEntity; -@Ignore -public class Generic13Test { +import org.junit.Test; + +public class Generic13Test extends AbstractTest { @QueryEntity public static class GenericBase { @@ -18,10 +17,21 @@ public static class GenericBaseSubclass

extends GenericBase { } @QueryEntity - public static class Subclass extends GenericBaseSubclass { + public static class Subclass extends GenericBaseSubclass { } public static class AnotherClass { } + @Test + public void test() throws IllegalAccessException, NoSuchFieldException { + start(QGeneric13Test_GenericBase.class, QGeneric13Test_GenericBase.genericBase); + matchType(AnotherClass.class, "t"); + + start(QGeneric13Test_GenericBaseSubclass.class, QGeneric13Test_GenericBaseSubclass.genericBaseSubclass); + matchType(Object.class, "p"); + + start(QGeneric13Test_Subclass.class, QGeneric13Test_Subclass.subclass); + matchType(Number.class, "p"); + } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java index 1ffa4f9968..2c30abc2cb 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic14Test.java @@ -1,7 +1,6 @@ package com.mysema.query.domain; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; import java.io.Serializable; @@ -10,7 +9,7 @@ import org.junit.Test; -public class Generic14Test { +public class Generic14Test extends AbstractTest { @Entity public static class UserAccount extends BaseReferencablePersistable { @@ -60,12 +59,17 @@ public interface UpdateInfo { } @Test - public void test() { - assertNotNull(QGeneric14Test_UserAccount.userAccount); - assertNotNull(QGeneric14Test_BaseReferencablePersistable.baseReferencablePersistable); - assertNotNull(QGeneric14Test_BasePersistable.basePersistable); + public void test() throws IllegalAccessException, NoSuchFieldException { assertNotNull(QGeneric14Test_AbstractPersistable.abstractPersistable); - assertTrue(QGeneric14Test_UserAccount.userAccount.id - .getType().isAssignableFrom(Long.class)); + + start(QGeneric14Test_BasePersistable.class, QGeneric14Test_BasePersistable.basePersistable); + matchType(Serializable.class, "id"); + + start(QGeneric14Test_BaseReferencablePersistable.class, QGeneric14Test_BaseReferencablePersistable.baseReferencablePersistable); + matchType(Class.class, "entityClass"); + matchType(Serializable.class, "id"); + + start(QGeneric14Test_UserAccount.class, QGeneric14Test_UserAccount.userAccount); + matchType(Long.class, "id"); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java index 5b2fd39aab..40cd389067 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic15Test.java @@ -2,13 +2,13 @@ import javax.persistence.Entity; import javax.persistence.MappedSuperclass; + import java.util.HashSet; import java.util.Set; import org.junit.Test; -import static org.junit.Assert.assertEquals; -public class Generic15Test { +public class Generic15Test extends AbstractTest { @MappedSuperclass public static abstract class Compound { @@ -33,8 +33,9 @@ public static class MyContainable extends Containable { } @Test - public void test() { - // QMyContainable - assertEquals(MyCompound.class, QGeneric15Test_MyContainable.myContainable.compound.getType()); + public void test() throws IllegalAccessException, NoSuchFieldException { + start(QGeneric15Test_MyContainable.class, QGeneric15Test_MyContainable.myContainable); + match(QGeneric15Test_MyCompound.class, "compound"); + matchType(MyCompound.class, "compound"); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java index 817a663343..045c438f62 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic16Test.java @@ -1,13 +1,17 @@ package com.mysema.query.domain; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import javax.persistence.Entity; import javax.persistence.MappedSuperclass; + import java.util.SortedSet; import java.util.TreeSet; import org.junit.Test; -public class Generic16Test { +public class Generic16Test extends AbstractTest { @Entity public static abstract class HidaBez, G extends HidaBezGruppe> extends CapiBCKeyedByGrundstueck { @@ -38,7 +42,9 @@ public interface ICapiBusinessClass extends Comparable { @Test public void test() { - + assertNotNull(QGeneric16Test_HidaBez.hidaBez); + assertNotNull(QGeneric4Test_HidaBezGruppe.hidaBezGruppe); + assertTrue(QGeneric16Test_HidaBezGruppe.hidaBezGruppe.bez.getElementType().equals(HidaBez.class)); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic2Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic2Test.java index 5271e7fb55..bd8ad1ba28 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic2Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic2Test.java @@ -8,7 +8,7 @@ import org.junit.Test; -public class Generic2Test { +public class Generic2Test extends AbstractTest { public static class Range> { private T min; @@ -52,8 +52,10 @@ public static class Foo extends BaseEntity { } @Test - public void test() { - + public void test() throws NoSuchFieldException { + start(QGeneric2Test_Foo.class, QGeneric2Test_Foo.foo); + assertPresent("range"); + match(QGeneric2Test_Range.class, "range"); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic3Test.java b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic3Test.java index a64c9b2287..f8dfe10e51 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/Generic3Test.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/Generic3Test.java @@ -3,9 +3,11 @@ import javax.persistence.Entity; import javax.persistence.MappedSuperclass; +import com.mysema.query.types.path.StringPath; + import org.junit.Test; -public class Generic3Test { +public class Generic3Test extends AbstractTest { @MappedSuperclass public static abstract class BaseEntity> { @@ -25,8 +27,10 @@ public static class MyOrder> extends Order { } @Test - public void test() { - + public void test() throws NoSuchFieldException { + start(QGeneric3Test_MyOrder.class, QGeneric3Test_MyOrder.myOrder); + match(StringPath.class, "property1"); + match(StringPath.class, "property2"); } } diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/GenericTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/GenericTest.java index 1f73665565..578867abaa 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/GenericTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/GenericTest.java @@ -13,17 +13,18 @@ */ package com.mysema.query.domain; -import java.util.Date; +import static org.junit.Assert.assertNotNull; -import org.junit.Ignore; +import java.util.Date; import com.mysema.query.annotations.QueryEntity; import com.mysema.query.annotations.QueryTransient; import com.mysema.query.domain.rel.SimpleType; import com.mysema.query.domain.rel.SimpleType2; -@Ignore -public class GenericTest { +import org.junit.Test; + +public class GenericTest extends AbstractTest { @QueryEntity public static class GenericType { @@ -118,4 +119,25 @@ public static class Amount{ } + @Test + public void test() throws NoSuchFieldException, IllegalAccessException { + assertNotNull(QGenericTest_ItemType.itemType); + assertNotNull(QGenericTest_GenericType.genericType); + assertNotNull(QGenericTest_GenericType2.genericType2); + + start(QGenericTest_GenericType.class, QGenericTest_GenericType.genericType); + matchType(ItemType.class, "itemType"); + + start(QGenericTest_GenericType2.class, QGenericTest_GenericType2.genericType2); + matchType(ItemType.class, "itemType"); + matchType(GenericSimpleType.class, "prop1"); + matchType(GenericSimpleType.class, "prop2"); + matchType(GenericSimpleType.class, "prop3"); + matchType(GenericComparableType.class, "comp1"); + matchType(GenericComparableType.class, "comp2"); + matchType(GenericComparableType.class, "comp3"); + assertMissing("num1"); + matchType(GenericNumberType.class, "num2"); + matchType(GenericNumberType.class, "num3"); + } } From fe2201387a33e4856bb009d575f74e1ee542f238 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 17 Nov 2014 14:29:02 +0100 Subject: [PATCH 0558/1968] Adjust JDOTest to use the new AbstractTest --- .../src/test/java/com/mysema/query/domain/JDOTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java index ddbd89709f..ec9911cab0 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/JDOTest.java @@ -72,7 +72,7 @@ public String getName() { } @Test - public void test() throws SecurityException, NoSuchFieldException { + public void test() throws IllegalAccessException, NoSuchFieldException { start(QJDOTest_JDOEntity.class, QJDOTest_JDOEntity.jDOEntity); match(StringPath.class, "prop"); assertMissing("skipped"); @@ -83,8 +83,9 @@ public void test() throws SecurityException, NoSuchFieldException { assertMissing("stringfield1"); match(StringPath.class, "stringField2"); - cl = QJDOTest_JDOEntity3.class; + start(QJDOTest_JDOEntity3.class, QJDOTest_JDOEntity3.jDOEntity3); match(NumberPath.class, "id"); + matchType(Integer.class, "id"); match(StringPath.class, "name"); } From c07a87a120592cd99a884f116af976e5c30fba7e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 17 Nov 2014 22:29:07 +0100 Subject: [PATCH 0559/1968] Merge NumberExpression.cast() and MathUtils.cast() --- .../query/types/expr/NumberExpression.java | 26 +------------------ .../main/java/com/mysema/util/MathUtils.java | 2 +- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java index 720bc8cd3f..2773280505 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java @@ -13,8 +13,6 @@ */ package com.mysema.query.types.expr; -import java.math.BigDecimal; -import java.math.BigInteger; import java.util.ArrayList; import java.util.List; @@ -148,30 +146,8 @@ public NumberExpression byteValue() { return castToNum(Byte.class); } - @SuppressWarnings("unchecked") private T cast(Number number) { - Class type = (Class) getType(); - if (type.isAssignableFrom(number.getClass())) { - return (T) number; - } else if (Byte.class.equals(type)) { - return (T) Byte.valueOf(number.byteValue()); - } else if (Double.class.equals(type)) { - return (T) Double.valueOf(number.doubleValue()); - } else if (Float.class.equals(type)) { - return (T) Float.valueOf(number.floatValue()); - } else if (Integer.class.equals(type)) { - return (T) Integer.valueOf(number.intValue()); - } else if (Long.class.equals(type)) { - return (T) Long.valueOf(number.longValue()); - } else if (Short.class.equals(type)) { - return (T) Short.valueOf(number.shortValue()); - } else if (BigInteger.class.equals(type)) { - return (T) new BigInteger(String.valueOf(number.longValue())); - } else if (BigDecimal.class.equals(type)) { - return (T) new BigDecimal(number.toString()); - } else { - throw new IllegalArgumentException("Unsupported target type : " + type.getName()); - } + return MathUtils.cast(number, getType()); } @Override diff --git a/querydsl-core/src/main/java/com/mysema/util/MathUtils.java b/querydsl-core/src/main/java/com/mysema/util/MathUtils.java index 2fcb05b96f..c899302c0b 100644 --- a/querydsl-core/src/main/java/com/mysema/util/MathUtils.java +++ b/querydsl-core/src/main/java/com/mysema/util/MathUtils.java @@ -63,7 +63,7 @@ public static D cast(Number num, Class type) { rv = type.cast(new BigInteger(num.toString())); } } else { - throw new IllegalArgumentException(String.format("Illegal type : %s", type.getSimpleName())); + throw new IllegalArgumentException(String.format("Unsupported target type : %s", type.getSimpleName())); } return rv; } From c35cd54c72bb436f89130a86a58316f67a2a02e9 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 17 Nov 2014 22:53:40 +0100 Subject: [PATCH 0560/1968] Merge MathUtilsTests --- .../com/mysema/query/util/MathUtilsTest.java | 44 ------------------- .../java/com/mysema/util/MathUtilsTest.java | 19 ++++++++ 2 files changed, 19 insertions(+), 44 deletions(-) delete mode 100644 querydsl-core/src/test/java/com/mysema/query/util/MathUtilsTest.java diff --git a/querydsl-core/src/test/java/com/mysema/query/util/MathUtilsTest.java b/querydsl-core/src/test/java/com/mysema/query/util/MathUtilsTest.java deleted file mode 100644 index 79cc496e26..0000000000 --- a/querydsl-core/src/test/java/com/mysema/query/util/MathUtilsTest.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.mysema.query.util; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.mysema.util.MathUtils; - -public class MathUtilsTest { - - @Test - public void Sum() { - assertEquals(Integer.valueOf(5), MathUtils.sum(2, 3.0)); - } - - @Test - public void Difference() { - assertEquals(Integer.valueOf(2), MathUtils.difference(5, 3.0)); - } - - @Test - public void Cast_Integer_To_Long() { - assertEquals(Long.valueOf(2), MathUtils.cast(2, Long.class)); - } - - @Test - public void Cast_Double_To_Long() { - assertEquals(Long.valueOf(3), MathUtils.cast(3.2, Long.class)); - } - -} diff --git a/querydsl-core/src/test/java/com/mysema/util/MathUtilsTest.java b/querydsl-core/src/test/java/com/mysema/util/MathUtilsTest.java index 06b4cdd8f5..6ed5ea1397 100644 --- a/querydsl-core/src/test/java/com/mysema/util/MathUtilsTest.java +++ b/querydsl-core/src/test/java/com/mysema/util/MathUtilsTest.java @@ -22,6 +22,16 @@ public class MathUtilsTest { + @Test + public void Sum() { + assertEquals(Integer.valueOf(5), MathUtils.sum(2, 3.0)); + } + + @Test + public void Difference() { + assertEquals(Integer.valueOf(2), MathUtils.difference(5, 3.0)); + } + @Test public void Cast() { Integer value = Integer.valueOf(1); @@ -33,6 +43,15 @@ public void Cast() { assertEquals(Long.class, MathUtils.cast(value, Long.class).getClass()); assertEquals(Short.class, MathUtils.cast(value, Short.class).getClass()); assertEquals(Byte.class, MathUtils.cast(value, Byte.class).getClass()); + + assertEquals(BigDecimal.ONE, MathUtils.cast(value, BigDecimal.class)); + assertEquals(BigInteger.ONE, MathUtils.cast(value, BigInteger.class)); + assertEquals(Double.valueOf(1), MathUtils.cast(value, Double.class)); + assertEquals(Float.valueOf(1), MathUtils.cast(value, Float.class)); + assertEquals(Integer.valueOf(1), MathUtils.cast(value, Integer.class)); + assertEquals(Long.valueOf(1), MathUtils.cast(value, Long.class)); + assertEquals(Short.valueOf((short) 1), MathUtils.cast(value, Short.class)); + assertEquals(Byte.valueOf((byte) 1), MathUtils.cast(value, Byte.class)); } } From 54e3f46bf6d72ff44bfbc6910dffc957d70aeb49 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 17 Nov 2014 22:59:49 +0100 Subject: [PATCH 0561/1968] Use constant expression casting for NumberExpression.between() --- .../java/com/mysema/query/types/expr/NumberExpression.java | 6 +++--- .../com/mysema/query/types/expr/NumberExpressionTest.java | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java index 2773280505..76493daad6 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java @@ -331,14 +331,14 @@ public BooleanExpression gtAny(CollectionExpression right) { public final > BooleanExpression between(@Nullable A from, @Nullable A to) { if (from == null) { if (to != null) { - return BooleanOperation.create(Ops.LOE, mixin, ConstantImpl.create(to)); + return loe(to); } else { throw new IllegalArgumentException("Either from or to needs to be non-null"); } } else if (to == null) { - return BooleanOperation.create(Ops.GOE, mixin, ConstantImpl.create(from)); + return goe(from); } else { - return BooleanOperation.create(Ops.BETWEEN, mixin, ConstantImpl.create(from), ConstantImpl.create(to)); + return between(ConstantImpl.create(cast(from)), ConstantImpl.create(cast(to))); } } diff --git a/querydsl-core/src/test/java/com/mysema/query/types/expr/NumberExpressionTest.java b/querydsl-core/src/test/java/com/mysema/query/types/expr/NumberExpressionTest.java index e3f086dc2b..bb7c3b85aa 100644 --- a/querydsl-core/src/test/java/com/mysema/query/types/expr/NumberExpressionTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/types/expr/NumberExpressionTest.java @@ -25,12 +25,12 @@ public class NumberExpressionTest { @Test public void Between_Start_Given() { - assertEquals(intPath.goe(1), intPath.between(1, null)); + assertEquals(intPath.goe(1L), intPath.between(1L, null)); } @Test public void Between_End_Given() { - assertEquals(intPath.loe(3), intPath.between(null, 3)); + assertEquals(intPath.loe(3L), intPath.between(null, 3L)); } } From 41b73ea8166ea21e7063e8cb1dcc98c97b43dffd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 18 Nov 2014 23:28:06 +0200 Subject: [PATCH 0562/1968] Serialize constants in case constructs as literals for Hibernate --- .../com/mysema/query/jpa/HQLTemplates.java | 5 ++ .../com/mysema/query/jpa/JPQLSerializer.java | 72 +++++++++++++++---- .../com/mysema/query/jpa/JPQLTemplates.java | 4 ++ .../com/mysema/query/AbstractJPATest.java | 8 --- .../mysema/query/jpa/JPQLSerializerTest.java | 29 ++++++++ 5 files changed, 97 insertions(+), 21 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java index 77b255616a..78725da194 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/HQLTemplates.java @@ -141,4 +141,9 @@ public boolean isWithForOn() { return true; } + @Override + public boolean isCaseWithLiterals() { + return true; + } + } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java index 915138d4e9..6e04cca72a 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java @@ -79,6 +79,8 @@ public class JPQLSerializer extends SerializerBase { private boolean inProjection = false; + private boolean inCaseOperation = false; + static{ joinTypes.put(JoinType.DEFAULT, COMMA); joinTypes.put(JoinType.FULLJOIN, "\n full join "); @@ -279,21 +281,62 @@ private void serializeSources(boolean forCountRow, List joins) { @Override public void visitConstant(Object constant) { - boolean wrap = templates.wrapConstant(constant); - if (wrap) { - append("("); + if (inCaseOperation && templates.isCaseWithLiterals()) { + visitLiteral(constant); + } else { + boolean wrap = templates.wrapConstant(constant); + if (wrap) { + append("("); + } + append("?"); + if (!getConstantToLabel().containsKey(constant)) { + final String constLabel = String.valueOf(getConstantToLabel().size()+1); + getConstantToLabel().put(constant, constLabel); + append(constLabel); + } else { + append(getConstantToLabel().get(constant)); + } + if (wrap) { + append(")"); + } } - append("?"); - if (!getConstantToLabel().containsKey(constant)) { - final String constLabel = String.valueOf(getConstantToLabel().size()+1); - getConstantToLabel().put(constant, constLabel); - append(constLabel); + } + + public void visitLiteral(Object constant) { + if (constant instanceof Boolean) { + append(constant.toString()); + } else if (constant instanceof Number) { + append(constant.toString()); + } else if (constant instanceof String) { + append("'"); + append(escapeLiteral(constant.toString())); + append("'"); + } else if (constant instanceof Enum) { + append(constant.getClass().getName()); + append("."); + append(((Enum) constant).name()); } else { - append(getConstantToLabel().get(constant)); + // TODO date time literals + throw new IllegalArgumentException("Unsupported constant " + constant); } - if (wrap) { - append(")"); + } + + private String escapeLiteral(String str) { + StringBuilder builder = new StringBuilder(); + for (char ch : str.toCharArray()) { + if (ch == '\n') { + builder.append("\\n"); + continue; + } else if (ch == '\r') { + builder.append("\\r"); + continue; + } else if (ch == '\'') { + builder.append("''"); + continue; + } + builder.append(ch); } + return builder.toString(); } @Override @@ -336,7 +379,9 @@ public Void visit(Path expr, Void context) { @Override @SuppressWarnings("unchecked") protected void visitOperation(Class type, Operator operator, List> args) { - boolean old = wrapElements; + boolean oldInCaseOperation = inCaseOperation; + inCaseOperation = inCaseOperation || operator.equals(Ops.CASE) || operator.equals(Ops.CASE_EQ); + boolean oldWrapElements = wrapElements; wrapElements = templates.wrapElements(operator); if (operator == Ops.EQ && args.get(1) instanceof Operation && @@ -387,7 +432,8 @@ protected void visitOperation(Class type, Operator operator, List> args) { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java index a2179d238e..db636c13da 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java @@ -183,4 +183,8 @@ public QueryHandler getQueryHandler() { return queryHandler; } + public boolean isCaseWithLiterals() { + return false; + } + } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index e27e770fa5..8200dab061 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -303,19 +303,11 @@ public void As() { } @Test - @NoHibernate // https://hibernate.atlassian.net/browse/HHH-4700 @NoBatooJPA public void Case() { query().from(cat).list(cat.name.when("Bob").then(1).otherwise(2)); } - @Test(expected=ClassCastException.class) - @NoEclipseLink - @NoBatooJPA - public void Case_Hibernate() { - query().from(cat).list(cat.name.when("Bob").then(1).otherwise(2)); - } - @Test public void Case2() { query().from(cat) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java index b2068f9d11..22104dd5dd 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java @@ -19,6 +19,7 @@ import com.mysema.query.JoinType; import com.mysema.query.QueryMetadata; import com.mysema.query.domain.QCat; +import com.mysema.query.jpa.domain.JobFunction; import com.mysema.query.jpa.domain.Location; import com.mysema.query.jpa.domain.QDomesticCat; import com.mysema.query.jpa.domain.QEmployee; @@ -223,4 +224,32 @@ public void OpenJPA_Variables() { assertEquals("select cat_\nfrom Cat cat_\n inner join cat_.mate on cat_.mate.alive", serializer.toString()); } + + @Test + public void visitLiteral_boolean() { + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + serializer.visitLiteral(Boolean.TRUE); + assertEquals("true", serializer.toString()); + } + + @Test + public void visitLiteral_number() { + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + serializer.visitLiteral(1.543); + assertEquals("1.543", serializer.toString()); + } + + @Test + public void visitLiteral_string() { + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + serializer.visitLiteral("abc''def"); + assertEquals("'abc''''def'", serializer.toString()); + } + + @Test + public void visitLiteral_enum() { + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + serializer.visitLiteral(JobFunction.MANAGER); + assertEquals("com.mysema.query.jpa.domain.JobFunction.MANAGER", serializer.toString()); + } } From b584670e0547fb4c34407778684831b39c51093b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Nov 2014 19:22:08 +0200 Subject: [PATCH 0563/1968] Upgrade version --- querydsl-collections/README.md | 2 +- .../src/main/docbook/en-US/content/general/codegen.xml | 4 ++-- .../src/main/docbook/en-US/content/tutorials/collections.xml | 2 +- .../src/main/docbook/en-US/content/tutorials/jdo.xml | 2 +- .../src/main/docbook/en-US/content/tutorials/jpa.xml | 2 +- .../src/main/docbook/en-US/content/tutorials/mongodb.xml | 2 +- .../src/main/docbook/ko-KR/content/general/codegen.xml | 4 ++-- .../src/main/docbook/ko-KR/content/tutorials/collections.xml | 2 +- .../src/main/docbook/ko-KR/content/tutorials/jdo.xml | 2 +- .../src/main/docbook/ko-KR/content/tutorials/jpa.xml | 2 +- .../src/main/docbook/ko-KR/content/tutorials/mongodb.xml | 2 +- querydsl-jdo/README.md | 2 +- querydsl-jpa/README.md | 2 +- querydsl-mongodb/README.md | 2 +- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/querydsl-collections/README.md b/querydsl-collections/README.md index 11c2a63117..e7b6c4c496 100644 --- a/querydsl-collections/README.md +++ b/querydsl-collections/README.md @@ -35,7 +35,7 @@ If you are not using JPA or JDO you can generate Querydsl query types for your d com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml b/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml index d375b29ca8..27fed30cef 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/codegen.xml @@ -212,7 +212,7 @@ import com.mysema.query.annotations.Config; com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 @@ -397,7 +397,7 @@ public class QTimestamp extends DateTimePath { com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml index 41523001e5..aa1ecb3106 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/collections.xml @@ -173,7 +173,7 @@ for (String name : from(cat,cats) com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml index 5dae11a684..591730b2f6 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml @@ -53,7 +53,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml index fabea82458..16f185cf65 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml @@ -57,7 +57,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml index 12fc20783f..9c6aff0095 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/mongodb.xml @@ -47,7 +47,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml index e6a40ee6f6..479b203e75 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml @@ -204,7 +204,7 @@ import com.mysema.query.annotations.Config; com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 @@ -384,7 +384,7 @@ public class QTimestamp extends DateTimePath { com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml index 8c4f5f4540..cbb6c3f1eb 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/collections.xml @@ -159,7 +159,7 @@ for (String name : from(cat,cats) com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml index e8b6a4d6bb..ff68594fb2 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml @@ -49,7 +49,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml index 01d8bc4190..ad9b3cba69 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml @@ -55,7 +55,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml index 2ea49bac8e..0bfbdda95d 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml @@ -46,7 +46,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-jdo/README.md b/querydsl-jdo/README.md index 020f87dd8d..850975c472 100644 --- a/querydsl-jdo/README.md +++ b/querydsl-jdo/README.md @@ -35,7 +35,7 @@ And now, configure the Maven APT plugin which generates the query types used by com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-jpa/README.md b/querydsl-jpa/README.md index e459ee5bd0..a6500a23cf 100644 --- a/querydsl-jpa/README.md +++ b/querydsl-jpa/README.md @@ -35,7 +35,7 @@ And now, configure the Maven APT plugin : com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 diff --git a/querydsl-mongodb/README.md b/querydsl-mongodb/README.md index 4222879132..7a8c751e6c 100644 --- a/querydsl-mongodb/README.md +++ b/querydsl-mongodb/README.md @@ -28,7 +28,7 @@ And now, configure the Maven APT plugin which generates the query types used by com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 From 10715726150bd7494c11d6ecd900f075f3378d03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 19 Nov 2014 19:27:58 +0200 Subject: [PATCH 0564/1968] Upgrade version --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 1eef1ff829..01cfa43e15 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -165,7 +165,7 @@ com.mysema.maven apt-maven-plugin - 1.1.2 + 1.1.3 org.apache.maven.plugins From 9d472c02aa684cdecdaddf2b7e7aa813683f3de5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 20 Nov 2014 22:25:05 +0200 Subject: [PATCH 0565/1968] Add count tests --- .../com/mysema/query/AbstractJPATest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index e27e770fa5..2e38b3e58f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -448,6 +448,25 @@ public void Count() { assertTrue(query().from(show).count() > 0); } + @Test + public void Count_Subquery() { + QEmployee employee = QEmployee.employee; + QEmployee employee2 = new QEmployee("e2"); + query().from(employee) + .where(subQuery().from(employee2) + .list(employee2.id).count().gt(1)) + .count(); + } + + @Test + public void Count_Subquery2() { + QEmployee employee = QEmployee.employee; + QEmployee employee2 = new QEmployee("e2"); + query().from(employee) + .where(subQuery().from(employee2).count().gt(1)) + .count(); + } + @Test public void Count_Distinct() { QCat cat = QCat.cat; From f0401dcb9a5496beb7d9684c177b73fdcd18e5f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 21 Nov 2014 20:03:23 +0200 Subject: [PATCH 0566/1968] Move tests --- .../com/mysema/query/AbstractJPATest.java | 31 +++++++------------ 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index 2e38b3e58f..dda5bf0c4f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -448,25 +448,6 @@ public void Count() { assertTrue(query().from(show).count() > 0); } - @Test - public void Count_Subquery() { - QEmployee employee = QEmployee.employee; - QEmployee employee2 = new QEmployee("e2"); - query().from(employee) - .where(subQuery().from(employee2) - .list(employee2.id).count().gt(1)) - .count(); - } - - @Test - public void Count_Subquery2() { - QEmployee employee = QEmployee.employee; - QEmployee employee2 = new QEmployee("e2"); - query().from(employee) - .where(subQuery().from(employee2).count().gt(1)) - .count(); - } - @Test public void Count_Distinct() { QCat cat = QCat.cat; @@ -1198,6 +1179,18 @@ public void SubQuery4() { .list(cat.name, new JPASubQuery().from(other).where(other.name.eq(cat.name)).count()); } + + @Test + public void SubQuery5() { + QEmployee employee = QEmployee.employee; + QEmployee employee2 = new QEmployee("e2"); + query().from(employee) + .where(subQuery().from(employee2) + .list(employee2.id).count().gt(1)) + .count(); + } + + @Test public void Substring() { for (String str : query().from(cat).list(cat.name.substring(1,2))) { From d5225787ee0d365ceb09a2f15004ba31fa270523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 21 Nov 2014 20:03:58 +0200 Subject: [PATCH 0567/1968] Format code --- .../src/test/java/com/mysema/query/AbstractJPATest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index dda5bf0c4f..8d3591e4d5 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -1179,7 +1179,6 @@ public void SubQuery4() { .list(cat.name, new JPASubQuery().from(other).where(other.name.eq(cat.name)).count()); } - @Test public void SubQuery5() { QEmployee employee = QEmployee.employee; @@ -1190,7 +1189,6 @@ public void SubQuery5() { .count(); } - @Test public void Substring() { for (String str : query().from(cat).list(cat.name.substring(1,2))) { From c83d15b44de57a0ba4c9415d502cb663161b73d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 22 Nov 2014 23:59:41 +0200 Subject: [PATCH 0568/1968] Fix backwards compat --- .../src/main/java/com/mysema/query/apt/VisitorConfig.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java b/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java index d74567d90f..ec46078f72 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/VisitorConfig.java @@ -42,6 +42,10 @@ public enum VisitorConfig { private final boolean visitFieldProperties, visitMethodProperties, visitConstructors; + public static VisitorConfig get(boolean fields, boolean methods) { + return get(fields, methods, VisitorConfig.ALL); + } + public static VisitorConfig get(boolean fields, boolean methods, VisitorConfig defaultConfig) { if (fields && methods) { return VisitorConfig.ALL; From 3b43028f01444b90ce3d3effac60ee3c030721d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 25 Nov 2014 21:05:29 +0200 Subject: [PATCH 0569/1968] Use MDC for query and parameters --- .../com/mysema/query/support/QueryBase.java | 4 ++ .../mysema/query/jdo/AbstractJDOQuery.java | 16 ++++-- .../jpa/hibernate/AbstractHibernateQuery.java | 50 +++++++++---------- .../sql/AbstractHibernateSQLQuery.java | 17 +++++-- .../query/jpa/impl/AbstractJPAQuery.java | 21 ++++++-- .../query/jpa/sql/AbstractJPASQLQuery.java | 17 +++++-- .../mysema/query/sql/AbstractSQLQuery.java | 34 ++++++++----- 7 files changed, 109 insertions(+), 50 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java index 6647fa4c72..8d66345c17 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java @@ -28,6 +28,10 @@ */ public abstract class QueryBase> { + protected static final String MDC_QUERY = "querydsl.query"; + + protected static final String MDC_PARAMETERS = "querydsl.parameters"; + protected final QueryMixin queryMixin; public QueryBase(QueryMixin queryMixin) { diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java index aff55bbc9e..9eecc8d52f 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java @@ -30,6 +30,7 @@ import com.mysema.query.types.FactoryExpression; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * Abstract base class for custom implementations of the JDOCommonQuery interface. @@ -137,7 +138,7 @@ private Query createQuery(boolean forCount) { JDOQLSerializer serializer = new JDOQLSerializer(getTemplates(), source); serializer.serialize(queryMixin.getMetadata(), forCount, false); - logQuery(serializer.toString()); + logQuery(serializer.toString(), serializer.getConstantToLabel()); // create Query Query query = persistenceManager.newQuery(serializer.toString()); @@ -160,12 +161,20 @@ private Query createQuery(boolean forCount) { return query; } - protected void logQuery(String queryString) { + protected void logQuery(String queryString, Map parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { - logger.debug(queryString.replace('\n', ' ')); + logger.debug(normalizedQuery); } } + protected void cleanupMDC() { + MDC.remove(MDC_QUERY); + MDC.remove(MDC_PARAMETERS); + } + @SuppressWarnings("unchecked") private T detach(T results) { if (results instanceof Collection) { @@ -278,6 +287,7 @@ public SearchResults listResults(Expression expr) { private void reset() { queryMixin.getMetadata().reset(); + cleanupMDC(); } /** diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java index f84eeb5299..403fa2c4dd 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java @@ -13,40 +13,25 @@ */ package com.mysema.query.jpa.hibernate; +import javax.annotation.Nullable; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.annotation.Nullable; - -import org.hibernate.FlushMode; -import org.hibernate.LockMode; -import org.hibernate.Query; -import org.hibernate.ScrollMode; -import org.hibernate.ScrollableResults; -import org.hibernate.Session; -import org.hibernate.StatelessSession; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.mysema.commons.lang.CloseableIterator; -import com.mysema.query.DefaultQueryMetadata; +import com.mysema.query.*; import com.mysema.query.NonUniqueResultException; import com.mysema.query.QueryException; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; -import com.mysema.query.SearchResults; -import com.mysema.query.Tuple; -import com.mysema.query.jpa.FactoryExpressionTransformer; -import com.mysema.query.jpa.HQLTemplates; -import com.mysema.query.jpa.JPAQueryBase; -import com.mysema.query.jpa.JPQLSerializer; -import com.mysema.query.jpa.JPQLTemplates; -import com.mysema.query.jpa.ScrollableResultsIterator; +import com.mysema.query.jpa.*; import com.mysema.query.types.Expression; import com.mysema.query.types.FactoryExpression; import com.mysema.query.types.FactoryExpressionUtils; import com.mysema.query.types.Path; +import org.hibernate.*; +import org.hibernate.Query; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * Abstract base class for Hibernate API based implementations of the JPQL interface @@ -138,7 +123,7 @@ public Query createQuery(Expression[] args) { private Query createQuery(@Nullable QueryModifiers modifiers, boolean forCount) { JPQLSerializer serializer = serialize(forCount); String queryString = serializer.toString(); - logQuery(queryString); + logQuery(queryString, serializer.getConstantToLabel()); Query query = session.createQuery(queryString); HibernateUtil.setConstants(query, serializer.getConstantToLabel(), getMetadata().getParams()); if (fetchSize > 0) { @@ -258,12 +243,25 @@ public SearchResults listResults(Expression expr) { } } - protected void logQuery(String queryString) { + protected void logQuery(String queryString, Map parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { - logger.debug(queryString.replace('\n', ' ')); + logger.debug(normalizedQuery); } } + protected void cleanupMDC() { + MDC.remove(MDC_QUERY); + MDC.remove(MDC_PARAMETERS); + } + + protected void reset() { + super.reset(); + cleanupMDC(); + } + /** * Return the query results as ScrollableResults. The * scrollability of the returned results depends upon JDBC driver diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index 79bfadc836..588444684f 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -15,6 +15,7 @@ import javax.annotation.Nullable; import java.util.List; +import java.util.Map; import java.util.Set; import com.google.common.collect.ListMultimap; @@ -38,6 +39,7 @@ import org.hibernate.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * AbstractHibernateSQLQuery is the base class for Hibernate Native SQL queries @@ -82,7 +84,7 @@ public Query createQuery(Expression... args) { private Query createQuery(boolean forCount) { NativeSQLSerializer serializer = (NativeSQLSerializer) serialize(forCount); String queryString = serializer.toString(); - logQuery(queryString); + logQuery(queryString, serializer.getConstantToLabel()); org.hibernate.SQLQuery query = session.createSQLQuery(queryString); // set constants HibernateUtil.setConstants(query, serializer.getConstantToLabel(), queryMixin.getMetadata().getParams()); @@ -183,14 +185,23 @@ public SearchResults listResults(Expression projection) { } } - protected void logQuery(String queryString) { + protected void logQuery(String queryString, Map parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { - logger.debug(queryString.replace('\n', ' ')); + logger.debug(normalizedQuery); } } + protected void cleanupMDC() { + MDC.remove(MDC_QUERY); + MDC.remove(MDC_PARAMETERS); + } + protected void reset() { queryMixin.getMetadata().reset(); + cleanupMDC(); } @SuppressWarnings("unchecked") diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java index a6e453f9cc..bd5b4fe325 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java @@ -35,6 +35,7 @@ import com.mysema.query.types.FactoryExpressionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * Abstract base class for JPA API based implementations of the JPQLQuery interface @@ -119,7 +120,7 @@ public Query createQuery(Expression[] args) { private Query createQuery(@Nullable QueryModifiers modifiers, boolean forCount) { JPQLSerializer serializer = serialize(forCount); String queryString = serializer.toString(); - logQuery(queryString); + logQuery(queryString, serializer.getConstantToLabel()); Query query = entityManager.createQuery(queryString); JPAUtil.setConstants(query, serializer.getConstantToLabel(), getMetadata().getParams()); if (modifiers != null && modifiers.isRestricting()) { @@ -264,12 +265,26 @@ public SearchResults listResults(Expression expr) { } } - protected void logQuery(String queryString) { + protected void logQuery(String queryString, Map parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { - logger.debug(queryString.replace('\n', ' ')); + logger.debug(normalizedQuery); } } + protected void cleanupMDC() { + MDC.remove(MDC_QUERY); + MDC.remove(MDC_PARAMETERS); + } + + @Override + protected void reset() { + super.reset(); + cleanupMDC(); + } + @Override public RT uniqueResult(Expression expr) { queryMixin.addProjection(expr); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java index 8caa326c52..1698dc441c 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java @@ -41,6 +41,7 @@ import com.mysema.query.types.FactoryExpressionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * AbstractJPASQLQuery is the base class for JPA Native SQL queries @@ -96,7 +97,7 @@ public Query createQuery(Expression... args) { private Query createQuery(boolean forCount) { NativeSQLSerializer serializer = (NativeSQLSerializer) serialize(forCount); String queryString = serializer.toString(); - logQuery(queryString); + logQuery(queryString, serializer.getConstantToLabel()); List> projection = queryMixin.getMetadata().getProjection(); Query query; @@ -273,14 +274,24 @@ public SearchResults listResults(Expression projection) { } } - protected void logQuery(String queryString) { + + protected void logQuery(String queryString, Map parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); if (logger.isDebugEnabled()) { - logger.debug(queryString.replace('\n', ' ')); + logger.debug(normalizedQuery); } } + protected void cleanupMDC() { + MDC.remove(MDC_QUERY); + MDC.remove(MDC_PARAMETERS); + } + protected void reset() { queryMixin.getMetadata().reset(); + cleanupMDC(); } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 9d7266bf77..60f04698c4 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -20,6 +20,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -31,6 +32,7 @@ import com.mysema.util.ResultSetAdapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.MDC; /** * AbstractSQLQuery is the base type for SQL query implementations @@ -161,9 +163,7 @@ public ResultSet getResults(Expression... exprs) { listeners.preRender(context); SQLSerializer serializer = serialize(false); String queryString = serializer.toString(); - if (logger.isDebugEnabled()) { - logger.debug("query : {}", queryString); - } + logQuery(queryString, serializer.getConstants()); context.addSQL(queryString); listeners.rendered(context); @@ -217,9 +217,7 @@ private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullab listeners.preRender(context); SQLSerializer serializer = serialize(false); final String queryString = serializer.toString(); - if (logger.isDebugEnabled()) { - logger.debug("query : {}", queryString); - } + logQuery(queryString, serializer.getConstants()); context.addSQL(queryString); listeners.rendered(context); @@ -289,9 +287,7 @@ public List list(Expression expr) { listeners.preRender(context); SQLSerializer serializer = serialize(false); final String queryString = serializer.toString(); - if (logger.isDebugEnabled()) { - logger.debug("query : {}", queryString); - } + logQuery(queryString, serializer.getConstants()); context.addSQL(queryString); listeners.rendered(context); @@ -422,6 +418,7 @@ private RT newInstance(FactoryExpression c, ResultSet rs, int offset) private void reset() { queryMixin.getMetadata().reset(); + cleanupMDC(); } protected void setParameters(PreparedStatement stmt, List objects, List> constantPaths, @@ -462,9 +459,7 @@ private long unsafeCount() throws SQLException { listeners.preRender(context); SQLSerializer serializer = serialize(true); final String queryString = serializer.toString(); - if (logger.isDebugEnabled()) { - logger.debug("query : {}", queryString); - } + logQuery(queryString, serializer.getConstants()); context.addSQL(queryString); listeners.rendered(context); @@ -500,9 +495,24 @@ private long unsafeCount() throws SQLException { } } endContext(context); + cleanupMDC(); } } + protected void logQuery(String queryString, Collection parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(MDC_QUERY, normalizedQuery); + MDC.put(MDC_PARAMETERS, String.valueOf(parameters)); + if (logger.isDebugEnabled()) { + logger.debug(normalizedQuery); + } + } + + protected void cleanupMDC() { + MDC.remove(MDC_QUERY); + MDC.remove(MDC_PARAMETERS); + } + public void setUseLiterals(boolean useLiterals) { this.useLiterals = useLiterals; } From 238039d77fece025e89812f669e2bae633214628 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 25 Nov 2014 21:02:39 +0100 Subject: [PATCH 0570/1968] Split JPQL and HQL case expression tests in JPQLSerializer --- .../mysema/query/jpa/JPQLSerializerTest.java | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java index 22104dd5dd..2f8fd6b513 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPQLSerializerTest.java @@ -50,7 +50,7 @@ public void And_Or() { @Test public void Case() { QCat cat = QCat.cat; - JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + JPQLSerializer serializer = new JPQLSerializer(JPQLTemplates.DEFAULT); Expression expr = Expressions.cases().when(cat.toes.eq(2)).then(2) .when(cat.toes.eq(3)).then(3) .otherwise(4); @@ -58,11 +58,21 @@ public void Case() { assertEquals("case when (cat.toes = ?1) then ?1 when (cat.toes = ?2) then ?2 else ?3 end", serializer.toString()); } + @Test + public void Case_Hibernate() { + QCat cat = QCat.cat; + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + Expression expr = Expressions.cases().when(cat.toes.eq(2)).then(2) + .when(cat.toes.eq(3)).then(3) + .otherwise(4); + serializer.handle(expr); + assertEquals("case when (cat.toes = 2) then 2 when (cat.toes = 3) then 3 else 4 end", serializer.toString()); + } @Test public void Case2() { QCat cat = QCat.cat; - JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + JPQLSerializer serializer = new JPQLSerializer(JPQLTemplates.DEFAULT); Expression expr = Expressions.cases().when(cat.toes.eq(2)).then(cat.id.multiply(2)) .when(cat.toes.eq(3)).then(cat.id.multiply(3)) .otherwise(4); @@ -70,6 +80,17 @@ public void Case2() { assertEquals("case when (cat.toes = ?1) then (cat.id * ?1) when (cat.toes = ?2) then (cat.id * ?2) else ?3 end", serializer.toString()); } + @Test + public void Case2_Hibernate() { + QCat cat = QCat.cat; + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + Expression expr = Expressions.cases().when(cat.toes.eq(2)).then(cat.id.multiply(2)) + .when(cat.toes.eq(3)).then(cat.id.multiply(3)) + .otherwise(4); + serializer.handle(expr); + assertEquals("case when (cat.toes = 2) then (cat.id * 2) when (cat.toes = 3) then (cat.id * 3) else 4 end", serializer.toString()); + } + @Test public void FromWithCustomEntityName() { JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); From f7b77d22be1049051a8fa57812e50e76d7e7774b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 26 Nov 2014 22:19:18 +0200 Subject: [PATCH 0571/1968] Use MDC for DML clauses Improve try/finally wrapping --- .../com/mysema/query/support/QueryBase.java | 4 +- .../mysema/query/jdo/AbstractJDOQuery.java | 86 +++++++++++-------- .../jpa/hibernate/AbstractHibernateQuery.java | 76 +++++++++------- .../sql/AbstractHibernateSQLQuery.java | 54 +++++++----- .../query/jpa/impl/AbstractJPAQuery.java | 48 +++++++---- .../query/jpa/sql/AbstractJPASQLQuery.java | 43 ++++++---- .../mysema/query/sql/AbstractSQLQuery.java | 84 ++++++++++-------- .../query/sql/dml/AbstractSQLClause.java | 31 +++++-- .../mysema/query/sql/dml/SQLDeleteClause.java | 5 +- .../mysema/query/sql/dml/SQLInsertClause.java | 22 +++-- .../mysema/query/sql/dml/SQLMergeClause.java | 14 ++- .../mysema/query/sql/dml/SQLUpdateClause.java | 5 +- 12 files changed, 292 insertions(+), 180 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java index 8d66345c17..2417f9d24e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/QueryBase.java @@ -28,9 +28,9 @@ */ public abstract class QueryBase> { - protected static final String MDC_QUERY = "querydsl.query"; + public static final String MDC_QUERY = "querydsl.query"; - protected static final String MDC_PARAMETERS = "querydsl.parameters"; + public static final String MDC_PARAMETERS = "querydsl.parameters"; protected final QueryMixin queryMixin; diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java index 9eecc8d52f..5d11d7f6dd 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java @@ -109,15 +109,19 @@ public void close() { @Override public long count() { - Query query = createQuery(true); - query.setUnique(true); - reset(); - Long rv = (Long) execute(query, true); - if (rv != null) { - return rv.longValue(); - } else { - throw new QueryException("Query returned null"); + try { + Query query = createQuery(true); + query.setUnique(true); + Long rv = (Long) execute(query, true); + if (rv != null) { + return rv.longValue(); + } else { + throw new QueryException("Query returned null"); + } + } finally { + reset(); } + } @Override @@ -255,10 +259,13 @@ public List list(Expression... args) { @Override @SuppressWarnings("unchecked") public List list(Expression expr) { - queryMixin.addProjection(expr); - Object rv = execute(createQuery(false), false); - reset(); - return rv instanceof List ? (List)rv : Collections.singletonList((RT)rv); + try { + queryMixin.addProjection(expr); + Object rv = execute(createQuery(false), false); + return rv instanceof List ? (List)rv : Collections.singletonList((RT)rv); + } finally { + reset(); + } } @Override @@ -269,20 +276,23 @@ public SearchResults listResults(Expression... args) { @Override @SuppressWarnings("unchecked") public SearchResults listResults(Expression expr) { - queryMixin.addProjection(expr); - Query countQuery = createQuery(true); - countQuery.setUnique(true); - countQuery.setResult("count(this)"); - long total = (Long) execute(countQuery, true); - if (total > 0) { - QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); - Query query = createQuery(false); - reset(); - return new SearchResults((List) execute(query, false), modifiers, total); - } else { + try { + queryMixin.addProjection(expr); + Query countQuery = createQuery(true); + countQuery.setUnique(true); + countQuery.setResult("count(this)"); + long total = (Long) execute(countQuery, true); + if (total > 0) { + QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); + Query query = createQuery(false); + return new SearchResults((List) execute(query, false), modifiers, total); + } else { + return SearchResults.emptyResults(); + } + } finally { reset(); - return SearchResults.emptyResults(); } + } private void reset() { @@ -337,22 +347,26 @@ private Object uniqueResult() { if (getMetadata().getModifiers().getLimit() == null) { limit(2); } - Query query = createQuery(false); - reset(); - Object rv = execute(query, false); - if (rv instanceof List) { - List list = (List)rv; - if (!list.isEmpty()) { - if (list.size() > 1) { - throw new NonUniqueResultException(); + try { + Query query = createQuery(false); + Object rv = execute(query, false); + if (rv instanceof List) { + List list = (List)rv; + if (!list.isEmpty()) { + if (list.size() > 1) { + throw new NonUniqueResultException(); + } + return list.get(0); + } else { + return null; } - return list.get(0); } else { - return null; + return rv; } - } else { - return rv; + } finally { + reset(); } + } } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java index 403fa2c4dd..8d0e05e8f9 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/AbstractHibernateQuery.java @@ -73,13 +73,16 @@ public AbstractHibernateQuery(SessionHolder session, JPQLTemplates patterns, Que @Override public long count() { QueryModifiers modifiers = getMetadata().getModifiers(); - Query query = createQuery(modifiers, true); - reset(); - Long rv = (Long)query.uniqueResult(); - if (rv != null) { - return rv.longValue(); - } else { - throw new QueryException("Query returned null"); + try { + Query query = createQuery(modifiers, true); + Long rv = (Long)query.uniqueResult(); + if (rv != null) { + return rv.longValue(); + } else { + throw new QueryException("Query returned null"); + } + } finally { + reset(); } } @@ -199,10 +202,13 @@ public CloseableIterator iterate(Expression... args) { */ @Override public CloseableIterator iterate(Expression projection) { - Query query = createQuery(projection); - reset(); - ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY); - return new ScrollableResultsIterator(results); + try { + Query query = createQuery(projection); + ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY); + return new ScrollableResultsIterator(results); + } finally { + reset(); + } } @Override @@ -213,9 +219,11 @@ public List list(Expression... args) { @Override @SuppressWarnings("unchecked") public List list(Expression expr) { - Query query = createQuery(expr); - reset(); - return query.list(); + try { + return createQuery(expr).list(); + } finally { + reset(); + } } @Override @@ -225,10 +233,11 @@ public SearchResults listResults(Expression... args) { @Override public SearchResults listResults(Expression expr) { - queryMixin.addProjection(expr); - Query countQuery = createQuery(null, true); - long total = (Long) countQuery.uniqueResult(); try{ + queryMixin.addProjection(expr); + Query countQuery = createQuery(null, true); + long total = (Long) countQuery.uniqueResult(); + if (total > 0) { QueryModifiers modifiers = getMetadata().getModifiers(); Query query = createQuery(modifiers, false); @@ -272,9 +281,11 @@ protected void reset() { * @return */ public ScrollableResults scroll(ScrollMode mode, Expression expr) { - Query query = createQuery(expr); - reset(); - return query.scroll(mode); + try { + return createQuery(expr).scroll(mode); + } finally { + reset(); + } } /** @@ -287,9 +298,11 @@ public ScrollableResults scroll(ScrollMode mode, Expression expr) { * @return */ public ScrollableResults scroll(ScrollMode mode, Expression... args) { - Query query = createQuery(args); - reset(); - return query.scroll(mode); + try { + return createQuery(args).scroll(mode); + } finally { + reset(); + } } /** @@ -387,13 +400,16 @@ public RT uniqueResult(Expression expr) { } private Object uniqueResult() { - QueryModifiers modifiers = getMetadata().getModifiers(); - Query query = createQuery(modifiers, false); - reset(); - try{ - return query.uniqueResult(); - } catch (org.hibernate.NonUniqueResultException e) { - throw new NonUniqueResultException(); + try { + QueryModifiers modifiers = getMetadata().getModifiers(); + Query query = createQuery(modifiers, false); + try{ + return query.uniqueResult(); + } catch (org.hibernate.NonUniqueResultException e) { + throw new NonUniqueResultException(); + } + } finally { + reset(); } } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index 588444684f..66e6db98c2 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -153,35 +153,42 @@ protected SQLSerializer createSerializer() { @SuppressWarnings("unchecked") @Override public List list(Expression projection) { - Query query = createQuery(projection); - reset(); - return query.list(); + try { + return createQuery(projection).list(); + } finally { + reset(); + } } @Override public CloseableIterator iterate(Expression projection) { - Query query = createQuery(projection); - reset(); - ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY); - return new ScrollableResultsIterator(results); + try { + Query query = createQuery(projection); + ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY); + return new ScrollableResultsIterator(results); + } finally { + reset(); + } } @Override public SearchResults listResults(Expression projection) { // TODO : handle entity projections as well - queryMixin.addProjection(projection); - Query query = createQuery(true); - long total = ((Number)query.uniqueResult()).longValue(); - if (total > 0) { - QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); - query = createQuery(false); - @SuppressWarnings("unchecked") - List list = query.list(); - reset(); - return new SearchResults(list, modifiers, total); - } else { + try { + queryMixin.addProjection(projection); + Query query = createQuery(true); + long total = ((Number)query.uniqueResult()).longValue(); + if (total > 0) { + QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); + query = createQuery(false); + @SuppressWarnings("unchecked") + List list = query.list(); + return new SearchResults(list, modifiers, total); + } else { + return SearchResults.emptyResults(); + } + } finally { reset(); - return SearchResults.emptyResults(); } } @@ -207,13 +214,16 @@ protected void reset() { @SuppressWarnings("unchecked") @Override public RT uniqueResult(Expression expr) { - Query query = createQuery(expr); - return (RT)uniqueResult(query); + try { + Query query = createQuery(expr); + return (RT)uniqueResult(query); + } finally { + reset(); + } } @Nullable private Object uniqueResult(Query query) { - reset(); try{ return query.uniqueResult(); }catch (org.hibernate.NonUniqueResultException e) { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java index bd5b4fe325..b8cf895141 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java @@ -75,9 +75,12 @@ public AbstractJPAQuery(EntityManager em, JPQLTemplates templates, QueryMetadata @Override public long count() { - Query query = createQuery(null, true); - reset(); - return (Long) query.getSingleResult(); + try { + Query query = createQuery(null, true); + return (Long) query.getSingleResult(); + } finally { + reset(); + } } /** @@ -222,8 +225,12 @@ public CloseableIterator iterate(Expression... args) { @Override public CloseableIterator iterate(Expression expr) { - Query query = createQuery(expr); - return queryHandler.iterate(query, projection); + try { + Query query = createQuery(expr); + return queryHandler.iterate(query, projection); + } finally { + reset(); + } } @Override @@ -234,8 +241,8 @@ public List list(Expression... args) { @Override @SuppressWarnings("unchecked") public List list(Expression expr) { - Query query = createQuery(expr); try { + Query query = createQuery(expr); return (List) getResultList(query); } finally { reset(); @@ -249,20 +256,23 @@ public SearchResults listResults(Expression... args) { @Override public SearchResults listResults(Expression expr) { - queryMixin.addProjection(expr); - Query countQuery = createQuery(null, true); - long total = (Long) countQuery.getSingleResult(); - if (total > 0) { - QueryModifiers modifiers = getMetadata().getModifiers(); - Query query = createQuery(modifiers, false); - @SuppressWarnings("unchecked") - List list = (List) getResultList(query); - reset(); - return new SearchResults(list, modifiers, total); - } else { + try { + queryMixin.addProjection(expr); + Query countQuery = createQuery(null, true); + long total = (Long) countQuery.getSingleResult(); + if (total > 0) { + QueryModifiers modifiers = getMetadata().getModifiers(); + Query query = createQuery(modifiers, false); + @SuppressWarnings("unchecked") + List list = (List) getResultList(query); + return new SearchResults(list, modifiers, total); + } else { + return SearchResults.emptyResults(); + } + } finally { reset(); - return SearchResults.emptyResults(); } + } protected void logQuery(String queryString, Map parameters) { @@ -294,8 +304,8 @@ public RT uniqueResult(Expression expr) { @Nullable @SuppressWarnings("unchecked") private RT uniqueResult() { - Query query = createQuery(getMetadata().getModifiers(), false); try{ + Query query = createQuery(getMetadata().getModifiers(), false); return (RT) getSingleResult(query); } catch(javax.persistence.NoResultException e) { logger.trace(e.getMessage(),e); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java index 1698dc441c..bef0af1d9f 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/sql/AbstractJPASQLQuery.java @@ -245,33 +245,44 @@ private Object getSingleResult(Query query) { @SuppressWarnings("unchecked") @Override public List list(Expression projection) { - Query query = createQuery(projection); - return (List) getResultList(query); + try { + Query query = createQuery(projection); + return (List) getResultList(query); + } finally { + reset(); + } } @Override public CloseableIterator iterate(Expression expr) { - Query query = createQuery(expr); - return queryHandler.iterate(query, null); + try { + Query query = createQuery(expr); + return queryHandler.iterate(query, null); + } finally { + reset(); + } } @Override public SearchResults listResults(Expression projection) { // TODO : handle entity projections as well - queryMixin.addProjection(projection); - Query query = createQuery(true); - long total = ((Number)query.getSingleResult()).longValue(); - if (total > 0) { - QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); - query = createQuery(false); - @SuppressWarnings("unchecked") - List list = (List) getResultList(query); - reset(); - return new SearchResults(list, modifiers, total); - } else { + try { + queryMixin.addProjection(projection); + Query query = createQuery(true); + long total = ((Number)query.getSingleResult()).longValue(); + if (total > 0) { + QueryModifiers modifiers = queryMixin.getMetadata().getModifiers(); + query = createQuery(false); + @SuppressWarnings("unchecked") + List list = (List) getResultList(query); + return new SearchResults(list, modifiers, total); + } else { + return SearchResults.emptyResults(); + } + } finally { reset(); - return SearchResults.emptyResults(); } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 60f04698c4..efd92fcf0a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Map; +import com.google.common.collect.ImmutableList; import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.*; import com.mysema.query.support.QueryMixin; @@ -159,18 +160,21 @@ public ResultSet getResults(Expression... exprs) { queryMixin.addProjection(exprs); SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); + String queryString = null; + List constants = ImmutableList.of(); - listeners.preRender(context); - SQLSerializer serializer = serialize(false); - String queryString = serializer.toString(); - logQuery(queryString, serializer.getConstants()); - context.addSQL(queryString); - listeners.rendered(context); + try { + listeners.preRender(context); + SQLSerializer serializer = serialize(false); + queryString = serializer.toString(); + logQuery(queryString, serializer.getConstants()); + context.addSQL(queryString); + listeners.rendered(context); - listeners.notifyQuery(queryMixin.getMetadata()); + listeners.notifyQuery(queryMixin.getMetadata()); + + constants = serializer.getConstants(); - List constants = serializer.getConstants(); - try { listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), getMetadata().getParams()); @@ -213,18 +217,21 @@ public CloseableIterator iterate(Expression expr) { @SuppressWarnings("unchecked") private CloseableIterator iterateSingle(QueryMetadata metadata, @Nullable final Expression expr) { SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); + String queryString = null; + List constants = ImmutableList.of(); - listeners.preRender(context); - SQLSerializer serializer = serialize(false); - final String queryString = serializer.toString(); - logQuery(queryString, serializer.getConstants()); - context.addSQL(queryString); - listeners.rendered(context); + try { + listeners.preRender(context); + SQLSerializer serializer = serialize(false); + queryString = serializer.toString(); + logQuery(queryString, serializer.getConstants()); + context.addSQL(queryString); + listeners.rendered(context); - listeners.notifyQuery(queryMixin.getMetadata()); - List constants = serializer.getConstants(); - try { + listeners.notifyQuery(queryMixin.getMetadata()); + constants = serializer.getConstants(); + listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); setParameters(stmt, constants, serializer.getConstantPaths(), metadata.getParams()); @@ -283,17 +290,20 @@ public RT produceNext(ResultSet rs) throws Exception { public List list(Expression expr) { expr = queryMixin.addProjection(expr); SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); + String queryString = null; + List constants = ImmutableList.of(); - listeners.preRender(context); - SQLSerializer serializer = serialize(false); - final String queryString = serializer.toString(); - logQuery(queryString, serializer.getConstants()); - context.addSQL(queryString); - listeners.rendered(context); - - listeners.notifyQuery(queryMixin.getMetadata()); - List constants = serializer.getConstants(); try { + listeners.preRender(context); + SQLSerializer serializer = serialize(false); + queryString = serializer.toString(); + logQuery(queryString, serializer.getConstants()); + context.addSQL(queryString); + listeners.rendered(context); + + listeners.notifyQuery(queryMixin.getMetadata()); + constants = serializer.getConstants(); + listeners.prePrepare(context); final PreparedStatement stmt = conn.prepareStatement(queryString); try { @@ -455,18 +465,20 @@ public RT uniqueResult(Expression expr) { private long unsafeCount() throws SQLException { SQLListenerContextImpl context = startContext(conn, getMetadata()); - - listeners.preRender(context); - SQLSerializer serializer = serialize(true); - final String queryString = serializer.toString(); - logQuery(queryString, serializer.getConstants()); - context.addSQL(queryString); - listeners.rendered(context); - - List constants = serializer.getConstants(); + String queryString = null; + List constants = ImmutableList.of(); PreparedStatement stmt = null; ResultSet rs = null; + try { + listeners.preRender(context); + SQLSerializer serializer = serialize(true); + queryString = serializer.toString(); + logQuery(queryString, serializer.getConstants()); + context.addSQL(queryString); + listeners.rendered(context); + + constants = serializer.getConstants(); listeners.prePrepare(context); stmt = conn.prepareStatement(queryString); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index 62b60c7d78..dc6c613510 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -13,18 +13,21 @@ */ package com.mysema.query.sql.dml; +import java.sql.*; +import java.util.Collection; +import java.util.List; +import java.util.Map; + import com.google.common.collect.ImmutableList; import com.mysema.query.QueryMetadata; import com.mysema.query.dml.DMLClause; import com.mysema.query.sql.*; +import com.mysema.query.support.QueryBase; import com.mysema.query.types.ParamExpression; import com.mysema.query.types.ParamNotSetException; import com.mysema.query.types.Path; - -import java.sql.*; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.MDC; /** * AbstractSQLClause is a superclass for SQL based DMLClause implementations @@ -195,6 +198,24 @@ protected void close(ResultSet rs) { } } + protected void logQuery(Logger logger, String queryString, Collection parameters) { + String normalizedQuery = queryString.replace('\n', ' '); + MDC.put(QueryBase.MDC_QUERY, normalizedQuery); + MDC.put(QueryBase.MDC_PARAMETERS, String.valueOf(parameters)); + if (logger.isDebugEnabled()) { + logger.debug(normalizedQuery); + } + } + + protected void cleanupMDC() { + MDC.remove(QueryBase.MDC_QUERY); + MDC.remove(QueryBase.MDC_PARAMETERS); + } + + protected void reset() { + cleanupMDC(); + } + public void setUseLiterals(boolean useLiterals) { this.useLiterals = useLiterals; } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index 1de6b50c69..c3d8f04315 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -115,7 +115,7 @@ private PreparedStatement createStatement() throws SQLException{ serializer.serializeDelete(metadata, entity); queryString = serializer.toString(); constants = serializer.getConstants(); - logger.debug(queryString); + logQuery(logger, queryString, constants); context.addSQL(queryString); listeners.rendered(context); @@ -135,7 +135,7 @@ private Collection createStatements() throws SQLException { serializer.serializeDelete(batches.get(0), entity); queryString = serializer.toString(); constants = serializer.getConstants(); - logger.debug(queryString); + logQuery(logger, queryString, constants); context.addSQL(queryString); listeners.rendered(context); @@ -207,6 +207,7 @@ public long execute() { if (stmts != null) { close(stmts); } + reset(); endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index 9eced87cb6..724a5b839f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -165,8 +165,9 @@ public T executeWithKey(Class type) { } private T executeWithKey(Class type, @Nullable Path path) { - ResultSet rs = executeWithKeys(); + ResultSet rs = null; try { + rs = executeWithKeys(); if (rs.next()) { return configuration.get(rs, path, 1, type); } else { @@ -175,7 +176,10 @@ private T executeWithKey(Class type, @Nullable Path path) { } catch (SQLException e) { throw configuration.translate(e); } finally { - close(rs); + if (rs != null) { + close(rs); + } + reset(); } } @@ -199,8 +203,9 @@ public List executeWithKeys(Class type) { } private List executeWithKeys(Class type, @Nullable Path path) { - ResultSet rs = executeWithKeys(); + ResultSet rs = null; try { + rs = executeWithKeys(); List rv = new ArrayList(); while (rs.next()) { rv.add(configuration.get(rs, path, 1, type)); @@ -209,7 +214,10 @@ private List executeWithKeys(Class type, @Nullable Path path) { } catch (SQLException e) { throw configuration.translate(e); } finally { - close(rs); + if (rs != null) { + close(rs); + } + reset(); } } @@ -278,7 +286,7 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali queryString = serializer.toString(); constants = serializer.getConstants(); - logger.debug(queryString); + logQuery(logger, queryString, constants); PreparedStatement stmt; if (withKeys) { if (entity.getPrimaryKey() != null) { @@ -345,9 +353,10 @@ public void close() throws SQLException { } }; } catch (SQLException e) { - onException(context,e); + onException(context, e); throw configuration.translate(queryString, constants, e); } finally { + reset(); endContext(context); } } @@ -385,6 +394,7 @@ public long execute() { if (stmts != null) { close(stmts); } + reset(); endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index f7ad85ef09..af423d4679 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -189,8 +189,9 @@ public List executeWithKeys(Class type) { } private List executeWithKeys(Class type, @Nullable Path path) { - ResultSet rs = executeWithKeys(); + ResultSet rs = null; try{ + rs = executeWithKeys(); List rv = new ArrayList(); while (rs.next()) { rv.add(configuration.get(rs, path, 1, type)); @@ -198,8 +199,11 @@ private List executeWithKeys(Class type, @Nullable Path path) { return rv; } catch (SQLException e) { throw configuration.translate(e); - }finally{ - close(rs); + }finally { + if (rs != null) { + close(rs); + } + reset(); } } @@ -263,6 +267,7 @@ public void close() throws SQLException { onException(context,e); throw configuration.translate(queryString, constants, e); } finally { + reset(); endContext(context); } } @@ -418,7 +423,7 @@ private PreparedStatement prepareStatementAndSetParameters(SQLSerializer seriali queryString = serializer.toString(); constants = serializer.getConstants(); - logger.debug(queryString); + logQuery(logger, queryString, constants); PreparedStatement stmt; if (withKeys) { String[] target = new String[keys.size()]; @@ -468,6 +473,7 @@ private long executeNativeMerge() { if (stmts != null) { close(stmts); } + reset(); endContext(context); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index 863fcf63d6..cc4044571b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -109,7 +109,7 @@ private PreparedStatement createStatement() throws SQLException{ serializer.serializeUpdate(metadata, entity, updates); queryString = serializer.toString(); constants = serializer.getConstants(); - logger.debug(queryString); + logQuery(logger, queryString, constants); context.addSQL(queryString); listeners.prepared(context); @@ -128,7 +128,7 @@ private Collection createStatements() throws SQLException { serializer.serializeUpdate(batches.get(0).getMetadata(), entity, batches.get(0).getUpdates()); queryString = serializer.toString(); constants = serializer.getConstants(); - logger.debug(queryString); + logQuery(logger, queryString, constants); context.addSQL(queryString); listeners.rendered(context); @@ -201,6 +201,7 @@ public long execute() { if (stmts != null) { close(stmts); } + reset(); endContext(context); } } From fb505d0495c0729ad1af2a9535fff0a31ec025d4 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 26 Nov 2014 21:28:18 +0100 Subject: [PATCH 0572/1968] Fix count with empty resultsets --- .../java/com/mysema/query/sql/AbstractSQLQuery.java | 8 ++++++-- .../src/test/java/com/mysema/query/SelectBase.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 9d7266bf77..7a7eeb4794 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -482,10 +482,14 @@ private long unsafeCount() throws SQLException { listeners.preExecute(context); rs = stmt.executeQuery(); - rs.next(); + boolean hasResult = rs.next(); listeners.executed(context); - return rs.getLong(1); + if (hasResult) { + return rs.getLong(1); + } else { + return 0; + } } catch (SQLException e) { onException(context, e); throw configuration.translate(queryString, constants, e); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index df9fb20dde..7d1f1a1e4e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -610,6 +610,16 @@ public void GroupBy_Validate() { employee.salary.avg()); } + @Test + public void Having_Count() { + //Produces empty resultset https://github.com/querydsl/querydsl/issues/1055 + query().from(employee) + .innerJoin(employee2) + .groupBy(employee.id) + .having(Wildcard.count.eq(4L)) + .listResults(employee.id, employee.firstname); + } + @SuppressWarnings("unchecked") @Test(expected=IllegalArgumentException.class) public void IllegalUnion() throws SQLException { From 3a526fdde2c89fcc4b545937ceebd6d6ef2e7d6f Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 26 Nov 2014 22:02:10 +0100 Subject: [PATCH 0573/1968] Added join condition for Having_Count() --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 7d1f1a1e4e..26b5272406 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -614,7 +614,7 @@ public void GroupBy_Validate() { public void Having_Count() { //Produces empty resultset https://github.com/querydsl/querydsl/issues/1055 query().from(employee) - .innerJoin(employee2) + .innerJoin(employee2).on(employee.id.eq(employee2.id)) .groupBy(employee.id) .having(Wildcard.count.eq(4L)) .listResults(employee.id, employee.firstname); From 1c12c6f64805101e0baf7cc891eed0c73383dc08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 27 Nov 2014 19:35:13 +0200 Subject: [PATCH 0574/1968] Fix groupBy/count handling --- .../com/mysema/query/sql/SQLSerializer.java | 18 +++++++++++++- .../java/com/mysema/query/SelectBase.java | 24 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 91c175ce42..547e61e9b3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -264,6 +264,14 @@ void serializeForQuery(QueryMetadata metadata, boolean forCountRow) { if (!metadata.isDistinct()) { append(templates.getCountStar()); + if (!groupBy.isEmpty()) { + append(templates.getFrom()); + append("("); + append(templates.getSelect()); + append("1 "); + suffix = ") internal"; + } + } else { List> columns; if (sqlSelect.isEmpty()) { @@ -271,7 +279,15 @@ void serializeForQuery(QueryMetadata metadata, boolean forCountRow) { } else { columns = sqlSelect; } - if (columns.size() == 1) { + if (!groupBy.isEmpty()) { + // select count(*) from (select distinct ...) + append(templates.getCountStar()); + append(templates.getFrom()); + append("("); + append(templates.getSelectDistinct()); + handle(COMMA, columns); + suffix = ") internal"; + } else if (columns.size() == 1) { append(templates.getDistinctCountStart()); handle(columns.get(0)); append(templates.getDistinctCountEnd()); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index df9fb20dde..874e98bcf4 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -610,6 +610,30 @@ public void GroupBy_Validate() { employee.salary.avg()); } + @Test + public void GroupBy_Count() { + List ids = query().from(employee).groupBy(employee.id).list(employee.id); + long count = query().from(employee).groupBy(employee.id).count(); + SearchResults results = query().from(employee).groupBy(employee.id) + .limit(1).listResults(employee.id); + + assertEquals(10, ids.size()); + assertEquals(10, count); + assertEquals(1, results.getResults().size()); + assertEquals(10, results.getTotal()); + } + + @Test + public void GroupBy_Distinct_Count() { + List ids = query().from(employee).groupBy(employee.id).distinct().list(NumberTemplate.ONE); + SearchResults results = query().from(employee).groupBy(employee.id) + .limit(1).distinct().listResults(NumberTemplate.ONE); + + assertEquals(1, ids.size()); + assertEquals(1, results.getResults().size()); + assertEquals(1, results.getTotal()); + } + @SuppressWarnings("unchecked") @Test(expected=IllegalArgumentException.class) public void IllegalUnion() throws SQLException { From 257bed6a2793d0ef176f4dc45d18c7a7b7bc040b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 27 Nov 2014 20:00:17 +0200 Subject: [PATCH 0575/1968] Add tests --- .../com/mysema/query/AbstractJPATest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index e27e770fa5..2775cd50fd 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -39,6 +39,7 @@ import com.mysema.query.types.*; import com.mysema.query.types.expr.*; import com.mysema.query.types.path.*; +import com.mysema.query.types.template.NumberTemplate; import com.mysema.testutil.ExcludeIn; import org.junit.Before; import org.junit.Ignore; @@ -672,6 +673,31 @@ public void GroupBy_YearMonth() { .list(cat.id.count()); } + @Test + public void GroupBy_Count() { + List ids = query().from(cat).groupBy(cat.id).list(cat.id); + long count = query().from(cat).groupBy(cat.id).count(); + SearchResults results = query().from(cat).groupBy(cat.id) + .limit(1).listResults(cat.id); + + long catCount = query().from(cat).count(); + assertEquals(catCount, ids.size()); + assertEquals(catCount, count); + assertEquals(catCount, results.getResults().size()); + assertEquals(catCount, results.getTotal()); + } + + @Test + public void GroupBy_Distinct_Count() { + List ids = query().from(cat).groupBy(cat.id).distinct().list(NumberTemplate.ONE); + SearchResults results = query().from(cat).groupBy(cat.id) + .limit(1).distinct().listResults(NumberTemplate.ONE); + + assertEquals(1, ids.size()); + assertEquals(1, results.getResults().size()); + assertEquals(1, results.getTotal()); + } + @Test public void In() { assertEquals(3l, query().from(cat).where(cat.name.in("Bob123", "Ruth123", "Felix123")).count()); From 17d917f1b6c2012f0304698dbf78cd0088aa05ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 27 Nov 2014 20:04:46 +0200 Subject: [PATCH 0576/1968] Fix handling for PostgreSQL and Oracle --- .../src/main/java/com/mysema/query/sql/AbstractSQLQuery.java | 3 ++- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java index 9d7266bf77..52fa7fbf26 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/AbstractSQLQuery.java @@ -373,7 +373,8 @@ public List list(Expression expr) { public SearchResults listResults(Expression expr) { QueryModifiers originalModifiers = queryMixin.getMetadata().getModifiers(); try { - if (configuration.getTemplates().isCountViaAnalytics()) { + if (configuration.getTemplates().isCountViaAnalytics() + && queryMixin.getMetadata().getGroupBy().isEmpty()) { List results; try { queryMixin.addFlag(rowCountFlag); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 874e98bcf4..90c3c9ba88 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -611,6 +611,7 @@ public void GroupBy_Validate() { } @Test + @ExcludeIn({FIREBIRD}) public void GroupBy_Count() { List ids = query().from(employee).groupBy(employee.id).list(employee.id); long count = query().from(employee).groupBy(employee.id).count(); @@ -624,6 +625,7 @@ public void GroupBy_Count() { } @Test + @ExcludeIn({FIREBIRD}) public void GroupBy_Distinct_Count() { List ids = query().from(employee).groupBy(employee.id).distinct().list(NumberTemplate.ONE); SearchResults results = query().from(employee).groupBy(employee.id) From ded1cbe8000674c8658ba76a836f1a81560816b8 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 28 Nov 2014 15:37:42 +0100 Subject: [PATCH 0577/1968] Wrap RelationalFunctionCalls in joins for HSQLDB --- .../java/com/mysema/query/sql/HSQLDBTemplates.java | 1 + .../com/mysema/query/sql/SerializationTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java index 7e6276438d..313d4cb29c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java @@ -47,6 +47,7 @@ public HSQLDBTemplates(char escape, boolean quote) { setLimitRequired(true); setAutoIncrement(" identity"); setDefaultValues("\ndefault values"); + setFunctionJoinsWrapped(true); add(Ops.TRIM, "trim(both from {0})"); add(Ops.NEGATE, "{0} * -1", 7); diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java index 699f897d00..0d3ee7385f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/SerializationTest.java @@ -138,6 +138,19 @@ public void FunctionCall2() { "on not SURVEY.NAME like tokFunc.prop escape '\\'", q.toString()); } + @Test + public void FunctionCall3() { + RelationalFunctionCall func = RelationalFunctionCall.create(String.class, "TableValuedFunction", "parameter"); + PathBuilder funcAlias = new PathBuilder(String.class, "tokFunc"); + SQLQuery q = new SQLQuery(new HSQLDBTemplates()); + q.from(survey) + .join(func, funcAlias).on(survey.name.like(funcAlias.getString("prop")).not()); + + assertEquals("from SURVEY SURVEY\n" + + "join table(TableValuedFunction(?)) as tokFunc\n" + + "on not SURVEY.NAME like tokFunc.prop escape '\\'", q.toString()); + } + @Test public void Union() { SQLQuery q = new SQLQuery(SQLTemplates.DEFAULT); From 29d87fa1b677440757a2c5de23fa2f256d30f319 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 28 Nov 2014 17:30:24 +0100 Subject: [PATCH 0578/1968] Only wrap functions in joins when they are functions --- .../src/main/java/com/mysema/query/sql/SQLSerializer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index 91c175ce42..2e9906b6fb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -826,7 +826,8 @@ public Void visit(SubQueryExpression query, Void context) { @Override public Void visit(TemplateExpression expr, Void context) { - if (inJoin && templates.isFunctionJoinsWrapped()) { + if (inJoin && expr instanceof RelationalFunctionCall + && templates.isFunctionJoinsWrapped()) { append("table("); super.visit(expr, context); append(")"); From b5d69edc748564ada417d00d4eb2969e21a6d57e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 28 Nov 2014 19:03:59 +0100 Subject: [PATCH 0579/1968] Adjust the log pattern to use MDC --- querydsl-jdo/src/test/resources/log4j.properties | 2 +- querydsl-jpa/src/test/resources/log4j.properties | 2 +- querydsl-sql/src/test/resources/log4j.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-jdo/src/test/resources/log4j.properties b/querydsl-jdo/src/test/resources/log4j.properties index b86a4715ee..798d8a2b5d 100644 --- a/querydsl-jdo/src/test/resources/log4j.properties +++ b/querydsl-jdo/src/test/resources/log4j.properties @@ -2,7 +2,7 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F:%L) - %m%n +log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F:%L) - %m %X%n ### set log levels - for more verbose logging change 'info' to 'debug' ### diff --git a/querydsl-jpa/src/test/resources/log4j.properties b/querydsl-jpa/src/test/resources/log4j.properties index 945b555e69..7cc69be2d3 100644 --- a/querydsl-jpa/src/test/resources/log4j.properties +++ b/querydsl-jpa/src/test/resources/log4j.properties @@ -2,7 +2,7 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F:%L) - %m%n +log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F:%L) - %m %X%n ### set log levels - for more verbose logging change 'info' to 'debug' ### diff --git a/querydsl-sql/src/test/resources/log4j.properties b/querydsl-sql/src/test/resources/log4j.properties index d03c22d72e..a3376383f1 100644 --- a/querydsl-sql/src/test/resources/log4j.properties +++ b/querydsl-sql/src/test/resources/log4j.properties @@ -2,7 +2,7 @@ log4j.appender.stdout=org.apache.log4j.ConsoleAppender #log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F:%L) - %m%n +log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F:%L) - %m %X%n ### set log levels - for more verbose logging change 'info' to 'debug' ### From a81bf2a9fa588e462abbab3a267239535e4b2c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 29 Nov 2014 22:09:52 +0200 Subject: [PATCH 0580/1968] Ignore test --- querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index a1c35d3fa4..d04e169440 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -666,6 +666,7 @@ public void GroupBy_YearMonth() { } @Test + @Ignore // FIXME public void GroupBy_Count() { List ids = query().from(cat).groupBy(cat.id).list(cat.id); long count = query().from(cat).groupBy(cat.id).count(); From 584e5b573ec6b00a6d5b95f0591293ca1d680cd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 29 Nov 2014 22:25:17 +0200 Subject: [PATCH 0581/1968] Add exclusion --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index dce2fa74cd..dc5e28a94a 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -637,6 +637,7 @@ public void GroupBy_Distinct_Count() { } @Test + @ExcludeIn({FIREBIRD}) public void Having_Count() { //Produces empty resultset https://github.com/querydsl/querydsl/issues/1055 query().from(employee) From ad12a0dba5ffeaa3357e4d0eb94e9e024f1270ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 29 Nov 2014 22:59:17 +0200 Subject: [PATCH 0582/1968] Add exclusion --- .../src/test/java/com/mysema/query/AbstractJPATest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index d04e169440..bff6861be8 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -24,6 +24,9 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; +import com.mysema.query.domain.QAnimal; +import com.mysema.query.domain.QCat; +import com.mysema.query.domain.QCompany; import com.mysema.query.group.Group; import com.mysema.query.group.GroupBy; import com.mysema.query.group.QPair; @@ -313,8 +316,8 @@ public void Case() { public void Case2() { query().from(cat) .list(Expressions.cases().when(cat.toes.eq(2)).then(cat.id.multiply(2)) - .when(cat.toes.eq(3)).then(cat.id.multiply(3)) - .otherwise(4)); + .when(cat.toes.eq(3)).then(cat.id.multiply(3)) + .otherwise(4)); } @Test @@ -681,6 +684,7 @@ public void GroupBy_Count() { } @Test + @Ignore // FIXME public void GroupBy_Distinct_Count() { List ids = query().from(cat).groupBy(cat.id).distinct().list(NumberTemplate.ONE); SearchResults results = query().from(cat).groupBy(cat.id) From 8edfb67149c5e0ce7412ee1b605f6657825bbabc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 29 Nov 2014 23:36:52 +0200 Subject: [PATCH 0583/1968] Fix imports --- .../src/test/java/com/mysema/query/AbstractJPATest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index bff6861be8..e335f88742 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -24,9 +24,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; -import com.mysema.query.domain.QAnimal; -import com.mysema.query.domain.QCat; -import com.mysema.query.domain.QCompany; import com.mysema.query.group.Group; import com.mysema.query.group.GroupBy; import com.mysema.query.group.QPair; From 448fef32e9e82ccaf0fa4617b95cade366f0b40d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 30 Nov 2014 22:33:39 +0200 Subject: [PATCH 0584/1968] Bumo version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 6 +++--- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql-spring/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 20 files changed, 22 insertions(+), 22 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index 2e1d0c6719..b41d302129 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 2c33c9e920..4c27cf8c69 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index ffd72e92b7..986821e89a 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index e27e4f0912..6e5856ab25 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml index 04bde89ed8..19eaaf6291 100644 --- a/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/en-US/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml index 8e3f96d89d..3fba9b8db4 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/Querydsl_Reference.xml @@ -1,6 +1,6 @@ + ]> diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 56fe6322e1..4f2b5366e4 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index f97fd6aa6f..3d41fb82c2 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index d65f0d7fbd..3931562617 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index bb33c021ac..a38a5b4356 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index c929a04c01..c98edcc72b 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index da3abb5b34..b86afb215d 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 4eab4f7f14..7f59e4eb84 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index e045408a8e..f6ace76a2c 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 01cfa43e15..aa740cdde9 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,10 +1,10 @@ - + 4.0.0 com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 Querydsl parent project for Querydsl modules ${project.homepage} @@ -569,4 +569,4 @@ - + diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 855b4978a8..8362b1f592 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 4d1c3d0b33..7d77019a78 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 795eef1351..0e5f9c465d 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index 7900111e79..3ac0758396 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 5f2d46e863..1a9b65ef16 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0.BUILD-SNAPSHOT + 3.6.0 ../querydsl-root/pom.xml From 719eb822473f67fa55061834af39a5886a3128b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 30 Nov 2014 23:00:46 +0200 Subject: [PATCH 0585/1968] Bump version --- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 2 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 2 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 2 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 2 +- querydsl-sql-spring/pom.xml | 2 +- querydsl-sql/pom.xml | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index b41d302129..e2024df789 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 4c27cf8c69..c181f46f86 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 986821e89a..86e9d61d6d 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 6e5856ab25..73b8a079eb 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 4f2b5366e4..018953305e 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 3d41fb82c2..5404e9832e 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 3931562617..582b18ccd1 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index a38a5b4356..cf341b35de 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index c98edcc72b..bc3c056f31 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index b86afb215d..33b1de299d 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 7f59e4eb84..af9d075831 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index f6ace76a2c..a936b9c6c2 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index aa740cdde9..9c23f27919 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 8362b1f592..acd3b3ebff 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 7d77019a78..d238099407 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 0e5f9c465d..3d97afed9f 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index 3ac0758396..ed6e641704 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 1a9b65ef16..ef6ab8a77a 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -5,7 +5,7 @@ com.mysema.querydsl querydsl-root - 3.6.0 + 3.6.1.BUILD-SNAPSHOT ../querydsl-root/pom.xml From 0a7f022022bc46e76f09c630b770af40a9052e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 30 Nov 2014 23:10:27 +0200 Subject: [PATCH 0586/1968] Add test --- .../com/mysema/query/AbstractJPATest.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index e335f88742..849c01c9d9 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -13,6 +13,10 @@ */ package com.mysema.query; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; @@ -283,8 +287,23 @@ public void Any_Simple() { } @Test - public void Any_Usage() { - assertEquals(1, query().from(cat).where(cat.kittens.any().name.eq("Ruth123")).count()); + public void Any_Serialized() throws Exception { + Predicate where = cat.kittens.any().name.eq("Ruth123"); + + // serialize predicate + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(baos); + out.writeObject(where); + out.close(); + + // deserialize predicate + ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); + ObjectInputStream in = new ObjectInputStream(bain); + Predicate where2 = (Predicate) in.readObject(); + in.close(); + + assertEquals(1, query().from(cat).where(where).count()); + assertEquals(1, query().from(cat).where(where2).count()); } @SuppressWarnings("unchecked") From 79be07f5ad94414b526168c1f2e85babf0acec30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 1 Dec 2014 19:54:50 +0200 Subject: [PATCH 0587/1968] Fix hashCode handling --- .../mysema/query/types/ExpressionBase.java | 4 +-- .../com/mysema/query/types/PathMetadata.java | 19 +++++++++++-- .../com/mysema/query/AbstractJPATest.java | 28 ++++++++++++++++--- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java index 7a0a589a9d..6c2ced42bb 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionBase.java @@ -29,10 +29,10 @@ public abstract class ExpressionBase implements Expression { private final Class type; @Nullable - private volatile String toString; + private transient volatile String toString; @Nullable - private volatile Integer hashCode; + private transient volatile Integer hashCode; public ExpressionBase(Class type) { this.type = type; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java index 8461b245f4..79ed1ef586 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java @@ -13,10 +13,12 @@ */ package com.mysema.query.types; -import java.io.Serializable; - import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.lang.reflect.Field; import com.google.common.base.Objects; @@ -32,7 +34,7 @@ public final class PathMetadata implements Serializable{ private final Object element; - private final int hashCode; + private transient final int hashCode; @Nullable private final Path parent, root; @@ -98,4 +100,15 @@ public boolean isRoot() { return parent == null || (pathType == PathType.DELEGATE && parent.getMetadata().isRoot()); } + private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { + try { + ois.defaultReadObject(); + Field field = PathMetadata.class.getDeclaredField("hashCode"); + field.setAccessible(true); + field.set(this, 31 * element.hashCode() + pathType.hashCode()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index 849c01c9d9..972bd3c063 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -13,10 +13,7 @@ */ package com.mysema.query; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import java.io.*; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; @@ -306,6 +303,29 @@ public void Any_Serialized() throws Exception { assertEquals(1, query().from(cat).where(where2).count()); } + @Test + public void Any_Serialized2() throws Exception { + Predicate where = cat.kittens.any().name.eq("Ruth123"); + + File file = new File("target", "predicate.ser"); + if (!file.exists()) { + // serialize predicate on first run + FileOutputStream fileOutputStream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(fileOutputStream); + out.writeObject(where); + out.close(); + assertEquals(1, query().from(cat).where(where).count()); + } else { + // deserialize predicate on second run + FileInputStream fileInputStream = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(fileInputStream); + Predicate where2 = (Predicate) in.readObject(); + in.close(); + assertEquals(1, query().from(cat).where(where2).count()); + } + } + + @SuppressWarnings("unchecked") @Test public void ArrayProjection() { From 795178ab847c4c9d6e79e40fe044cfbe287f5f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 1 Dec 2014 22:37:52 +0200 Subject: [PATCH 0588/1968] Further improvements --- .../query/types/expr/DslExpression.java | 23 +++++-- .../com/mysema/query/AbstractJPATest.java | 43 ------------ .../mysema/query/jpa/SerializationBase.java | 66 +++++++++++++++---- 3 files changed, 70 insertions(+), 62 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java index 8541475f8b..0090123c34 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java @@ -13,10 +13,11 @@ */ package com.mysema.query.types.expr; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Ops; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathImpl; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.lang.reflect.Field; + +import com.mysema.query.types.*; /** * DslExpression is the base class for DSL expressions, but {@link SimpleExpression} is the base class @@ -31,7 +32,7 @@ public abstract class DslExpression implements Expression { protected final Expression mixin; - protected final int hashCode; + protected transient final int hashCode; public DslExpression(Expression mixin) { this.mixin = mixin; @@ -77,4 +78,16 @@ public final String toString() { return mixin.toString(); } + private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { + try { + ois.defaultReadObject(); + Field field = DslExpression.class.getDeclaredField("hashCode"); + field.setAccessible(true); + field.set(this, mixin.hashCode()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index 972bd3c063..45b68754cd 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -283,49 +283,6 @@ public void Any_Simple() { assertEquals(1, query().from(cat).where(cat.kittens.any().name.eq("Ruth123")).count()); } - @Test - public void Any_Serialized() throws Exception { - Predicate where = cat.kittens.any().name.eq("Ruth123"); - - // serialize predicate - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(baos); - out.writeObject(where); - out.close(); - - // deserialize predicate - ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bain); - Predicate where2 = (Predicate) in.readObject(); - in.close(); - - assertEquals(1, query().from(cat).where(where).count()); - assertEquals(1, query().from(cat).where(where2).count()); - } - - @Test - public void Any_Serialized2() throws Exception { - Predicate where = cat.kittens.any().name.eq("Ruth123"); - - File file = new File("target", "predicate.ser"); - if (!file.exists()) { - // serialize predicate on first run - FileOutputStream fileOutputStream = new FileOutputStream(file); - ObjectOutputStream out = new ObjectOutputStream(fileOutputStream); - out.writeObject(where); - out.close(); - assertEquals(1, query().from(cat).where(where).count()); - } else { - // deserialize predicate on second run - FileInputStream fileInputStream = new FileInputStream(file); - ObjectInputStream in = new ObjectInputStream(fileInputStream); - Predicate where2 = (Predicate) in.readObject(); - in.close(); - assertEquals(1, query().from(cat).where(where2).count()); - } - } - - @SuppressWarnings("unchecked") @Test public void ArrayProjection() { diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java index e1e9576063..aaf97856a5 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java @@ -13,25 +13,17 @@ */ package com.mysema.query.jpa; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - import javax.persistence.EntityManager; - -import org.junit.Test; -import org.junit.runner.RunWith; +import java.io.*; import com.mysema.query.QueryMetadata; import com.mysema.query.jpa.domain.QCat; import com.mysema.query.jpa.impl.JPAQuery; +import com.mysema.query.types.Predicate; import com.mysema.testutil.JPATestRunner; +import org.junit.Test; +import org.junit.runner.RunWith; +import static org.junit.Assert.*; @RunWith(JPATestRunner.class) public class SerializationBase { @@ -43,7 +35,7 @@ public class SerializationBase { @Test public void test() throws IOException, ClassNotFoundException{ // create query - JPAQuery query = new JPAQuery(entityManager); + JPAQuery query = query(); query.from(cat).where(cat.name.eq("Kate")).list(cat); // get metadata @@ -75,6 +67,52 @@ public void test() throws IOException, ClassNotFoundException{ query2.list(cat); } + @Test + public void Any_Serialized() throws Exception { + Predicate where = cat.kittens.any().name.eq("Ruth123"); + + // serialize predicate + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(baos); + out.writeObject(where); + out.close(); + + // deserialize predicate + ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); + ObjectInputStream in = new ObjectInputStream(bain); + Predicate where2 = (Predicate) in.readObject(); + in.close(); + + assertEquals(1, query().from(cat).where(where).count()); + assertEquals(1, query().from(cat).where(where2).count()); + } + + @Test + public void Any_Serialized2() throws Exception { + Predicate where = cat.kittens.any().name.eq("Ruth123"); + + File file = new File("target", "predicate.ser"); + if (!file.exists()) { + // serialize predicate on first run + FileOutputStream fileOutputStream = new FileOutputStream(file); + ObjectOutputStream out = new ObjectOutputStream(fileOutputStream); + out.writeObject(where); + out.close(); + assertEquals(1, query().from(cat).where(where).count()); + } else { + // deserialize predicate on second run + FileInputStream fileInputStream = new FileInputStream(file); + ObjectInputStream in = new ObjectInputStream(fileInputStream); + Predicate where2 = (Predicate) in.readObject(); + in.close(); + assertEquals(1, query().from(cat).where(where2).count()); + } + } + + private JPAQuery query() { + return new JPAQuery(entityManager); + } + public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } From c1343214fc8947cc940af741f2fb130f83ed2395 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 2 Dec 2014 10:52:20 +0100 Subject: [PATCH 0589/1968] Use the already present 'Enclosed' JUnit test suite --- .../test/java/com/mysema/testutil/CustomSuite.java | 13 ------------- .../com/mysema/query/suites/AbstractJPASuite.java | 4 ++-- .../java/com/mysema/query/suites/AbstractSuite.java | 4 ++-- .../java/com/mysema/query/suites/AbstractSuite.java | 6 +++--- 4 files changed, 7 insertions(+), 20 deletions(-) delete mode 100644 querydsl-core/src/test/java/com/mysema/testutil/CustomSuite.java diff --git a/querydsl-core/src/test/java/com/mysema/testutil/CustomSuite.java b/querydsl-core/src/test/java/com/mysema/testutil/CustomSuite.java deleted file mode 100644 index 1a92db3c57..0000000000 --- a/querydsl-core/src/test/java/com/mysema/testutil/CustomSuite.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mysema.testutil; - -import org.junit.runners.Suite; -import org.junit.runners.model.InitializationError; -import org.junit.runners.model.RunnerBuilder; - -public class CustomSuite extends Suite { - - public CustomSuite(Class klass, RunnerBuilder builder) throws InitializationError { - super(builder, klass, klass.getClasses()); - } - -} diff --git a/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractJPASuite.java b/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractJPASuite.java index 3a6d9df574..ede24d41b4 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractJPASuite.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractJPASuite.java @@ -1,12 +1,12 @@ package com.mysema.query.suites; import org.junit.AfterClass; +import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import com.mysema.query.Mode; -import com.mysema.testutil.CustomSuite; -@RunWith(CustomSuite.class) +@RunWith(Enclosed.class) public abstract class AbstractJPASuite { @AfterClass diff --git a/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractSuite.java b/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractSuite.java index c0b6309102..537ae4b015 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractSuite.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/suites/AbstractSuite.java @@ -1,12 +1,12 @@ package com.mysema.query.suites; import org.junit.AfterClass; +import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import com.mysema.query.Mode; -import com.mysema.testutil.CustomSuite; -@RunWith(CustomSuite.class) +@RunWith(Enclosed.class) public abstract class AbstractSuite { @AfterClass diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/AbstractSuite.java b/querydsl-sql/src/test/java/com/mysema/query/suites/AbstractSuite.java index 22a217fa86..6ef4583350 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/AbstractSuite.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/AbstractSuite.java @@ -3,12 +3,12 @@ import java.sql.SQLException; import org.junit.AfterClass; +import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import com.mysema.query.Connections; -import com.mysema.testutil.CustomSuite; -@RunWith(CustomSuite.class) +@RunWith(Enclosed.class) public abstract class AbstractSuite { @AfterClass @@ -16,4 +16,4 @@ public static void tearDown() throws SQLException { Connections.close(); } -} \ No newline at end of file +} From 403cbe4cec49ea6d82c1329ca089fdc322e176a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Dec 2014 18:46:47 +0200 Subject: [PATCH 0590/1968] Add tests --- .../mysema/query/types/SerializationTest.java | 35 +++++++++++++++++++ .../mysema/query/jpa/SerializationBase.java | 12 +++---- 2 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 querydsl-core/src/test/java/com/mysema/query/types/SerializationTest.java diff --git a/querydsl-core/src/test/java/com/mysema/query/types/SerializationTest.java b/querydsl-core/src/test/java/com/mysema/query/types/SerializationTest.java new file mode 100644 index 0000000000..d84d47dbed --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/types/SerializationTest.java @@ -0,0 +1,35 @@ +package com.mysema.query.types; + +import java.io.*; + +import com.mysema.query.types.path.SimplePath; +import org.junit.Test; +import static org.junit.Assert.assertEquals; + +public class SerializationTest { + + @Test + public void roundtrip() throws Exception { + PathImpl path = new PathImpl(Object.class, "entity"); + SimplePath path2 = new SimplePath(Object.class, "entity"); + assertEquals(path, roundtrip(path)); + assertEquals(path2, roundtrip(path2)); + assertEquals(path2.isNull(), roundtrip(path2.isNull())); + assertEquals(path.hashCode(), roundtrip(path).hashCode()); + assertEquals(path2.hashCode(), roundtrip(path2).hashCode()); + assertEquals(path2.isNull().hashCode(), roundtrip(path2.isNull()).hashCode()); + } + + private T roundtrip(T obj) throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(baos); + out.writeObject(obj); + out.close(); + + // deserialize predicate + ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); + ObjectInputStream in = new ObjectInputStream(bain); + return (T) in.readObject(); + } + +} diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java index aaf97856a5..ff3c3038b6 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java @@ -69,7 +69,7 @@ public void test() throws IOException, ClassNotFoundException{ @Test public void Any_Serialized() throws Exception { - Predicate where = cat.kittens.any().name.eq("Ruth123"); + Predicate where = cat.kittens.any().name.eq("Ruth234"); // serialize predicate ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -83,13 +83,13 @@ public void Any_Serialized() throws Exception { Predicate where2 = (Predicate) in.readObject(); in.close(); - assertEquals(1, query().from(cat).where(where).count()); - assertEquals(1, query().from(cat).where(where2).count()); + assertEquals(0, query().from(cat).where(where).count()); + assertEquals(0, query().from(cat).where(where2).count()); } @Test public void Any_Serialized2() throws Exception { - Predicate where = cat.kittens.any().name.eq("Ruth123"); + Predicate where = cat.kittens.any().name.eq("Ruth234"); File file = new File("target", "predicate.ser"); if (!file.exists()) { @@ -98,14 +98,14 @@ public void Any_Serialized2() throws Exception { ObjectOutputStream out = new ObjectOutputStream(fileOutputStream); out.writeObject(where); out.close(); - assertEquals(1, query().from(cat).where(where).count()); + assertEquals(0, query().from(cat).where(where).count()); } else { // deserialize predicate on second run FileInputStream fileInputStream = new FileInputStream(file); ObjectInputStream in = new ObjectInputStream(fileInputStream); Predicate where2 = (Predicate) in.readObject(); in.close(); - assertEquals(1, query().from(cat).where(where2).count()); + assertEquals(0, query().from(cat).where(where2).count()); } } From 48a88a60acade88cebf02c312f0c6671c2e6d510 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 2 Dec 2014 18:22:53 +0100 Subject: [PATCH 0591/1968] Use the isAnnotationPresent method for annotation presence checking --- .../src/test/java/com/mysema/query/JPAProviderRule.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java b/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java index f38737b2a8..54c7a8775d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPAProviderRule.java @@ -37,11 +37,8 @@ public Statement apply(Statement base, FrameworkMethod method, Object target) { } private boolean hasAnnotation(FrameworkMethod method, Class clazz) { - T rv = method.getMethod().getAnnotation(clazz); - if (rv == null) { - rv = method.getMethod().getDeclaringClass().getAnnotation(clazz); - } - return rv != null; + return method.getMethod().isAnnotationPresent(clazz) + || method.getMethod().getDeclaringClass().isAnnotationPresent(clazz); } } From 9b7fef5a072a34a5b5b559f1df44e6bbf76130f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Dec 2014 19:44:31 +0200 Subject: [PATCH 0592/1968] Fix cyclic dependency --- .../com/mysema/query/types/OperationImpl.java | 8 +++--- .../com/mysema/query/types/PathMetadata.java | 4 ++- .../query/types/expr/DslExpression.java | 26 ++++--------------- 3 files changed, 13 insertions(+), 25 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java b/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java index b5ea624fbc..2fe3f08ca0 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/OperationImpl.java @@ -13,13 +13,12 @@ */ package com.mysema.query.types; +import javax.annotation.concurrent.Immutable; import java.io.IOException; import java.io.ObjectInputStream; import java.lang.reflect.Field; import java.util.List; -import javax.annotation.concurrent.Immutable; - import com.google.common.collect.ImmutableList; @@ -104,9 +103,12 @@ private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IO Field field = OperationImpl.class.getDeclaredField("operator"); field.setAccessible(true); field.set(this, OperatorImpl.OPS.get(operator.getId())); - } catch (Exception e) { + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { throw new RuntimeException(e); } + } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java index 79ed1ef586..59fcafc148 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java @@ -106,7 +106,9 @@ private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IO Field field = PathMetadata.class.getDeclaredField("hashCode"); field.setAccessible(true); field.set(this, 31 * element.hashCode() + pathType.hashCode()); - } catch (Exception e) { + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { throw new RuntimeException(e); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java index 0090123c34..6862e0b263 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java @@ -13,11 +13,10 @@ */ package com.mysema.query.types.expr; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.lang.reflect.Field; - -import com.mysema.query.types.*; +import com.mysema.query.types.Expression; +import com.mysema.query.types.Ops; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathImpl; /** * DslExpression is the base class for DSL expressions, but {@link SimpleExpression} is the base class @@ -32,11 +31,8 @@ public abstract class DslExpression implements Expression { protected final Expression mixin; - protected transient final int hashCode; - public DslExpression(Expression mixin) { this.mixin = mixin; - this.hashCode = mixin.hashCode(); } @Override @@ -70,7 +66,7 @@ public boolean equals(Object o) { // can be overwritten @Override public final int hashCode() { - return hashCode; + return mixin.hashCode(); } @Override @@ -78,16 +74,4 @@ public final String toString() { return mixin.toString(); } - private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { - try { - ois.defaultReadObject(); - Field field = DslExpression.class.getDeclaredField("hashCode"); - field.setAccessible(true); - field.set(this, mixin.hashCode()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - } From 3a8d58b4128097c7166833877a89c965c50d3968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Dec 2014 20:21:26 +0200 Subject: [PATCH 0593/1968] Add stub for JPAMapAccessVisitor --- .../com/mysema/query/types/PathMetadata.java | 3 +- .../query/types/PathMetadataFactory.java | 11 +++++ .../mysema/query/jpa/JPAMapAccessVisitor.java | 48 +++++++++++++++++++ .../com/mysema/query/jpa/JPAQueryMixin.java | 8 +++- .../java/com/mysema/query/jpa/JPQLOps.java | 4 ++ .../com/mysema/query/jpa/JPQLTemplates.java | 2 + 6 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java index 8461b245f4..ea083cda0a 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java @@ -13,10 +13,9 @@ */ package com.mysema.query.types; -import java.io.Serializable; - import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; +import java.io.Serializable; import com.google.common.base.Objects; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java index f42822de36..8e2279e7e6 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java @@ -61,9 +61,20 @@ public static PathMetadata forCollectionAny(Path parent) { * @param delegate * @return */ + @Deprecated public static PathMetadata forDelegate(Path delegate) { return new PathMetadata(delegate, delegate, PathType.DELEGATE); } + + /** + * Create a new PathMetadata for delegate access + * + * @param delegate + * @return + */ + public static PathMetadata forDelegate(Expression delegate) { + return new PathMetadata(null, delegate, PathType.DELEGATE); + } /** * Create a new PathMetadata for indexed list access diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java new file mode 100644 index 0000000000..808b3cd935 --- /dev/null +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java @@ -0,0 +1,48 @@ +package com.mysema.query.jpa; + +import javax.annotation.Nullable; +import java.util.Map; + +import com.google.common.collect.Maps; +import com.mysema.query.JoinType; +import com.mysema.query.QueryMetadata; +import com.mysema.query.support.Expressions; +import com.mysema.query.support.ReplaceVisitor; +import com.mysema.query.types.*; + +class JPAMapAccessVisitor extends ReplaceVisitor { + + private final QueryMetadata metadata; + + private final Map, Path> replacements = Maps.newHashMap(); + + public JPAMapAccessVisitor(QueryMetadata metadata) { + this.metadata = metadata; + } + + public Expression visit(Path expr, @Nullable Void context) { + PathMetadata pathMetadata = expr.getMetadata(); + if (pathMetadata.getPathType() == PathType.MAPVALUE + || pathMetadata.getPathType() == PathType.MAPVALUE_CONSTANT) { + Path replacement = replacements.get(expr); + if (replacement == null) { + // join parent as path123 on key(path123) = ... + // expr -> value(path123) + Path parent = pathMetadata.getParent(); + Path joinPath = new PathImpl(Object.class, "path" + (replacements.size() + 1)); + metadata.addJoin(JoinType.DEFAULT, ExpressionUtils.as(parent, joinPath)); + metadata.addJoinCondition(ExpressionUtils.eq( + Expressions.operation(Object.class, JPQLOps.KEY, joinPath), + pathMetadata.getElement() instanceof Expression ? (Expression)pathMetadata.getElement() + : ConstantImpl.create(pathMetadata.getElement()))); + Expression value = Expressions.operation(expr.getType(), JPQLOps.VALUE, joinPath); + replacement = new PathImpl(expr.getType(), PathMetadataFactory.forDelegate(value)); + replacements.put(expr, replacement); + } + return replacement; + } else { + return super.visit(expr, context); + } + } + +} diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java index 15da7c814a..8207beec44 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java @@ -40,20 +40,26 @@ public class JPAQueryMixin extends QueryMixin { private final Map, Path> aliases = Maps.newHashMap(); + private final JPAMapAccessVisitor mapAccessVisitor; + private ReplaceVisitor replaceVisitor; public static final JoinFlag FETCH = new JoinFlag("fetch "); public static final JoinFlag FETCH_ALL_PROPERTIES = new JoinFlag(" fetch all properties"); - public JPAQueryMixin() {} + public JPAQueryMixin() { + mapAccessVisitor = new JPAMapAccessVisitor(getMetadata()); + } public JPAQueryMixin(QueryMetadata metadata) { super(metadata); + mapAccessVisitor = new JPAMapAccessVisitor(metadata); } public JPAQueryMixin(T self, QueryMetadata metadata) { super(self, metadata); + mapAccessVisitor = new JPAMapAccessVisitor(metadata); } public T fetch() { diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLOps.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLOps.java index 16d222879c..40dd3930bd 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLOps.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLOps.java @@ -36,5 +36,9 @@ public final class JPQLOps { public static final Operator NOT_MEMBER_OF = new OperatorImpl(NS, "NOT_MEMBER_OF"); + public static final Operator KEY = new OperatorImpl(NS, "KEY"); + + public static final Operator VALUE = new OperatorImpl(NS, "VALUE"); + private JPQLOps(){} } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java index db636c13da..512e576c9d 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLTemplates.java @@ -136,6 +136,8 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(JPQLOps.TYPE, "type({0})"); add(JPQLOps.INDEX, "index({0})"); add(JPQLOps.TREAT, "treat({0} as {1s})"); + add(JPQLOps.KEY, "key({0})"); + add(JPQLOps.VALUE, "value({0})"); //CHECKSTYLE:ON } From 4c8c9e7c30e86502e84e35e3260bad55244827a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Dec 2014 21:51:06 +0200 Subject: [PATCH 0594/1968] Add hashCode back --- .../com/mysema/query/types/PathMetadata.java | 20 ++----------------- .../query/types/expr/DslExpression.java | 5 ++++- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java index 59fcafc148..57e319d2d0 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java @@ -15,10 +15,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; -import java.io.IOException; -import java.io.ObjectInputStream; import java.io.Serializable; -import java.lang.reflect.Field; import com.google.common.base.Objects; @@ -34,7 +31,7 @@ public final class PathMetadata implements Serializable{ private final Object element; - private transient final int hashCode; + private final int hashCode; @Nullable private final Path parent, root; @@ -45,8 +42,8 @@ public PathMetadata(@Nullable Path parent, Object element, PathType type) { this.parent = parent; this.element = element; this.pathType = type; - this.hashCode = 31 * element.hashCode() + pathType.hashCode(); this.root = parent != null ? parent.getRoot() : null; + this.hashCode = 31 * element.hashCode() + pathType.name().hashCode(); } @Override @@ -100,17 +97,4 @@ public boolean isRoot() { return parent == null || (pathType == PathType.DELEGATE && parent.getMetadata().isRoot()); } - private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { - try { - ois.defaultReadObject(); - Field field = PathMetadata.class.getDeclaredField("hashCode"); - field.setAccessible(true); - field.set(this, 31 * element.hashCode() + pathType.hashCode()); - } catch (NoSuchFieldException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } - } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java index 6862e0b263..8541475f8b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/DslExpression.java @@ -31,8 +31,11 @@ public abstract class DslExpression implements Expression { protected final Expression mixin; + protected final int hashCode; + public DslExpression(Expression mixin) { this.mixin = mixin; + this.hashCode = mixin.hashCode(); } @Override @@ -66,7 +69,7 @@ public boolean equals(Object o) { // can be overwritten @Override public final int hashCode() { - return mixin.hashCode(); + return hashCode; } @Override From 85b4434c224b1522f9427fc950f2df4c3727bf45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Dec 2014 22:14:56 +0200 Subject: [PATCH 0595/1968] Add tests --- .../com/mysema/query/types/ValidatingVisitor.java | 5 ++--- .../com/mysema/query/jpa/JPAMapAccessVisitor.java | 7 ++++--- .../java/com/mysema/query/jpa/JPAQueryMixin.java | 4 ++++ .../test/java/com/mysema/query/AbstractJPATest.java | 12 ++++++++++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java b/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java index a390fb99b9..2eb65fcdf5 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java @@ -13,13 +13,12 @@ */ package com.mysema.query.types; -import static com.mysema.query.util.CollectionUtils.add; - import java.io.Serializable; import java.util.Set; import com.mysema.query.JoinExpression; import com.mysema.query.QueryMetadata; +import static com.mysema.query.util.CollectionUtils.add; /** * ValidatingVisitor visits expressions and ensures that only known path instances are used @@ -74,7 +73,7 @@ public Set> visit(ParamExpression expr, Set> know @Override public Set> visit(Path expr, Set> known) { - if (!known.contains(expr.getRoot())) { + if (!known.contains(expr.getRoot()) && expr.getMetadata().getPathType() != PathType.DELEGATE) { throw new IllegalArgumentException(String.format(errorTemplate, expr.getRoot())); } return known; diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java index 808b3cd935..4edf0061ee 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java @@ -29,10 +29,11 @@ public Expression visit(Path expr, @Nullable Void context) { // join parent as path123 on key(path123) = ... // expr -> value(path123) Path parent = pathMetadata.getParent(); - Path joinPath = new PathImpl(Object.class, "path" + (replacements.size() + 1)); - metadata.addJoin(JoinType.DEFAULT, ExpressionUtils.as(parent, joinPath)); + ParametrizedExpression parExpr = (ParametrizedExpression) parent; + Path joinPath = new PathImpl(parExpr.getParameter(1), "path" + (replacements.size() + 1)); + metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, joinPath)); metadata.addJoinCondition(ExpressionUtils.eq( - Expressions.operation(Object.class, JPQLOps.KEY, joinPath), + Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, joinPath), pathMetadata.getElement() instanceof Expression ? (Expression)pathMetadata.getElement() : ConstantImpl.create(pathMetadata.getElement()))); Expression value = Expressions.operation(expr.getType(), JPQLOps.VALUE, joinPath); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java index 8207beec44..36dbb04e21 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java @@ -154,6 +154,7 @@ private Path convertPathForOrder(Path path) { @Override public Expression convert(Expression expr, boolean forOrder) { + expr = (Expression) expr.accept(mapAccessVisitor, null); if (forOrder) { if (expr instanceof Path) { expr = convertPathForOrder((Path)expr); @@ -176,6 +177,9 @@ protected Predicate normalize(Predicate predicate, boolean where) { if (predicate != null) { predicate = (Predicate) ExpressionUtils.extract(predicate); } + if (predicate != null) { + predicate = (Predicate) predicate.accept(mapAccessVisitor, null); + } if (predicate != null) { // transform any usage predicate = (Predicate) predicate.accept(JPACollectionAnyVisitor.DEFAULT, new Context()); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index e335f88742..0d96399339 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -858,6 +858,18 @@ public void List_ElementCollection_Of_String() { assertTrue(strings.contains("b")); } + @Test + public void Map_Get() { + QShow show = QShow.show; + query().from(show).list(show.acts.get("a")); + } + + @Test + public void Map_Get2() { + QShow show = QShow.show; + query().from(show).where(show.acts.get("X").isNull()).count(); + } + @Test @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsKey() { From f18363a8e60ba3860193c18dc8d6389be9f18c6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 2 Dec 2014 23:07:07 +0200 Subject: [PATCH 0596/1968] Update tests --- .../src/test/java/com/mysema/query/AbstractJPATest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index 0d96399339..db4533ce49 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -865,9 +865,10 @@ public void Map_Get() { } @Test + @NoHibernate public void Map_Get2() { QShow show = QShow.show; - query().from(show).where(show.acts.get("X").isNull()).count(); + assertEquals(1, query().from(show).where(show.acts.get("a").eq("A")).count()); } @Test From 3b010852ba294e0962cefd5ee62d14d54a6c185f Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 4 Dec 2014 09:12:06 +0100 Subject: [PATCH 0597/1968] Replace reflective operation in tests with an interface method call --- .../java/com/mysema/query/HibernateBase.java | 4 ++- .../query/HibernateQueryMutabilityTest.java | 4 ++- .../com/mysema/query/HibernateSQLBase.java | 4 ++- .../test/java/com/mysema/query/JPABase.java | 24 ++++++++------- .../mysema/query/JPAQueryMutabilityTest.java | 3 +- .../java/com/mysema/query/JPASQLBase.java | 4 +-- .../test/java/com/mysema/query/JPATest.java | 27 +++++++++++++++++ .../mysema/query/QueryPerformanceTest.java | 3 +- .../com/mysema/query/jpa/HibernateTest.java | 27 +++++++++++++++++ .../com/mysema/query/jpa/IntegrationBase.java | 29 ++++++++++--------- .../mysema/query/jpa/JPAIntegrationBase.java | 16 ++++++---- .../query/jpa/JPAQueryMutabilityTest.java | 4 ++- .../mysema/query/jpa/SerializationBase.java | 14 ++++----- .../mysema/query/jpa/UniqueResultsTest.java | 3 +- .../mysema/testutil/HibernateTestRunner.java | 29 ++++++++++--------- .../com/mysema/testutil/JPATestRunner.java | 16 +++++----- 16 files changed, 142 insertions(+), 69 deletions(-) create mode 100644 querydsl-jpa/src/test/java/com/mysema/query/JPATest.java create mode 100644 querydsl-jpa/src/test/java/com/mysema/query/jpa/HibernateTest.java diff --git a/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java b/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java index 6ca8703d5f..1ed72ea7bc 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/HibernateBase.java @@ -30,6 +30,7 @@ import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.jpa.HQLTemplates; +import com.mysema.query.jpa.HibernateTest; import com.mysema.query.jpa.JPQLTemplates; import com.mysema.query.jpa.ScrollableResultsIterator; import com.mysema.query.jpa.domain.Cat; @@ -43,7 +44,7 @@ * */ @RunWith(HibernateTestRunner.class) -public class HibernateBase extends AbstractJPATest { +public class HibernateBase extends AbstractJPATest implements HibernateTest { private static final QCat cat = QCat.cat; @@ -70,6 +71,7 @@ protected JPQLTemplates getTemplates() { return HQLTemplates.DEFAULT; } + @Override public void setSession(Session session) { this.session = session; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/HibernateQueryMutabilityTest.java b/querydsl-jpa/src/test/java/com/mysema/query/HibernateQueryMutabilityTest.java index 44a672802e..f151d45225 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/HibernateQueryMutabilityTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/HibernateQueryMutabilityTest.java @@ -23,13 +23,14 @@ import org.junit.Test; import org.junit.runner.RunWith; +import com.mysema.query.jpa.HibernateTest; import com.mysema.query.jpa.domain.QCat; import com.mysema.query.jpa.hibernate.HibernateQuery; import com.mysema.testutil.HibernateTestRunner; @Ignore @RunWith(HibernateTestRunner.class) -public class HibernateQueryMutabilityTest{ +public class HibernateQueryMutabilityTest implements HibernateTest { private Session session; @@ -37,6 +38,7 @@ protected HibernateQuery query() { return new HibernateQuery(session); } + @Override public void setSession(Session session) { this.session = session; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/HibernateSQLBase.java b/querydsl-jpa/src/test/java/com/mysema/query/HibernateSQLBase.java index f218c54ccf..73c96d9cfb 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/HibernateSQLBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/HibernateSQLBase.java @@ -23,6 +23,7 @@ import org.junit.rules.MethodRule; import org.junit.runner.RunWith; +import com.mysema.query.jpa.HibernateTest; import com.mysema.query.jpa.domain.Cat; import com.mysema.query.jpa.domain.Color; import com.mysema.query.jpa.domain.QCat; @@ -33,7 +34,7 @@ import com.mysema.testutil.HibernateTestRunner; @RunWith(HibernateTestRunner.class) -public class HibernateSQLBase extends AbstractSQLTest { +public class HibernateSQLBase extends AbstractSQLTest implements HibernateTest { @Rule public static MethodRule targetRule = new TargetRule(); @@ -49,6 +50,7 @@ protected HibernateSQLQuery query() { return new HibernateSQLQuery(session, templates); } + @Override public void setSession(Session session) { this.session = session; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java b/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java index a3d50d512b..13d885b753 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPABase.java @@ -13,14 +13,23 @@ */ package com.mysema.query; -import javax.persistence.EntityManager; -import javax.persistence.FlushModeType; -import javax.persistence.LockModeType; +import static org.junit.Assert.*; + import java.sql.Connection; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.persistence.EntityManager; +import javax.persistence.FlushModeType; +import javax.persistence.LockModeType; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.MethodRule; +import org.junit.runner.RunWith; + import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.jpa.JPASubQuery; import com.mysema.query.jpa.domain.*; @@ -30,19 +39,13 @@ import com.mysema.query.types.expr.BooleanExpression; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.JPATestRunner; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.MethodRule; -import org.junit.runner.RunWith; -import static org.junit.Assert.*; /** * @author tiwe * */ @RunWith(JPATestRunner.class) -public class JPABase extends AbstractJPATest { +public class JPABase extends AbstractJPATest implements JPATest { private static final QCat cat = QCat.cat; @@ -68,6 +71,7 @@ protected JPAQuery testQuery() { return new JPAQuery(entityManager, new DefaultQueryMetadata().noValidate()); } + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java b/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java index cb29ada3c2..3fcde62f56 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java @@ -28,7 +28,7 @@ @Ignore @RunWith(JPATestRunner.class) -public class JPAQueryMutabilityTest { +public class JPAQueryMutabilityTest implements JPATest { private EntityManager entityManager; @@ -36,6 +36,7 @@ protected JPAQuery query() { return new JPAQuery(entityManager); } + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPASQLBase.java b/querydsl-jpa/src/test/java/com/mysema/query/JPASQLBase.java index 006a1f186b..3d2f557ed6 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPASQLBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPASQLBase.java @@ -34,7 +34,7 @@ import com.mysema.testutil.JPATestRunner; @RunWith(JPATestRunner.class) -public class JPASQLBase extends AbstractSQLTest { +public class JPASQLBase extends AbstractSQLTest implements JPATest { @Rule public static MethodRule targetRule = new TargetRule(); @@ -51,7 +51,7 @@ protected JPASQLQuery query() { return new JPASQLQuery(entityManager, templates); } - + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/JPATest.java new file mode 100644 index 0000000000..28ce9d9daa --- /dev/null +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPATest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query; + +import javax.persistence.EntityManager; + +/** + * + * @author Shredder121 + */ +public interface JPATest { + + void setEntityManager(EntityManager entityManager); +} diff --git a/querydsl-jpa/src/test/java/com/mysema/query/QueryPerformanceTest.java b/querydsl-jpa/src/test/java/com/mysema/query/QueryPerformanceTest.java index c0df3b55db..d121034497 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/QueryPerformanceTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/QueryPerformanceTest.java @@ -21,7 +21,7 @@ @RunWith(JPATestRunner.class) @Ignore @Category(Performance.class) -public class QueryPerformanceTest { +public class QueryPerformanceTest implements JPATest { private static final int iterations = 1000; @@ -99,6 +99,7 @@ public void ById_TwoCols_Qdsl() { } + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/HibernateTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/HibernateTest.java new file mode 100644 index 0000000000..6e310abed5 --- /dev/null +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/HibernateTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query.jpa; + +import org.hibernate.Session; + +/** + * + * @author Shredder121 + */ +public interface HibernateTest { + + void setSession(Session session); +} diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/IntegrationBase.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/IntegrationBase.java index 32f080fb2a..037406f23d 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/IntegrationBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/IntegrationBase.java @@ -13,8 +13,18 @@ */ package com.mysema.query.jpa; -import antlr.RecognitionException; -import antlr.TokenStreamException; +import static org.junit.Assert.assertEquals; + +import java.util.Arrays; +import java.util.List; + +import org.hibernate.Query; +import org.hibernate.ScrollMode; +import org.hibernate.ScrollableResults; +import org.hibernate.Session; +import org.junit.Test; +import org.junit.runner.RunWith; + import com.mysema.query.jpa.domain.Cat; import com.mysema.query.jpa.domain.QCat; import com.mysema.query.jpa.hibernate.HibernateDeleteClause; @@ -23,20 +33,12 @@ import com.mysema.query.jpa.hibernate.HibernateUtil; import com.mysema.query.types.EntityPath; import com.mysema.testutil.HibernateTestRunner; -import org.hibernate.Query; -import org.hibernate.ScrollMode; -import org.hibernate.ScrollableResults; -import org.hibernate.Session; -import org.junit.Test; -import org.junit.runner.RunWith; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertEquals; +import antlr.RecognitionException; +import antlr.TokenStreamException; @RunWith(HibernateTestRunner.class) -public class IntegrationBase extends ParsingTest { +public class IntegrationBase extends ParsingTest implements HibernateTest { private Session session; @@ -161,6 +163,7 @@ public void Collection() throws Exception{ } + @Override public void setSession(Session session) { this.session = session; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java index be18c06d42..1a6f66f6d4 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java @@ -16,19 +16,22 @@ import javax.persistence.EntityManager; import javax.persistence.Query; -import antlr.RecognitionException; -import antlr.TokenStreamException; +import org.junit.Rule; +import org.junit.rules.MethodRule; +import org.junit.runner.RunWith; + import com.mysema.query.JPAProviderRule; +import com.mysema.query.JPATest; import com.mysema.query.TargetRule; import com.mysema.query.jpa.impl.JPAProvider; import com.mysema.query.jpa.impl.JPAUtil; import com.mysema.testutil.JPATestRunner; -import org.junit.Rule; -import org.junit.rules.MethodRule; -import org.junit.runner.RunWith; + +import antlr.RecognitionException; +import antlr.TokenStreamException; @RunWith(JPATestRunner.class) -public class JPAIntegrationBase extends ParsingTest { +public class JPAIntegrationBase extends ParsingTest implements JPATest { @Rule public static MethodRule targetRule = new TargetRule(); @@ -66,6 +69,7 @@ public void parse() throws RecognitionException, TokenStreamException { }; } + @Override public void setEntityManager(EntityManager em) { this.em = em; this.templates = JPAProvider.getTemplates(em); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAQueryMutabilityTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAQueryMutabilityTest.java index 54bb4254c6..8b65e1bd04 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAQueryMutabilityTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAQueryMutabilityTest.java @@ -24,6 +24,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import com.mysema.query.JPATest; import com.mysema.query.QueryMutability; import com.mysema.query.jpa.domain.Cat; import com.mysema.query.jpa.domain.sql.SAnimal; @@ -34,7 +35,7 @@ @Ignore @RunWith(JPATestRunner.class) -public class JPAQueryMutabilityTest{ +public class JPAQueryMutabilityTest implements JPATest { private static final SQLTemplates derbyTemplates = new DerbyTemplates(); @@ -44,6 +45,7 @@ protected JPASQLQuery query() { return new JPASQLQuery(entityManager, derbyTemplates); } + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java index e1e9576063..ac985c7224 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SerializationBase.java @@ -13,28 +13,23 @@ */ package com.mysema.query.jpa; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import java.io.*; import javax.persistence.EntityManager; import org.junit.Test; import org.junit.runner.RunWith; +import com.mysema.query.JPATest; import com.mysema.query.QueryMetadata; import com.mysema.query.jpa.domain.QCat; import com.mysema.query.jpa.impl.JPAQuery; import com.mysema.testutil.JPATestRunner; @RunWith(JPATestRunner.class) -public class SerializationBase { +public class SerializationBase implements JPATest { private QCat cat = QCat.cat; @@ -75,6 +70,7 @@ public void test() throws IOException, ClassNotFoundException{ query2.list(cat); } + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/UniqueResultsTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/UniqueResultsTest.java index d8fc8bb97f..c2ba3757c2 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/UniqueResultsTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/UniqueResultsTest.java @@ -27,7 +27,7 @@ @Ignore @RunWith(HibernateTestRunner.class) -public class UniqueResultsTest { +public class UniqueResultsTest implements HibernateTest { private Session session; @@ -48,6 +48,7 @@ private HibernateQuery query() { return new HibernateQuery(session); } + @Override public void setSession(Session session) { this.session = session; } diff --git a/querydsl-jpa/src/test/java/com/mysema/testutil/HibernateTestRunner.java b/querydsl-jpa/src/test/java/com/mysema/testutil/HibernateTestRunner.java index 699941473e..2cefc35dec 100644 --- a/querydsl-jpa/src/test/java/com/mysema/testutil/HibernateTestRunner.java +++ b/querydsl-jpa/src/test/java/com/mysema/testutil/HibernateTestRunner.java @@ -13,8 +13,14 @@ */ package com.mysema.testutil; -import com.mysema.query.Mode; -import com.mysema.query.jpa.domain.Domain; +import static com.google.common.base.Verify.verify; + +import java.io.InputStream; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.List; +import java.util.Properties; + import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; @@ -29,12 +35,9 @@ import org.junit.runners.model.InitializationError; import org.junit.runners.model.Statement; -import java.io.InputStream; -import java.lang.reflect.Method; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.List; -import java.util.Properties; +import com.mysema.query.Mode; +import com.mysema.query.jpa.HibernateTest; +import com.mysema.query.jpa.domain.Domain; /** * @author tiwe @@ -46,8 +49,6 @@ public class HibernateTestRunner extends BlockJUnit4ClassRunner { private Session session; - private Method setter; - private boolean isDerby = false; public HibernateTestRunner(Class klass) throws InitializationError { @@ -56,6 +57,9 @@ public HibernateTestRunner(Class klass) throws InitializationError { @Override protected List rules(Object test) { + verify(test instanceof HibernateTest, "In order to use the %s for %s, it should (directly or indirectly) implement %s", + HibernateTestRunner.class.getSimpleName(), test.getClass(), HibernateTest.class); + List rules = super.rules(test); rules.add(new MethodRule() { @Override @@ -63,10 +67,7 @@ public Statement apply(final Statement base, FrameworkMethod method, final Objec return new Statement() { @Override public void evaluate() throws Throwable { - if (setter == null) { - setter = target.getClass().getMethod("setSession", Session.class); - } - setter.invoke(target, session); + ((HibernateTest) target).setSession(session); base.evaluate(); } }; diff --git a/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java b/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java index 18abb629a7..84f1246946 100644 --- a/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java +++ b/querydsl-jpa/src/test/java/com/mysema/testutil/JPATestRunner.java @@ -13,7 +13,8 @@ */ package com.mysema.testutil; -import java.lang.reflect.Method; +import static com.google.common.base.Verify.verify; + import java.sql.DriverManager; import java.sql.SQLException; import java.util.List; @@ -31,6 +32,7 @@ import org.junit.runners.model.InitializationError; import org.junit.runners.model.Statement; +import com.mysema.query.JPATest; import com.mysema.query.Mode; /** @@ -43,16 +45,17 @@ public class JPATestRunner extends BlockJUnit4ClassRunner { private EntityManager entityManager; - private Method setter; - private boolean isDerby; - public JPATestRunner(Class klass) throws InitializationError{ + public JPATestRunner(Class klass) throws InitializationError { super(klass); } @Override protected List rules(Object test) { + verify(test instanceof JPATest, "In order to use the %s for %s, it should (directly or indirectly) implement %s", + JPATestRunner.class.getSimpleName(), test.getClass(), JPATest.class); + List rules = super.rules(test); rules.add(new MethodRule() { @Override @@ -60,10 +63,7 @@ public Statement apply(final Statement base, FrameworkMethod method, final Objec return new Statement() { @Override public void evaluate() throws Throwable { - if (setter == null) { - setter = target.getClass().getMethod("setEntityManager", EntityManager.class); - } - setter.invoke(target, entityManager); + ((JPATest) target).setEntityManager(entityManager); base.evaluate(); } }; From 3f2ca5ccaddf243229081094aa31d3a470243fcc Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 4 Dec 2014 19:52:17 +0100 Subject: [PATCH 0598/1968] Respect the user-specified existing templates during JPAQuery.clone() --- .../mysema/query/jpa/impl/AbstractJPAQuery.java | 17 ++++++++++++++++- .../com/mysema/query/jpa/impl/JPAQuery.java | 10 ++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java index b8cf895141..05e63be057 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java @@ -355,13 +355,28 @@ protected void clone(Q query) { */ public abstract Q clone(EntityManager entityManager); + /** + * Clone the state of this query to a new instance with the given EntityManager + * using the specified templates + * + * @param entityManager + * @param templates + * @return + */ + public abstract Q clone(EntityManager entityManager, JPQLTemplates templates); + /** * Clone the state of this query to a new instance * * @return */ public Q clone() { - return this.clone(this.entityManager); + JPQLTemplates existingTemplates = getTemplates(); + if (existingTemplates != null) { + return clone(entityManager, existingTemplates); + }else { + return clone(entityManager); + } } } diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java index 534b3a8c2d..645f62f545 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/JPAQuery.java @@ -74,10 +74,16 @@ public JPAQuery(EntityManager em, JPQLTemplates templates, QueryMetadata metadat super(em, templates, metadata); } - public JPAQuery clone(EntityManager entityManager) { - JPAQuery q = new JPAQuery(entityManager, JPAProvider.getTemplates(entityManager), getMetadata().clone()); + @Override + public JPAQuery clone(EntityManager entityManager, JPQLTemplates templates) { + JPAQuery q = new JPAQuery(entityManager, templates, getMetadata().clone()); q.clone(this); return q; } + @Override + public JPAQuery clone(EntityManager entityManager) { + return clone(entityManager, JPAProvider.getTemplates(entityManager)); + } + } From 9c093a4d61c607938b343f5213639488d3bc693a Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 4 Dec 2014 21:14:14 +0100 Subject: [PATCH 0599/1968] Change clone() to copy all state --- .../java/com/mysema/query/jpa/impl/AbstractJPAQuery.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java index 05e63be057..399ce304e9 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/impl/AbstractJPAQuery.java @@ -357,7 +357,7 @@ protected void clone(Q query) { /** * Clone the state of this query to a new instance with the given EntityManager - * using the specified templates + * and the specified templates * * @param entityManager * @param templates @@ -371,12 +371,7 @@ protected void clone(Q query) { * @return */ public Q clone() { - JPQLTemplates existingTemplates = getTemplates(); - if (existingTemplates != null) { - return clone(entityManager, existingTemplates); - }else { - return clone(entityManager); - } + return clone(entityManager, getTemplates()); } } From 640b34ddf05c488e60a059fe3f46cf6decaa79b9 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 4 Dec 2014 21:59:01 +0100 Subject: [PATCH 0600/1968] Revert "Tell Travis to wait for the build to complete" This reverts commit ee53603614d9e1ba2cf6649723368dd4351b6c5a. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7b09d55584..cb7987c2e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ services: addons: postgresql: "9.3" install: - - travis_wait sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true' + - sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true' before_script: - mysql -u root -e "source travis/mysql.sql" - psql -U postgres -f travis/postgresql.sql From f2738519b0cfcd0d993f3183049b3f1390c9a3d0 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 5 Dec 2014 00:03:04 +0100 Subject: [PATCH 0601/1968] Fold test output via travis_fold --- .../mysema/testutil/TravisFoldListener.java | 38 +++++++++++++++++++ querydsl-root/pom.xml | 6 +++ 2 files changed, 44 insertions(+) create mode 100644 querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java diff --git a/querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java b/querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java new file mode 100644 index 0000000000..0148a4dfb3 --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java @@ -0,0 +1,38 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.testutil; + +import org.junit.runner.Description; +import org.junit.runner.Result; +import org.junit.runner.notification.RunListener; + +/** + * + * @author Shredder121 + */ +public class TravisFoldListener extends RunListener { + + @Override + public void testRunStarted(Description description) throws Exception { + System.out.println("travis_fold:start:tests"); + } + + @Override + public void testRunFinished(Result result) throws Exception { + System.out.println("travis_fold:end:tests"); + } + +} diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 9c23f27919..ca9835c150 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -531,6 +531,12 @@ **/MSSQLSuiteTest.java **/TeradataSuiteTest.java + + + listener + com.mysema.testutil.TravisFoldListener + + From 5d9f5b34f892b8dde06ed828c7e1c3d3eb9d3f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 6 Dec 2014 20:11:48 +0200 Subject: [PATCH 0602/1968] Use left join --- .../src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java index 4edf0061ee..3085c0bfdb 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java @@ -31,7 +31,7 @@ public Expression visit(Path expr, @Nullable Void context) { Path parent = pathMetadata.getParent(); ParametrizedExpression parExpr = (ParametrizedExpression) parent; Path joinPath = new PathImpl(parExpr.getParameter(1), "path" + (replacements.size() + 1)); - metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, joinPath)); + metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(parent, joinPath)); metadata.addJoinCondition(ExpressionUtils.eq( Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, joinPath), pathMetadata.getElement() instanceof Expression ? (Expression)pathMetadata.getElement() From d1668c80df4b64afe7c16e89a3f7ff898b1f880e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 5 Dec 2014 00:03:04 +0100 Subject: [PATCH 0603/1968] Fold test output via travis_fold --- .../mysema/testutil/TravisFoldListener.java | 41 +++++++++++++++++++ querydsl-root/pom.xml | 6 +++ 2 files changed, 47 insertions(+) create mode 100644 querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java diff --git a/querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java b/querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java new file mode 100644 index 0000000000..ff12813ef2 --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/testutil/TravisFoldListener.java @@ -0,0 +1,41 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.testutil; + +import org.junit.runner.Description; +import org.junit.runner.Result; +import org.junit.runner.notification.RunListener; + +/** + * + * @author Shredder121 + */ +public class TravisFoldListener extends RunListener { + + private static final long ID = System.currentTimeMillis(); + + @Override + public void testRunStarted(Description description) throws Exception { + System.out.println("travis_fold:start:tests" + ID); + System.out.println("Running tests"); + } + + @Override + public void testRunFinished(Result result) throws Exception { + System.out.println("travis_fold:end:tests" + ID); + } + +} diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 9c23f27919..ca9835c150 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -531,6 +531,12 @@ **/MSSQLSuiteTest.java **/TeradataSuiteTest.java + + + listener + com.mysema.testutil.TravisFoldListener + + From e81325e009af676490133685c7d1250217a5d330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 7 Dec 2014 22:51:19 +0200 Subject: [PATCH 0604/1968] Unify JPAMapAccessVisitor and JPAListAccessVisitor --- .../query/support/CollectionAnyVisitor.java | 37 +++------------ .../query/support/ListAccessVisitor.java | 3 +- .../mysema/query/support/ReplaceVisitor.java | 10 ++-- .../mysema/query/types/ExpressionUtils.java | 42 +++++++++++++++-- querydsl-jpa/pom.xml | 6 +-- .../query/jpa/JPACollectionAnyVisitor.java | 6 +-- .../query/jpa/JPAListAccessVisitor.java | 46 +++++++++++++++++++ .../mysema/query/jpa/JPAMapAccessVisitor.java | 9 ++-- .../com/mysema/query/jpa/JPAQueryMixin.java | 17 +++---- .../mysema/query/jpa/JPAIntegrationBase.java | 23 ++++------ .../com/mysema/query/jpa/ParsingTest.java | 34 +++----------- .../com/mysema/query/jpa/domain/Order.java | 17 ++----- 12 files changed, 135 insertions(+), 115 deletions(-) create mode 100644 querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java diff --git a/querydsl-core/src/main/java/com/mysema/query/support/CollectionAnyVisitor.java b/querydsl-core/src/main/java/com/mysema/query/support/CollectionAnyVisitor.java index ab1e8f5889..1ddd985594 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/CollectionAnyVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/CollectionAnyVisitor.java @@ -14,31 +14,8 @@ package com.mysema.query.support; -import java.util.UUID; - import com.google.common.collect.ImmutableList; -import com.mysema.query.types.CollectionExpression; -import com.mysema.query.types.Constant; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Expression; -import com.mysema.query.types.FactoryExpression; -import com.mysema.query.types.Operation; -import com.mysema.query.types.OperationImpl; -import com.mysema.query.types.Operator; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.PathImpl; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.PathMetadataFactory; -import com.mysema.query.types.PathType; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.PredicateOperation; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.TemplateExpression; -import com.mysema.query.types.TemplateExpressionImpl; -import com.mysema.query.types.Templates; -import com.mysema.query.types.ToStringVisitor; -import com.mysema.query.types.Visitor; +import com.mysema.query.types.*; import com.mysema.query.types.path.EntityPathBase; import com.mysema.query.types.path.ListPath; import com.mysema.query.types.path.SimplePath; @@ -54,14 +31,13 @@ @SuppressWarnings("unchecked") public class CollectionAnyVisitor implements Visitor,Context> { - public static final CollectionAnyVisitor DEFAULT = new CollectionAnyVisitor(); - - public static final Templates TEMPLATES = new Templates() { - { + @Deprecated + public static final Templates TEMPLATES = new Templates() {{ add(PathType.PROPERTY, "{0}_{1}"); add(PathType.COLLECTION_ANY, "{0}"); }}; + public static final CollectionAnyVisitor DEFAULT = new CollectionAnyVisitor(); @SuppressWarnings("rawtypes") private static Path replaceParent(Path path, Path parent) { @@ -139,9 +115,8 @@ public Expression visit(Path expr, Context context) { if (expr.getMetadata().getPathType() == PathType.COLLECTION_ANY) { Path parent = (Path) expr.getMetadata().getParent().accept(this, context); expr = new PathImpl(expr.getType(), PathMetadataFactory.forCollectionAny(parent)); - String variable = expr.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); - String suffix = UUID.randomUUID().toString().replace("-", "").substring(0,5); - EntityPath replacement = new EntityPathBase(expr.getType(), variable + suffix); + EntityPath replacement = new EntityPathBase(expr.getType(), + ExpressionUtils.createRootVariable(expr)); context.add(expr, replacement); return replacement; diff --git a/querydsl-core/src/main/java/com/mysema/query/support/ListAccessVisitor.java b/querydsl-core/src/main/java/com/mysema/query/support/ListAccessVisitor.java index 5e4e9bc6f1..bfaeb77883 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/ListAccessVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/ListAccessVisitor.java @@ -44,13 +44,14 @@ * @author tiwe * */ +@Deprecated public class ListAccessVisitor implements Visitor,Context> { private static final class UnderscoreTemplates extends Templates { { add(PathType.PROPERTY, "{0}_{1}"); add(PathType.LISTVALUE, "{0}_{1}"); - add(PathType.LISTVALUE_CONSTANT, "{0}_{1}"); + add(PathType.LISTVALUE_CONSTANT, "{0}_{1}"); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java index b53c4c26f2..254f222a5e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/ReplaceVisitor.java @@ -16,6 +16,7 @@ import javax.annotation.Nullable; import java.util.List; import java.util.Map; +import java.util.Objects; import com.google.common.collect.ImmutableList; import com.mysema.query.*; @@ -67,11 +68,14 @@ public Expression visit(Path expr, @Nullable Void context) { } else { PathMetadata metadata = expr.getMetadata(); Path parent = (Path)metadata.getParent().accept(this, null); - if (parent.equals(metadata.getParent())) { + Object element = metadata.getElement(); + if (element instanceof Expression) { + element = ((Expression) element).accept(this, null); + } + if (parent.equals(metadata.getParent()) && Objects.equals(element, metadata.getElement())) { return expr; } else { - metadata = new PathMetadata(parent, metadata.getElement(), - metadata.getPathType()); + metadata = new PathMetadata(parent, element, metadata.getPathType()); return new PathImpl(expr.getType(), metadata); } } diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java index bf5e801465..f201db1a74 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java @@ -15,10 +15,7 @@ import javax.annotation.Nullable; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; import com.google.common.collect.ImmutableList; import com.mysema.query.BooleanBuilder; @@ -35,6 +32,17 @@ */ public final class ExpressionUtils { + private static class UnderscoreTemplates extends Templates { + private UnderscoreTemplates() { + add(PathType.PROPERTY, "{0}_{1}"); + add(PathType.COLLECTION_ANY, "{0}"); + add(PathType.LISTVALUE, "{0}_{1}"); + add(PathType.LISTVALUE_CONSTANT, "{0}_{1}"); + } + } + + private static final Templates TEMPLATES = new UnderscoreTemplates(); + /** * @param col * @return @@ -524,6 +532,32 @@ public static Expression extract(Expression expr) { } } + /** + * Create a new root variable based on the given path + * + * @param path + * @return + */ + public static String createRootVariable(Path path) { + String variable = path.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); + String suffix = UUID.randomUUID().toString().replace("-", "").substring(0, 5); + return variable + suffix; + } + + /** + * Converts the given object to an Expression + * + * @param o + * @return + */ + public static Expression toExpression(Object o) { + if (o instanceof Expression) { + return (Expression) o; + } else { + return ConstantImpl.create(o); + } + } + private ExpressionUtils() {} } diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index cf341b35de..10f63e1263 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -23,7 +23,7 @@ - 4.3.5.Final + 4.3.7.Final 4.3.1.Final 2.5.1 javax.persistence.*;version="[1.1,3)",${osgi.import.package.root} @@ -362,4 +362,4 @@ - + diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACollectionAnyVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACollectionAnyVisitor.java index 8e6a7cbfa5..1e30ffb7a4 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACollectionAnyVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPACollectionAnyVisitor.java @@ -14,7 +14,6 @@ package com.mysema.query.jpa; import javax.persistence.Entity; -import java.util.UUID; import com.mysema.query.support.CollectionAnyVisitor; import com.mysema.query.support.Context; @@ -46,9 +45,8 @@ protected Predicate exists(Context c, Predicate condition) { } else { // join via parent Path parent = child.getMetadata().getParent(); - String prefix = parent.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); - String suffix = UUID.randomUUID().toString().replace("-", "").substring(0,5); - EntityPathBase newParent = new EntityPathBase(parent.getType(), prefix + suffix); + EntityPathBase newParent = new EntityPathBase(parent.getType(), + ExpressionUtils.createRootVariable(parent)); EntityPath newChild = new EntityPathBase(child.getType(), PathMetadataFactory.forProperty(newParent, child.getMetadata().getName())); query.from(newParent).innerJoin(newChild, replacement); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java new file mode 100644 index 0000000000..d776b9e352 --- /dev/null +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java @@ -0,0 +1,46 @@ +package com.mysema.query.jpa; + +import javax.annotation.Nullable; +import java.util.Map; + +import com.google.common.collect.Maps; +import com.mysema.query.JoinType; +import com.mysema.query.QueryMetadata; +import com.mysema.query.support.Expressions; +import com.mysema.query.support.ReplaceVisitor; +import com.mysema.query.types.*; + +class JPAListAccessVisitor extends ReplaceVisitor { + + private final QueryMetadata metadata; + + private final Map, Path> replacements = Maps.newHashMap(); + + public JPAListAccessVisitor(QueryMetadata metadata) { + this.metadata = metadata; + } + + public Expression visit(Path expr, @Nullable Void context) { + expr = (Path) super.visit(expr, null); + PathMetadata pathMetadata = expr.getMetadata(); + if (pathMetadata.getPathType() == PathType.LISTVALUE + || pathMetadata.getPathType() == PathType.LISTVALUE_CONSTANT) { + Path replacement = replacements.get(expr); + if (replacement == null) { + // join parent as path123 on index(path123) = ... + Path parent = pathMetadata.getParent(); + replacement = new PathImpl(expr.getType(), + ExpressionUtils.createRootVariable(parent)); + metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, replacement)); + metadata.addJoinCondition(ExpressionUtils.eq( + (Expression)Expressions.operation(Integer.class, JPQLOps.INDEX, replacement), + ExpressionUtils.toExpression(pathMetadata.getElement()))); + replacements.put(expr, replacement); + } + return replacement; + } else { + return super.visit(expr, context); + } + } + +} diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java index 3085c0bfdb..41d2a04647 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java @@ -21,6 +21,7 @@ public JPAMapAccessVisitor(QueryMetadata metadata) { } public Expression visit(Path expr, @Nullable Void context) { + expr = (Path) super.visit(expr, null); PathMetadata pathMetadata = expr.getMetadata(); if (pathMetadata.getPathType() == PathType.MAPVALUE || pathMetadata.getPathType() == PathType.MAPVALUE_CONSTANT) { @@ -30,12 +31,12 @@ public Expression visit(Path expr, @Nullable Void context) { // expr -> value(path123) Path parent = pathMetadata.getParent(); ParametrizedExpression parExpr = (ParametrizedExpression) parent; - Path joinPath = new PathImpl(parExpr.getParameter(1), "path" + (replacements.size() + 1)); - metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(parent, joinPath)); + Path joinPath = new PathImpl(parExpr.getParameter(1), + ExpressionUtils.createRootVariable(parent)); + metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, joinPath)); metadata.addJoinCondition(ExpressionUtils.eq( Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, joinPath), - pathMetadata.getElement() instanceof Expression ? (Expression)pathMetadata.getElement() - : ConstantImpl.create(pathMetadata.getElement()))); + ExpressionUtils.toExpression(pathMetadata.getElement()))); Expression value = Expressions.operation(expr.getType(), JPQLOps.VALUE, joinPath); replacement = new PathImpl(expr.getType(), PathMetadataFactory.forDelegate(value)); replacements.put(expr, replacement); diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java index 36dbb04e21..dd6f6fe260 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java @@ -42,6 +42,8 @@ public class JPAQueryMixin extends QueryMixin { private final JPAMapAccessVisitor mapAccessVisitor; + private final JPAListAccessVisitor listAccessVisitor; + private ReplaceVisitor replaceVisitor; public static final JoinFlag FETCH = new JoinFlag("fetch "); @@ -50,16 +52,19 @@ public class JPAQueryMixin extends QueryMixin { public JPAQueryMixin() { mapAccessVisitor = new JPAMapAccessVisitor(getMetadata()); + listAccessVisitor = new JPAListAccessVisitor(getMetadata()); } public JPAQueryMixin(QueryMetadata metadata) { super(metadata); mapAccessVisitor = new JPAMapAccessVisitor(metadata); + listAccessVisitor = new JPAListAccessVisitor(metadata); } public JPAQueryMixin(T self, QueryMetadata metadata) { super(self, metadata); mapAccessVisitor = new JPAMapAccessVisitor(metadata); + listAccessVisitor = new JPAListAccessVisitor(metadata); } public T fetch() { @@ -155,6 +160,7 @@ private Path convertPathForOrder(Path path) { @Override public Expression convert(Expression expr, boolean forOrder) { expr = (Expression) expr.accept(mapAccessVisitor, null); + expr = (Expression) expr.accept(listAccessVisitor, null); if (forOrder) { if (expr instanceof Path) { expr = convertPathForOrder((Path)expr); @@ -179,20 +185,11 @@ protected Predicate normalize(Predicate predicate, boolean where) { } if (predicate != null) { predicate = (Predicate) predicate.accept(mapAccessVisitor, null); + predicate = (Predicate) predicate.accept(listAccessVisitor, null); } if (predicate != null) { // transform any usage predicate = (Predicate) predicate.accept(JPACollectionAnyVisitor.DEFAULT, new Context()); - - // transform list access - Context context = new Context(); - predicate = (Predicate) predicate.accept(ListAccessVisitor.DEFAULT, context); - for (int i = 0; i < context.paths.size(); i++) { - Path path = context.paths.get(i); - if (!paths.contains(path)) { - addCondition(context, i, path, where); - } - } return predicate; } else { return null; diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java index be18c06d42..0acd6e8b44 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/JPAIntegrationBase.java @@ -45,22 +45,15 @@ protected QueryHelper query() { return new QueryHelper(templates) { @Override public void parse() throws RecognitionException, TokenStreamException { + JPQLSerializer serializer = new JPQLSerializer(templates); + serializer.serialize(getMetadata(), false, null); + Query query = em.createQuery(serializer.toString()); + JPAUtil.setConstants(query, serializer.getConstantToLabel(), getMetadata().getParams()); try { - //System.out.println("query : " + toString().replace('\n', ' ')); - - // create Query and execute it - JPQLSerializer serializer = new JPQLSerializer(templates); - serializer.serialize(getMetadata(), false, null); - Query query = em.createQuery(serializer.toString()); - JPAUtil.setConstants(query, serializer.getConstantToLabel(), getMetadata().getParams()); - try { - query.getResultList(); - } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } finally { - //System.out.println(); + query.getResultList(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); } } }; diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java index b473741f68..eb51d91bf6 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java @@ -13,40 +13,22 @@ */ package com.mysema.query.jpa; -import static com.mysema.query.Target.DERBY; -import static com.mysema.query.Target.H2; -import static com.mysema.query.Target.HSQLDB; -import static com.mysema.query.Target.MYSQL; -import static com.mysema.query.Target.ORACLE; -import static com.mysema.query.Target.POSTGRES; -import static com.mysema.query.alias.Alias.$; -import static com.mysema.query.alias.Alias.alias; -import static org.junit.Assert.assertEquals; - -import org.junit.Ignore; -import org.junit.Test; - import antlr.RecognitionException; import antlr.TokenStreamException; - import com.mysema.query.NoBatooJPA; import com.mysema.query.NoEclipseLink; import com.mysema.query.NoOpenJPA; -import com.mysema.query.jpa.domain.Cat; -import com.mysema.query.jpa.domain.Catalog; -import com.mysema.query.jpa.domain.Color; -import com.mysema.query.jpa.domain.Customer; -import com.mysema.query.jpa.domain.DomesticCat; -import com.mysema.query.jpa.domain.Payment; -import com.mysema.query.jpa.domain.Product; -import com.mysema.query.jpa.domain.QFamily; -import com.mysema.query.jpa.domain.QFooDTO; -import com.mysema.query.jpa.domain.QItem; -import com.mysema.query.jpa.domain.QProduct; +import com.mysema.query.jpa.domain.*; import com.mysema.query.types.expr.ComparableExpression; import com.mysema.query.types.expr.DateExpression; import com.mysema.query.types.expr.NumberExpression; import com.mysema.testutil.ExcludeIn; +import org.junit.Ignore; +import org.junit.Test; +import static com.mysema.query.Target.*; +import static com.mysema.query.alias.Alias.$; +import static com.mysema.query.alias.Alias.alias; +import static org.junit.Assert.assertEquals; public class ParsingTest extends AbstractQueryTest { @@ -401,7 +383,6 @@ public void DocoExamples98_8() throws Exception { } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void DocoExamples98_9() throws Exception { query().from(person, calendar).select(person).where( calendar.holidays("national holiday").eq(person.birthDay), @@ -409,7 +390,6 @@ public void DocoExamples98_9() throws Exception { } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA @ExcludeIn({DERBY, HSQLDB, ORACLE}) public void DocoExamples98_10() throws Exception { query().from(item, ord).select(item).where( diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java index 881ab9bb4d..1b98e6decc 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java @@ -13,18 +13,9 @@ */ package com.mysema.query.jpa.domain; +import javax.persistence.*; import java.util.List; -import javax.persistence.ElementCollection; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.JoinTable; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; -import javax.persistence.Table; - -import org.hibernate.annotations.IndexColumn; - /** * The Class Order. */ @@ -35,19 +26,19 @@ public class Order { Customer customer; @ElementCollection - @IndexColumn(name = "_index") + @OrderColumn(name = "_index") List deliveredItemIndices; @Id long id; @OneToMany - @IndexColumn(name = "_index") + @OrderColumn(name = "_index") List items; @OneToMany @JoinTable(name = "LineItems") - @IndexColumn(name = "_index") + @OrderColumn(name = "_index") List lineItems; boolean paid; From fb2cea9c17c3976da0f3c5467ffbc0c517280dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 7 Dec 2014 22:54:13 +0200 Subject: [PATCH 0605/1968] Replace proprietary annotation --- .../test/java/com/mysema/query/jpa/domain/Cat.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java index 0006125652..c9598cfc5c 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java @@ -13,19 +13,11 @@ */ package com.mysema.query.jpa.domain; +import javax.persistence.*; import java.util.ArrayList; import java.util.List; import java.util.Set; -import javax.persistence.DiscriminatorValue; -import javax.persistence.Entity; -import javax.persistence.JoinColumn; -import javax.persistence.JoinTable; -import javax.persistence.ManyToOne; -import javax.persistence.OneToMany; - -import org.hibernate.annotations.IndexColumn; - /** * The Class Cat. */ @@ -39,7 +31,7 @@ public class Cat extends Animal { @OneToMany @JoinTable(name = "kittens", joinColumns = @JoinColumn(name = "cat_id"), inverseJoinColumns = @JoinColumn(name = "kitten_id")) - @IndexColumn(name = "ind") + @OrderColumn(name = "ind") private List kittens = new ArrayList(); @OneToMany From 8417375e70baea94d412d1ef26ac8dd92cd5a747 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 25 Sep 2014 19:00:43 +0200 Subject: [PATCH 0606/1968] Remove all manual array copying code Additionally, use Guava's splitter to split Strings --- .../query/apt/DefaultConfiguration.java | 31 +++++++++---------- .../java/com/mysema/util/ReflectionUtils.java | 20 ++---------- .../query/mongodb/MongodbSerializerTest.java | 16 +++------- .../query/sql/support/PrimaryKeyData.java | 5 ++- .../mysema/query/sql/dml/SQLMergeClause.java | 8 ++--- .../com/mysema/query/ddl/PrimaryKeyData.java | 5 ++- 6 files changed, 31 insertions(+), 54 deletions(-) diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java index f0f56889e7..50dd5d9c52 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/DefaultConfiguration.java @@ -13,14 +13,18 @@ */ package com.mysema.query.apt; +import static com.mysema.query.apt.APTOptions.*; + +import java.lang.annotation.Annotation; +import java.util.*; + import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.processing.RoundEnvironment; import javax.lang.model.element.*; import javax.lang.model.type.TypeMirror; -import java.lang.annotation.Annotation; -import java.util.*; +import com.google.common.base.Splitter; import com.google.common.base.Strings; import com.mysema.codegen.model.ClassType; import com.mysema.query.annotations.Config; @@ -29,7 +33,6 @@ import com.mysema.query.codegen.*; import com.mysema.query.types.Expression; import com.mysema.util.Annotations; -import static com.mysema.query.apt.APTOptions.*; /** * DefaultConfiguration is a simple implementation of the {@link Configuration} interface @@ -39,7 +42,7 @@ */ public class DefaultConfiguration implements Configuration { - private static final String DEFAULT_SEPARATOR = ","; + private static final Splitter DEFAULT_SPLITTER = Splitter.on(","); private boolean unknownAsEmbedded; @@ -145,36 +148,32 @@ public DefaultConfiguration( if (options.containsKey(QUERYDSL_EXCLUDED_PACKAGES)) { String packageString = options.get(QUERYDSL_EXCLUDED_PACKAGES); if (!Strings.isNullOrEmpty(packageString)) { - for (String packageName : packageString.split(DEFAULT_SEPARATOR)) { - excludedPackages.add(packageName); - } + List packages = DEFAULT_SPLITTER.splitToList(packageString); + excludedPackages.addAll(packages); } } if (options.containsKey(QUERYDSL_EXCLUDED_CLASSES)) { String classString = options.get(QUERYDSL_EXCLUDED_CLASSES); if (!Strings.isNullOrEmpty(classString)) { - for (String className : classString.split(DEFAULT_SEPARATOR)) { - excludedClasses.add(className); - } + List classes = DEFAULT_SPLITTER.splitToList(classString); + excludedClasses.addAll(classes); } } if (options.containsKey(QUERYDSL_INCLUDED_PACKAGES)) { String packageString = options.get(QUERYDSL_INCLUDED_PACKAGES); if (!Strings.isNullOrEmpty(packageString)) { - for (String packageName : packageString.split(DEFAULT_SEPARATOR)) { - includedPackages.add(packageName); - } + List packages = DEFAULT_SPLITTER.splitToList(packageString); + includedPackages.addAll(packages); } } if (options.containsKey(QUERYDSL_INCLUDED_CLASSES)) { String classString = options.get(QUERYDSL_INCLUDED_CLASSES); if (!Strings.isNullOrEmpty(classString)) { - for (String className : classString.split(DEFAULT_SEPARATOR)) { - includedClasses.add(className); - } + List classes = DEFAULT_SPLITTER.splitToList(classString); + includedClasses.addAll(classes); } } diff --git a/querydsl-core/src/main/java/com/mysema/util/ReflectionUtils.java b/querydsl-core/src/main/java/com/mysema/util/ReflectionUtils.java index d4450ecaeb..052a985a45 100644 --- a/querydsl-core/src/main/java/com/mysema/util/ReflectionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/util/ReflectionUtils.java @@ -13,20 +13,8 @@ */ package com.mysema.util; -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.lang.reflect.GenericArrayType; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.lang.reflect.WildcardType; -import java.util.ArrayDeque; -import java.util.Arrays; -import java.util.Deque; -import java.util.HashSet; -import java.util.Set; +import java.lang.reflect.*; +import java.util.*; import javax.annotation.Nullable; @@ -163,9 +151,7 @@ public static Set getFields(Class cl) { Set fields = new HashSet(); Class c = cl; while (c != null) { - for (Field field : c.getDeclaredFields()) { - fields.add(field); - } + fields.addAll(Arrays.asList(c.getDeclaredFields())); c = c.getSuperclass(); } return fields; diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java index 80e79f8091..eea1a99606 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java @@ -20,9 +20,6 @@ import java.util.Date; import java.util.List; -import org.junit.Before; -import org.junit.Test; - import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; @@ -31,11 +28,10 @@ import com.mysema.query.mongodb.morphia.MorphiaSerializer; import com.mysema.query.types.Expression; import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.path.DatePath; -import com.mysema.query.types.path.DateTimePath; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.PathBuilder; -import com.mysema.query.types.path.StringPath; +import com.mysema.query.types.path.*; + +import org.junit.Before; +import org.junit.Test; public class MongodbSerializerTest { @@ -239,9 +235,7 @@ public static BasicDBObject dbo(String key, Object... value) { public static BasicDBList dblist(Object... contents) { BasicDBList list = new BasicDBList(); - for (Object o : contents) { - list.add(o); - } + list.addAll(Arrays.asList(contents)); return list; } diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/support/PrimaryKeyData.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/support/PrimaryKeyData.java index a5e4fb8877..69b42077b2 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/support/PrimaryKeyData.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/support/PrimaryKeyData.java @@ -14,6 +14,7 @@ package com.mysema.query.sql.support; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -32,9 +33,7 @@ public PrimaryKeyData(String name) { public PrimaryKeyData(String name, String[] c) { this.name = name; - for (String column : c) { - columns.add(column); - } + columns.addAll(Arrays.asList(c)); } public void add(String column) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index af423d4679..a88d33ed25 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -13,10 +13,11 @@ */ package com.mysema.query.sql.dml; -import javax.annotation.Nullable; import java.sql.*; import java.util.*; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.mysema.query.*; @@ -26,6 +27,7 @@ import com.mysema.query.sql.types.Null; import com.mysema.query.types.*; import com.mysema.util.ResultSetAdapter; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -485,9 +487,7 @@ private long executeNativeMerge() { * @return */ public SQLMergeClause keys(Path... paths) { - for (Path path : paths) { - keys.add(path); - } + keys.addAll(Arrays.asList(paths)); return this; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/ddl/PrimaryKeyData.java b/querydsl-sql/src/test/java/com/mysema/query/ddl/PrimaryKeyData.java index 7037c53538..82e1eca738 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/ddl/PrimaryKeyData.java +++ b/querydsl-sql/src/test/java/com/mysema/query/ddl/PrimaryKeyData.java @@ -6,6 +6,7 @@ package com.mysema.query.ddl; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -24,9 +25,7 @@ public PrimaryKeyData(String name) { public PrimaryKeyData(String name, String[] c) { this.name = name; - for (String column : c) { - columns.add(column); - } + columns.addAll(Arrays.asList(c)); } public void add(String column) { From eb60a83372cd408acf39c0ef0f3a2f4dccc0bb9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 7 Dec 2014 23:01:58 +0200 Subject: [PATCH 0607/1968] Simplify map expressions --- .../java/com/mysema/query/jpa/JPAMapAccessVisitor.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java index 41d2a04647..a92d07760f 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java @@ -28,17 +28,14 @@ public Expression visit(Path expr, @Nullable Void context) { Path replacement = replacements.get(expr); if (replacement == null) { // join parent as path123 on key(path123) = ... - // expr -> value(path123) Path parent = pathMetadata.getParent(); ParametrizedExpression parExpr = (ParametrizedExpression) parent; - Path joinPath = new PathImpl(parExpr.getParameter(1), + replacement = new PathImpl(parExpr.getParameter(1), ExpressionUtils.createRootVariable(parent)); - metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, joinPath)); + metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, replacement)); metadata.addJoinCondition(ExpressionUtils.eq( - Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, joinPath), + Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, replacement), ExpressionUtils.toExpression(pathMetadata.getElement()))); - Expression value = Expressions.operation(expr.getType(), JPQLOps.VALUE, joinPath); - replacement = new PathImpl(expr.getType(), PathMetadataFactory.forDelegate(value)); replacements.put(expr, replacement); } return replacement; From e90c2f48a6d5624b93e0fea63df13b3b663aaa69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 7 Dec 2014 23:03:03 +0200 Subject: [PATCH 0608/1968] Revert PathMetadataFactory change --- .../com/mysema/query/types/PathMetadataFactory.java | 11 ----------- .../com/mysema/query/types/ValidatingVisitor.java | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java index 8e2279e7e6..4d9e6bbef6 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadataFactory.java @@ -61,21 +61,10 @@ public static PathMetadata forCollectionAny(Path parent) { * @param delegate * @return */ - @Deprecated public static PathMetadata forDelegate(Path delegate) { return new PathMetadata(delegate, delegate, PathType.DELEGATE); } - /** - * Create a new PathMetadata for delegate access - * - * @param delegate - * @return - */ - public static PathMetadata forDelegate(Expression delegate) { - return new PathMetadata(null, delegate, PathType.DELEGATE); - } - /** * Create a new PathMetadata for indexed list access * diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java b/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java index 2eb65fcdf5..08b86de1d0 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java @@ -73,7 +73,7 @@ public Set> visit(ParamExpression expr, Set> know @Override public Set> visit(Path expr, Set> known) { - if (!known.contains(expr.getRoot()) && expr.getMetadata().getPathType() != PathType.DELEGATE) { + if (!known.contains(expr.getRoot())) { throw new IllegalArgumentException(String.format(errorTemplate, expr.getRoot())); } return known; From 382b4dbbabdc2a1c05335d0f7d842032666b789e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 8 Dec 2014 21:40:08 +0200 Subject: [PATCH 0609/1968] Fix tests --- .../mysema/query/types/ExpressionUtils.java | 2 +- .../mysema/query/jpa/JPAListAccessVisitor.java | 2 +- .../mysema/query/jpa/AbstractQueryTest.java | 10 ++++++++-- .../com/mysema/query/jpa/SubQueryTest.java | 18 ++++++++---------- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java index f201db1a74..cb4b194982 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ExpressionUtils.java @@ -541,7 +541,7 @@ public static Expression extract(Expression expr) { public static String createRootVariable(Path path) { String variable = path.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); String suffix = UUID.randomUUID().toString().replace("-", "").substring(0, 5); - return variable + suffix; + return variable + "_" + suffix; } /** diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java index d776b9e352..51152ce4f8 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java @@ -31,7 +31,7 @@ public Expression visit(Path expr, @Nullable Void context) { Path parent = pathMetadata.getParent(); replacement = new PathImpl(expr.getType(), ExpressionUtils.createRootVariable(parent)); - metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, replacement)); + metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(parent, replacement)); metadata.addJoinCondition(ExpressionUtils.eq( (Expression)Expressions.operation(Integer.class, JPQLOps.INDEX, replacement), ExpressionUtils.toExpression(pathMetadata.getElement()))); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java index e7d9a3bff5..be939528ab 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java @@ -13,9 +13,9 @@ */ package com.mysema.query.jpa; -import static org.junit.Assert.assertEquals; - import com.mysema.query.types.Expression; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; public abstract class AbstractQueryTest implements Constants { @@ -32,4 +32,10 @@ protected static void assertToString(String expected, Expression expr) { assertEquals(expected, serializer.handle(expr).toString().replace("\n", " ")); } + protected static void assertMatches(String expected, Expression expr) { + JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT, null); + String str = serializer.handle(expr).toString().replace("\n", " "); + assertTrue(expected + "\n!=\n" + str, str.matches(expected)); + } + } diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java index 964b888841..918efb5cbc 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java @@ -13,13 +13,11 @@ */ package com.mysema.query.jpa; -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - import com.mysema.query.domain.QCat; import com.mysema.query.jpa.domain.QEmployee; import com.mysema.query.jpa.domain.QUser; +import org.junit.Test; +import static org.junit.Assert.assertEquals; public class SubQueryTest extends AbstractQueryTest{ @@ -169,18 +167,18 @@ public void Count_Multiple_Sources_Via_List() { @Test public void Indexed_Access() { - assertToString("(select count(cat) from Cat cat " + - "left join cat.kittens as cat_kittens_0 " + - "where index(cat_kittens_0) = ?1 and cat_kittens_0.name = ?2)", + assertMatches("\\(select count\\(cat\\) from Cat cat " + + "left join cat.kittens as cat_kittens_\\w+ " + + "with index\\(cat_kittens_\\w+\\) = \\?1 where cat_kittens_\\w+.name = \\?2\\)", sub().from(cat).where(cat.kittens.get(0).name.eq("Kate")).count()); } @Test public void Indexed_Access_Without_Constant() { - assertToString("(select count(cat) from Cat cat " + - "left join cat.kittens as cat_kittens_cat_id " + - "where index(cat_kittens_cat_id) = cat.id and cat_kittens_cat_id.name = ?1)", + assertMatches("\\(select count\\(cat\\) from Cat cat " + + "left join cat.kittens as cat_kittens_\\w+ " + + "with index\\(cat_kittens_\\w+\\) = cat.id where cat_kittens_\\w+.name = \\?1\\)", sub().from(cat).where(cat.kittens.get(cat.id).name.eq("Kate")).count()); } From 568b0fc06f36c9e724059487759aa9cc1f134d37 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 8 Dec 2014 21:18:26 +0100 Subject: [PATCH 0610/1968] Improve the readability of javadoc --- .../query/codegen/AnnotationHelper.java | 4 +-- .../query/collections/AbstractCollQuery.java | 6 ++-- .../mysema/query/types/MappingProjection.java | 10 +++--- .../com/mysema/query/types/Projections.java | 8 ++--- .../mysema/query/types/expr/CaseBuilder.java | 6 ++-- .../query/types/expr/CaseForEqBuilder.java | 6 ++-- .../types/expr/ComparableExpression.java | 24 +++++++------- .../query/types/expr/NumberExpression.java | 30 ++++++++--------- .../query/types/expr/SimpleExpression.java | 32 +++++++++---------- .../query/types/expr/StringExpression.java | 16 +++++----- .../query/types/expr/TemporalExpression.java | 8 ++--- .../com/mysema/query/types/path/BeanPath.java | 2 +- .../mysema/query/types/path/PathBuilder.java | 8 ++--- .../main/java/com/mysema/util/BeanMap.java | 20 ++++++------ .../maven/AbstractMetaDataExportMojo.java | 2 +- .../query/sql/ant/AntMetaDataExporter.java | 2 +- .../sql/codegen/ExtendedNamingStrategy.java | 2 +- .../query/sql/codegen/MetaDataExporter.java | 2 +- 18 files changed, 94 insertions(+), 94 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/AnnotationHelper.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/AnnotationHelper.java index f99ed551c7..6f7e565d7a 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/AnnotationHelper.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/AnnotationHelper.java @@ -27,14 +27,14 @@ public interface AnnotationHelper { /** * Verify if AnnotationHelper instance can handle the annotation. * @param annotationClass Annotation class. - * @return true if this AnnotationHelper can handle the annotation. + * @return {@code true} if this AnnotationHelper can handle the annotation. */ boolean isSupported(Class annotationClass); /** * Get specific object that will be used as part of type cache key. * @param annotation Annotation instance. - * @return Any object, normally a annotation param. Can be null. + * @return Any object, normally a annotation param. Can be {@code null}. */ Object getCustomKey(Annotation annotation); diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java b/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java index 274905b335..ee190b53de 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/AbstractCollQuery.java @@ -37,11 +37,11 @@ * AbstractCollQuery provides a base class for Collection query implementations. * Extend it like this * - *
- * public class MyType extends AbstractColQuery<MyType>{
+ * 
{@code
+ * public class MyType extends AbstractColQuery {
  *   ...
  * }
- * 
+ * }
* * @see CollQuery * diff --git a/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java b/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java index 627af93c12..3ad73201ed 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/MappingProjection.java @@ -24,14 +24,14 @@ * *

Example

* - *
- * MappingProjection<Pair<String,String>> mapping = new MappingProjection<Pair<String,String>>(Pair.class, str1, str2) {
+ * 

+ * {@code MappingProjection>} mapping = new {@code MappingProjection>}(Pair.class, str1, str2) {
  *     {@code @Override}
- *     protected Pair<String, String> map(Tuple row) {
- *         return Pair.of(row.get(str1), row.get(str2));
+ *     {@code protected Pair} map(Tuple row) {
+ *          return Pair.of(row.get(str1), row.get(str2));
  *     }            
  * }; 
- * 
+ *
* * @param expression type */ diff --git a/querydsl-core/src/main/java/com/mysema/query/types/Projections.java b/querydsl-core/src/main/java/com/mysema/query/types/Projections.java index 0ab82db583..df8c37b697 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/Projections.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/Projections.java @@ -115,10 +115,10 @@ public static QBean fields(Path type, Expression... exprs) { * Create a Map typed projection for the given expressions * *

Example

- *
-     * Map<Expression<?>, ?> map = query.singleResult(
-     *     Projections.map(user.firstName, user.lastName);     
-     * 
+ *
{@code
+     * Map, ?> map = query.singleResult(
+     *      Projections.map(user.firstName, user.lastName));
+     * }
* * @param exprs arguments for the projection * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java index 9e20cba999..ebec3c1886 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseBuilder.java @@ -29,13 +29,13 @@ * constructs : * e.g. * - *
- * Expression<String> cases = new CaseBuilder()
+ * 
{@code
+ * Expression cases = new CaseBuilder()
  *     .when(c.annualSpending.gt(10000)).then("Premier")
  *     .when(c.annualSpending.gt(5000)).then("Gold")
  *     .when(c.annualSpending.gt(2000)).then("Silver")
  *     .otherwise("Bronze");
- * 
+ * }
* * @author tiwe * diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseForEqBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseForEqBuilder.java index abe9d152bb..e6c3bc8fbe 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseForEqBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/CaseForEqBuilder.java @@ -28,14 +28,14 @@ * for equals-operations : * e.g. * - *
+ * 
{@code
  * QCustomer c = QCustomer.customer;
- * Expression<Integer> cases = c.annualSpending
+ * Expression cases = c.annualSpending
  *     .when(1000l).then(1)
  *     .when(2000l).then(2)
  *     .when(5000l).then(3)
  *     .otherwise(4);
- * 
+ * }
* * @author tiwe * diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/ComparableExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/ComparableExpression.java index 4624830a57..0d8148612f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/ComparableExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/ComparableExpression.java @@ -51,7 +51,7 @@ public ComparableExpression as(String alias) { } /** - * Get a from <= this <= to expression + * Get a {@code from <= this <= to} expression * * @param from * @param to @@ -72,7 +72,7 @@ public final BooleanExpression between(@Nullable T from, @Nullable T to) { } /** - * Get a first <= this <= second expression + * Get a {@code from <= this <= to} expression * * @param from * @param to @@ -94,7 +94,7 @@ public final BooleanExpression between(@Nullable Expression from, @Nullable E } /** - * Get a this not between from and to expression + * Get a {@code this not between from and to} expression * * @param from * @param to @@ -105,7 +105,7 @@ public final BooleanExpression notBetween(T from, T to) { } /** - * Get a this not between from and to expression + * Get a {@code this not between from and to} expression * * @param from * @param to @@ -116,7 +116,7 @@ public final BooleanExpression notBetween(Expression from, Expression to) } /** - * Get a this > right expression + * Get a {@code this > right} expression * * @param right rhs of the comparison * @return @@ -127,7 +127,7 @@ public BooleanExpression gt(T right) { } /** - * Get a this > right expression + * Get a {@code this > right} expression * * @param right rhs of the comparison * @return @@ -155,7 +155,7 @@ public BooleanExpression gtAny(CollectionExpression right) { } /** - * Get a this >= right expression + * Get a {@code this >= right} expression * * @param right rhs of the comparison * @return @@ -166,7 +166,7 @@ public BooleanExpression goe(T right) { } /** - * Get a this >= right expression + * Get a {@code this >= right} expression * * @param right rhs of the comparison * @return @@ -193,7 +193,7 @@ public BooleanExpression goeAny(CollectionExpression right) { } /** - * Get a this < right expression + * Get a {@code this < right} expression * * @param right rhs of the comparison * @return @@ -204,7 +204,7 @@ public final BooleanExpression lt(T right) { } /** - * Get a this < right expression + * Get a {@code this < right} expression * * @param right rhs of the comparison * @return @@ -232,7 +232,7 @@ public BooleanExpression ltAny(CollectionExpression right) { } /** - * Get a this <= right expression + * Get a {@code this <= right} expression * * @param right rhs of the comparison * @return @@ -243,7 +243,7 @@ public final BooleanExpression loe(T right) { } /** - * Get a this <= right expression + * Get a {@code this <= right} expression * * @param right rhs of the comparison * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java index 3c7e88eb4e..b05e40fef3 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/NumberExpression.java @@ -186,7 +186,7 @@ public > NumberExpression castToNum( /** * Returns the smallest (closest to negative infinity) - * double value that is greater than or equal to the + * {@code double} value that is greater than or equal to the * argument and is equal to a mathematical integer * * @return ceil(this) @@ -251,7 +251,7 @@ public NumberExpression floatValue() { /** * Returns the largest (closest to positive infinity) - * double value that is less than or equal to the + * {@code double} value that is less than or equal to the * argument and is equal to a mathematical integer. * * @return floor(this) @@ -265,7 +265,7 @@ public NumberExpression floor() { } /** - * Create a this >= right expression + * Create a {@code this >= right} expression * * @param * @param right rhs of the comparison @@ -277,7 +277,7 @@ public final > BooleanExpression goe(A right) { } /** - * Create a this >= right expression + * Create a {@code this >= right} expression * * @param * @param right rhs of the comparison @@ -305,7 +305,7 @@ public BooleanExpression goeAny(CollectionExpression right) { } /** - * Create a this > right expression + * Create a {@code this > right} expression * * @param * @param right rhs of the comparison @@ -317,7 +317,7 @@ public final > BooleanExpression gt(A right) { } /** - * Create a this > right expression + * Create a {@code this > right} expression * * @param * @param right rhs of the comparison @@ -345,7 +345,7 @@ public BooleanExpression gtAny(CollectionExpression right) { } /** - * Create a from < this < to expression + * Create a {@code from <= this <= to} expression * * @param * @param from @@ -367,7 +367,7 @@ public final > BooleanExpression between(@Nulla } /** - * Create a from < this < to expression + * Create a {@code from <= this <= to} expression * * @param * @param from @@ -417,7 +417,7 @@ public NumberExpression intValue() { } /** - * Expr: this like str + * Expr: {@code this like str} * * @param str * @return @@ -427,7 +427,7 @@ public BooleanExpression like(String str) { } /** - * Expr: this like str + * Expr: {@code this like str} * * @param str * @return @@ -437,7 +437,7 @@ public BooleanExpression like(Expression str) { } /** - * Create a this <= right expression + * Create a {@code this <= right} expression * * @param * @param right rhs of the comparison @@ -449,7 +449,7 @@ public final > BooleanExpression loe(A right) { } /** - * Create a this <= right expression + * Create a {@code this <= right} expression * * @param * @param right rhs of the comparison @@ -487,7 +487,7 @@ public NumberExpression longValue() { } /** - * Create a this < right expression + * Create a {@code this < right} expression * * @param * @param right rhs of the comparison @@ -499,7 +499,7 @@ public final > BooleanExpression lt(A right) { } /** - * Create a this < right expression + * Create a {@code this < right} expression * * @param * @param right rhs of the comparison @@ -601,7 +601,7 @@ public NumberExpression negate() { } /** - * Returns the closest int to the argument. + * Returns the closest {@code int} to this. * * @return round(this) * @see java.lang.Math#round(double) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java index c63f5f1f2b..9ee6916c27 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/SimpleExpression.java @@ -73,7 +73,7 @@ public SimpleExpression as(String alias) { } /** - * Create a this is not null expression + * Create a {@code this is not null} expression * * @return */ @@ -85,7 +85,7 @@ public BooleanExpression isNotNull() { } /** - * Create a this is null expression + * Create a {@code this is null} expression * * @return */ @@ -97,7 +97,7 @@ public BooleanExpression isNull() { } /** - * Get the count(this) expression + * Get the {@code count(this)} expression * * @return count(this) */ @@ -110,7 +110,7 @@ public NumberExpression count() { /** - * Get the count(distinct this) expression + * Get the {@code count(distinct this)} expression * * @return count(distinct this) */ @@ -122,7 +122,7 @@ public NumberExpression countDistinct() { } /** - * Get a this == right expression + * Get a {@code this == right} expression * *

Use expr.isNull() instead of expr.eq(null)

* @@ -138,7 +138,7 @@ public BooleanExpression eq(T right) { } /** - * Get a this == right expression + * Get a {@code this == right} expression * * @param right rhs of the comparison * @return @@ -164,7 +164,7 @@ public BooleanExpression eqAny(CollectionExpression right) { } /** - * Get a this in right expression + * Get a {@code this in right} expression * * @param right rhs of the comparison * @return @@ -178,7 +178,7 @@ public BooleanExpression in(Collection right) { } /** - * Get a this in right expression + * Get a {@code this in right} expression * * @param right rhs of the comparison * @return @@ -193,7 +193,7 @@ public BooleanExpression in(T... right) { /** - * Get a this in right expression + * Get a {@code this in right} expression * * @param right rhs of the comparison * @return @@ -203,7 +203,7 @@ public BooleanExpression in(CollectionExpression right) { } /** - * Get a this <> right expression + * Get a {@code this <> right} expression * * @param right rhs of the comparison * @return @@ -217,7 +217,7 @@ public BooleanExpression ne(T right) { } /** - * Get a this <> right expression + * Get a {@code this <> right} expression * * @param right rhs of the comparison * @return @@ -243,7 +243,7 @@ public BooleanExpression neAny(CollectionExpression right) { } /** - * Get a this not in right expression + * Get a {@code this not in right} expression * * @param right rhs of the comparison * @return @@ -257,7 +257,7 @@ public BooleanExpression notIn(Collection right) { } /** - * Get a this not in right expression + * Get a {@code this not in right} expression * * @param right rhs of the comparison * @return @@ -271,7 +271,7 @@ public BooleanExpression notIn(T... right) { } /** - * Get a this not in right expression + * Get a {@code this not in right} expression * * @param right rhs of the comparison * @return @@ -282,7 +282,7 @@ public final BooleanExpression notIn(CollectionExpression right) /** - * Get a nullif(this, other) expression + * Get a {@code nullif(this, other)} expression * * @param other * @return @@ -293,7 +293,7 @@ public SimpleExpression nullif(Expression other) { } /** - * Get a nullif(this, other) expression + * Get a {@code nullif(this, other)} expression * * @param other * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/StringExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/StringExpression.java index 82cf44cb7d..d757ec97bf 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/StringExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/StringExpression.java @@ -301,7 +301,7 @@ public NumberExpression length() { } /** - * Expr: this like str + * Expr: {@code this like str} * * @param str * @return @@ -311,7 +311,7 @@ public BooleanExpression like(String str) { } /** - * Expr: this like str + * Expr: {@code this like str} * * @param str * @return @@ -321,7 +321,7 @@ public BooleanExpression like(Expression str) { } /** - * Expr: this like str + * Expr: {@code this like str} * * @param str * @return @@ -331,7 +331,7 @@ public BooleanExpression like(String str, char escape) { } /** - * Expr: this like str + * Expr: {@code this like str} * * @param str * @return @@ -471,7 +471,7 @@ public BooleanExpression notEqualsIgnoreCase(String str) { } /** - * Expr: this not like str + * Expr: {@code this not like str} * * @param str * @return @@ -481,7 +481,7 @@ public BooleanExpression notLike(String str) { } /** - * Expr: this not like str + * Expr: {@code this not like str} * * @param str * @return @@ -491,7 +491,7 @@ public BooleanExpression notLike(Expression str) { } /** - * Expr: this not like str + * Expr: {@code this not like str} * * @param str * @return @@ -501,7 +501,7 @@ public BooleanExpression notLike(String str, char escape) { } /** - * Expr: this not like str + * Expr: {@code this not like str} * * @param str * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/types/expr/TemporalExpression.java b/querydsl-core/src/main/java/com/mysema/query/types/expr/TemporalExpression.java index 05c1798285..4de42386e9 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/expr/TemporalExpression.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/expr/TemporalExpression.java @@ -32,7 +32,7 @@ public TemporalExpression(Expression mixin) { } /** - * Get a this > right expression + * Get a {@code this > right} expression * * @param right * @return @@ -42,7 +42,7 @@ public BooleanExpression after(T right) { } /** - * Get a this > right expression + * Get a {@code this > right} expression * * @param right * @return @@ -52,7 +52,7 @@ public BooleanExpression after(Expression right) { } /** - * Get a this < right expression + * Get a {@code this < right} expression * * @param right * @return @@ -62,7 +62,7 @@ public BooleanExpression before(T right) { } /** - * Get a this < right expression + * Get a {@code this < right} expression * * @param right * @return diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java b/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java index b581da361d..250653f12b 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/BeanPath.java @@ -321,7 +321,7 @@ public Path getRoot() { } /** - * Create an this instanceOf type expression + * Create an {@code this instanceOf type} expression * * @param * @param type diff --git a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java index 4d414fc3ce..93777576cb 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/path/PathBuilder.java @@ -26,11 +26,11 @@ * PathBuilder is an extension to EntityPathBase for dynamic path construction * *

Usage example:

- *
- * PathBuilder<User> user = new PathBuilder<User>(User.class, "user");
+ * 
{@code
+ * PathBuilder user = new PathBuilder(User.class, "user");
  * Predicate filter = user.getString("firstName").eq("Bob");
- * List<User> users = query.from(user).where(filter).list(user);
- * 
+ * List users = query.from(user).where(filter).list(user); + * }
* * @author tiwe * diff --git a/querydsl-core/src/main/java/com/mysema/util/BeanMap.java b/querydsl-core/src/main/java/com/mysema/util/BeanMap.java index 2690051230..41d25e2021 100644 --- a/querydsl-core/src/main/java/com/mysema/util/BeanMap.java +++ b/querydsl-core/src/main/java/com/mysema/util/BeanMap.java @@ -124,14 +124,14 @@ public Object apply(Object input) { //------------------------------------------------------------------------- /** - * Constructs a new empty BeanMap. + * Constructs a new empty {@code BeanMap}. */ public BeanMap() { } /** - * Constructs a new BeanMap that operates on the - * specified bean. If the given bean is null, then + * Constructs a new {@code BeanMap} that operates on the + * specified bean. If the given bean is {@code null}, then * this map will be empty. * * @param bean the bean for this map to operate on @@ -237,7 +237,7 @@ public void putAllWriteable(BeanMap map) { * This method reinitializes the bean map to have default values for the * bean's properties. This is accomplished by constructing a new instance * of the bean which the map uses as its underlying data source. This - * behavior for clear() differs from the Map contract in that + * behavior for {@link Map#clear() clear()} differs from the Map contract in that * the mappings are not actually removed from the map (the mappings for a * BeanMap are fixed). */ @@ -258,7 +258,7 @@ public void clear() { /** * Returns true if the bean defines a property with the given name. *

- * The given name must be a String; if not, this method + * The given name must be a {@code String}; if not, this method * returns false. This method will also return false if the bean * does not define a property with that name. *

@@ -266,7 +266,7 @@ public void clear() { * property read methods. * * @param name the name of the property to check - * @return false if the given name is null or is not a String; + * @return false if the given name is null or is not a {@code String}; * false if the bean does not define a property with that name; or * true if the bean does define a property with that name */ @@ -279,9 +279,9 @@ public boolean containsKey(String name) { * Returns the value of the bean's property with the given name. *

* The given name must be a {@link String} and must not be - * null; otherwise, this method returns null. + * null; otherwise, this method returns {@code null}. * If the bean defines a property with the given name, the value of - * that property is returned. Otherwise, null is + * that property is returned. Otherwise, {@code null} is * returned. *

* Write-only properties will not be matched as the test operates against @@ -408,7 +408,7 @@ public Collection values() { * Returns the type of the property with the given name. * * @param name the name of the property - * @return the type of the property, or null if no such + * @return the type of the property, or {@code null} if no such * property exists */ public Class getType(String name) { @@ -688,7 +688,7 @@ protected Object[] createWriteMethodArguments(Method method, Object value) throw * {@link Object#toString() toString()} method, and that string is * parsed into the correct primitive type using, for instance, * {@link Integer#valueOf(String)} to convert the string into an - * int.

+ * {@code int}.

*

* If no special constructor exists and the given type is not a * primitive type, this method returns the original value. diff --git a/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java index b56f41c305..34792c8248 100644 --- a/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java @@ -107,7 +107,7 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ /** * schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; - * null means that the schema name should not be used to narrow + * {@code null} means that the schema name should not be used to narrow * the search (default: null) * * @parameter diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java index 5f6dd822ea..d34ba5feb3 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java @@ -93,7 +93,7 @@ public class AntMetaDataExporter extends Task { /** * schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; - * null means that the schema name should not be used to narrow + * {@code null} means that the schema name should not be used to narrow * the search (default: null) */ private String schemaPattern; diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/ExtendedNamingStrategy.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/ExtendedNamingStrategy.java index 77a1568da6..c2f7a084ef 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/ExtendedNamingStrategy.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/ExtendedNamingStrategy.java @@ -21,7 +21,7 @@ * ExtendedNamingStrategy works like the DefaultNamingStrategy but tries to create foreign key * property names in a different way. * - *

It looks for patterns like this .*_<forward>_<inverse> and uses the forward part for + *

It looks for patterns like this {@literal .*__} and uses the forward part for * the foreign key name and inverse for the inverse foreign key name.

* * @author tiwe diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java index a3f4d77761..9dfa2570d3 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java @@ -403,7 +403,7 @@ private void write(Serializer serializer, String path, EntityType type) throws I * * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; - * null means that the schema name should not be used to narrow + * {@code null} means that the schema name should not be used to narrow * the search (default: null) */ public void setSchemaPattern(@Nullable String schemaPattern) { From 13e55748a9a63c87a801ffb11a7a58b5fc944986 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 8 Dec 2014 21:29:28 +0100 Subject: [PATCH 0611/1968] Validate whether an enum type is supplied in EnumConversion --- .../mysema/query/support/EnumConversion.java | 21 +++++++++++-------- .../query/support/EnumConversionTest.java | 14 +++++++++++-- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java b/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java index 27598cf8fa..cd31a50774 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/EnumConversion.java @@ -16,6 +16,7 @@ import java.util.Collections; import java.util.List; +import com.google.common.base.Preconditions; import com.mysema.query.types.Expression; import com.mysema.query.types.FactoryExpressionBase; import com.mysema.query.types.Visitor; @@ -34,16 +35,14 @@ public class EnumConversion extends FactoryExpressionBase { private final List> exprs; - private final Enum[] values; + private final T[] values; public EnumConversion(Expression expr) { super(expr.getType()); + Class type = getType(); + Preconditions.checkArgument(type.isEnum(), "%s is not an enum", type); exprs = Collections.>singletonList(expr); - try { - values = (Enum[]) expr.getType().getMethod("values").invoke(null); - } catch (Exception e) { - throw new RuntimeException(e.getMessage(), e); - } + values = type.getEnumConstants(); } @Override @@ -60,11 +59,15 @@ public List> getArgs() { public T newInstance(Object... args) { if (args[0] != null) { if (args[0] instanceof String) { - return (T)Enum.valueOf((Class)getType(), (String)args[0]); + @SuppressWarnings("unchecked") //The expression type is an enum + T rv = (T) Enum.valueOf(getType().asSubclass(Enum.class), (String)args[0]); + return rv; } else if (args[0] instanceof Number) { - return (T)values[((Number)args[0]).intValue()]; + return values[((Number)args[0]).intValue()]; } else { - return (T)args[0]; + @SuppressWarnings("unchecked") + T rv = (T)args[0]; + return rv; } } else { return null; diff --git a/querydsl-core/src/test/java/com/mysema/query/support/EnumConversionTest.java b/querydsl-core/src/test/java/com/mysema/query/support/EnumConversionTest.java index b82f5c00a1..a42c090976 100644 --- a/querydsl-core/src/test/java/com/mysema/query/support/EnumConversionTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/support/EnumConversionTest.java @@ -1,10 +1,12 @@ package com.mysema.query.support; import static org.junit.Assert.assertEquals; - -import org.junit.Test; +import static org.junit.Assert.fail; import com.mysema.query.types.path.EnumPath; +import com.mysema.query.types.path.StringPath; + +import org.junit.Test; public class EnumConversionTest { @@ -23,4 +25,12 @@ public void Ordinal() { EnumConversion conv = new EnumConversion(color); assertEquals(Color.RED, conv.newInstance(2)); } + + @Test(expected = IllegalArgumentException.class) + public void Illegal() { + StringPath string = new StringPath("path"); + EnumConversion conv = new EnumConversion(string); + fail("EnumConversion successfully created for a non-enum type"); + conv.newInstance(0); + } } From 6ff0dcea4a4b4fb211eb4db6f15303b319270f93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 9 Dec 2014 20:04:59 +0200 Subject: [PATCH 0612/1968] Improve null handling Add more tests for literal serialization --- .../com/mysema/query/sql/Configuration.java | 14 +++++++---- .../com/mysema/query/sql/SQLTemplates.java | 2 ++ .../com/mysema/query/AbstractBaseTest.java | 4 ++-- .../mysema/query/DeleteUseLiteralsBase.java | 9 +++++++ .../mysema/query/InsertUseLiteralsBase.java | 9 +++++++ .../mysema/query/MergeUseLiteralsBase.java | 9 +++++++ .../com/mysema/query/SkipForQuotedRule.java | 16 +++++++++---- .../mysema/query/UpdateUseLiteralsBase.java | 9 +++++++ .../mysema/query/suites/CUBRIDSuiteTest.java | 21 +++++++--------- .../mysema/query/suites/DerbySuiteTest.java | 21 +++++++--------- .../query/suites/FirebirdSuiteTest.java | 8 ++++++- .../com/mysema/query/suites/H2SuiteTest.java | 8 ++++++- .../query/suites/H2WithQuotingTest.java | 21 +++++++--------- .../mysema/query/suites/H2WithSchemaTest.java | 21 +++++++--------- .../mysema/query/suites/HsqldbSuiteTest.java | 21 +++++++--------- .../mysema/query/suites/MSSQLSuiteTest.java | 23 +++++++----------- .../mysema/query/suites/MySQLSuiteTest.java | 8 ++++++- .../query/suites/MySQLWithQuotingTest.java | 21 +++++++--------- .../mysema/query/suites/OracleSuiteTest.java | 23 +++++++----------- .../query/suites/OracleWithQuotingTest.java | 21 +++++++--------- .../query/suites/PostgreSQLSuiteTest.java | 8 ++++++- .../mysema/query/suites/SQLiteSuiteTest.java | 21 +++++++--------- .../query/suites/TeradataSuiteTest.java | 24 +++++++------------ 23 files changed, 176 insertions(+), 166 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index d9157d5c0b..5599e704d8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -112,12 +112,16 @@ public Configuration(SQLTemplates templates) { * @return */ public String asLiteral(Object o) { - Type type = javaTypeMapping.getType(o.getClass()); - if (type != null) { - return templates.serialize(type.getLiteral(o), type.getSQLTypes()[0]); + if (Null.class.isInstance(o)) { + return "null"; } else { - throw new IllegalArgumentException("Unsupported literal type " + o.getClass().getName()); - } + Type type = javaTypeMapping.getType(o.getClass()); + if (type != null) { + return templates.serialize(type.getLiteral(o), type.getSQLTypes()[0]); + } else { + throw new IllegalArgumentException("Unsupported literal type " + o.getClass().getName()); + } + } } public SQLTemplates getTemplates() { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 08a05e23a1..25f1bbac34 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -482,6 +482,8 @@ public String serialize(String literal, int jdbcType) { case Types.NVARCHAR: case Types.VARCHAR: return "'" + escapeLiteral(literal) + "'"; + case Types.OTHER: + return "'" + literal + "'"; default: return literal; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index 82e3abf3c1..7aaabe3cc5 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -85,10 +85,10 @@ public AbstractBaseTest() { } @Rule - public static MethodRule skipForQuotedRule = new SkipForQuotedRule(); + public MethodRule skipForQuotedRule = new SkipForQuotedRule(configuration); @Rule - public static MethodRule targetRule = new TargetRule(); + public MethodRule targetRule = new TargetRule(); protected void add(List list, T arg, Target... exclusions) { if (exclusions.length > 0) { diff --git a/querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java new file mode 100644 index 0000000000..d6558b0aba --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java @@ -0,0 +1,9 @@ +package com.mysema.query; + +public class DeleteUseLiteralsBase extends DeleteBase { + + public DeleteUseLiteralsBase() { + configuration.setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java new file mode 100644 index 0000000000..f00b5e672b --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java @@ -0,0 +1,9 @@ +package com.mysema.query; + +public class InsertUseLiteralsBase extends InsertBase { + + public InsertUseLiteralsBase() { + configuration.setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java new file mode 100644 index 0000000000..cfc3a00c95 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java @@ -0,0 +1,9 @@ +package com.mysema.query; + +public class MergeUseLiteralsBase extends MergeBase { + + public MergeUseLiteralsBase() { + configuration.setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/SkipForQuotedRule.java b/querydsl-sql/src/test/java/com/mysema/query/SkipForQuotedRule.java index adc5ce74db..958773e46b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SkipForQuotedRule.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SkipForQuotedRule.java @@ -1,18 +1,24 @@ package com.mysema.query; +import com.mysema.query.sql.Configuration; +import com.mysema.query.sql.SQLTemplates; +import com.mysema.testutil.EmptyStatement; import org.junit.rules.MethodRule; import org.junit.runners.model.FrameworkMethod; import org.junit.runners.model.Statement; -import com.mysema.query.sql.SQLTemplates; -import com.mysema.testutil.EmptyStatement; - public class SkipForQuotedRule implements MethodRule { + private final Configuration configuration; + + public SkipForQuotedRule(Configuration conf) { + this.configuration = conf; + } + @Override public Statement apply(Statement base, FrameworkMethod method, Object target) { - SQLTemplates templates = Connections.getTemplates(); - if (templates.isUseQuotes() || templates.isPrintSchema()) { + SQLTemplates templates = configuration.getTemplates(); + if (templates.isUseQuotes() || templates.isPrintSchema() || configuration.getUseLiterals()) { boolean skip = method.getMethod().isAnnotationPresent(SkipForQuoted.class); return skip ? EmptyStatement.DEFAULT : base; } else { diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java new file mode 100644 index 0000000000..b37c4f9e53 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java @@ -0,0 +1,9 @@ +package com.mysema.query; + +public class UpdateUseLiteralsBase extends UpdateBase { + + public UpdateUseLiteralsBase() { + configuration.setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java index 8a7ef58277..f38e359580 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java @@ -1,20 +1,9 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.CUBRIDTemplates; import com.mysema.testutil.ExternalDB; @@ -27,12 +16,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initCubrid(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java index 611c8fe0f7..6fe2601078 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java @@ -1,19 +1,8 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.DerbyTemplates; public class DerbySuiteTest extends AbstractSuite { @@ -24,12 +13,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initDerby(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java index c19da01b38..a646db00e8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -15,12 +15,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initFirebird(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java index 4a20d96b6d..2931d275ee 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java @@ -12,13 +12,19 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Spatial extends SpatialBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initH2(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java index a88f0cfbe9..53914ebd9b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java @@ -1,19 +1,8 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.H2Templates; public class H2WithQuotingTest extends AbstractSuite { @@ -24,12 +13,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initH2(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java index aec392bc4e..7db0c4347d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java @@ -1,19 +1,8 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.H2Templates; public class H2WithSchemaTest extends AbstractSuite { @@ -24,12 +13,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initH2(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java index f8294c068d..7be607cffc 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java @@ -1,19 +1,8 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.HSQLDBTemplates; public class HsqldbSuiteTest extends AbstractSuite { @@ -24,12 +13,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initHSQL(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java index fbe71d637f..27268fd5a3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java @@ -1,22 +1,9 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SpatialBase; -import com.mysema.query.SelectWindowFunctionsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.spatial.SQLServer2008SpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -29,7 +16,6 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} @@ -37,6 +23,13 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initSQLServer(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java index a35d4e8ff6..4f887d879e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java @@ -19,12 +19,18 @@ public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectMySQL extends SelectMySQLBase {} public static class Spatial extends SpatialBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java index ae2125e84d..160b6a1ea8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java @@ -1,20 +1,9 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.spatial.MySQLSpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -27,12 +16,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java index 18597e9322..8b5732a6a7 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java @@ -1,22 +1,9 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectOracleBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SelectWindowFunctionsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.spatial.OracleSpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -30,13 +17,19 @@ public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectOracle extends SelectOracleBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java index 9d623c9d68..1939db7fb1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java @@ -1,20 +1,9 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.OracleTemplates; import com.mysema.testutil.ExternalDB; @@ -27,12 +16,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java index aa677f69b2..3f9c111da3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java @@ -37,7 +37,6 @@ public void tearDown() throws Exception { public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} @@ -45,6 +44,13 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initPostgres(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java index d479f9c144..ac6cabe198 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java @@ -1,19 +1,8 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.SQLiteTemplates; public class SQLiteSuiteTest extends AbstractSuite { @@ -24,12 +13,18 @@ public static class Insert extends InsertBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initSQLite(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java index cd6cc46036..db6c8b73d1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java @@ -1,23 +1,9 @@ package com.mysema.query.suites; +import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.mysema.query.BeanPopulationBase; -import com.mysema.query.Connections; -import com.mysema.query.DeleteBase; -import com.mysema.query.InsertBase; -import com.mysema.query.LikeEscapeBase; -import com.mysema.query.MergeBase; -import com.mysema.query.SelectBase; -import com.mysema.query.SelectTeradataBase; -import com.mysema.query.SpatialBase; -import com.mysema.query.SelectUseLiteralsBase; -import com.mysema.query.SelectWindowFunctionsBase; -import com.mysema.query.SubqueriesBase; -import com.mysema.query.TypesBase; -import com.mysema.query.UnionBase; -import com.mysema.query.UpdateBase; import com.mysema.query.sql.spatial.TeradataSpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -32,13 +18,19 @@ public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectTeradata extends SelectTeradataBase {} public static class Spatial extends SpatialBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + @BeforeClass public static void setUp() throws Exception { Connections.initTeradata(); From a20da34f65707a75e48555f964356679f6f1d2a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 9 Dec 2014 22:24:53 +0200 Subject: [PATCH 0613/1968] Improve tests --- .../java/com/mysema/query/UpdateBase.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java index 694665d67c..8e54efa573 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UpdateBase.java @@ -62,14 +62,13 @@ public void Update() throws SQLException{ // update call with full update count assertEquals(count, update(survey).set(survey.name, "S").execute()); assertEquals(count, query().from(survey).where(survey.name.eq("S")).count()); - } @Test @IncludeIn({CUBRID, H2, MYSQL, ORACLE, SQLSERVER}) public void Update_Limit() { - insert(survey).values(2, "A","B").execute(); - insert(survey).values(3, "B","C").execute(); + assertEquals(1, insert(survey).values(2, "A","B").execute()); + assertEquals(1, insert(survey).values(3, "B","C").execute()); assertEquals(2, update(survey).set(survey.name, "S").limit(2).execute()); } @@ -95,7 +94,19 @@ public void Update2() throws SQLException{ @Test public void Update3() { - update(survey).set(survey.name, survey.name.append("X")).execute(); + assertEquals(1, update(survey).set(survey.name, survey.name.append("X")).execute()); + } + + @Test + public void Update4() { + assertEquals(1, insert(survey).values(2, "A","B").execute()); + assertEquals(1, update(survey).set(survey.name, "AA").where(survey.name.eq("A")).execute()); + } + + @Test + public void Update5() { + assertEquals(1, insert(survey).values(3, "B","C").execute()); + assertEquals(1, update(survey).set(survey.name, "BB").where(survey.name.eq("B")).execute()); } @Test @@ -114,8 +125,8 @@ public void SetNull2() { @Test public void Batch() throws SQLException{ - insert(survey).values(2, "A","B").execute(); - insert(survey).values(3, "B","C").execute(); + assertEquals(1, insert(survey).values(2, "A","B").execute()); + assertEquals(1, insert(survey).values(3, "B","C").execute()); SQLUpdateClause update = update(survey); update.set(survey.name, "AA").where(survey.name.eq("A")).addBatch(); @@ -125,8 +136,8 @@ public void Batch() throws SQLException{ @Test public void Batch_Templates() throws SQLException{ - insert(survey).values(2, "A","B").execute(); - insert(survey).values(3, "B","C").execute(); + assertEquals(1, insert(survey).values(2, "A","B").execute()); + assertEquals(1, insert(survey).values(3, "B","C").execute()); SQLUpdateClause update = update(survey); update.set(survey.name, "AA").where(survey.name.eq(Expressions.stringTemplate("'A'"))).addBatch(); From 96e538878f8eb889b1a2b523f2ea323335f940e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 9 Dec 2014 22:38:14 +0200 Subject: [PATCH 0614/1968] Improve batch handling --- .../main/java/com/mysema/query/sql/dml/AbstractSQLClause.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java index dc6c613510..e8d01e677d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/AbstractSQLClause.java @@ -156,7 +156,9 @@ protected void setParameters(PreparedStatement stmt, List objects, } private long executeBatch(PreparedStatement stmt) throws SQLException { - if (configuration.getTemplates().isBatchCountViaGetUpdateCount()) { + if (configuration.getUseLiterals()) { + return stmt.executeUpdate(); + } else if (configuration.getTemplates().isBatchCountViaGetUpdateCount()) { stmt.executeBatch(); return stmt.getUpdateCount(); } else { From 57a5523cf8fd0a468c514c661005ab6eb252663f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 9 Dec 2014 23:33:47 +0200 Subject: [PATCH 0615/1968] Call addBatch only if in batch mode --- .../mysema/query/sql/dml/SQLDeleteClause.java | 9 ++++++-- .../mysema/query/sql/dml/SQLInsertClause.java | 9 ++++++-- .../mysema/query/sql/dml/SQLMergeClause.java | 22 +++++++++++++------ .../mysema/query/sql/dml/SQLUpdateClause.java | 9 ++++++-- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java index c3d8f04315..305ecf950e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLDeleteClause.java @@ -130,6 +130,7 @@ private PreparedStatement createStatement() throws SQLException{ } private Collection createStatements() throws SQLException { + boolean addBatches = !configuration.getUseLiterals(); listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeDelete(batches.get(0), entity); @@ -145,7 +146,9 @@ private Collection createStatements() throws SQLException { listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } stmts.put(queryString, stmt); context.addPreparedStatement(stmt); listeners.prepared(context); @@ -168,7 +171,9 @@ private Collection createStatements() throws SQLException { listeners.prepared(context); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } } return stmts.values(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java index 724a5b839f..1834987a39 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLInsertClause.java @@ -236,6 +236,7 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException } private Collection createStatements(boolean withKeys) throws SQLException { + boolean addBatches = !configuration.getUseLiterals(); listeners.preRender(context); if (subQueryBuilder != null) { @@ -250,7 +251,9 @@ private Collection createStatements(boolean withKeys) throws serializer.serializeInsert(metadata, entity, batches.get(0).getColumns(), batches .get(0).getValues(), batches.get(0).getSubQuery()); PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } stmts.put(serializer.toString(), stmt); context.addSQL(serializer.toString()); listeners.rendered(context); @@ -274,7 +277,9 @@ private Collection createStatements(boolean withKeys) throws setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); } - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } } return stmts.values(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java index a88d33ed25..efbc901600 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLMergeClause.java @@ -13,11 +13,10 @@ */ package com.mysema.query.sql.dml; +import javax.annotation.Nullable; import java.sql.*; import java.util.*; -import javax.annotation.Nullable; - import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.mysema.query.*; @@ -27,7 +26,6 @@ import com.mysema.query.sql.types.Null; import com.mysema.query.types.*; import com.mysema.util.ResultSetAdapter; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -344,6 +342,7 @@ private void populate(StoreClause clause) { } private PreparedStatement createStatement(boolean withKeys) throws SQLException { + boolean addBatches = !configuration.getUseLiterals(); listeners.preRender(context); SQLSerializer serializer = createSerializer(); PreparedStatement stmt = null; @@ -366,7 +365,9 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException stmt = prepareStatementAndSetParameters(serializer, withKeys); // add first batch - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } // add other batches for (int i = 1; i < batches.size(); i++) { @@ -378,13 +379,16 @@ private PreparedStatement createStatement(boolean withKeys) throws SQLException listeners.rendered(context); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } } } return stmt; } private Collection createStatements(boolean withKeys) throws SQLException { + boolean addBatches = !configuration.getUseLiterals(); Map stmts = Maps.newHashMap(); // add first batch @@ -398,7 +402,9 @@ private Collection createStatements(boolean withKeys) throws PreparedStatement stmt = prepareStatementAndSetParameters(serializer, withKeys); stmts.put(serializer.toString(), stmt); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } // add other batches for (int i = 1; i < batches.size(); i++) { @@ -413,7 +419,9 @@ private Collection createStatements(boolean withKeys) throws } else { setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); } - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } } return stmts.values(); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java index cc4044571b..78714b1b31 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/dml/SQLUpdateClause.java @@ -123,6 +123,7 @@ private PreparedStatement createStatement() throws SQLException{ } private Collection createStatements() throws SQLException { + boolean addBatches = !configuration.getUseLiterals(); listeners.preRender(context); SQLSerializer serializer = createSerializer(); serializer.serializeUpdate(batches.get(0).getMetadata(), entity, batches.get(0).getUpdates()); @@ -138,7 +139,9 @@ private Collection createStatements() throws SQLException { listeners.prePrepare(context); PreparedStatement stmt = connection.prepareStatement(queryString); setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } stmts.put(serializer.toString(), stmt); context.addPreparedStatement(stmt); listeners.prepared(context); @@ -161,7 +164,9 @@ private Collection createStatements() throws SQLException { listeners.prepared(context); } setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(), metadata.getParams()); - stmt.addBatch(); + if (addBatches) { + stmt.addBatch(); + } } return stmts.values(); From a1e4c49efed595beb89127744d13f459ec911ec7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 10 Dec 2014 18:48:46 +0200 Subject: [PATCH 0616/1968] Skip UUID test for literal usage --- querydsl-sql/src/test/java/com/mysema/query/InsertBase.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index b1785a2d6c..f12b6a9262 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -422,6 +422,7 @@ public void Insert_With_TempateExpression_In_Batch() { @Test @IncludeIn({H2, POSTGRES}) + @SkipForQuoted public void Uuids() { delete(QUuids.uuids).execute(); QUuids uuids = QUuids.uuids; From 53daa02e8bb97dfec8c21d66a26516116c9b60e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 10 Dec 2014 19:51:02 +0200 Subject: [PATCH 0617/1968] Fix behaviour on Boolean value --- .../query/sql/types/AbstractNumberType.java | 12 +++- .../java/com/mysema/query/Connections.java | 4 ++ .../com/mysema/query/SelectMySQLBase.java | 21 +++++-- .../mysema/query/sql/domain/QNumberTest.java | 55 +++++++++++++++++++ 4 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java index 29f11597b1..463de58bdb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/AbstractNumberType.java @@ -31,8 +31,16 @@ public AbstractNumberType(int type) { @Override public T getValue(ResultSet rs, int startIndex) throws SQLException { - Number num = (Number) rs.getObject(startIndex); - return num != null ? MathUtils.cast(num, getReturnedClass()) : null; + Object obj = rs.getObject(startIndex); + if (obj instanceof Number) { + return MathUtils.cast((Number) obj, getReturnedClass()); + } else if (obj instanceof Boolean) { + return MathUtils.cast(Boolean.TRUE.equals(obj) ? 1 : 0, getReturnedClass()); + } else if (obj != null) { + throw new IllegalArgumentException(obj.toString()); + } else { + return null; + } } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 29b7b4c7cd..97b3e405f8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -669,6 +669,10 @@ public static void initMySQL() throws SQLException, ClassNotFoundException{ stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + stmt.execute("drop table if exists NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 tinyint(1))"); + // xml stmt.execute("drop table if exists XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java index 967bd839ed..2647cf1b16 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java @@ -1,12 +1,12 @@ package com.mysema.query; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Target.MYSQL; - -import org.junit.Test; - +import com.mysema.query.sql.domain.QNumberTest; import com.mysema.query.sql.mysql.MySQLQuery; import com.mysema.testutil.IncludeIn; +import org.junit.Test; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Target.MYSQL; +import static org.junit.Assert.assertEquals; public class SelectMySQLBase extends AbstractBaseTest { @@ -30,4 +30,15 @@ public void MySQL_Extensions() { mysqlQuery().from(survey).straightJoin().list(survey.id); } + @Test + @IncludeIn(MYSQL) + public void Tinyint() { + QNumberTest numberTest = QNumberTest.numberTest; + delete(numberTest).execute(); + insert(numberTest).set(numberTest.col1Boolean, true).execute(); + insert(numberTest).set(numberTest.col1Number, 1).execute(); + assertEquals(2, query().from(numberTest).list(numberTest.col1Boolean).size()); + assertEquals(2, query().from(numberTest).list(numberTest.col1Number).size()); + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java new file mode 100644 index 0000000000..f39fb7d969 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java @@ -0,0 +1,55 @@ +package com.mysema.query.sql.domain; + +import javax.annotation.Generated; +import java.sql.Types; + +import com.mysema.query.sql.ColumnMetadata; +import com.mysema.query.sql.spatial.RelationalPathSpatial; +import com.mysema.query.types.Path; +import com.mysema.query.types.PathMetadata; +import com.mysema.query.types.path.BooleanPath; +import com.mysema.query.types.path.NumberPath; +import static com.mysema.query.types.PathMetadataFactory.forVariable; + + + +/** + * QNumberTest is a Querydsl query type for QNumberTest + */ +@Generated("com.mysema.query.sql.codegen.MetaDataSerializer") +public class QNumberTest extends RelationalPathSpatial { + + private static final long serialVersionUID = 291758928; + + public static final QNumberTest numberTest = new QNumberTest("NUMBER_TEST"); + + public final BooleanPath col1Boolean = createBoolean("col1"); + + public final NumberPath col1Number = createNumber("col2", Byte.class); + + public QNumberTest(String variable) { + super(QNumberTest.class, forVariable(variable), "null", "NUMBER_TEST"); + addMetadata(); + } + + public QNumberTest(String variable, String schema, String table) { + super(QNumberTest.class, forVariable(variable), schema, table); + addMetadata(); + } + + public QNumberTest(Path path) { + super(path.getType(), path.getMetadata(), "null", "NUMBER_TEST"); + addMetadata(); + } + + public QNumberTest(PathMetadata metadata) { + super(QNumberTest.class, metadata, "null", "NUMBER_TEST"); + addMetadata(); + } + + public void addMetadata() { + addMetadata(col1Boolean, ColumnMetadata.named("col1").withIndex(1).ofType(Types.BIT)); + addMetadata(col1Number, ColumnMetadata.named("col1").withIndex(1).ofType(Types.BIT)); + } + +} From 62edcc14811e59a60c15d63112eb3b7491b83d20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 11 Dec 2014 22:44:48 +0200 Subject: [PATCH 0618/1968] Improve literal serialization --- .../java/com/mysema/query/sql/SQLTemplates.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 25f1bbac34..cf70e77c8c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -482,10 +482,20 @@ public String serialize(String literal, int jdbcType) { case Types.NVARCHAR: case Types.VARCHAR: return "'" + escapeLiteral(literal) + "'"; - case Types.OTHER: - return "'" + literal + "'"; + case Types.BIGINT: + case Types.BIT: + case Types.BOOLEAN: + case Types.DECIMAL: + case Types.DOUBLE: + case Types.FLOAT: + case Types.INTEGER: + case Types.NULL: + case Types.NUMERIC: + case Types.SMALLINT: + case Types.TINYINT: + return literal; default: - return literal; + return "'" + literal + "'"; } } From 42c06188b91fcc44631018f6d2fb7a98f602a52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 12 Dec 2014 23:01:55 +0200 Subject: [PATCH 0619/1968] Fix parameter --- .../src/test/java/com/mysema/query/sql/domain/QNumberTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java index f39fb7d969..8d1da6a1bf 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java @@ -25,7 +25,7 @@ public class QNumberTest extends RelationalPathSpatial { public final BooleanPath col1Boolean = createBoolean("col1"); - public final NumberPath col1Number = createNumber("col2", Byte.class); + public final NumberPath col1Number = createNumber("col2", Byte.class); public QNumberTest(String variable) { super(QNumberTest.class, forVariable(variable), "null", "NUMBER_TEST"); From dba36b71301835dd4526a628bec9810fa231eb82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 12 Dec 2014 23:07:07 +0200 Subject: [PATCH 0620/1968] Add cast --- .../src/test/java/com/mysema/query/SelectMySQLBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java index 2647cf1b16..c6eed9aa2b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java @@ -36,7 +36,7 @@ public void Tinyint() { QNumberTest numberTest = QNumberTest.numberTest; delete(numberTest).execute(); insert(numberTest).set(numberTest.col1Boolean, true).execute(); - insert(numberTest).set(numberTest.col1Number, 1).execute(); + insert(numberTest).set(numberTest.col1Number, (byte)1).execute(); assertEquals(2, query().from(numberTest).list(numberTest.col1Boolean).size()); assertEquals(2, query().from(numberTest).list(numberTest.col1Number).size()); } From 6683d1bcf44498a92489c96b64f596b986da32d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 13 Dec 2014 00:00:08 +0200 Subject: [PATCH 0621/1968] Fix imports --- .../test/java/com/mysema/query/SelectMySQLBase.java | 10 ++++++---- .../java/com/mysema/query/sql/domain/QNumberTest.java | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java index c6eed9aa2b..ec1be2abab 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java @@ -1,13 +1,15 @@ package com.mysema.query; -import com.mysema.query.sql.domain.QNumberTest; -import com.mysema.query.sql.mysql.MySQLQuery; -import com.mysema.testutil.IncludeIn; -import org.junit.Test; import static com.mysema.query.Constants.survey; import static com.mysema.query.Target.MYSQL; import static org.junit.Assert.assertEquals; +import org.junit.Test; + +import com.mysema.query.sql.domain.QNumberTest; +import com.mysema.query.sql.mysql.MySQLQuery; +import com.mysema.testutil.IncludeIn; + public class SelectMySQLBase extends AbstractBaseTest { diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java index 8d1da6a1bf..c67fa56374 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java @@ -1,15 +1,17 @@ package com.mysema.query.sql.domain; -import javax.annotation.Generated; +import static com.mysema.query.types.PathMetadataFactory.forVariable; + import java.sql.Types; +import javax.annotation.Generated; + import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.sql.spatial.RelationalPathSpatial; import com.mysema.query.types.Path; import com.mysema.query.types.PathMetadata; import com.mysema.query.types.path.BooleanPath; import com.mysema.query.types.path.NumberPath; -import static com.mysema.query.types.PathMetadataFactory.forVariable; From 6bca4c1fd018cf0b287ed6cc3fc665dbe7d4bf0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 13 Dec 2014 12:55:27 +0200 Subject: [PATCH 0622/1968] Organize imports --- .../com/mysema/query/types/PathMetadata.java | 3 ++- .../mysema/query/types/ValidatingVisitor.java | 3 ++- .../query/jpa/JPAListAccessVisitor.java | 3 ++- .../mysema/query/jpa/JPAMapAccessVisitor.java | 3 ++- .../mysema/query/jpa/AbstractQueryTest.java | 3 ++- .../com/mysema/query/jpa/ParsingTest.java | 19 +++++++++++-------- .../com/mysema/query/jpa/SubQueryTest.java | 6 ++++-- .../java/com/mysema/query/jpa/domain/Cat.java | 3 ++- .../com/mysema/query/jpa/domain/Order.java | 3 ++- 9 files changed, 29 insertions(+), 17 deletions(-) diff --git a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java index ea083cda0a..8461b245f4 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/PathMetadata.java @@ -13,9 +13,10 @@ */ package com.mysema.query.types; +import java.io.Serializable; + import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; -import java.io.Serializable; import com.google.common.base.Objects; diff --git a/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java b/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java index 08b86de1d0..a390fb99b9 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/ValidatingVisitor.java @@ -13,12 +13,13 @@ */ package com.mysema.query.types; +import static com.mysema.query.util.CollectionUtils.add; + import java.io.Serializable; import java.util.Set; import com.mysema.query.JoinExpression; import com.mysema.query.QueryMetadata; -import static com.mysema.query.util.CollectionUtils.add; /** * ValidatingVisitor visits expressions and ensures that only known path instances are used diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java index 51152ce4f8..d0737077cd 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAListAccessVisitor.java @@ -1,8 +1,9 @@ package com.mysema.query.jpa; -import javax.annotation.Nullable; import java.util.Map; +import javax.annotation.Nullable; + import com.google.common.collect.Maps; import com.mysema.query.JoinType; import com.mysema.query.QueryMetadata; diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java index a92d07760f..427db9f05b 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAMapAccessVisitor.java @@ -1,8 +1,9 @@ package com.mysema.query.jpa; -import javax.annotation.Nullable; import java.util.Map; +import javax.annotation.Nullable; + import com.google.common.collect.Maps; import com.mysema.query.JoinType; import com.mysema.query.QueryMetadata; diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java index be939528ab..7d7e0b51a7 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/AbstractQueryTest.java @@ -13,10 +13,11 @@ */ package com.mysema.query.jpa; -import com.mysema.query.types.Expression; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import com.mysema.query.types.Expression; + public abstract class AbstractQueryTest implements Constants { protected QueryHelper query() { diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java index eb51d91bf6..8f1974f904 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/ParsingTest.java @@ -13,8 +13,14 @@ */ package com.mysema.query.jpa; -import antlr.RecognitionException; -import antlr.TokenStreamException; +import static com.mysema.query.Target.*; +import static com.mysema.query.alias.Alias.$; +import static com.mysema.query.alias.Alias.alias; +import static org.junit.Assert.assertEquals; + +import org.junit.Ignore; +import org.junit.Test; + import com.mysema.query.NoBatooJPA; import com.mysema.query.NoEclipseLink; import com.mysema.query.NoOpenJPA; @@ -23,12 +29,9 @@ import com.mysema.query.types.expr.DateExpression; import com.mysema.query.types.expr.NumberExpression; import com.mysema.testutil.ExcludeIn; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Target.*; -import static com.mysema.query.alias.Alias.$; -import static com.mysema.query.alias.Alias.alias; -import static org.junit.Assert.assertEquals; + +import antlr.RecognitionException; +import antlr.TokenStreamException; public class ParsingTest extends AbstractQueryTest { diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java index 918efb5cbc..7a6040853e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java @@ -13,11 +13,13 @@ */ package com.mysema.query.jpa; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + import com.mysema.query.domain.QCat; import com.mysema.query.jpa.domain.QEmployee; import com.mysema.query.jpa.domain.QUser; -import org.junit.Test; -import static org.junit.Assert.assertEquals; public class SubQueryTest extends AbstractQueryTest{ diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java index c9598cfc5c..35bb20a89f 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Cat.java @@ -13,11 +13,12 @@ */ package com.mysema.query.jpa.domain; -import javax.persistence.*; import java.util.ArrayList; import java.util.List; import java.util.Set; +import javax.persistence.*; + /** * The Class Cat. */ diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java index 1b98e6decc..847a2cd432 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/domain/Order.java @@ -13,9 +13,10 @@ */ package com.mysema.query.jpa.domain; -import javax.persistence.*; import java.util.List; +import javax.persistence.*; + /** * The Class Order. */ From 3a17a15773e1c241ac86586fd791401d43e89366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 13 Dec 2014 22:29:37 +0200 Subject: [PATCH 0623/1968] Add QEmployee to code blocks --- .../src/main/docbook/en-US/content/tutorials/sql.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 35275bcadf..bdaa91eef1 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -744,6 +744,7 @@ query.from(employee) Common table expressions are supported in Querydsl SQL via two syntax variants @@ -751,6 +752,7 @@ query.with(employee, sq().from(employee).where(employee.name.startsWith("A")).li And using a column listing - + Other SQL expressions From 78eeeace49252badee4d22700ae893d4e1d00114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 13 Dec 2014 22:37:22 +0200 Subject: [PATCH 0624/1968] Add PathBuilder example --- .../main/docbook/en-US/content/tutorials/sql.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index bdaa91eef1..b4d6d9315a 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -762,6 +762,19 @@ query.with(employee, employee.id, employee.name) it is advisable to use a generated path type for it, e.g. QEmployee in this case, but if the columns don't fit any existing table PathBuilder can be used instead. + Below is an example for such a case + + emp = new PathBuilder(Tuple.class, "emp"); +query.with(emp, sq().from(employee).innerJoin(department).on(employee.departmentId.eq(department.id)) + .list(employee.id, employee.name, employee.departmentId, + department.name.as("departmentName"))) + + .from(...) +]]> + From 550b5b8f1f4c359749d536680d54534af7e0535f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 13 Dec 2014 22:38:19 +0200 Subject: [PATCH 0625/1968] Remove newline --- querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index b4d6d9315a..c379743ab7 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -771,7 +771,6 @@ PathBuilder emp = new PathBuilder(Tuple.class, "emp"); query.with(emp, sq().from(employee).innerJoin(department).on(employee.departmentId.eq(department.id)) .list(employee.id, employee.name, employee.departmentId, department.name.as("departmentName"))) - .from(...) ]]> From e26b59319708a17e5764258853620e742ee14e5b Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 12 Dec 2014 21:30:11 +0100 Subject: [PATCH 0626/1968] Verify presence of default instance for Templates subclasses --- .../query/collections/CollQueryTemplates.java | 1 + .../query/collections/JodaTimeTemplates.java | 3 +- .../query/collections/TemplatesTest.java | 22 +++++++ .../com/mysema/query/types/JavaTemplates.java | 3 + .../com/mysema/query/TemplatesTestBase.java | 64 +++++++++++++++++++ .../com/mysema/query/jdo/JDOQLTemplates.java | 1 + .../com/mysema/query/jdo/TemplatesTest.java | 22 +++++++ .../com/mysema/query/jpa/TemplatesTest.java | 22 +++++++ querydsl-root/pom.xml | 10 ++- .../com/mysema/query/sql/CUBRIDTemplates.java | 3 + .../com/mysema/query/sql/DerbyTemplates.java | 3 + .../mysema/query/sql/FirebirdTemplates.java | 3 + .../com/mysema/query/sql/H2Templates.java | 3 + .../com/mysema/query/sql/HSQLDBTemplates.java | 3 + .../com/mysema/query/sql/MySQLTemplates.java | 3 + .../com/mysema/query/sql/OracleTemplates.java | 3 + .../mysema/query/sql/PostgresTemplates.java | 3 + .../query/sql/SQLServer2005Templates.java | 3 + .../query/sql/SQLServer2008Templates.java | 3 + .../query/sql/SQLServer2012Templates.java | 3 + .../mysema/query/sql/SQLServerTemplates.java | 3 + .../com/mysema/query/sql/SQLTemplates.java | 1 + .../com/mysema/query/sql/SQLiteTemplates.java | 3 + .../mysema/query/sql/TeradataTemplates.java | 3 + .../query/sql/spatial/GeoDBTemplates.java | 3 + .../sql/spatial/MySQLSpatialTemplates.java | 3 + .../sql/spatial/OracleSpatialTemplates.java | 3 + .../query/sql/spatial/PostGISTemplates.java | 3 + .../SQLServer2008SpatialTemplates.java | 3 + .../sql/spatial/TeradataSpatialTemplates.java | 3 + .../com/mysema/query/sql/TemplatesTest.java | 4 +- 31 files changed, 209 insertions(+), 4 deletions(-) create mode 100644 querydsl-collections/src/test/java/com/mysema/query/collections/TemplatesTest.java create mode 100644 querydsl-core/src/test/java/com/mysema/query/TemplatesTestBase.java create mode 100644 querydsl-jdo/src/test/java/com/mysema/query/jdo/TemplatesTest.java create mode 100644 querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQueryTemplates.java b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQueryTemplates.java index c3315761ba..08d3985e8c 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/CollQueryTemplates.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/CollQueryTemplates.java @@ -25,6 +25,7 @@ */ public class CollQueryTemplates extends JavaTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //intentional public static final CollQueryTemplates DEFAULT = new CollQueryTemplates(); protected CollQueryTemplates() { diff --git a/querydsl-collections/src/main/java/com/mysema/query/collections/JodaTimeTemplates.java b/querydsl-collections/src/main/java/com/mysema/query/collections/JodaTimeTemplates.java index 4ca3617860..9267fcbae8 100644 --- a/querydsl-collections/src/main/java/com/mysema/query/collections/JodaTimeTemplates.java +++ b/querydsl-collections/src/main/java/com/mysema/query/collections/JodaTimeTemplates.java @@ -24,7 +24,8 @@ */ public class JodaTimeTemplates extends CollQueryTemplates { - public static final CollQueryTemplates DEFAULT = new JodaTimeTemplates(); + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final JodaTimeTemplates DEFAULT = new JodaTimeTemplates(); protected JodaTimeTemplates() { add(Ops.DateTimeOps.YEAR, "{0}.getYear()"); diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/TemplatesTest.java b/querydsl-collections/src/test/java/com/mysema/query/collections/TemplatesTest.java new file mode 100644 index 0000000000..32ac70db11 --- /dev/null +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/TemplatesTest.java @@ -0,0 +1,22 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query.collections; + +import com.mysema.query.TemplatesTestBase; + +public class TemplatesTest extends TemplatesTestBase { + +} diff --git a/querydsl-core/src/main/java/com/mysema/query/types/JavaTemplates.java b/querydsl-core/src/main/java/com/mysema/query/types/JavaTemplates.java index bdc7fedd5f..4ffdda7d8f 100644 --- a/querydsl-core/src/main/java/com/mysema/query/types/JavaTemplates.java +++ b/querydsl-core/src/main/java/com/mysema/query/types/JavaTemplates.java @@ -25,6 +25,9 @@ */ public class JavaTemplates extends Templates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final JavaTemplates DEFAULT = new JavaTemplates(); + public JavaTemplates() { add(Ops.EQ, "{0} == {1}"); add(Ops.IS_NULL, "{0} == null"); diff --git a/querydsl-core/src/test/java/com/mysema/query/TemplatesTestBase.java b/querydsl-core/src/test/java/com/mysema/query/TemplatesTestBase.java new file mode 100644 index 0000000000..fcc197440d --- /dev/null +++ b/querydsl-core/src/test/java/com/mysema/query/TemplatesTestBase.java @@ -0,0 +1,64 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.reflections.ReflectionUtils.*; + +import java.util.Set; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ErrorCollector; +import org.reflections.Reflections; + +import com.google.common.base.Predicate; +import com.mysema.query.types.Templates; + +public class TemplatesTestBase { + + @Rule + public final ErrorCollector errorCollector = new ErrorCollector(); + + private final Reflections querydsl = new Reflections( + TemplatesTestBase.class.getPackage().getName()); + + private final String modulePrefix = getClass().getPackage().getName(); + + @Test + public void Default_Instance() { + Set> templates = querydsl.getSubTypesOf(Templates.class); + Set> moduleSpecific = getAll(templates, topLevelClass, + withPattern("class " + modulePrefix + ".*")); + + for (Class template : moduleSpecific) { + try { + Templates defaultInstance = (Templates) template.getField("DEFAULT").get(null); + errorCollector.checkThat(defaultInstance, instanceOf(template)); + } catch (Exception ex) { + errorCollector.addError(ex); + } + } + } + private static final Predicate> topLevelClass = new Predicate>() { + + @Override + public boolean apply(Class input) { + return !input.isAnonymousClass() + && !input.isMemberClass(); + } + }; +} diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java index 0844765f1f..8a6873860f 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java +++ b/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java @@ -24,6 +24,7 @@ */ public final class JDOQLTemplates extends JavaTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional public static final JDOQLTemplates DEFAULT = new JDOQLTemplates(); protected JDOQLTemplates() { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/TemplatesTest.java b/querydsl-jdo/src/test/java/com/mysema/query/jdo/TemplatesTest.java new file mode 100644 index 0000000000..f4df55e61e --- /dev/null +++ b/querydsl-jdo/src/test/java/com/mysema/query/jdo/TemplatesTest.java @@ -0,0 +1,22 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query.jdo; + +import com.mysema.query.TemplatesTestBase; + +public class TemplatesTest extends TemplatesTestBase { + +} diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java new file mode 100644 index 0000000000..55e2774332 --- /dev/null +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java @@ -0,0 +1,22 @@ +/* + * Copyright 2014 Timo Westkämper. + * + * 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 com.mysema.query.jpa; + +import com.mysema.query.TemplatesTestBase; + +public class TemplatesTest extends TemplatesTestBase { + +} diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ca9835c150..ed0d6b04a5 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -80,6 +80,12 @@ + + org.reflections + reflections + 0.9.9 + test + @@ -575,4 +581,4 @@ - + diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java index 03e8b94f7d..ad6a2ff7f1 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java @@ -27,6 +27,9 @@ */ public class CUBRIDTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final CUBRIDTemplates DEFAULT = new CUBRIDTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java index 30bdb54a0c..105b9ffba4 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java @@ -27,6 +27,9 @@ */ public class DerbyTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final DerbyTemplates DEFAULT = new DerbyTemplates(); + private String limitOffsetTemplate = "\noffset {1s} rows fetch next {0s} rows only"; private String limitTemplate = "\nfetch first {0s} rows only"; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java index c4601b15e6..9000c8eaf0 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/FirebirdTemplates.java @@ -8,6 +8,9 @@ public class FirebirdTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final FirebirdTemplates DEFAULT = new FirebirdTemplates(); + private String limitOffsetTemplate = "\nrows {0} to {1}"; private String limitTemplate = "\nrows {0}"; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java index 39e2bfece0..d4131ae68a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/H2Templates.java @@ -25,6 +25,9 @@ */ public class H2Templates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final H2Templates DEFAULT = new H2Templates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java index 313d4cb29c..1db541789d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/HSQLDBTemplates.java @@ -25,6 +25,9 @@ */ public class HSQLDBTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final HSQLDBTemplates DEFAULT = new HSQLDBTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java index 242b658c5d..049c0340c9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/MySQLTemplates.java @@ -74,6 +74,9 @@ public class MySQLTemplates extends SQLTemplates { "VARCHAR", "VARCHARACTER", "VARYING", "WHEN", "WHERE", "WHILE", "WITH", "WRITE", "XOR", "YEAR_MONTH", "ZEROFILL"); + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final MySQLTemplates DEFAULT = new MySQLTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java index 42d2c1231c..d2871f1a7e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/OracleTemplates.java @@ -33,6 +33,9 @@ */ public class OracleTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final OracleTemplates DEFAULT = new OracleTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index a28dd2bd96..5dbee73322 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -50,6 +50,9 @@ public class PostgresTemplates extends SQLTemplates { "TRAILING", "TRUE", "UNION", "UNIQUE", "USER", "USING", "VARIADIC", "VERBOSE", "WHEN", "WHERE", "WINDOW", "WITH"); + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final PostgresTemplates DEFAULT = new PostgresTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2005Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2005Templates.java index e681dba815..3777c8733c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2005Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2005Templates.java @@ -34,6 +34,9 @@ */ public class SQLServer2005Templates extends SQLServerTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final SQLServer2005Templates DEFAULT = new SQLServer2005Templates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2008Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2008Templates.java index e361821f2a..242e63b588 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2008Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2008Templates.java @@ -22,6 +22,9 @@ */ public class SQLServer2008Templates extends SQLServer2005Templates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final SQLServer2008Templates DEFAULT = new SQLServer2008Templates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java index fd4e798273..8cd3315a49 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServer2012Templates.java @@ -27,6 +27,9 @@ */ public class SQLServer2012Templates extends SQLServerTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final SQLServer2012Templates DEFAULT = new SQLServer2012Templates(); + private String topTemplate = "top {0s} "; private String limitOffsetTemplate = "\noffset {1} rows fetch next {0} rows only"; diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java index 782daf07c6..fd2dfe5d0d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLServerTemplates.java @@ -30,6 +30,9 @@ */ public class SQLServerTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final SQLServerTemplates DEFAULT = new SQLServerTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index cf70e77c8c..20c18deb40 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -112,6 +112,7 @@ public class SQLTemplates extends Templates { public static final Expression RECURSIVE = TemplateExpressionImpl.create(Object.class, ""); + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional public static final SQLTemplates DEFAULT = new SQLTemplates("\"",'\\',false); private static final CharMatcher NON_UNDERSCORE_ALPHA_NUMERIC = diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java index df5d8cca03..23da12b8f0 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java @@ -34,6 +34,9 @@ public class SQLiteTemplates extends SQLTemplates { private static final DateTimeFormatter timeFormatter = DateTimeFormat.forPattern("HH:mm:ss"); + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final SQLiteTemplates DEFAULT = new SQLiteTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java index 19938823b0..aafd12a6da 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/TeradataTemplates.java @@ -26,6 +26,9 @@ */ public class TeradataTemplates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final TeradataTemplates DEFAULT = new TeradataTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java index ba3657e2d6..fb5d08e361 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java @@ -24,6 +24,9 @@ */ public class GeoDBTemplates extends H2Templates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final GeoDBTemplates DEFAULT = new GeoDBTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java index eaf2431a46..9d7ffb4d84 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java @@ -25,6 +25,9 @@ */ public class MySQLSpatialTemplates extends MySQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final MySQLSpatialTemplates DEFAULT = new MySQLSpatialTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/OracleSpatialTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/OracleSpatialTemplates.java index 6f7faef1e5..fb752830de 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/OracleSpatialTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/OracleSpatialTemplates.java @@ -22,6 +22,9 @@ */ public class OracleSpatialTemplates extends OracleTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final OracleSpatialTemplates DEFAULT = new OracleSpatialTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PostGISTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PostGISTemplates.java index 1423183620..f1b9d6b56f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PostGISTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PostGISTemplates.java @@ -25,6 +25,9 @@ */ public class PostGISTemplates extends PostgresTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final PostGISTemplates DEFAULT = new PostGISTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServer2008SpatialTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServer2008SpatialTemplates.java index 7c9c9dd7dc..a9d3809a8f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServer2008SpatialTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/SQLServer2008SpatialTemplates.java @@ -25,6 +25,9 @@ */ public class SQLServer2008SpatialTemplates extends SQLServer2008Templates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final SQLServer2008SpatialTemplates DEFAULT = new SQLServer2008SpatialTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/TeradataSpatialTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/TeradataSpatialTemplates.java index b64dc6faea..bfc7dcce45 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/TeradataSpatialTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/TeradataSpatialTemplates.java @@ -27,6 +27,9 @@ */ public class TeradataSpatialTemplates extends TeradataTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final TeradataSpatialTemplates DEFAULT = new TeradataSpatialTemplates(); + public static Builder builder() { return new Builder() { @Override diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/TemplatesTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/TemplatesTest.java index 53c77bfef5..cd5927868d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/TemplatesTest.java @@ -15,7 +15,9 @@ import org.junit.Test; -public class TemplatesTest { +import com.mysema.query.TemplatesTestBase; + +public class TemplatesTest extends TemplatesTestBase { @Test public void test() { From cb16f386dbddf69189a105a5471f3ba4abd518b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 12:34:35 +0200 Subject: [PATCH 0627/1968] Fix SQL Server tests --- .../com/mysema/query/sql/SQLSerializer.java | 10 +++++--- .../java/com/mysema/query/InsertBase.java | 24 ++++++++++--------- .../java/com/mysema/query/SelectBase.java | 23 ++++++++++-------- 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java index fdb8067271..4bd4ca8b94 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLSerializer.java @@ -13,16 +13,20 @@ */ package com.mysema.query.sql; -import javax.annotation.Nullable; import java.util.*; +import javax.annotation.Nullable; + import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; -import com.mysema.query.*; +import com.mysema.query.JoinExpression; +import com.mysema.query.JoinFlag; +import com.mysema.query.QueryFlag; import com.mysema.query.QueryFlag.Position; +import com.mysema.query.QueryMetadata; import com.mysema.query.sql.types.Null; import com.mysema.query.support.Expressions; import com.mysema.query.support.SerializerBase; @@ -268,7 +272,7 @@ void serializeForQuery(QueryMetadata metadata, boolean forCountRow) { append(templates.getFrom()); append("("); append(templates.getSelect()); - append("1 "); + append("1 as one "); suffix = ") internal"; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index f12b6a9262..a49420a7d5 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -13,10 +13,22 @@ */ package com.mysema.query; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Constants.survey2; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; + import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + import com.mysema.query.QueryFlag.Position; import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.sql.dml.DefaultMapper; @@ -29,16 +41,6 @@ import com.mysema.query.types.expr.Param; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Constants.survey2; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; public class InsertBase extends AbstractBaseTest { @@ -435,7 +437,7 @@ public void Uuids() { public void XML() { delete(QXmlTest.xmlTest).execute(); QXmlTest xmlTest = QXmlTest.xmlTest; - String contents = ""; + String contents = "ab"; insert(xmlTest).set(xmlTest.col, contents).execute(); assertEquals(contents, query().from(xmlTest).singleResult(xmlTest.col)); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index dc5e28a94a..ca227d3d24 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -13,6 +13,10 @@ */ package com.mysema.query; +import static com.mysema.query.Constants.*; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; + import java.io.*; import java.math.BigDecimal; import java.sql.Date; @@ -20,6 +24,13 @@ import java.sql.SQLException; import java.util.*; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.LocalDateTime; +import org.joda.time.LocalTime; +import org.junit.Ignore; +import org.junit.Test; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -39,16 +50,8 @@ import com.mysema.query.types.template.NumberTemplate; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; + import junit.framework.Assert; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.LocalTime; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Constants.*; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; public class SelectBase extends AbstractBaseTest { @@ -625,7 +628,7 @@ public void GroupBy_Count() { } @Test - @ExcludeIn({FIREBIRD}) + @ExcludeIn({FIREBIRD, SQLSERVER}) public void GroupBy_Distinct_Count() { List ids = query().from(employee).groupBy(employee.id).distinct().list(NumberTemplate.ONE); SearchResults results = query().from(employee).groupBy(employee.id) From 26d30f3c98f818cff6c598f4142358c5e543892a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 13:10:51 +0200 Subject: [PATCH 0628/1968] Replace junit.framework.Assert with org.junit.Assert --- .../query/apt/AbstractProcessorTest.java | 8 +++++--- .../mysema/query/apt/DateExtensionsTest.java | 4 ++-- .../query/apt/EclipseCompilationTest.java | 3 +-- .../query/apt/EntityExtensionsTest.java | 4 ++-- .../query/apt/IncrementalCompilationTest.java | 4 ++-- .../mysema/query/collections/GroupByTest.java | 2 +- .../java/com/mysema/query/QueryExecution.java | 2 +- .../query/group/GroupByIterateTest.java | 2 +- .../mysema/query/group/GroupByListTest.java | 2 +- .../mysema/query/group/GroupByMapTest.java | 2 +- .../query/jpa/codegen/CompileUtils.java | 3 ++- .../com/mysema/query/mongodb/JoinTest.java | 15 +++++++------- .../query/mongodb/MongodbQueryTest.java | 20 +++++++++---------- .../query/mongodb/MongodbSerializerTest.java | 8 ++++---- .../sql/codegen/MetaDataExporterTest.java | 10 ++++++---- .../sql/codegen/MetaDataSerializerTest.java | 3 +-- .../java/com/mysema/query/SelectBase.java | 2 +- .../com/mysema/query/SelectOracleBase.java | 14 +++++++------ 18 files changed, 57 insertions(+), 51 deletions(-) diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java index 8c0e8d2512..4f8e425d10 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/AbstractProcessorTest.java @@ -13,8 +13,6 @@ */ package com.mysema.query.apt; -import javax.annotation.processing.AbstractProcessor; -import javax.tools.JavaCompiler; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -23,9 +21,13 @@ import java.util.Collections; import java.util.List; +import javax.annotation.processing.AbstractProcessor; +import javax.tools.JavaCompiler; + +import org.junit.Assert; + import com.mysema.codegen.SimpleCompiler; import com.mysema.util.FileUtils; -import junit.framework.Assert; public abstract class AbstractProcessorTest { diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/DateExtensionsTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/DateExtensionsTest.java index 45a8569173..5014c532a8 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/DateExtensionsTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/DateExtensionsTest.java @@ -13,8 +13,8 @@ */ package com.mysema.query.apt; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/EclipseCompilationTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/EclipseCompilationTest.java index 85839086ac..099ae49257 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/EclipseCompilationTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/EclipseCompilationTest.java @@ -23,9 +23,8 @@ import javax.tools.JavaCompiler; -import junit.framework.Assert; - import org.eclipse.jdt.internal.compiler.tool.EclipseCompiler; +import org.junit.Assert; import org.junit.Ignore; import org.junit.Test; diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/EntityExtensionsTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/EntityExtensionsTest.java index 0cded84adb..b68a09e1d3 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/EntityExtensionsTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/EntityExtensionsTest.java @@ -13,8 +13,8 @@ */ package com.mysema.query.apt; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/IncrementalCompilationTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/IncrementalCompilationTest.java index 8220935b3e..0befa35012 100644 --- a/querydsl-apt/src/test/java/com/mysema/query/apt/IncrementalCompilationTest.java +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/IncrementalCompilationTest.java @@ -13,8 +13,8 @@ */ package com.mysema.query.apt; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; diff --git a/querydsl-collections/src/test/java/com/mysema/query/collections/GroupByTest.java b/querydsl-collections/src/test/java/com/mysema/query/collections/GroupByTest.java index 337de69143..2a1e75e567 100644 --- a/querydsl-collections/src/test/java/com/mysema/query/collections/GroupByTest.java +++ b/querydsl-collections/src/test/java/com/mysema/query/collections/GroupByTest.java @@ -22,7 +22,7 @@ import static com.mysema.query.group.GroupBy.min; import static com.mysema.query.group.GroupBy.set; import static com.mysema.query.group.GroupBy.sum; -import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; diff --git a/querydsl-core/src/test/java/com/mysema/query/QueryExecution.java b/querydsl-core/src/test/java/com/mysema/query/QueryExecution.java index 0870248e72..2fa6a52bfd 100644 --- a/querydsl-core/src/test/java/com/mysema/query/QueryExecution.java +++ b/querydsl-core/src/test/java/com/mysema/query/QueryExecution.java @@ -19,7 +19,7 @@ import java.util.Collection; import java.util.List; -import junit.framework.Assert; +import org.junit.Assert; import com.mysema.commons.lang.Pair; import com.mysema.query.support.QueryBase; diff --git a/querydsl-core/src/test/java/com/mysema/query/group/GroupByIterateTest.java b/querydsl-core/src/test/java/com/mysema/query/group/GroupByIterateTest.java index e99ecfaf04..b977106d44 100644 --- a/querydsl-core/src/test/java/com/mysema/query/group/GroupByIterateTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/group/GroupByIterateTest.java @@ -18,7 +18,7 @@ import static com.mysema.query.group.GroupBy.list; import static com.mysema.query.group.GroupBy.map; import static com.mysema.query.group.GroupBy.set; -import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; diff --git a/querydsl-core/src/test/java/com/mysema/query/group/GroupByListTest.java b/querydsl-core/src/test/java/com/mysema/query/group/GroupByListTest.java index ec650e7f49..c06ab3cbb3 100644 --- a/querydsl-core/src/test/java/com/mysema/query/group/GroupByListTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/group/GroupByListTest.java @@ -18,7 +18,7 @@ import static com.mysema.query.group.GroupBy.list; import static com.mysema.query.group.GroupBy.map; import static com.mysema.query.group.GroupBy.set; -import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; diff --git a/querydsl-core/src/test/java/com/mysema/query/group/GroupByMapTest.java b/querydsl-core/src/test/java/com/mysema/query/group/GroupByMapTest.java index ba970b3535..9adbf37a4c 100644 --- a/querydsl-core/src/test/java/com/mysema/query/group/GroupByMapTest.java +++ b/querydsl-core/src/test/java/com/mysema/query/group/GroupByMapTest.java @@ -18,7 +18,7 @@ import static com.mysema.query.group.GroupBy.list; import static com.mysema.query.group.GroupBy.map; import static com.mysema.query.group.GroupBy.set; -import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java index c4374fa2ad..07574246ea 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java @@ -5,8 +5,9 @@ import java.util.ArrayList; import java.util.List; +import org.junit.Assert; + import com.mysema.codegen.SimpleCompiler; -import junit.framework.Assert; public class CompileUtils { diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/JoinTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/JoinTest.java index 295bf2d649..410ebc88f3 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/JoinTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/JoinTest.java @@ -1,7 +1,15 @@ package com.mysema.query.mongodb; +import static org.junit.Assert.*; + import java.net.UnknownHostException; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.mongodb.morphia.Datastore; +import org.mongodb.morphia.Morphia; + import com.mongodb.Mongo; import com.mongodb.MongoException; import com.mysema.query.mongodb.domain.Item; @@ -10,13 +18,6 @@ import com.mysema.query.mongodb.morphia.MorphiaQuery; import com.mysema.query.types.Predicate; import com.mysema.testutil.ExternalDB; -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; -import static junit.framework.Assert.assertEquals; -import static org.junit.Assert.*; @Category(ExternalDB.class) public class JoinTest { diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java index ca21b08edd..ceef48d9ff 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbQueryTest.java @@ -13,9 +13,19 @@ */ package com.mysema.query.mongodb; +import static java.util.Arrays.asList; +import static org.junit.Assert.*; + import java.net.UnknownHostException; import java.util.*; +import org.bson.types.ObjectId; +import org.junit.Before; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.mongodb.morphia.Datastore; +import org.mongodb.morphia.Morphia; + import com.google.common.collect.Lists; import com.mongodb.Mongo; import com.mongodb.MongoException; @@ -30,16 +40,6 @@ import com.mysema.query.types.Predicate; import com.mysema.query.types.path.StringPath; import com.mysema.testutil.ExternalDB; -import org.bson.types.ObjectId; -import org.junit.Before; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.mongodb.morphia.Datastore; -import org.mongodb.morphia.Morphia; -import static java.util.Arrays.asList; -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static org.junit.Assert.*; @Category(ExternalDB.class) public class MongodbQueryTest { diff --git a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java index eea1a99606..bcca447615 100644 --- a/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/mysema/query/mongodb/MongodbSerializerTest.java @@ -13,13 +13,16 @@ */ package com.mysema.query.mongodb; -import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import java.sql.Timestamp; import java.util.Arrays; import java.util.Date; import java.util.List; +import org.junit.Before; +import org.junit.Test; + import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; @@ -30,9 +33,6 @@ import com.mysema.query.types.OrderSpecifier; import com.mysema.query.types.path.*; -import org.junit.Before; -import org.junit.Test; - public class MongodbSerializerTest { private PathBuilder entityPath; diff --git a/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataExporterTest.java b/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataExporterTest.java index 23702cbe6f..055fcd64ab 100644 --- a/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataExporterTest.java +++ b/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataExporterTest.java @@ -13,7 +13,8 @@ */ package com.mysema.query.sql.codegen; -import javax.tools.JavaCompiler; +import static org.junit.Assert.*; + import java.io.File; import java.io.IOException; import java.sql.*; @@ -22,13 +23,14 @@ import java.util.List; import java.util.Set; +import javax.tools.JavaCompiler; + +import org.junit.*; + import com.mysema.codegen.SimpleCompiler; import com.mysema.query.codegen.BeanSerializer; import com.mysema.query.codegen.Serializer; import com.mysema.util.FileUtils; -import junit.framework.Assert; -import org.junit.*; -import static org.junit.Assert.*; public class MetaDataExporterTest { diff --git a/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataSerializerTest.java b/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataSerializerTest.java index 09a5b71e83..861d2bb0a4 100644 --- a/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataSerializerTest.java +++ b/querydsl-sql-codegen/src/test/java/com/mysema/query/sql/codegen/MetaDataSerializerTest.java @@ -19,8 +19,7 @@ import javax.tools.JavaCompiler; -import junit.framework.Assert; - +import org.junit.Assert; import org.junit.Before; import org.junit.Test; diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index ca227d3d24..f43c4a067d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -51,7 +51,7 @@ import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; -import junit.framework.Assert; +import org.junit.Assert; public class SelectBase extends AbstractBaseTest { diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectOracleBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectOracleBase.java index 42fde08d0c..e58a49a3f8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectOracleBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectOracleBase.java @@ -1,18 +1,20 @@ package com.mysema.query; +import static com.mysema.query.Constants.employee; +import static com.mysema.query.Target.ORACLE; +import static com.mysema.query.sql.oracle.OracleGrammar.level; + import java.sql.SQLException; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + import com.mysema.query.sql.SQLExpressions; import com.mysema.query.sql.SQLSerializer; import com.mysema.query.sql.domain.QEmployee; import com.mysema.query.sql.oracle.OracleQuery; import com.mysema.testutil.IncludeIn; -import junit.framework.Assert; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Constants.employee; -import static com.mysema.query.Target.ORACLE; -import static com.mysema.query.sql.oracle.OracleGrammar.level; public class SelectOracleBase extends AbstractBaseTest { From a506aed4e30397cd8a3d7d1655339f501f066084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 13:54:39 +0200 Subject: [PATCH 0629/1968] Improve null handling --- .../com/mysema/query/sql/Configuration.java | 10 +++-- .../java/com/mysema/query/Connections.java | 7 ++- .../java/com/mysema/query/SelectBase.java | 43 +++++++++++++++---- .../com/mysema/query/SelectMySQLBase.java | 13 ------ .../mysema/query/sql/domain/QEmployee.java | 15 ++++--- .../com/mysema/query/sql/domain/QSurvey.java | 8 ++-- 6 files changed, 59 insertions(+), 37 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java index 5599e704d8..c70003e25f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/Configuration.java @@ -13,7 +13,6 @@ */ package com.mysema.query.sql; -import javax.annotation.Nullable; import java.lang.reflect.Array; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -23,6 +22,11 @@ import java.util.List; import java.util.Map; +import javax.annotation.Nullable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.google.common.primitives.Primitives; @@ -30,8 +34,6 @@ import com.mysema.query.sql.types.Null; import com.mysema.query.sql.types.Type; import com.mysema.query.types.Path; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Configuration for SQLQuery instances @@ -289,7 +291,7 @@ public String getColumnOverride(SchemaAndTable key, String column) { @SuppressWarnings({ "unchecked", "rawtypes" }) public void set(PreparedStatement stmt, Path path, int i, T value) throws SQLException { if (Null.class.isInstance(value)) { - Integer sqlType = path != null ? jdbcTypeMapping.get(path.getType()) : null; + Integer sqlType = path != null ? ColumnMetadata.getColumnMetadata(path).getJdbcType() : null; if (sqlType != null) { stmt.setNull(i, sqlType); } else { diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 97b3e405f8..ee5c975d28 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -17,11 +17,12 @@ import java.util.Map; import java.util.Properties; +import org.hsqldb.types.Types; + import com.google.common.collect.Maps; import com.mysema.query.ddl.CreateTableClause; import com.mysema.query.ddl.DropTableClause; import com.mysema.query.sql.*; -import org.hsqldb.types.Types; /** * @author tiwe @@ -751,6 +752,10 @@ public static void initOracle() throws SQLException, ClassNotFoundException{ dropTable(templates, "DATE_TEST"); stmt.execute("create table date_test(date_test date)"); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 number(1,0))"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL XMLTYPE)"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index dc5e28a94a..11455f7cd0 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -13,6 +13,10 @@ */ package com.mysema.query; +import static com.mysema.query.Constants.*; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; + import java.io.*; import java.math.BigDecimal; import java.sql.Date; @@ -20,6 +24,13 @@ import java.sql.SQLException; import java.util.*; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.LocalDateTime; +import org.joda.time.LocalTime; +import org.junit.Ignore; +import org.junit.Test; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -39,16 +50,8 @@ import com.mysema.query.types.template.NumberTemplate; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; + import junit.framework.Assert; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.LocalTime; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Constants.*; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; public class SelectBase extends AbstractBaseTest { @@ -993,6 +996,28 @@ public void Num_Cast2() { query().uniqueResult(num.castToNum(Double.class)); } + @Test + @IncludeIn({MYSQL, ORACLE}) + public void Number_As_Boolean() { + QNumberTest numberTest = QNumberTest.numberTest; + delete(numberTest).execute(); + insert(numberTest).set(numberTest.col1Boolean, true).execute(); + insert(numberTest).set(numberTest.col1Number, (byte)1).execute(); + assertEquals(2, query().from(numberTest).list(numberTest.col1Boolean).size()); + assertEquals(2, query().from(numberTest).list(numberTest.col1Number).size()); + } + + @Test + @IncludeIn({MYSQL, ORACLE}) + public void Number_As_Boolean_Null() { + QNumberTest numberTest = QNumberTest.numberTest; + delete(numberTest).execute(); + insert(numberTest).setNull(numberTest.col1Boolean).execute(); + insert(numberTest).setNull(numberTest.col1Number).execute(); + assertEquals(2, query().from(numberTest).list(numberTest.col1Boolean).size()); + assertEquals(2, query().from(numberTest).list(numberTest.col1Number).size()); + } + @Test public void Offset_Only() { query().from(employee) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java index ec1be2abab..967bd839ed 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectMySQLBase.java @@ -2,11 +2,9 @@ import static com.mysema.query.Constants.survey; import static com.mysema.query.Target.MYSQL; -import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.mysema.query.sql.domain.QNumberTest; import com.mysema.query.sql.mysql.MySQLQuery; import com.mysema.testutil.IncludeIn; @@ -32,15 +30,4 @@ public void MySQL_Extensions() { mysqlQuery().from(survey).straightJoin().list(survey.id); } - @Test - @IncludeIn(MYSQL) - public void Tinyint() { - QNumberTest numberTest = QNumberTest.numberTest; - delete(numberTest).execute(); - insert(numberTest).set(numberTest.col1Boolean, true).execute(); - insert(numberTest).set(numberTest.col1Number, (byte)1).execute(); - assertEquals(2, query().from(numberTest).list(numberTest.col1Boolean).size()); - assertEquals(2, query().from(numberTest).list(numberTest.col1Number).size()); - } - } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QEmployee.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QEmployee.java index f95a42ffd1..41a31d5b50 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QEmployee.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QEmployee.java @@ -14,6 +14,7 @@ package com.mysema.query.sql.domain; import java.math.BigDecimal; +import java.sql.Types; import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.sql.ForeignKey; @@ -65,13 +66,13 @@ public QEmployee(PathMetadata metadata) { } protected void addMetadata() { - addMetadata(id, ColumnMetadata.named("ID")); - addMetadata(firstname, ColumnMetadata.named("FIRSTNAME")); - addMetadata(lastname, ColumnMetadata.named("LASTNAME")); - addMetadata(salary, ColumnMetadata.named("SALARY")); - addMetadata(datefield, ColumnMetadata.named("DATEFIELD")); - addMetadata(timefield, ColumnMetadata.named("TIMEFIELD")); - addMetadata(superiorId, ColumnMetadata.named("SUPERIOR_ID")); + addMetadata(id, ColumnMetadata.named("ID").ofType(Types.INTEGER)); + addMetadata(firstname, ColumnMetadata.named("FIRSTNAME").ofType(Types.VARCHAR)); + addMetadata(lastname, ColumnMetadata.named("LASTNAME").ofType(Types.VARCHAR)); + addMetadata(salary, ColumnMetadata.named("SALARY").ofType(Types.DECIMAL)); + addMetadata(datefield, ColumnMetadata.named("DATEFIELD").ofType(Types.DATE)); + addMetadata(timefield, ColumnMetadata.named("TIMEFIELD").ofType(Types.TIME)); + addMetadata(superiorId, ColumnMetadata.named("SUPERIOR_ID").ofType(Types.INTEGER)); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QSurvey.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QSurvey.java index f6291f70eb..928ccd7087 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QSurvey.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QSurvey.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql.domain; +import java.sql.Types; + import com.mysema.query.sql.ColumnMetadata; import com.mysema.query.sql.PrimaryKey; import com.mysema.query.sql.RelationalPathBase; @@ -48,9 +50,9 @@ public QSurvey(PathMetadata metadata) { } protected void addMetadata() { - addMetadata(name, ColumnMetadata.named("NAME")); - addMetadata(name2, ColumnMetadata.named("NAME2")); - addMetadata(id, ColumnMetadata.named("ID")); + addMetadata(name, ColumnMetadata.named("NAME").ofType(Types.VARCHAR)); + addMetadata(name2, ColumnMetadata.named("NAME2").ofType(Types.VARCHAR)); + addMetadata(id, ColumnMetadata.named("ID").ofType(Types.INTEGER)); } } From 158999650746da86ebe847b1edd0539326a9b7c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 14:03:38 +0200 Subject: [PATCH 0630/1968] Add test also for other databases --- .../java/com/mysema/query/Connections.java | 37 ++++++++++++++++++- .../java/com/mysema/query/SelectBase.java | 2 - 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index ee5c975d28..b13fe559b0 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -288,6 +288,10 @@ public static void initCubrid() throws SQLException, ClassNotFoundException{ stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + stmt.execute("drop table if exists NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 int)"); + // xml stmt.execute("drop table if exists XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); @@ -348,6 +352,10 @@ public static void initDerby() throws SQLException, ClassNotFoundException { dropTable(templates, "DATE_TEST"); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 boolean)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); @@ -462,6 +470,10 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 bit)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); @@ -527,13 +539,16 @@ public static void initH2() throws SQLException, ClassNotFoundException{ stmt.execute("alter table EMPLOYEE alter column id int auto_increment"); addEmployees(INSERT_INTO_EMPLOYEE); - // date_test and time_test stmt.execute("drop table TIME_TEST if exists"); stmt.execute("drop table DATE_TEST if exists"); stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 boolean)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); @@ -600,6 +615,10 @@ public static void initHSQL() throws SQLException, ClassNotFoundException{ stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 boolean)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); @@ -848,6 +867,10 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ stmt.execute(quote(CREATE_TABLE_TIMETEST, "TIME_TEST")); stmt.execute(quote(CREATE_TABLE_DATETEST, "DATE_TEST")); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 boolean)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table \"XML_TEST\"(\"COL\" XML)"); @@ -915,6 +938,10 @@ public static void initSQLite() throws SQLException, ClassNotFoundException{ stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + stmt.execute("drop table if exists NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 integer)"); + // xml stmt.execute("drop table if exists XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); @@ -971,6 +998,10 @@ public static void initSQLServer() throws SQLException, ClassNotFoundException { stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 bit)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL XML)"); @@ -1042,6 +1073,10 @@ public static void initTeradata() throws SQLException, ClassNotFoundException{ stmt.execute(CREATE_TABLE_TIMETEST); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 int)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 11455f7cd0..84cac1f30e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -997,7 +997,6 @@ public void Num_Cast2() { } @Test - @IncludeIn({MYSQL, ORACLE}) public void Number_As_Boolean() { QNumberTest numberTest = QNumberTest.numberTest; delete(numberTest).execute(); @@ -1008,7 +1007,6 @@ public void Number_As_Boolean() { } @Test - @IncludeIn({MYSQL, ORACLE}) public void Number_As_Boolean_Null() { QNumberTest numberTest = QNumberTest.numberTest; delete(numberTest).execute(); From 7462992401c340ba464d8d2b5760d962cee83cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 17:24:28 +0200 Subject: [PATCH 0631/1968] Use char(1) for bit --- querydsl-sql/src/test/java/com/mysema/query/Connections.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index b13fe559b0..820b391fa8 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -472,7 +472,7 @@ public static void initFirebird() throws SQLException, ClassNotFoundException{ // numbers dropTable(templates, "NUMBER_TEST"); - stmt.execute("create table NUMBER_TEST(col1 bit)"); + stmt.execute("create table NUMBER_TEST(col1 char(1))"); // xml dropTable(templates, "XML_TEST"); From 297aab890e856d56eba54b1433d34036056829e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 17:37:10 +0200 Subject: [PATCH 0632/1968] Fix tests --- .../src/test/java/com/mysema/query/Connections.java | 2 +- .../src/test/java/com/mysema/query/SelectBase.java | 1 + .../java/com/mysema/query/sql/domain/QNumberTest.java | 10 +++++----- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 820b391fa8..b0b54059b0 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -869,7 +869,7 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ // numbers dropTable(templates, "NUMBER_TEST"); - stmt.execute("create table NUMBER_TEST(col1 boolean)"); + stmt.execute("create table \"NUMBER_TEST\"(\"COL1\" boolean)"); // xml dropTable(templates, "XML_TEST"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index 84cac1f30e..f9cc5ab603 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -997,6 +997,7 @@ public void Num_Cast2() { } @Test + @ExcludeIn({CUBRID, DERBY, POSTGRES}) public void Number_As_Boolean() { QNumberTest numberTest = QNumberTest.numberTest; delete(numberTest).execute(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java index c67fa56374..b79d8efa47 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/domain/QNumberTest.java @@ -30,7 +30,7 @@ public class QNumberTest extends RelationalPathSpatial { public final NumberPath col1Number = createNumber("col2", Byte.class); public QNumberTest(String variable) { - super(QNumberTest.class, forVariable(variable), "null", "NUMBER_TEST"); + super(QNumberTest.class, forVariable(variable), "PUBLIC", "NUMBER_TEST"); addMetadata(); } @@ -40,18 +40,18 @@ public QNumberTest(String variable, String schema, String table) { } public QNumberTest(Path path) { - super(path.getType(), path.getMetadata(), "null", "NUMBER_TEST"); + super(path.getType(), path.getMetadata(), "PUBLIC", "NUMBER_TEST"); addMetadata(); } public QNumberTest(PathMetadata metadata) { - super(QNumberTest.class, metadata, "null", "NUMBER_TEST"); + super(QNumberTest.class, metadata, "PUBLIC", "NUMBER_TEST"); addMetadata(); } public void addMetadata() { - addMetadata(col1Boolean, ColumnMetadata.named("col1").withIndex(1).ofType(Types.BIT)); - addMetadata(col1Number, ColumnMetadata.named("col1").withIndex(1).ofType(Types.BIT)); + addMetadata(col1Boolean, ColumnMetadata.named("COL1").withIndex(1).ofType(Types.BIT)); + addMetadata(col1Number, ColumnMetadata.named("COL1").withIndex(1).ofType(Types.BIT)); } } From 4687497d6599688adc580cf56699223fd148fbe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 14 Dec 2014 18:28:27 +0200 Subject: [PATCH 0633/1968] Exclude test --- querydsl-sql/src/test/java/com/mysema/query/SelectBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index f9cc5ab603..ef5a65ce1c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -997,7 +997,7 @@ public void Num_Cast2() { } @Test - @ExcludeIn({CUBRID, DERBY, POSTGRES}) + @ExcludeIn({CUBRID, DERBY, FIREBIRD, POSTGRES}) public void Number_As_Boolean() { QNumberTest numberTest = QNumberTest.numberTest; delete(numberTest).execute(); From 9b580aa073dcae0c93a77568d9cea8f32e5fced7 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Mon, 15 Dec 2014 15:23:23 +0100 Subject: [PATCH 0634/1968] Add test case for #1088 --- .../com/mysema/query/AbstractJPATest.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java index fe1780e09f..97688e9fd5 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/AbstractJPATest.java @@ -13,15 +13,19 @@ */ package com.mysema.query; -import java.io.*; +import static org.junit.Assert.*; +import static com.mysema.query.Target.*; + import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; import java.util.Calendar; import java.util.Map.Entry; -import antlr.RecognitionException; -import antlr.TokenStreamException; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.mysema.commons.lang.Pair; @@ -42,11 +46,9 @@ import com.mysema.query.types.path.*; import com.mysema.query.types.template.NumberTemplate; import com.mysema.testutil.ExcludeIn; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; + +import antlr.RecognitionException; +import antlr.TokenStreamException; /** * @author tiwe @@ -313,6 +315,14 @@ public void Case2() { .otherwise(4)); } + @Test + public void Case3() { + query().from(cat) + .list(Expressions.cases() + .when(cat.toes.in(2, 3)).then(cat.id.multiply(cat.toes)) + .otherwise(4)); + } + @Test public void Cast() { List cats = query().from(cat).list(cat); From a6af48db42ee878f5186985587bdd61bdb9b9827 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 15:12:46 -0200 Subject: [PATCH 0635/1968] Adding XML syntax highlighting to the README --- querydsl-collections/README.md | 36 +++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/querydsl-collections/README.md b/querydsl-collections/README.md index e7b6c4c496..ca8ca00a40 100644 --- a/querydsl-collections/README.md +++ b/querydsl-collections/README.md @@ -6,24 +6,24 @@ The Collections module provides integration with Java Collections and Beans. Add the following dependencies to your Maven project : - - com.mysema.querydsl - querydsl-apt - ${querydsl.version} - provided - - - - com.mysema.querydsl - querydsl-collections - ${querydsl.version} - - - - org.slf4j - slf4j-log4j12 - 1.6.1 - +```XML + + com.mysema.querydsl + querydsl-apt + ${querydsl.version} + provided + + + com.mysema.querydsl + querydsl-collections + ${querydsl.version} + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` If you are not using JPA or JDO you can generate Querydsl query types for your domain types by annotating them with the com.mysema.query.annotations.QueryEntity annotation and adding the following plugin configuration into your Maven configuration (pom.xml) : From 37e8f12b5cf748024eb7eecdb687803e96229563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 15 Dec 2014 21:54:27 +0200 Subject: [PATCH 0636/1968] Fix serialization --- .../com/mysema/query/jpa/JPQLSerializer.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java index 5230a532cb..affc2609f3 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPQLSerializer.java @@ -13,12 +13,13 @@ */ package com.mysema.query.jpa; +import java.util.*; + import javax.annotation.Nullable; import javax.persistence.*; import javax.persistence.metamodel.EntityType; import javax.persistence.metamodel.Metamodel; import javax.persistence.metamodel.SingularAttribute; -import java.util.*; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -282,7 +283,20 @@ private void serializeSources(boolean forCountRow, List joins) { @Override public void visitConstant(Object constant) { if (inCaseOperation && templates.isCaseWithLiterals()) { - visitLiteral(constant); + if (constant instanceof Collection) { + append("("); + boolean first = true; + for (Object o : (Collection)constant) { + if (!first) { + append(", "); + } + visitLiteral(o); + first = false; + } + append(")"); + } else { + visitLiteral(constant); + } } else { boolean wrap = templates.wrapConstant(constant); if (wrap) { From 5b5a9f1a9dd69efc35c50500c1577b39fdab17cc Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:22:41 -0200 Subject: [PATCH 0637/1968] Adding syntax Highlight for querydsl-sql/README.md --- querydsl-sql/README.md | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/querydsl-sql/README.md b/querydsl-sql/README.md index 3b7b348093..21279a3816 100644 --- a/querydsl-sql/README.md +++ b/querydsl-sql/README.md @@ -6,17 +6,18 @@ The SQL module provides integration with the JDBC API. Add the following dependencies to your Maven project : - - com.mysema.querydsl - querydsl-sql - ${querydsl.version} - - - - org.slf4j - slf4j-log4j12 - 1.6.1 - +```XML + + com.mysema.querydsl + querydsl-sql + ${querydsl.version} + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` **Code generation via Maven** @@ -63,13 +64,14 @@ Use the goal test-export to add the targetFolder as a test compile source root i **Querying** Querying with Querydsl SQL is as simple as this : - - QCustomer customer = new QCustomer("c"); - SQLTemplates dialect = new HSQLDBTemplates(); // SQL-dialect - SQLQuery query = new SQLQuery(connection, dialect); - List lastNames = query.from(customer) - .where(customer.firstName.eq("Bob")) - .list(customer.lastName); - +```JAVA +QCustomer customer = new QCustomer("c"); + +SQLTemplates dialect = new HSQLDBTemplates(); // SQL-dialect +SQLQuery query = new SQLQuery(connection, dialect); +List lastNames = query.from(customer) + .where(customer.firstName.eq("Bob")) + .list(customer.lastName); +``` For more information on the Querydsl SQL module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s03.html From b4cfdc41efa8e1fc75a9fafaed05ff07cb552efa Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:32:53 -0200 Subject: [PATCH 0638/1968] Adding syntax Highlight for querydsl-lucene3/README.md --- querydsl-lucene3/README.md | 73 +++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/querydsl-lucene3/README.md b/querydsl-lucene3/README.md index b945b4c304..d47851e9b9 100644 --- a/querydsl-lucene3/README.md +++ b/querydsl-lucene3/README.md @@ -5,36 +5,39 @@ The Lucene module provides integration with the Lucene 3 indexing library. **Maven integration** Add the following dependencies to your Maven project : - - - com.mysema.querydsl - querydsl-lucene3 - ${querydsl.version} - - - - org.slf4j - slf4j-log4j12 - 1.6.1 - +```XML + + com.mysema.querydsl + querydsl-lucene3 + ${querydsl.version} + + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` **Creating the query types** With fields year and title a manually created query type could look something like this: - - public class QDocument extends EntityPathBase{ - private static final long serialVersionUID = -4872833626508344081L; - - public QDocument(String var) { - super(Document.class, PathMetadataFactory.forVariable(var)); - } - - public final StringPath year = createString("year"); - - public final StringPath title = createString("title"); + +```JAVA +public class QDocument extends EntityPathBase{ + private static final long serialVersionUID = -4872833626508344081L; + + public QDocument(String var) { + super(Document.class, PathMetadataFactory.forVariable(var)); } + public final StringPath year = createString("year"); + + public final StringPath title = createString("title"); +} +``` + QDocument represents a Lucene document with the fields year and title. Code generation is not available for Lucene, since no schema data is available. @@ -42,17 +45,21 @@ Code generation is not available for Lucene, since no schema data is available. **Querying** Querying with Querydsl Lucene is as simple as this: - - QDocument doc = new QDocument("doc"); - - IndexSearcher searcher = new IndexSearher(index); - LuceneQuery query = new LuceneQuery(true, searcher); - List documents = query - .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) - .list(); + +```JAVA +QDocument doc = new QDocument("doc"); + +IndexSearcher searcher = new IndexSearher(index); +LuceneQuery query = new LuceneQuery(true, searcher); +List documents = query + .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) + .list(); + ``` which is transformed into the following Lucene query : - - +year:[1800 TO 2000] +title:huckle* + +``` ++year:[1800 TO 2000] +title:huckle* +``` For more information on the Querydsl Lucene module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s05.html From 2fd7a090a23b52aea2f5858251c8d8eb1f991a04 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:35:22 -0200 Subject: [PATCH 0639/1968] Adding syntax Highlight for querydsl-lucene4/README.md --- querydsl-lucene4/README.md | 73 ++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/querydsl-lucene4/README.md b/querydsl-lucene4/README.md index 9376076726..ffaf9142bf 100644 --- a/querydsl-lucene4/README.md +++ b/querydsl-lucene4/README.md @@ -5,36 +5,38 @@ The Lucene module provides integration with the Lucene 4 indexing library. **Maven integration** Add the following dependencies to your Maven project : - - - com.mysema.querydsl - querydsl-lucene4 - ${querydsl.version} - - - - org.slf4j - slf4j-log4j12 - 1.6.1 - - +```XML + + com.mysema.querydsl + querydsl-lucene4 + ${querydsl.version} + + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` **Creating the query types** With fields year and title a manually created query type could look something like this: - - public class QDocument extends EntityPathBase{ - private static final long serialVersionUID = -4872833626508344081L; - - public QDocument(String var) { - super(Document.class, PathMetadataFactory.forVariable(var)); - } - - public final StringPath year = createString("year"); - - public final StringPath title = createString("title"); + +```JAVA +public class QDocument extends EntityPathBase{ + private static final long serialVersionUID = -4872833626508344081L; + + public QDocument(String var) { + super(Document.class, PathMetadataFactory.forVariable(var)); } + public final StringPath year = createString("year"); + + public final StringPath title = createString("title"); +} +``` + QDocument represents a Lucene document with the fields year and title. Code generation is not available for Lucene, since no schema data is available. @@ -42,17 +44,20 @@ Code generation is not available for Lucene, since no schema data is available. **Querying** Querying with Querydsl Lucene is as simple as this: - - QDocument doc = new QDocument("doc"); - - IndexSearcher searcher = new IndexSearher(index); - LuceneQuery query = new LuceneQuery(true, searcher); - List documents = query - .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) - .list(); + +``` +QDocument doc = new QDocument("doc"); + +IndexSearcher searcher = new IndexSearher(index); +LuceneQuery query = new LuceneQuery(true, searcher); +List documents = query + .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) + .list(); +``` which is transformed into the following Lucene query : - - +year:[1800 TO 2000] +title:huckle* +``` ++year:[1800 TO 2000] +title:huckle* +``` For more information on the Querydsl Lucene module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s05.html From becb48cb8c905d900cf10968eb8a638f82951b66 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:36:04 -0200 Subject: [PATCH 0640/1968] Adding syntax Highlight for querydsl-lucene4/README.md --- querydsl-lucene4/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-lucene4/README.md b/querydsl-lucene4/README.md index ffaf9142bf..4a6a8f9a90 100644 --- a/querydsl-lucene4/README.md +++ b/querydsl-lucene4/README.md @@ -45,7 +45,7 @@ Code generation is not available for Lucene, since no schema data is available. Querying with Querydsl Lucene is as simple as this: -``` +```JAVA QDocument doc = new QDocument("doc"); IndexSearcher searcher = new IndexSearher(index); From 17757b7499167f192f55cbd66228ab4125efdc11 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:38:44 -0200 Subject: [PATCH 0641/1968] Adding Java syntax Highlighting for querydsl-collections/README.md --- querydsl-collections/README.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/querydsl-collections/README.md b/querydsl-collections/README.md index ca8ca00a40..b1bfd73c8b 100644 --- a/querydsl-collections/README.md +++ b/querydsl-collections/README.md @@ -58,13 +58,15 @@ If you are not using JPA or JDO you can generate Querydsl query types for your d Querying with Querydsl Collections is as simple as this : - import static com.mysema.query.collections.CollQueryFactory.*; - - QCat cat = new QCat("cat"); - for (String name : from(cat,cats) - .where(cat.kittens.size().gt(0)) - .list(cat.name)){ - System.out.println(name); - } +```JAVA +import static com.mysema.query.collections.CollQueryFactory.*; + +QCat cat = new QCat("cat"); +for (String name : from(cat,cats) + .where(cat.kittens.size().gt(0)) + .list(cat.name)){ + System.out.println(name); +} +``` For more information on the Querydsl Collections module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s08.html From 1621142a129f968d750bfa055f076285fa565183 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:41:54 -0200 Subject: [PATCH 0642/1968] Adding syntax Highlighting for querydsl-jdo/README.md --- querydsl-jdo/README.md | 50 +++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/querydsl-jdo/README.md b/querydsl-jdo/README.md index 850975c472..bfd46dcea5 100644 --- a/querydsl-jdo/README.md +++ b/querydsl-jdo/README.md @@ -6,24 +6,26 @@ The JDO module provides integration with the JDO API. Add the following dependencies to your Maven project : - - com.mysema.querydsl - querydsl-apt - ${querydsl.version} - provided - - - - com.mysema.querydsl - querydsl-jdo - ${querydsl.version} - +```XML + + com.mysema.querydsl + querydsl-apt + ${querydsl.version} + provided + - - org.slf4j - slf4j-log4j12 - 1.6.1 - + + com.mysema.querydsl + querydsl-jdo + ${querydsl.version} + + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` And now, configure the Maven APT plugin which generates the query types used by Querydsl : @@ -66,11 +68,13 @@ Now you are able to construct JDOQL query instances and instances of the query d Querying with Querydsl JDO is as simple as this : - QCustomer customer = QCustomer.customer; - JDOQuery query = new JDOQuery(pm); - Customer bob = query.from(customer) - .where(customer.firstName.eq("Bob")) - .uniqueResult(customer); - query.close(); +```JAVA +QCustomer customer = QCustomer.customer; +JDOQuery query = new JDOQuery(pm); +Customer bob = query.from(customer) + .where(customer.firstName.eq("Bob")) + .uniqueResult(customer); +query.close(); +``` For more information on the Querydsl JDO module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s02.html From 5e1e8bd1b1e0b73156bead8f76a340b2ab5dcd4d Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:43:52 -0200 Subject: [PATCH 0643/1968] Adding syntax Highlighting for querydsl-jpa/README.md --- querydsl-jpa/README.md | 50 +++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/querydsl-jpa/README.md b/querydsl-jpa/README.md index a6500a23cf..e2541f749f 100644 --- a/querydsl-jpa/README.md +++ b/querydsl-jpa/README.md @@ -6,24 +6,26 @@ The JPA module provides integration with the JPA 2 persistence API. Add the following dependencies to your Maven project : - - com.mysema.querydsl - querydsl-apt - ${querydsl.version} - provided - - - - com.mysema.querydsl - querydsl-jpa - ${querydsl.version} - +```XML + + com.mysema.querydsl + querydsl-apt + ${querydsl.version} + provided + - - org.slf4j - slf4j-log4j12 - 1.6.1 - + + com.mysema.querydsl + querydsl-jpa + ${querydsl.version} + + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` And now, configure the Maven APT plugin : @@ -68,10 +70,12 @@ Now you are able to construct JPQL query instances and instances of the query do Querying with Querydsl JPA is as simple as this : - QCustomer customer = QCustomer.customer; - JPAQuery query = new JPAQuery(entityManager); - Customer bob = query.from(customer) - .where(customer.firstName.eq("Bob")) - .uniqueResult(customer); - +```JAVA +QCustomer customer = QCustomer.customer; +JPAQuery query = new JPAQuery(entityManager); +Customer bob = query.from(customer) + .where(customer.firstName.eq("Bob")) + .uniqueResult(customer); +``` + For more information on the Querydsl JPA module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration From bce6b82607960975f4ff3ec2c4aa0a0ce37995d7 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:46:49 -0200 Subject: [PATCH 0644/1968] Adding syntax Highlighting for querydsl-mongodb/README.md --- querydsl-mongodb/README.md | 44 +++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/querydsl-mongodb/README.md b/querydsl-mongodb/README.md index 7a8c751e6c..7c6ead58ae 100644 --- a/querydsl-mongodb/README.md +++ b/querydsl-mongodb/README.md @@ -6,17 +6,19 @@ The Mongodb module provides integration with the Mongodb API. Add the following dependencies to your Maven project : - - com.mysema.querydsl - querydsl-mongodb - ${querydsl.version} - - - - org.slf4j - slf4j-log4j12 - 1.6.1 - +```XML + + com.mysema.querydsl + querydsl-mongodb + ${querydsl.version} + + + + org.slf4j + slf4j-log4j12 + 1.6.1 + +``` And now, configure the Maven APT plugin which generates the query types used by Querydsl : @@ -49,7 +51,7 @@ And now, configure the Maven APT plugin which generates the query types used by The MorphiaAnnotationProcessor finds domain types annotated with the com.google.code.morphia.annotations.Entity annotation and generates Querydsl query types for them. -Run clean install and you will get your Query types generated into target/generated-sources/java. +Run `clean install` and you will get your Query types generated into target/generated-sources/java. If you use Eclipse, run mvn eclipse:eclipse to update your Eclipse project to include target/generated-sources/java as a source folder. @@ -59,14 +61,16 @@ Now you are able to construct Mongodb queries and instances of the query domain Querying with Querydsl Mongodb with Morphia is as simple as this : - Morphia morphia; - Datastore datastore; - // ... - QUser user = new QUser("user"); - MorphiaQuery query = new MorphiaQuery(morphia, datastore, user); - List list = query - .where(user.firstName.eq("Bob")) - .list(); +```JAVA +Morphia morphia; +Datastore datastore; +// ... +QUser user = new QUser("user"); +MorphiaQuery query = new MorphiaQuery(morphia, datastore, user); +List list = query + .where(user.firstName.eq("Bob")) + .list(); +``` For more information on the Querydsl Mongodb module visit the reference documentation http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s07.html From 0013e519dc99d8b74226680a13ec9a0088c8b3af Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:53:48 -0200 Subject: [PATCH 0645/1968] Syntax Highlighting for /README.md --- README.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c048b52dab..1b04aefccb 100644 --- a/README.md +++ b/README.md @@ -34,8 +34,10 @@ Free support is provided in the Querydsl Google Group https://groups.google.com/ Querydsl provides releases via public Maven repositories, but you can build the sources also yourself like this - cd querydsl-root - mvn -DskipTests=true clean install +```SHELL +$ cd querydsl-root +$ mvn -DskipTests=true clean install +``` For more information visit the project homepage at http://www.querydsl.com/. @@ -54,10 +56,10 @@ place it in the ```devops``` directory. To launch the virtual machine: -``` -$> cd devops -devops$> librarian-puppet install -devops$> vagrant up +```SHELL +$ cd devops +$ librarian-puppet install +$ vagrant up ``` All of the databases' default ports are forwarded to the host machine. See the Vagrantfile for details. From 8198732b8ed981500286196bd959a9af95a77795 Mon Sep 17 00:00:00 2001 From: Vinicius da Costa Pires Date: Mon, 15 Dec 2014 21:55:02 -0200 Subject: [PATCH 0646/1968] Syntax Highlighting for /README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1b04aefccb..514e1ef250 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Free support is provided in the Querydsl Google Group https://groups.google.com/ Querydsl provides releases via public Maven repositories, but you can build the sources also yourself like this -```SHELL +```BASH $ cd querydsl-root $ mvn -DskipTests=true clean install ``` @@ -56,7 +56,7 @@ place it in the ```devops``` directory. To launch the virtual machine: -```SHELL +```BASH $ cd devops $ librarian-puppet install $ vagrant up From 762cc23c495dec677854e7593e0d88de038fcafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 16 Dec 2014 23:37:40 +0200 Subject: [PATCH 0647/1968] Fix order by handling for subqueries --- .../java/com/mysema/query/jpa/JPAQueryMixin.java | 12 ++++++++++-- .../test/java/com/mysema/query/jpa/SubQueryTest.java | 11 +++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java index dd6f6fe260..ea38a763b0 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java @@ -13,17 +13,22 @@ */ package com.mysema.query.jpa; -import javax.persistence.Entity; import java.util.List; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; +import javax.persistence.Entity; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.mysema.query.JoinFlag; import com.mysema.query.QueryMetadata; -import com.mysema.query.support.*; +import com.mysema.query.support.Context; +import com.mysema.query.support.PathsExtractor; +import com.mysema.query.support.QueryMixin; +import com.mysema.query.support.ReplaceVisitor; import com.mysema.query.types.*; import com.mysema.query.types.path.CollectionPathBase; @@ -170,6 +175,9 @@ public Expression convert(Expression expr, boolean forOrder) { public Expression visit(Path expr, Void context) { return convertPathForOrder(expr); } + public Expression visit(SubQueryExpression expr, @Nullable Void context) { + return expr; + } }; } expr = (Expression)expr.accept(replaceVisitor, null); diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java index 7a6040853e..390dc1f830 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/jpa/SubQueryTest.java @@ -20,6 +20,7 @@ import com.mysema.query.domain.QCat; import com.mysema.query.jpa.domain.QEmployee; import com.mysema.query.jpa.domain.QUser; +import com.mysema.query.types.query.NumberSubQuery; public class SubQueryTest extends AbstractQueryTest{ @@ -190,5 +191,15 @@ public void IndexOf() { assertToString("(select count(cat) from Cat cat where locate(?1,cat.name)-1 = ?2)", sub().from(cat).where(cat.name.indexOf("a").eq(1)).count()); } + + @Test + public void OrderBy() { + JPQLQuery query = query().from(cat1).where(cat1.alive); + NumberSubQuery subquery = sub().from(cat).where(cat.mate.id.eq(cat1.id)).unique(cat.floatProperty.avg()); + query.orderBy(subquery.subtract(-1.0f).asc()); + + assertEquals("select cat1 from Cat cat1 where cat1.alive order by (select avg(cat.floatProperty) from Cat cat where cat.mate.id = cat1.id) - ?1 asc", + query.toString().replace("\n", " ")); + } } From d505cad5732894f0a761cca2c04d2af0255dba52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 16 Dec 2014 23:46:29 +0200 Subject: [PATCH 0648/1968] Add comment --- .../src/main/java/com/mysema/query/jpa/JPAQueryMixin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java index ea38a763b0..535d727e8a 100644 --- a/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/mysema/query/jpa/JPAQueryMixin.java @@ -176,6 +176,7 @@ public Expression visit(Path expr, Void context) { return convertPathForOrder(expr); } public Expression visit(SubQueryExpression expr, @Nullable Void context) { + // don't shorten paths inside subquery expressions return expr; } }; From 4ecba55bc848abee10de33b5319cf8d78508846b Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 17 Dec 2014 23:04:10 +0100 Subject: [PATCH 0649/1968] Implement the JPAQueryMutabilityTests --- .../mysema/query/JPAQueryMutabilityTest.java | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java b/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java index 3fcde62f56..a042dd639e 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java +++ b/querydsl-jpa/src/test/java/com/mysema/query/JPAQueryMutabilityTest.java @@ -13,29 +13,41 @@ */ package com.mysema.query; +import static com.mysema.query.support.Expressions.numberOperation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import javax.persistence.EntityManager; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; +import com.mysema.query.jpa.HQLTemplates; +import com.mysema.query.jpa.JPQLTemplates; import com.mysema.query.jpa.domain.QCat; import com.mysema.query.jpa.impl.JPAQuery; +import com.mysema.query.types.OperatorImpl; import com.mysema.testutil.JPATestRunner; -@Ignore @RunWith(JPATestRunner.class) public class JPAQueryMutabilityTest implements JPATest { private EntityManager entityManager; + private final OperatorImpl customOperator = new OperatorImpl("CUSTOM", "SIGN"); + + private final JPQLTemplates customTemplates = new HQLTemplates() {{ + add(customOperator, "sign({0})"); + }}; + protected JPAQuery query() { return new JPAQuery(entityManager); } + protected JPAQuery query(JPQLTemplates templates) { + return new JPAQuery(entityManager, templates); + } + @Override public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; @@ -88,6 +100,33 @@ public void Clone() { query2.list(cat); } + @Test + public void Clone_Custom_Templates() { + QCat cat = QCat.cat; + JPAQuery query = query().from(cat); + //attach using the custom templates + query.clone(entityManager, customTemplates) + .uniqueResult(numberOperation(Integer.class, customOperator, cat.floatProperty)); + } + + @Test + public void Clone_Keep_Templates() { + QCat cat = QCat.cat; + JPAQuery query = query(customTemplates).from(cat); + //keep the original templates + query.clone() + .uniqueResult(numberOperation(Integer.class, customOperator, cat.floatProperty)); + } + + @Test(expected = IllegalArgumentException.class) + public void Clone_Lose_Templates() { + QCat cat = QCat.cat; + JPAQuery query = query(customTemplates).from(cat); + //clone using the entitymanager's default templates + query.clone(entityManager) + .uniqueResult(numberOperation(Integer.class, customOperator, cat.floatProperty)); + } + private void assertProjectionEmpty(JPAQuery query) { assertTrue(query.getMetadata().getProjection().isEmpty()); } From c24bb0bbfd3817d4bbd31f3f51622fd28b340dd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 17 Dec 2014 19:55:51 +0200 Subject: [PATCH 0650/1968] Stubs for DB2 support --- .../test/java/com/mysema/query/Target.java | 4 + querydsl-sql/pom.xml | 10 +- .../com/mysema/query/sql/DB2Templates.java | 143 ++++++++++++++++++ .../java/com/mysema/query/Connections.java | 70 ++++++++- 4 files changed, 224 insertions(+), 3 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java diff --git a/querydsl-core/src/test/java/com/mysema/query/Target.java b/querydsl-core/src/test/java/com/mysema/query/Target.java index e727f64367..a6e485d2ca 100644 --- a/querydsl-core/src/test/java/com/mysema/query/Target.java +++ b/querydsl-core/src/test/java/com/mysema/query/Target.java @@ -22,6 +22,10 @@ public enum Target{ * CUBRID */ CUBRID, + /** + * DB2 + */ + DB2, /** * Derby */ diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index ef6ab8a77a..0ef4548053 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -192,6 +192,12 @@ true + + com.ibm.db2 + db2-jdbc + 1.0 + + @@ -318,4 +324,4 @@ - + diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java new file mode 100644 index 0000000000..241561af06 --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java @@ -0,0 +1,143 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.mysema.query.sql; + +import java.sql.Types; + +import com.mysema.query.QueryMetadata; +import com.mysema.query.QueryModifiers; +import com.mysema.query.types.Ops; + +/** + * DB2Templates is an SQL dialect for DB2 + * + * @author tiwe + * + */ +public class DB2Templates extends SQLTemplates { + + private String limitOffsetTemplate = "\noffset {1s} rows fetch next {0s} rows only"; + + private String limitTemplate = "\nfetch first {0s} rows only"; + + private String offsetTemplate = "\noffset {0s} rows"; + + public static Builder builder() { + return new Builder() { + @Override + protected SQLTemplates build(char escape, boolean quote) { + return new DB2Templates(escape, quote); + } + }; + } + + public DB2Templates() { + this('\\',false); + } + + public DB2Templates(boolean quote) { + this('\\',quote); + } + + public DB2Templates(char escape, boolean quote) { + super("\"", escape, quote); + setDummyTable("sysibm.sysdummy1"); + setAutoIncrement(" generated always as identity"); + setFunctionJoinsWrapped(true); + setDefaultValues("\nvalues (default)"); + + add(Ops.CONCAT, "varchar({0} || {1})"); + add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})"); + + add(SQLOps.NEXTVAL, "next value for {0s}"); + + // case for eq + add(Ops.CASE_EQ, "case {1} end"); + add(Ops.CASE_EQ_WHEN, "when {0} = {1} then {2} {3}"); + add(Ops.CASE_EQ_ELSE, "else {0}"); + + add(Ops.MathOps.RANDOM, "random()"); + add(Ops.MathOps.ROUND, "floor({0})"); // FIXME + add(Ops.MathOps.POWER, "exp({1} * log({0}))"); + add(Ops.MathOps.LN, "log({0})"); + add(Ops.MathOps.LOG, "(log({0}) / log({1}))"); + add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); + + // overrides of the SQL standard functions + add(Ops.DateTimeOps.SECOND, "second({0})"); + add(Ops.DateTimeOps.MINUTE, "minute({0})"); + add(Ops.DateTimeOps.HOUR, "hour({0})"); + add(Ops.DateTimeOps.WEEK, "week({0})"); + add(Ops.DateTimeOps.MONTH, "month({0})"); + add(Ops.DateTimeOps.YEAR, "year({0})"); + add(Ops.DateTimeOps.YEAR_MONTH, "(year({0}) * 100 + month({0}))"); + add(Ops.DateTimeOps.YEAR_WEEK, "(year({0}) * 100 + week({0}))"); + add(Ops.DateTimeOps.DAY_OF_WEEK, "dayofweek({0})"); + add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})"); + add(Ops.DateTimeOps.DAY_OF_YEAR, "dayofyear({0})"); + + add(Ops.DateTimeOps.ADD_YEARS, "{fn timestampadd(SQL_TSI_YEAR, {1}, {0})}"); + add(Ops.DateTimeOps.ADD_MONTHS, "{fn timestampadd(SQL_TSI_MONTH, {1}, {0})}"); + add(Ops.DateTimeOps.ADD_WEEKS, "{fn timestampadd(SQL_TSI_WEEK, {1}, {0})}"); + add(Ops.DateTimeOps.ADD_DAYS, "{fn timestampadd(SQL_TSI_DAY, {1}, {0})}"); + add(Ops.DateTimeOps.ADD_HOURS, "{fn timestampadd(SQL_TSI_HOUR, {1}, {0})}"); + add(Ops.DateTimeOps.ADD_MINUTES, "{fn timestampadd(SQL_TSI_MINUTE, {1}, {0})}"); + add(Ops.DateTimeOps.ADD_SECONDS, "{fn timestampadd(SQL_TSI_SECOND, {1}, {0})}"); + + add(Ops.DateTimeOps.DIFF_YEARS, "{fn timestampdiff(SQL_TSI_YEAR, {0}, {1})}"); + add(Ops.DateTimeOps.DIFF_MONTHS, "{fn timestampdiff(SQL_TSI_MONTH, {0}, {1})}"); + add(Ops.DateTimeOps.DIFF_WEEKS, "{fn timestampdiff(SQL_TSI_WEEK, {0}, {1})}"); + add(Ops.DateTimeOps.DIFF_DAYS, "{fn timestampdiff(SQL_TSI_DAY, {0}, {1})}"); + add(Ops.DateTimeOps.DIFF_HOURS, "{fn timestampdiff(SQL_TSI_HOUR, {0}, {1})}"); + add(Ops.DateTimeOps.DIFF_MINUTES, "{fn timestampdiff(SQL_TSI_MINUTE, {0}, {1})}"); + add(Ops.DateTimeOps.DIFF_SECONDS, "{fn timestampdiff(SQL_TSI_SECOND, {0}, {1})}"); + + // left via substr + add(Ops.StringOps.LEFT, "substr({0},1,{1})"); + + addTypeNameToCode("smallint", Types.TINYINT, true); + addTypeNameToCode("long varchar for bit data", Types.LONGVARBINARY); + addTypeNameToCode("varchar () for bit data", Types.VARBINARY); + addTypeNameToCode("char () for bit data", Types.BINARY); + addTypeNameToCode("long varchar", Types.LONGVARCHAR, true); + addTypeNameToCode("object", Types.JAVA_OBJECT, true); + addTypeNameToCode("xml", Types.SQLXML,true); + } + + @Override + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.TIMESTAMP) { + return "{ts '" + literal + "'}"; + } else if (jdbcType == Types.DATE) { + return "{d '" + literal + "'}"; + } else if (jdbcType == Types.TIME) { + return "{t '" + literal + "'}"; + } else { + return super.serialize(literal, jdbcType); + } + } + + @Override + protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { + QueryModifiers mod = metadata.getModifiers(); + if (mod.getLimit() == null) { + context.handle(offsetTemplate, mod.getOffset()); + } else if (mod.getOffset() == null) { + context.handle(limitTemplate, mod.getLimit()); + } else { + context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset()); + } + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 97b3e405f8..66198a00e4 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -17,11 +17,12 @@ import java.util.Map; import java.util.Properties; +import org.hsqldb.types.Types; + import com.google.common.collect.Maps; import com.mysema.query.ddl.CreateTableClause; import com.mysema.query.ddl.DropTableClause; import com.mysema.query.sql.*; -import org.hsqldb.types.Types; /** * @author tiwe @@ -86,6 +87,12 @@ public static void setTemplates(SQLTemplates templates) { templatesHolder.set(templates); } + private static Connection getDB2() throws SQLException, ClassNotFoundException { + Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); + String url = "jdbc:derby:target/demoDB;create=true"; + return DriverManager.getConnection(url, "", ""); + } + private static Connection getDerby() throws SQLException, ClassNotFoundException { Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); String url = "jdbc:derby:target/demoDB;create=true"; @@ -294,6 +301,67 @@ public static void initCubrid() throws SQLException, ClassNotFoundException{ cubridInited = true; } + public static void initDB2() throws SQLException, ClassNotFoundException { + targetHolder.set(Target.DERBY); + SQLTemplates templates = new DerbyTemplates(); + Connection c = getDerby(); + connHolder.set(c); + Statement stmt = c.createStatement(); + stmtHolder.set(stmt); + + if (derbyInited) { + return; + } + + // types + dropType(stmt, "price restrict"); + stmt.execute("create type price external name 'com.example.Price' language java"); + + // survey + dropTable(templates, "SURVEY"); + stmt.execute("create table SURVEY(" + + "ID int generated by default as identity(start with 1, increment by 1), " + + "NAME varchar(30)," + + "NAME2 varchar(30))"); + stmt.execute("insert into SURVEY values (1,'Hello World','Hello')"); + + // test + dropTable(templates, "TEST"); + stmt.execute(CREATE_TABLE_TEST); + stmt.execute("create index test_name on test(name)"); + PreparedStatement pstmt = c.prepareStatement(INSERT_INTO_TEST_VALUES); + try{ + for (int i = 0; i < TEST_ROW_COUNT; i++) { + pstmt.setString(1, "name" + i); + pstmt.addBatch(); + } + pstmt.executeBatch(); + }finally{ + pstmt.close(); + } + + // employee + dropTable(templates, "EMPLOYEE"); + + createEmployeeTable(templates); + + addEmployees(INSERT_INTO_EMPLOYEE); + + // date_test and time_test + dropTable(templates, "TIME_TEST"); + stmt.execute(CREATE_TABLE_TIMETEST); + + dropTable(templates, "DATE_TEST"); + stmt.execute(CREATE_TABLE_DATETEST); + + // xml + dropTable(templates, "XML_TEST"); + stmt.execute("create table XML_TEST(COL varchar(128))"); + + derbyInited = true; + } + + public static void initDerby() throws SQLException, ClassNotFoundException { targetHolder.set(Target.DERBY); SQLTemplates templates = new DerbyTemplates(); From 7d605c019910cd04c40831c689062971a2c57dde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Dec 2014 19:23:21 +0200 Subject: [PATCH 0651/1968] Improve implementation --- .../java/com/mysema/query/FilterFactory.java | 1 + .../mysema/query/MatchingFiltersFactory.java | 1 + .../com/mysema/query/sql/DB2Templates.java | 124 ++++++++++++------ .../com/mysema/query/sql/DerbyTemplates.java | 1 - .../com/mysema/query/BeanPopulationBase.java | 3 +- .../java/com/mysema/query/Connections.java | 22 ++-- .../java/com/mysema/query/InsertBase.java | 26 ++-- .../test/java/com/mysema/query/MergeBase.java | 18 +-- .../java/com/mysema/query/SelectBase.java | 47 +++---- .../query/SelectWindowFunctionsBase.java | 23 ++-- .../com/mysema/query/suites/DB2SuiteTest.java | 35 +++++ 11 files changed, 193 insertions(+), 108 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java diff --git a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java index f6a2fb12a5..8133a21e30 100644 --- a/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/FilterFactory.java @@ -323,6 +323,7 @@ public Collection string(StringExpression expr, StringExpression othe rv.add(expr.notLike("%"+knownValue.substring(1,2)+"%")); if (!target.equals(Target.DERBY) + && !target.equals(Target.DB2) && !target.equals(Target.FIREBIRD) && !target.equals(Target.HSQLDB) && !target.equals(Target.H2) diff --git a/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java b/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java index 48f923036f..dfcbbdb0ad 100644 --- a/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java +++ b/querydsl-core/src/test/java/com/mysema/query/MatchingFiltersFactory.java @@ -248,6 +248,7 @@ public Collection string(StringExpression expr, StringExpression othe || (!target.equals(Target.HSQLDB) && !target.equals(Target.FIREBIRD) && !target.equals(Target.H2) + && !target.equals(Target.DB2) && !target.equals(Target.DERBY) && !target.equals(Target.SQLITE) && !target.equals(Target.SQLSERVER))) { diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java index 241561af06..1332d67618 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java @@ -15,23 +15,31 @@ import java.sql.Types; +import com.mysema.query.QueryFlag; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.types.Ops; +import com.mysema.query.types.OrderSpecifier; /** - * DB2Templates is an SQL dialect for DB2 + * DB2Templates is an SQL dialect for DB2 10.1.2 * * @author tiwe * */ public class DB2Templates extends SQLTemplates { - private String limitOffsetTemplate = "\noffset {1s} rows fetch next {0s} rows only"; - private String limitTemplate = "\nfetch first {0s} rows only"; - private String offsetTemplate = "\noffset {0s} rows"; + private String outerQueryStart = "select * from (\n "; + + private String outerQueryEnd = ") a where "; + + private String limitOffsetTemplate = "rn > {0} and rn <= {1}"; + + private String offsetTemplate = "rn > {0}"; + + private String outerQuerySuffix = " order by rn"; public static Builder builder() { return new Builder() { @@ -56,20 +64,12 @@ public DB2Templates(char escape, boolean quote) { setAutoIncrement(" generated always as identity"); setFunctionJoinsWrapped(true); setDefaultValues("\nvalues (default)"); - - add(Ops.CONCAT, "varchar({0} || {1})"); - add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})"); + setNullsFirst(null); + setNullsLast(null); add(SQLOps.NEXTVAL, "next value for {0s}"); - // case for eq - add(Ops.CASE_EQ, "case {1} end"); - add(Ops.CASE_EQ_WHEN, "when {0} = {1} then {2} {3}"); - add(Ops.CASE_EQ_ELSE, "else {0}"); - - add(Ops.MathOps.RANDOM, "random()"); - add(Ops.MathOps.ROUND, "floor({0})"); // FIXME - add(Ops.MathOps.POWER, "exp({1} * log({0}))"); + add(Ops.MathOps.RANDOM, "rand()"); add(Ops.MathOps.LN, "log({0})"); add(Ops.MathOps.LOG, "(log({0}) / log({1}))"); add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); @@ -87,24 +87,30 @@ public DB2Templates(char escape, boolean quote) { add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})"); add(Ops.DateTimeOps.DAY_OF_YEAR, "dayofyear({0})"); - add(Ops.DateTimeOps.ADD_YEARS, "{fn timestampadd(SQL_TSI_YEAR, {1}, {0})}"); - add(Ops.DateTimeOps.ADD_MONTHS, "{fn timestampadd(SQL_TSI_MONTH, {1}, {0})}"); - add(Ops.DateTimeOps.ADD_WEEKS, "{fn timestampadd(SQL_TSI_WEEK, {1}, {0})}"); - add(Ops.DateTimeOps.ADD_DAYS, "{fn timestampadd(SQL_TSI_DAY, {1}, {0})}"); - add(Ops.DateTimeOps.ADD_HOURS, "{fn timestampadd(SQL_TSI_HOUR, {1}, {0})}"); - add(Ops.DateTimeOps.ADD_MINUTES, "{fn timestampadd(SQL_TSI_MINUTE, {1}, {0})}"); - add(Ops.DateTimeOps.ADD_SECONDS, "{fn timestampadd(SQL_TSI_SECOND, {1}, {0})}"); - - add(Ops.DateTimeOps.DIFF_YEARS, "{fn timestampdiff(SQL_TSI_YEAR, {0}, {1})}"); - add(Ops.DateTimeOps.DIFF_MONTHS, "{fn timestampdiff(SQL_TSI_MONTH, {0}, {1})}"); - add(Ops.DateTimeOps.DIFF_WEEKS, "{fn timestampdiff(SQL_TSI_WEEK, {0}, {1})}"); - add(Ops.DateTimeOps.DIFF_DAYS, "{fn timestampdiff(SQL_TSI_DAY, {0}, {1})}"); - add(Ops.DateTimeOps.DIFF_HOURS, "{fn timestampdiff(SQL_TSI_HOUR, {0}, {1})}"); - add(Ops.DateTimeOps.DIFF_MINUTES, "{fn timestampdiff(SQL_TSI_MINUTE, {0}, {1})}"); - add(Ops.DateTimeOps.DIFF_SECONDS, "{fn timestampdiff(SQL_TSI_SECOND, {0}, {1})}"); - - // left via substr - add(Ops.StringOps.LEFT, "substr({0},1,{1})"); + add(Ops.DateTimeOps.ADD_YEARS, "{0} + {1} years"); + add(Ops.DateTimeOps.ADD_MONTHS, "{0} + {1} months"); + add(Ops.DateTimeOps.ADD_WEEKS, "{0} + {1} weeks"); + add(Ops.DateTimeOps.ADD_DAYS, "{0} + {1} days"); + add(Ops.DateTimeOps.ADD_HOURS, "{0} + {1} hours"); + add(Ops.DateTimeOps.ADD_MINUTES, "{0} + {1} minutes"); + add(Ops.DateTimeOps.ADD_SECONDS, "{0} + {1} seconds"); + + // FIXME + add(Ops.DateTimeOps.DIFF_YEARS, "timestampdiff(256, char({0} - {1}))"); + add(Ops.DateTimeOps.DIFF_MONTHS, "timestampdiff(64, char({0} - {1}))"); + add(Ops.DateTimeOps.DIFF_WEEKS, "timestampdiff(32, char({0} - {1}))"); + add(Ops.DateTimeOps.DIFF_DAYS, "timestampdiff(16, char({0} - {1}))"); + add(Ops.DateTimeOps.DIFF_HOURS, "timestampdiff(8, char({0} - {1}))"); + add(Ops.DateTimeOps.DIFF_MINUTES, "timestampdiff(4, char({0} - {1}))"); + add(Ops.DateTimeOps.DIFF_SECONDS, "timestampdiff(2, char({0} - {1}))"); + + add(Ops.DateTimeOps.TRUNC_YEAR, "trunc_timestamp({0}, 'year')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "trunc_timestamp({0}, 'month')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "trunc_timestamp({0}, 'week')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc_timestamp({0}, 'day')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "trunc_timestamp({0}, 'hour')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc_timestamp({0}, 'minute')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "trunc_timestamp({0}, 'second')"); addTypeNameToCode("smallint", Types.TINYINT, true); addTypeNameToCode("long varchar for bit data", Types.LONGVARBINARY); @@ -115,6 +121,15 @@ public DB2Templates(char escape, boolean quote) { addTypeNameToCode("xml", Types.SQLXML,true); } + @Override + public String getCastTypeNameForCode(int code) { + switch (code) { + case Types.VARCHAR: return "varchar(4000)"; + default: return super.getCastTypeNameForCode(code); + } + } + + @Override public String serialize(String literal, int jdbcType) { if (jdbcType == Types.TIMESTAMP) { @@ -129,15 +144,44 @@ public String serialize(String literal, int jdbcType) { } @Override - protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { - QueryModifiers mod = metadata.getModifiers(); - if (mod.getLimit() == null) { - context.handle(offsetTemplate, mod.getOffset()); - } else if (mod.getOffset() == null) { - context.handle(limitTemplate, mod.getLimit()); + public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer context) { + if (!forCountRow && metadata.getModifiers().isRestricting() && !metadata.getJoins().isEmpty()) { + QueryModifiers mod = metadata.getModifiers(); + if (mod.getOffset() == null) { + context.serializeForQuery(metadata, forCountRow); + context.handle(limitTemplate, mod.getLimit()); + } else { + context.append(outerQueryStart); + metadata = metadata.clone(); + WindowFunction rn = SQLExpressions.rowNumber().over(); + for (OrderSpecifier os : metadata.getOrderBy()) { + rn.orderBy(os); + } + metadata.addProjection(rn.as("rn")); + metadata.clearOrderBy(); + context.serializeForQuery(metadata, forCountRow); + context.append(outerQueryEnd); + if (mod.getLimit() == null) { + context.handle(offsetTemplate, mod.getOffset()); + } else { + context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset()); + } + context.append(outerQuerySuffix); + } + } else { - context.handle(limitOffsetTemplate, mod.getLimit(), mod.getOffset()); + context.serializeForQuery(metadata, forCountRow); + } + + if (!metadata.getFlags().isEmpty()) { + context.serialize(QueryFlag.Position.END, metadata.getFlags()); } } + @Override + protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { + // do nothing + } + + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java index 30bdb54a0c..aef3ba5df2 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java @@ -58,7 +58,6 @@ public DerbyTemplates(char escape, boolean quote) { setDefaultValues("\nvalues (default)"); add(Ops.CONCAT, "varchar({0} || {1})"); - add(Ops.DateTimeOps.DAY_OF_MONTH, "day({0})"); add(SQLOps.NEXTVAL, "next value for {0s}"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/BeanPopulationBase.java b/querydsl-sql/src/test/java/com/mysema/query/BeanPopulationBase.java index f5ed491b8c..08020036c6 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/BeanPopulationBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/BeanPopulationBase.java @@ -14,6 +14,7 @@ package com.mysema.query; import static com.mysema.query.Target.CUBRID; +import static com.mysema.query.Target.DB2; import static com.mysema.query.Target.DERBY; import static com.mysema.query.Target.ORACLE; import static com.mysema.query.Target.POSTGRES; @@ -31,7 +32,7 @@ import com.mysema.query.sql.domain.QEmployee; import com.mysema.testutil.ExcludeIn; -@ExcludeIn({CUBRID, DERBY, ORACLE, SQLSERVER, POSTGRES, SQLITE, TERADATA}) +@ExcludeIn({CUBRID, DB2, DERBY, ORACLE, SQLSERVER, POSTGRES, SQLITE, TERADATA}) public class BeanPopulationBase extends AbstractBaseTest { private final QEmployee e = new QEmployee("e"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 66198a00e4..2c764f67f3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -60,7 +60,7 @@ public final class Connections { private static ThreadLocal stmtHolder = new ThreadLocal(); - private static boolean derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited, firebirdInited; + private static boolean db2Inited, derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited, firebirdInited; public static void close() throws SQLException{ if (stmtHolder.get() != null) { @@ -88,9 +88,9 @@ public static void setTemplates(SQLTemplates templates) { } private static Connection getDB2() throws SQLException, ClassNotFoundException { - Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); - String url = "jdbc:derby:target/demoDB;create=true"; - return DriverManager.getConnection(url, "", ""); + Class.forName("com.ibm.db2.jcc.DB2Driver"); + String url = "jdbc:db2://192.168.0.14:50001/SAMPLE"; + return DriverManager.getConnection(url, "db2inst1", "a3sd!fDj"); } private static Connection getDerby() throws SQLException, ClassNotFoundException { @@ -302,21 +302,17 @@ public static void initCubrid() throws SQLException, ClassNotFoundException{ } public static void initDB2() throws SQLException, ClassNotFoundException { - targetHolder.set(Target.DERBY); - SQLTemplates templates = new DerbyTemplates(); - Connection c = getDerby(); + targetHolder.set(Target.DB2); + SQLTemplates templates = new DB2Templates(); + Connection c = getDB2(); connHolder.set(c); Statement stmt = c.createStatement(); stmtHolder.set(stmt); - if (derbyInited) { + if (db2Inited) { return; } - // types - dropType(stmt, "price restrict"); - stmt.execute("create type price external name 'com.example.Price' language java"); - // survey dropTable(templates, "SURVEY"); stmt.execute("create table SURVEY(" + @@ -358,7 +354,7 @@ public static void initDB2() throws SQLException, ClassNotFoundException { dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); - derbyInited = true; + db2Inited = true; } diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java index f12b6a9262..35f0615ac7 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/InsertBase.java @@ -13,10 +13,22 @@ */ package com.mysema.query; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Constants.survey2; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; + import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; + import com.mysema.query.QueryFlag.Position; import com.mysema.query.sql.SQLSubQuery; import com.mysema.query.sql.dml.DefaultMapper; @@ -29,16 +41,6 @@ import com.mysema.query.types.expr.Param; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Constants.survey2; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; public class InsertBase extends AbstractBaseTest { @@ -171,14 +173,14 @@ public void Insert_Null_With_Columns() { } @Test - @ExcludeIn(DERBY) + @ExcludeIn({DB2, DERBY}) public void Insert_Null_Without_Columns() { assertEquals(1, insert(survey) .values(4, null, null).execute()); } @Test - @ExcludeIn({FIREBIRD, HSQLDB, DERBY, ORACLE}) + @ExcludeIn({FIREBIRD, HSQLDB, DB2, DERBY, ORACLE}) public void Insert_Without_Values() { assertEquals(1, insert(survey).execute()); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java index e8b853a36c..1ec029aaf9 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/MergeBase.java @@ -13,9 +13,18 @@ */ package com.mysema.query; +import static com.mysema.query.Constants.survey; +import static com.mysema.query.Constants.survey2; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; + import java.sql.ResultSet; import java.sql.SQLException; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + import com.mysema.query.sql.dml.SQLMergeClause; import com.mysema.query.sql.domain.QSurvey; import com.mysema.query.support.Expressions; @@ -23,13 +32,6 @@ import com.mysema.query.types.PathImpl; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import static com.mysema.query.Constants.survey; -import static com.mysema.query.Constants.survey2; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; public class MergeBase extends AbstractBaseTest{ @@ -96,7 +98,7 @@ public void Merge_with_Keys_Columns_and_Values_using_null() { } @Test - @ExcludeIn({CUBRID, DERBY, POSTGRES, SQLSERVER}) + @ExcludeIn({CUBRID, DB2, DERBY, POSTGRES, SQLSERVER}) public void Merge_With_Keys_Null_Id() throws SQLException{ ResultSet rs = merge(survey).keys(survey.id) .setNull(survey.id) diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java index dc5e28a94a..e1eab34a3e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectBase.java @@ -13,6 +13,10 @@ */ package com.mysema.query; +import static com.mysema.query.Constants.*; +import static com.mysema.query.Target.*; +import static org.junit.Assert.*; + import java.io.*; import java.math.BigDecimal; import java.sql.Date; @@ -20,6 +24,13 @@ import java.sql.SQLException; import java.util.*; +import org.joda.time.DateTime; +import org.joda.time.LocalDate; +import org.joda.time.LocalDateTime; +import org.joda.time.LocalTime; +import org.junit.Ignore; +import org.junit.Test; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -39,16 +50,8 @@ import com.mysema.query.types.template.NumberTemplate; import com.mysema.testutil.ExcludeIn; import com.mysema.testutil.IncludeIn; + import junit.framework.Assert; -import org.joda.time.DateTime; -import org.joda.time.LocalDate; -import org.joda.time.LocalDateTime; -import org.joda.time.LocalTime; -import org.junit.Ignore; -import org.junit.Test; -import static com.mysema.query.Constants.*; -import static com.mysema.query.Target.*; -import static org.junit.Assert.*; public class SelectBase extends AbstractBaseTest { @@ -174,13 +177,13 @@ public void Beans() { } @Test - @ExcludeIn({ORACLE, CUBRID, FIREBIRD, DERBY, SQLSERVER, SQLITE, TERADATA}) + @ExcludeIn({ORACLE, CUBRID, FIREBIRD, DB2, DERBY, SQLSERVER, SQLITE, TERADATA}) public void Boolean_All() { assertTrue(query().from(employee).uniqueResult(SQLExpressions.all(employee.firstname.isNotNull()))); } @Test - @ExcludeIn({ORACLE, CUBRID, FIREBIRD, DERBY, SQLSERVER, SQLITE, TERADATA}) + @ExcludeIn({ORACLE, CUBRID, FIREBIRD, DB2, DERBY, SQLSERVER, SQLITE, TERADATA}) public void Boolean_Any() { assertTrue(query().from(employee).uniqueResult(SQLExpressions.any(employee.firstname.isNotNull()))); } @@ -433,7 +436,7 @@ public void Date_Add_Timestamp() { } @Test - @ExcludeIn({CUBRID, SQLITE, TERADATA}) + @ExcludeIn({CUBRID, DB2, SQLITE, TERADATA}) public void Date_Diff() { QEmployee employee2 = new QEmployee("employee2"); TestQuery query = query().from(employee, employee2); @@ -456,7 +459,7 @@ public void Date_Diff() { } @Test - @ExcludeIn({CUBRID, DERBY, HSQLDB, SQLITE, TERADATA}) + @ExcludeIn({CUBRID, DB2, DERBY, HSQLDB, SQLITE, TERADATA}) public void Date_Diff2() { TestQuery query = query().from(employee).orderBy(employee.id.asc()); @@ -480,7 +483,7 @@ public void Date_Diff2() { } @Test - @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME + @ExcludeIn({CUBRID, DB2, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME public void Date_Trunc() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(); @@ -601,7 +604,7 @@ public void GroupBy_YearMonth() { } @Test - @ExcludeIn({H2, DERBY, ORACLE, SQLSERVER}) + @ExcludeIn({H2, DB2, DERBY, ORACLE, SQLSERVER}) public void GroupBy_Validate() { NumberPath alias = new NumberPath(BigDecimal.class, "alias"); query().from(employee) @@ -752,7 +755,7 @@ public void Like_Escape() { } @Test - @ExcludeIn(DERBY) + @ExcludeIn({DB2, DERBY}) public void Like_Number() { assertEquals(5, query().from(employee) .where(employee.id.like("1%")).count()); @@ -819,7 +822,7 @@ public void Limit_and_Offset_In_Oracle() throws SQLException { } @Test - @ExcludeIn({ORACLE, DERBY, FIREBIRD, SQLSERVER, CUBRID, TERADATA}) + @ExcludeIn({ORACLE, DB2, DERBY, FIREBIRD, SQLSERVER, CUBRID, TERADATA}) @SkipForQuoted public void Limit_and_Offset2() throws SQLException { // limit @@ -866,7 +869,7 @@ public void ListResults_FactoryExpression() { } @Test - @ExcludeIn({DERBY, HSQLDB}) + @ExcludeIn({DB2, DERBY, HSQLDB}) public void Literals() { assertEquals(1, singleResult(ConstantImpl.create(1)).intValue()); assertEquals(2l, singleResult(ConstantImpl.create(2l)).longValue()); @@ -1050,7 +1053,7 @@ public void Params_not_set() { } @Test - @ExcludeIn({DERBY, FIREBIRD, HSQLDB, ORACLE, SQLSERVER}) + @ExcludeIn({DB2, DERBY, FIREBIRD, HSQLDB, ORACLE, SQLSERVER}) @SkipForQuoted public void Path_Alias() { expectedQuery = "select e.LASTNAME, sum(e.SALARY) as salarySum " + @@ -1422,7 +1425,7 @@ public void String_Right_Left() { } @Test - @ExcludeIn({DERBY, FIREBIRD}) + @ExcludeIn({DB2, DERBY, FIREBIRD}) public void Substring() { //SELECT * FROM account where SUBSTRING(name, -x, 1) = SUBSTRING(name, -y, 1) query().from(employee) @@ -1481,7 +1484,7 @@ public void Tuple_Projection() { } @Test - @ExcludeIn(DERBY) + @ExcludeIn({DB2, DERBY}) public void Tuple2() { query().from(employee) .list(Expressions.as(ConstantImpl.create("1"),"code"), @@ -1682,7 +1685,7 @@ public void WithinGroup() { } @Test - @ExcludeIn({DERBY, H2}) + @ExcludeIn({DB2, DERBY, H2}) public void YearWeek() { TestQuery query = query().from(employee).orderBy(employee.id.asc()); assertEquals(Integer.valueOf(200006), query.singleResult(employee.datefield.yearWeek())); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectWindowFunctionsBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectWindowFunctionsBase.java index 6974ad71cf..fcbf25cbc5 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectWindowFunctionsBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SelectWindowFunctionsBase.java @@ -3,6 +3,7 @@ import static com.mysema.query.Constants.employee; import static com.mysema.query.Constants.employee2; import static com.mysema.query.Constants.survey; +import static com.mysema.query.Target.DB2; import static com.mysema.query.Target.ORACLE; import static com.mysema.query.Target.SQLSERVER; import static com.mysema.query.Target.TERADATA; @@ -36,9 +37,9 @@ public void WindowFunctions() { add(exprs, SQLExpressions.avg(path)); add(exprs, SQLExpressions.count(path)); add(exprs, SQLExpressions.corr(path, path2)); - add(exprs, SQLExpressions.covarPop(path, path2)); - add(exprs, SQLExpressions.covarSamp(path, path2)); - add(exprs, SQLExpressions.cumeDist(), TERADATA); + add(exprs, SQLExpressions.covarPop(path, path2), DB2); + add(exprs, SQLExpressions.covarSamp(path, path2), DB2); + add(exprs, SQLExpressions.cumeDist(), DB2, TERADATA); add(exprs, SQLExpressions.denseRank(), TERADATA); add(exprs, SQLExpressions.firstValue(path), TERADATA); add(exprs, SQLExpressions.lag(path), TERADATA); @@ -46,18 +47,18 @@ public void WindowFunctions() { add(exprs, SQLExpressions.lead(path), TERADATA); add(exprs, SQLExpressions.max(path)); add(exprs, SQLExpressions.min(path)); - add(exprs, SQLExpressions.nthValue(path, 2), TERADATA); - add(exprs, SQLExpressions.ntile(3), TERADATA); - add(exprs, SQLExpressions.percentRank()); + add(exprs, SQLExpressions.nthValue(path, 2), DB2, TERADATA); + add(exprs, SQLExpressions.ntile(3), DB2, TERADATA); + add(exprs, SQLExpressions.percentRank(), DB2); add(exprs, SQLExpressions.rank()); add(exprs, SQLExpressions.rowNumber()); add(exprs, SQLExpressions.stddev(path), TERADATA); - add(exprs, SQLExpressions.stddevPop(path), TERADATA); - add(exprs, SQLExpressions.stddevSamp(path), TERADATA); + add(exprs, SQLExpressions.stddevPop(path), DB2, TERADATA); + add(exprs, SQLExpressions.stddevSamp(path), DB2, TERADATA); add(exprs, SQLExpressions.sum(path)); add(exprs, SQLExpressions.variance(path), TERADATA); - add(exprs, SQLExpressions.varPop(path), TERADATA); - add(exprs, SQLExpressions.varSamp(path), TERADATA); + add(exprs, SQLExpressions.varPop(path), DB2, TERADATA); + add(exprs, SQLExpressions.varSamp(path), DB2, TERADATA); for (WindowOver wo : exprs) { query().from(survey).list(wo.over().partitionBy(survey.name).orderBy(survey.id)); @@ -121,7 +122,7 @@ public void WindowFunctions_Keep() { } @Test - @ExcludeIn(SQLSERVER) + @ExcludeIn({DB2, SQLSERVER}) public void WindowFunctions_Regr() { List> exprs = new ArrayList>(); NumberPath path = survey.id; diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java new file mode 100644 index 0000000000..f13bde08ce --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java @@ -0,0 +1,35 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; + +import com.mysema.query.*; +import com.mysema.query.sql.DB2Templates; + +public class DB2SuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + // with literals + public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} + public static class InsertUseLiterals extends InsertUseLiteralsBase {} + public static class MergeUseLiterals extends MergeUseLiteralsBase {} + public static class SelectUseLiterals extends SelectUseLiteralsBase {} + public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initDB2(); + Connections.setTemplates(DB2Templates.builder().newLineToSingleSpace().build()); + } + +} From 352c1abf2ecc264973fdab1210e7e7d5a8030702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Dec 2014 23:40:33 +0200 Subject: [PATCH 0652/1968] Use ExternalDB category --- .../src/test/java/com/mysema/query/suites/DB2SuiteTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java index f13bde08ce..094b57d94f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java @@ -1,10 +1,13 @@ package com.mysema.query.suites; import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; import com.mysema.query.*; import com.mysema.query.sql.DB2Templates; +import com.mysema.testutil.ExternalDB; +@Category(ExternalDB.class) public class DB2SuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} From aee73742a9bc223eb2893c8d4d07fb86e010976d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Dec 2014 23:44:36 +0200 Subject: [PATCH 0653/1968] Move DB2 dependency to db2 profile --- querydsl-sql/pom.xml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index 0ef4548053..6d524b7609 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -191,13 +191,6 @@ 1.2 true - - - com.ibm.db2 - db2-jdbc - 1.0 - - @@ -322,6 +315,16 @@ + + db2 + + + com.ibm.db2 + db2-jdbc + 1.0 + + + From 5bcc38d8c7656636fd3eade112c86db5f609f804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 18 Dec 2014 23:46:04 +0200 Subject: [PATCH 0654/1968] Update Copyright --- .../src/main/java/com/mysema/query/sql/DB2Templates.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java index 1332d67618..09e5d27bd3 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java @@ -1,5 +1,5 @@ /* - * Copyright 2011, Mysema Ltd + * Copyright 2014, Timo Westkämper * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From 7849e8ef5dadbd37821c84f19e75430d84d4b748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Dec 2014 00:08:16 +0200 Subject: [PATCH 0655/1968] Add DEFAULT field --- .../src/main/java/com/mysema/query/sql/DB2Templates.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java index 09e5d27bd3..680b6c728e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java @@ -29,6 +29,9 @@ */ public class DB2Templates extends SQLTemplates { + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional + public static final DB2Templates DEFAULT = new DB2Templates(); + private String limitTemplate = "\nfetch first {0s} rows only"; private String outerQueryStart = "select * from (\n "; From 26f9496f82ee77c34518954b1b9625bf931443cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Dec 2014 18:35:16 +0200 Subject: [PATCH 0656/1968] Add test exclusions --- querydsl-root/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ed0d6b04a5..2f5669f3e4 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -510,6 +510,7 @@ com.mysema.testutil.DummyInterface **/*$* + **/DB2SuiteTest.java **/MSSQLSuiteTest.java **/TeradataSuiteTest.java @@ -530,6 +531,7 @@ com.mysema.testutil.DummyInterface **/*$* + **/DB2SuiteTest.java **/ExportOracleTest.java **/ExportTeradataTest.java **/OracleSuiteTest.java From fafd66e6aebfd2d2a8ddb7c338fec8b866c9e724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Dec 2014 20:04:48 +0200 Subject: [PATCH 0657/1968] Add reserved words --- .../com/mysema/query/sql/DB2Templates.java | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java index 680b6c728e..8073cfac26 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java @@ -14,7 +14,9 @@ package com.mysema.query.sql; import java.sql.Types; +import java.util.Set; +import com.google.common.collect.ImmutableSet; import com.mysema.query.QueryFlag; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; @@ -29,6 +31,76 @@ */ public class DB2Templates extends SQLTemplates { + protected static final Set DB2_RESERVED_WORDS = ImmutableSet.of( + "ACCORDING", "ACCTNG", "ACTION", "ACTIVATE", "ADD", "AFTER", + "ALIAS","ALL","ALLOCATE","ALLOW","ALTER","AND","ANY","APPEND", + "APPLNAME","ARRAY","ARRAY_AGG","AS","ASC","ASENSITIVE","ASSOCIATE", + "ASUTIME","AT","ATOMIC","ATTRIBUTES","AUDIT","AUTHORIZATION","AUX", + "AUXILIARY","BEFORE","BEGIN","BETWEEN","BINARY","BIND","BIT", + "BUFFERPOOL","BY","CACHE","CALL","CALLED","CAPTURE","CARDINALITY", + "CASCADED","CASE","CAST","CCSID","CHAR","CHARACTER","CHECK","CL", + "CLIENT","CLONE","CLOSE","CLUSTER","COLLECT","COLLECTION","COLLID", + "COLUMN","COMMENT","COMMIT","COMPACT","COMPRESS","CONCAT","CONCURRENT", + "CONDITION","CONNECT","CONNECT_BY_ROOT","CONNECTION","CONSTRAINT", + "CONTAINS","CONTENT","CONTINUE","COPY","COUNT","COUNT_BIG","CREATE", + "CROSS","CUBE","CURRENT","CURRENT_DATE","CURRENT_LC_CTYPE", + "CURRENT_PATH","CURRENT_SCHEMA","CURRENT_SERVER","CURRENT_TIME", + "CURRENT_TIMESTAMP","CURRENT_TIMEZONE","CURRENT_USER","CURSOR", + "CYCLE","DATA","DATABASE","DATAPARTITIONNAME","DATAPARTITIONNUM", + "DATE","DAY","DAYS","DB2GENERAL","DB2GENRL","DB2SQL","DBINFO", + "DBPARTITIONNAME","DBPARTITIONNUM","DEACTIVATE","DEALLOCATE","DECLARE", + "DEFAULT","DEFAULTS","DEFER","DEFINE","DEFINITION","DELETE","DENSERANK", + "DENSE_RANK","DESC","DESCRIBE","DESCRIPTOR","DETERMINISTIC","DIAGNOSTICS", + "DISABLE","DISALLOW","DISCONNECT","DISTINCT","DO","DOCUMENT","DOUBLE", + "DROP","DSSIZE","DYNAMIC","EACH","EDITPROC","ELSE","ELSEIF","ENABLE", + "ENCODING","ENCRYPTION","END","ENDING","END","ENFORCED","ERASE","ESCAPE", + "EVERY","EXCEPT","EXCEPTION","EXCLUDING","EXCLUSIVE","EXECUTE","EXISTS", + "EXIT","EXPLAIN","EXTEND","EXTERNAL","EXTRACT","FENCED","FETCH", + "FIELDPROC","FILE","FINAL","FOR","FOREIGN","FREE","FREEPAGE","FROM", + "FULL","FUNCTION","GBPCACHE","GENERAL","GENERATED","GET","GLOBAL","GO", + "GOTO","GRANT","GRAPHIC","GROUP","HANDLER","HASH","HASHED_VALUE","HAVING", + "HINT","HOLD","HOUR","HOURS","ID","IDENTITY","IF","IGNORE","IMMEDIATE", + "IMPLICITLY","IN","INCLUDE","INCLUDING","INCLUSIVE","INCREMENT","INDEX", + "INDEXBP","INDICATOR","INF","INFINITY","INHERIT","INNER","INOUT", + "INSENSITIVE","INSERT","INTEGRITY","INTERSECT","INTO","IS","ISOBID", + "ISOLATION","ITERATE","JAR","JAVA","JOIN","KEEP","KEY","LABEL","LANGUAGE", + "LATERAL","LC_CTYPE","LEAVE","LEFT","LEVEL2","LIKE","LINKTYPE","LOCAL", + "LOCALDATE","LOCALE","LOCALTIME","LOCALTIMESTAMP","LOCATION","LOCATOR", + "LOCATORS","LOCK","LOCKSIZE","LOG","LOGGED","LONG","LOOP","MAINTAINED", + "MATCHED","MATERIALIZED","MAXVALUE","MERGE","MICROSECOND","MICROSECONDS", + "MINPCTUSED","MINUTE","MINUTES","MINVALUE","MIXED","MODE","MODIFIES", + "MONTH","MONTHS","NAMESPACE","NAN","NATIONAL","NCHAR","NCLOB","NEW", + "NEW_TABLE","NEXTVAL","NO","NOCACHE","NOCYCLE","NODENAME","NODENUMBER", + "NOMAXVALUE","NOMINVALUE","NONE","NOORDER","NORMALIZED","NOT","NULL", + "NULLS","NUMPARTS","NVARCHAR","OBID","OF","OLD","OLD_TABLE","ON","OPEN", + "OPTIMIZATION","OPTIMIZE","OPTION","OR","ORDER","ORDINALITY","ORGANIZE", + "OUT","OUTER","OVER","OVERRIDING","PACKAGE","PADDED","PAGE","PAGESIZE", + "PARAMETER","PART","PARTITION","PARTITIONED","PARTITIONING","PARTITIONS", + "PASSWORD","PATH","PCTFREE","PIECESIZE","PLAN","POSITION","PRECISION", + "PREPARE","PREVVAL","PRIMARY","PRIQTY","PRIVILEGES","PROCEDURE","PROGRAM", + "PROGRAMID","PSID","PUBLIC","QUERY","QUERYNO","RANGE","RANK","RCDFMT", + "READ","READS","RECOVERY","REFERENCES","REFERENCING","REFRESH","RELEASE", + "RENAME","REPEAT","RESET","RESIGNAL","RESTART","RESTRICT","RESULT", + "RESULT_SET_LOCATOR","RETURN","RETURNS","REVOKE","RID","RIGHT","ROLE", + "ROLLBACK","ROLLUP","ROUND_CEILING","ROUND_DOWN","ROUND_FLOOR","ROUND_HALF_DOWN", + "ROUND_HALF_EVEN","ROUND_HALF_UP","ROUND_UP","ROUTINE","ROW","ROWNUMBER", + "ROWS","ROWSET","ROW_NUMBER","RRN","RUN","SAVEPOINT","SBCS","SCHEMA", + "SCRATCHPAD","SCROLL","SEARCH","SECOND","SECONDS","SECQTY","SECURITY", + "SELECT","SENSITIVE","SEQUENCE","SESSION","SESSION_USER","SET","SIGNAL", + "SIMPLE","SKIP","SNAN","SOME","SOURCE","SPECIFIC","SQL","SQLID","STACKED", + "STANDARD","START","STARTING","STATEMENT","STATIC","STATMENT","STAY","STOGROUP", + "STORES","STYLE","SUBSTRING","SUMMARY","SYNONYM","SYSFUN","SYSIBM","SYSPROC", + "SYSTEM","SYSTEM_USER","TABLE","TABLESPACE","TABLESPACES","THEN","THREADSAFE", + "TIME","TIMESTAMP","TO","TRANSACTION","TRIGGER","TRIM","TRIM_ARRAY","TRUNCATE", + "TYPE","UNDO","UNION","UNIQUE","UNIT","UNNEST","UNTIL","UPDATE","URI","USAGE", + "USE","USER","USERID","USING","VALIDPROC","VALUE","VALUES","VARIABLE","VARIANT", + "VCAT","VERSION","VIEW","VOLATILE","VOLUMES","WAIT","WHEN","WHENEVER","WHERE", + "WHILE","WITH","WITHOUT","WLM","WRAPPED","WRITE","WRKSTNNAME","XMLAGG", + "XMLATTRIBUTES","XMLCAST","XMLCOMMENT","XMLCONCAT","XMLDOCUMENT","XMLELEMENT", + "XMLEXISTS","XMLFOREST","XMLGROUP","XMLNAMESPACES","XMLPARSE","XMLPI", + "XMLROW","XMLSERIALIZE","XMLTABLE","XMLTEXT","XMLVALIDATE","XSLTRANSFORM", + "XSROBJECT","YEAR","YEARS","YES"); + @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional public static final DB2Templates DEFAULT = new DB2Templates(); @@ -62,7 +134,7 @@ public DB2Templates(boolean quote) { } public DB2Templates(char escape, boolean quote) { - super("\"", escape, quote); + super(DB2_RESERVED_WORDS, "\"", escape, quote); setDummyTable("sysibm.sysdummy1"); setAutoIncrement(" generated always as identity"); setFunctionJoinsWrapped(true); From 46eab63a359fc3885de8723e86924625afa9731c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Dec 2014 20:09:14 +0200 Subject: [PATCH 0658/1968] Update docs --- querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml | 3 +++ querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index dc1e97214a..d08fc48a89 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -410,6 +410,9 @@ Configuration configuration = new Configuration(templates); CUBRIDTemplates (tested with CUBRID 8.4) + + DB2Templates (tested with DB2 10.1.2) + DerbyTemplates (tested with Derby 10.8.2.2) diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index e0263fef79..534e999591 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -401,6 +401,9 @@ Configuration configuration = new Configuration(templates); CUBRIDTemplates (tested with CUBRID 8.4) + + DB2Templates (tested with Derby 10.1.2) + DerbyTemplates (tested with Derby 10.8.2.2) From 36488f9d6146db0ee336c95859cd997a0a816f4e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 19 Dec 2014 19:58:55 +0100 Subject: [PATCH 0659/1968] Fix mention of DB2 in the documentation --- querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index 534e999591..a88ca14d7a 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -402,7 +402,7 @@ Configuration configuration = new Configuration(templates); CUBRIDTemplates (tested with CUBRID 8.4) - DB2Templates (tested with Derby 10.1.2) + DB2Templates (tested with DB2 10.1.2) DerbyTemplates (tested with Derby 10.8.2.2) From 5e328bcc178a5f67155c563f3fafeddfb390dd80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Dec 2014 21:32:04 +0200 Subject: [PATCH 0660/1968] Fix typos --- querydsl-lucene3/README.md | 2 +- querydsl-lucene4/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-lucene3/README.md b/querydsl-lucene3/README.md index d47851e9b9..b6f142639f 100644 --- a/querydsl-lucene3/README.md +++ b/querydsl-lucene3/README.md @@ -49,7 +49,7 @@ Querying with Querydsl Lucene is as simple as this: ```JAVA QDocument doc = new QDocument("doc"); -IndexSearcher searcher = new IndexSearher(index); +IndexSearcher searcher = new IndexSearcher(index); LuceneQuery query = new LuceneQuery(true, searcher); List documents = query .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) diff --git a/querydsl-lucene4/README.md b/querydsl-lucene4/README.md index 4a6a8f9a90..f06c311cfd 100644 --- a/querydsl-lucene4/README.md +++ b/querydsl-lucene4/README.md @@ -48,7 +48,7 @@ Querying with Querydsl Lucene is as simple as this: ```JAVA QDocument doc = new QDocument("doc"); -IndexSearcher searcher = new IndexSearher(index); +IndexSearcher searcher = new IndexSearcher(index); LuceneQuery query = new LuceneQuery(true, searcher); List documents = query .where(doc.year.between("1800", "2000").and(doc.title.startsWith("Huckle")) From fdee4f940fdb62744ef923601670f256e1b30a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 19 Dec 2014 23:53:59 +0200 Subject: [PATCH 0661/1968] Improve scala compilation --- .../com/mysema/query/scala/CompileTestUtils.scala | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala index 27a3744e3b..fc63b9551b 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala @@ -1,5 +1,7 @@ package com.mysema.query.scala +import java.io.File._ + import scala.tools.nsc._ import scala.tools.nsc.interpreter.IR.Success import scala.io.Source.fromFile @@ -16,10 +18,9 @@ trait CompileTestUtils { map (fromFile(_).mkString) mkString ("\n")) } - - def assertCompileSuccess(source: String): Unit = { - import java.io.File.pathSeparator + private lazy val env = { + import java.io.File.pathSeparator val env = new Settings val currentLibraries = (this.getClass.getClassLoader).asInstanceOf[java.net.URLClassLoader].getURLs().toList @@ -28,7 +29,10 @@ trait CompileTestUtils { env.classpath.value = cp.mkString(pathSeparator) env.usejavacp.value = true + env + } + def assertCompileSuccess(source: String): Unit = { val out = new java.io.ByteArrayOutputStream val interpreterWriter = new java.io.PrintWriter(out) From ac9bcd64fb21d222238bc7465b66094084194e1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Dec 2014 00:03:06 +0200 Subject: [PATCH 0662/1968] Use singleton env --- .../mysema/query/scala/CompileTestUtils.scala | 26 ++++++++----------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala index fc63b9551b..ff902fef69 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala @@ -6,9 +6,18 @@ import scala.tools.nsc._ import scala.tools.nsc.interpreter.IR.Success import scala.io.Source.fromFile import java.io.File +import java.io.File.pathSeparator trait CompileTestUtils { - + + private object env extends Settings { + val currentLibraries = (this.getClass.getClassLoader).asInstanceOf[java.net.URLClassLoader].getURLs().toList + val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries + + classpath.value = cp.mkString(pathSeparator) + usejavacp.value = true + } + private def jarPathOfClass(className: String) = { Class.forName(className).getProtectionDomain.getCodeSource.getLocation } @@ -19,24 +28,11 @@ trait CompileTestUtils { mkString ("\n")) } - private lazy val env = { - import java.io.File.pathSeparator - val env = new Settings - - val currentLibraries = (this.getClass.getClassLoader).asInstanceOf[java.net.URLClassLoader].getURLs().toList - val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries - - env.classpath.value = cp.mkString(pathSeparator) - - env.usejavacp.value = true - env - } - def assertCompileSuccess(source: String): Unit = { val out = new java.io.ByteArrayOutputStream val interpreterWriter = new java.io.PrintWriter(out) - val interpreter = new Interpreter(env, interpreterWriter) + val interpreter = new scala.tools.nsc.interpreter.IMain(env, interpreterWriter) try { val result = interpreter.interpret(source.replaceAll("package", "import")) if (result != Success) { From 9886291581a5ba8e37517ec4a71d85ce0eb83773 Mon Sep 17 00:00:00 2001 From: dodgex Date: Thu, 18 Dec 2014 13:33:20 +0100 Subject: [PATCH 0663/1968] copy firstUnionSubQuery on clone see https://github.com/querydsl/querydsl/issues/1096 --- .../main/java/com/mysema/query/sql/ProjectableSQLQuery.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java index 5da59bbc34..ded0ddada6 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/ProjectableSQLQuery.java @@ -48,7 +48,7 @@ public abstract class ProjectableSQLQuery & Que @Nullable protected Expression union; - private SubQueryExpression firstUnionSubQuery; + protected SubQueryExpression firstUnionSubQuery; protected boolean unionAll; @@ -482,6 +482,7 @@ public WithBuilder with(Path alias, Path... columns) { protected void clone(Q query) { this.union = query.union; this.unionAll = query.unionAll; + this.firstUnionSubQuery = query.firstUnionSubQuery; } @Override From f7def3c07eb279b0dc0215b6371ce717b7468078 Mon Sep 17 00:00:00 2001 From: Kay-Uwe Janssen Date: Fri, 19 Dec 2014 10:52:26 +0100 Subject: [PATCH 0664/1968] add test case for cloned union querys --- .../java/com/mysema/query/AbstractBaseTest.java | 1 + .../src/test/java/com/mysema/query/UnionBase.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index 7aaabe3cc5..833883e3a1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -62,6 +62,7 @@ public TestQuery clone(Connection conn) { TestQuery q = new TestQuery(conn, getConfiguration(), getMetadata().clone()); q.union = union; q.unionAll = unionAll; + q.firstUnionSubQuery = firstUnionSubQuery; return q; } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java index 15c9706173..98886c9445 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/UnionBase.java @@ -11,6 +11,7 @@ import com.mysema.query.types.Expression; import com.mysema.query.types.Projections; import com.mysema.query.types.SubQueryExpression; +import com.mysema.query.types.path.NumberPath; import com.mysema.query.types.query.ListSubQuery; import com.mysema.query.types.query.SimpleSubQuery; import com.mysema.query.types.template.NumberTemplate; @@ -235,5 +236,18 @@ public void Union_FactoryExpression() { } } + @Test + @ExcludeIn({DERBY, CUBRID}) + public void Union_Clone() { + NumberPath idAlias = new NumberPath(Integer.class, "id"); + ListSubQuery sq1 = sq().from(employee) + .list(Projections.constructor(Employee.class, employee.id.as(idAlias))); + ListSubQuery sq2 = sq().from(employee) + .list(Projections.constructor(Employee.class, employee.id.as(idAlias))); + + TestQuery query = query(); + query.union(sq1, sq2); + query.clone().list(idAlias); + } } From 1f806ab2725eca91204c09fc8787ba27096e293e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Dec 2014 22:03:38 +0200 Subject: [PATCH 0665/1968] Fix scope --- .../scala/com/mysema/query/scala/CompileTestUtils.scala | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala index ff902fef69..12c2b7192c 100644 --- a/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/CompileTestUtils.scala @@ -11,6 +11,11 @@ import java.io.File.pathSeparator trait CompileTestUtils { private object env extends Settings { + + private def jarPathOfClass(className: String) = { + Class.forName(className).getProtectionDomain.getCodeSource.getLocation + } + val currentLibraries = (this.getClass.getClassLoader).asInstanceOf[java.net.URLClassLoader].getURLs().toList val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries @@ -18,10 +23,6 @@ trait CompileTestUtils { usejavacp.value = true } - private def jarPathOfClass(className: String) = { - Class.forName(className).getProtectionDomain.getCodeSource.getLocation - } - def assertCompileSuccess(files: Traversable[File]): Unit = { assertCompileSuccess(files map (fromFile(_).mkString) From 6931541c561b6824b4a3bedccc3d269c9223c395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Dec 2014 22:09:02 +0200 Subject: [PATCH 0666/1968] Exclude slow performance tests for jenkins and travis --- querydsl-root/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ed0d6b04a5..fef9d51eb0 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -507,7 +507,7 @@ org.apache.maven.plugins maven-surefire-plugin - com.mysema.testutil.DummyInterface + com.mysema.testutil.Performance **/*$* **/MSSQLSuiteTest.java @@ -527,7 +527,7 @@ org.apache.maven.plugins maven-surefire-plugin - com.mysema.testutil.DummyInterface + com.mysema.testutil.Performance **/*$* **/ExportOracleTest.java From 9707e88069f81eb03ff432eb54678a645f7518df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Dec 2014 22:51:03 +0200 Subject: [PATCH 0667/1968] Reorganize use literals tests --- querydsl-root/pom.xml | 10 ++-- .../query/sql/spatial/GeoDBTemplates.java | 9 ++++ .../query/sql/spatial/GeometryWkbType.java | 9 ++-- .../sql/spatial/GeometryWktClobType.java | 9 ++-- .../query/sql/spatial/GeometryWktType.java | 9 ++-- .../sql/spatial/MySQLSpatialTemplates.java | 9 ++++ .../query/sql/spatial/PGgeometryType.java | 9 ++-- .../com/mysema/query/AbstractBaseTest.java | 21 ++++---- .../java/com/mysema/query/Connections.java | 12 +++-- .../mysema/query/DeleteUseLiteralsBase.java | 9 ---- .../mysema/query/InsertUseLiteralsBase.java | 9 ---- .../mysema/query/MergeUseLiteralsBase.java | 9 ---- .../mysema/query/SelectUseLiteralsBase.java | 32 ----------- .../mysema/query/UpdateUseLiteralsBase.java | 9 ---- .../query/suites/CUBRIDLiteralsSuiteTest.java | 31 +++++++++++ .../mysema/query/suites/CUBRIDSuiteTest.java | 9 +--- .../query/suites/DerbyLiteralsSuiteTest.java | 28 ++++++++++ .../mysema/query/suites/DerbySuiteTest.java | 9 +--- .../suites/FirebirdLiteralsSuiteTest.java | 30 +++++++++++ .../query/suites/FirebirdSuiteTest.java | 12 ++--- .../query/suites/H2LiteralsSuiteTest.java | 29 ++++++++++ .../com/mysema/query/suites/H2SuiteTest.java | 10 +--- .../query/suites/H2WithQuotingTest.java | 9 +--- .../mysema/query/suites/H2WithSchemaTest.java | 9 +--- .../query/suites/HsqldbLiteralsSuiteTest.java | 28 ++++++++++ .../mysema/query/suites/HsqldbSuiteTest.java | 9 +--- .../query/suites/MSSQLLiteralsSuiteTest.java | 33 ++++++++++++ .../mysema/query/suites/MSSQLSuiteTest.java | 9 +--- .../query/suites/MySQLLiteralsSuiteTest.java | 34 ++++++++++++ .../mysema/query/suites/MySQLSuiteTest.java | 13 ++--- .../query/suites/MySQLWithQuotingTest.java | 9 +--- .../query/suites/OracleLiteralsSuiteTest.java | 33 ++++++++++++ .../mysema/query/suites/OracleSuiteTest.java | 9 +--- .../query/suites/OracleWithQuotingTest.java | 9 +--- .../suites/PostgreSQLLiteralsSuiteTest.java | 54 +++++++++++++++++++ .../query/suites/PostgreSQLSuiteTest.java | 13 ++--- .../query/suites/SQLiteLiteralsSuiteTest.java | 28 ++++++++++ .../mysema/query/suites/SQLiteSuiteTest.java | 9 +--- .../suites/TeradataLiteralsSuiteTest.java | 34 ++++++++++++ .../query/suites/TeradataSuiteTest.java | 9 +--- 40 files changed, 447 insertions(+), 227 deletions(-) delete mode 100644 querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java delete mode 100644 querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java delete mode 100644 querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java delete mode 100644 querydsl-sql/src/test/java/com/mysema/query/SelectUseLiteralsBase.java delete mode 100644 querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java create mode 100644 querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index ed0d6b04a5..18cde5a6d4 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -510,8 +510,8 @@ com.mysema.testutil.DummyInterface **/*$* - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java + **/MSSQL*SuiteTest.java + **/Teradata*SuiteTest.java @@ -532,10 +532,10 @@ **/*$* **/ExportOracleTest.java **/ExportTeradataTest.java - **/OracleSuiteTest.java + **/Oracle*SuiteTest.java **/OracleWithQuotingTest.java - **/MSSQLSuiteTest.java - **/TeradataSuiteTest.java + **/MSSQL*SuiteTest.java + **/Teradata*SuiteTest.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java index fb5d08e361..b8ff49f6d9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java @@ -50,4 +50,13 @@ public GeoDBTemplates(char escape, boolean quote) { add(SpatialTemplatesSupport.getSpatialOps(true)); } + public String serialize(String literal, int jdbcType) { + // TODO better check for spatial literals + if (literal.startsWith("ST_")) { + return literal; + } else { + return super.serialize(literal, jdbcType); + } + } + } \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java index cafe65ad49..fc2caed404 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java @@ -13,13 +13,13 @@ */ package com.mysema.query.sql.spatial; -import javax.annotation.Nullable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import com.mysema.query.sql.types.AbstractType; +import javax.annotation.Nullable; + import org.geolatte.geom.ByteBuffer; import org.geolatte.geom.ByteOrder; import org.geolatte.geom.Geometry; @@ -28,6 +28,8 @@ import org.geolatte.geom.codec.WkbEncoder; import org.geolatte.geom.codec.Wkt; +import com.mysema.query.sql.types.AbstractType; + /** * @author tiwe * @@ -71,8 +73,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); - return "'" + str + "'"; + return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java index 941ab62291..3738da6915 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java @@ -13,13 +13,15 @@ */ package com.mysema.query.sql.spatial; -import javax.annotation.Nullable; import java.sql.*; -import com.mysema.query.sql.types.AbstractType; +import javax.annotation.Nullable; + import org.geolatte.geom.Geometry; import org.geolatte.geom.codec.Wkt; +import com.mysema.query.sql.types.AbstractType; + /** * @author tiwe * @@ -57,8 +59,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); - return "'" + str + "'"; + return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java index 00abee4705..7ec344986c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java @@ -13,16 +13,18 @@ */ package com.mysema.query.sql.spatial; -import javax.annotation.Nullable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import com.mysema.query.sql.types.AbstractType; +import javax.annotation.Nullable; + import org.geolatte.geom.Geometry; import org.geolatte.geom.codec.Wkt; +import com.mysema.query.sql.types.AbstractType; + /** * @author tiwe * @@ -59,7 +61,6 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); - return "'" + str + "'"; + return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java index 9d7ffb4d84..743b4ddf02 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java @@ -52,4 +52,13 @@ public MySQLSpatialTemplates(char escape, boolean quote) { add(SpatialOps.NUM_INTERIOR_RING, "NumInteriorRings({0})"); } + public String serialize(String literal, int jdbcType) { + // TODO better check for spatial literals + if (literal.startsWith("GeomFromText")) { + return literal; + } else { + return super.serialize(literal, jdbcType); + } + } + } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java index f35847f107..5b36fc5541 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java @@ -13,17 +13,19 @@ */ package com.mysema.query.sql.spatial; -import javax.annotation.Nullable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import com.mysema.query.sql.types.AbstractType; +import javax.annotation.Nullable; + import org.geolatte.geom.Geometry; import org.geolatte.geom.codec.Wkt; import org.postgis.PGgeometry; +import com.mysema.query.sql.types.AbstractType; + /** * @author tiwe * @@ -56,8 +58,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - String str = Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); - return "'" + str + "'"; + return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index 7aaabe3cc5..acb5362337 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -13,10 +13,18 @@ */ package com.mysema.query; -import javax.annotation.Nullable; +import static org.junit.Assert.assertEquals; + import java.sql.Connection; import java.util.List; +import javax.annotation.Nullable; + +import org.junit.Rule; +import org.junit.rules.MethodRule; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.mysema.query.dml.DMLClause; import com.mysema.query.sql.*; import com.mysema.query.sql.dml.SQLDeleteClause; @@ -26,11 +34,6 @@ import com.mysema.query.sql.mysql.MySQLReplaceClause; import com.mysema.query.sql.teradata.TeradataQuery; import com.mysema.query.sql.types.XMLAsStringType; -import org.junit.Rule; -import org.junit.rules.MethodRule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import static org.junit.Assert.assertEquals; public abstract class AbstractBaseTest { @@ -68,11 +71,11 @@ public TestQuery clone(Connection conn) { protected Connection connection = Connections.getConnection(); - protected SQLTemplates templates = Connections.getTemplates(); - protected Target target = Connections.getTarget(); - protected Configuration configuration = new Configuration(templates); + protected Configuration configuration = Connections.getConfiguration(); + + protected SQLTemplates templates = configuration.getTemplates(); @Nullable protected String expectedQuery; diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index b0b54059b0..35287d7c43 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -36,7 +36,7 @@ public final class Connections { private static ThreadLocal targetHolder = new ThreadLocal(); - private static ThreadLocal templatesHolder = new ThreadLocal(); + private static ThreadLocal configurationHolder = new ThreadLocal(); // datetest private static final String CREATE_TABLE_DATETEST = "create table DATE_TEST(DATE_TEST date)"; @@ -79,12 +79,16 @@ public static Target getTarget() { return targetHolder.get(); } - public static SQLTemplates getTemplates() { - return templatesHolder.get(); + public static Configuration getConfiguration() { + return configurationHolder.get(); + } + + public static void setConfiguration(Configuration conf) { + configurationHolder.set(conf); } public static void setTemplates(SQLTemplates templates) { - templatesHolder.set(templates); + configurationHolder.set(new Configuration(templates)); } private static Connection getDerby() throws SQLException, ClassNotFoundException { diff --git a/querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java deleted file mode 100644 index d6558b0aba..0000000000 --- a/querydsl-sql/src/test/java/com/mysema/query/DeleteUseLiteralsBase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mysema.query; - -public class DeleteUseLiteralsBase extends DeleteBase { - - public DeleteUseLiteralsBase() { - configuration.setUseLiterals(true); - } - -} diff --git a/querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java deleted file mode 100644 index f00b5e672b..0000000000 --- a/querydsl-sql/src/test/java/com/mysema/query/InsertUseLiteralsBase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mysema.query; - -public class InsertUseLiteralsBase extends InsertBase { - - public InsertUseLiteralsBase() { - configuration.setUseLiterals(true); - } - -} diff --git a/querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java deleted file mode 100644 index cfc3a00c95..0000000000 --- a/querydsl-sql/src/test/java/com/mysema/query/MergeUseLiteralsBase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mysema.query; - -public class MergeUseLiteralsBase extends MergeBase { - - public MergeUseLiteralsBase() { - configuration.setUseLiterals(true); - } - -} diff --git a/querydsl-sql/src/test/java/com/mysema/query/SelectUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/SelectUseLiteralsBase.java deleted file mode 100644 index bd6bb5e1d2..0000000000 --- a/querydsl-sql/src/test/java/com/mysema/query/SelectUseLiteralsBase.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2013, Mysema Ltd - * - * 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 com.mysema.query; - -public class SelectUseLiteralsBase extends SelectBase { - - public SelectUseLiteralsBase() { - configuration.setUseLiterals(true); - } - - @Override - public void Limit_and_Offset2() { - // not supported - } - - @Override - public void Path_Alias() { - // not supported - } - -} diff --git a/querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java b/querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java deleted file mode 100644 index b37c4f9e53..0000000000 --- a/querydsl-sql/src/test/java/com/mysema/query/UpdateUseLiteralsBase.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.mysema.query; - -public class UpdateUseLiteralsBase extends UpdateBase { - - public UpdateUseLiteralsBase() { - configuration.setUseLiterals(true); - } - -} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java new file mode 100644 index 0000000000..e167a181e0 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java @@ -0,0 +1,31 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.CUBRIDTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class CUBRIDLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initCubrid(); + Connections.setTemplates(CUBRIDTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java index f38e359580..9bad786e32 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java @@ -1,9 +1,9 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; +import com.mysema.query.*; import com.mysema.query.sql.CUBRIDTemplates; import com.mysema.testutil.ExternalDB; @@ -21,13 +21,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initCubrid(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java new file mode 100644 index 0000000000..508615bce2 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java @@ -0,0 +1,28 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; + +import com.mysema.query.*; +import com.mysema.query.sql.DerbyTemplates; + +public class DerbyLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initDerby(); + Connections.setTemplates(DerbyTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java index 6fe2601078..6e6f7c49c5 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java @@ -1,8 +1,8 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; +import com.mysema.query.*; import com.mysema.query.sql.DerbyTemplates; public class DerbySuiteTest extends AbstractSuite { @@ -18,13 +18,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initDerby(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java new file mode 100644 index 0000000000..a2f3934df7 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java @@ -0,0 +1,30 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.FirebirdTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class FirebirdLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initFirebird(); + Connections.setTemplates(FirebirdTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java index a646db00e8..2f937a6acd 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -1,10 +1,11 @@ package com.mysema.query.suites; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + import com.mysema.query.*; import com.mysema.query.sql.FirebirdTemplates; import com.mysema.testutil.ExternalDB; -import org.junit.BeforeClass; -import org.junit.experimental.categories.Category; @Category(ExternalDB.class) public class FirebirdSuiteTest extends AbstractSuite { @@ -20,13 +21,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initFirebird(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java new file mode 100644 index 0000000000..7969379fe3 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java @@ -0,0 +1,29 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; + +import com.mysema.query.*; +import com.mysema.query.sql.spatial.GeoDBTemplates; + +public class H2LiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Spatial extends SpatialBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initH2(); + Connections.setTemplates(GeoDBTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java index 2931d275ee..34c729572e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java @@ -1,8 +1,9 @@ package com.mysema.query.suites; +import org.junit.BeforeClass; + import com.mysema.query.*; import com.mysema.query.sql.spatial.GeoDBTemplates; -import org.junit.BeforeClass; public class H2SuiteTest extends AbstractSuite { @@ -18,13 +19,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initH2(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java index 53914ebd9b..a69e0c5814 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java @@ -1,8 +1,8 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; +import com.mysema.query.*; import com.mysema.query.sql.H2Templates; public class H2WithQuotingTest extends AbstractSuite { @@ -18,13 +18,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initH2(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java index 7db0c4347d..c7c571727d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java @@ -1,8 +1,8 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; +import com.mysema.query.*; import com.mysema.query.sql.H2Templates; public class H2WithSchemaTest extends AbstractSuite { @@ -18,13 +18,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initH2(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java new file mode 100644 index 0000000000..41b61b152e --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java @@ -0,0 +1,28 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; + +import com.mysema.query.*; +import com.mysema.query.sql.HSQLDBTemplates; + +public class HsqldbLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initHSQL(); + Connections.setTemplates(HSQLDBTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java index 7be607cffc..69acb60632 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java @@ -1,8 +1,8 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; +import com.mysema.query.*; import com.mysema.query.sql.HSQLDBTemplates; public class HsqldbSuiteTest extends AbstractSuite { @@ -18,13 +18,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initHSQL(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java new file mode 100644 index 0000000000..7d06f5690b --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java @@ -0,0 +1,33 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.spatial.SQLServer2008SpatialTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class MSSQLLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Spatial extends SpatialBase {} + public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initSQLServer(); + Connections.setTemplates(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java index 27268fd5a3..3b07000743 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java @@ -1,9 +1,9 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; +import com.mysema.query.*; import com.mysema.query.sql.spatial.SQLServer2008SpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -23,13 +23,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initSQLServer(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java new file mode 100644 index 0000000000..7cf33863f7 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java @@ -0,0 +1,34 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.spatial.MySQLSpatialTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class MySQLLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class SelectMySQL extends SelectMySQLBase {} + public static class Spatial extends SpatialBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initMySQL(); + Connections.setTemplates(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java index 4f887d879e..e0c9642050 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java @@ -1,12 +1,12 @@ package com.mysema.query.suites; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + import com.mysema.query.*; import com.mysema.query.sql.spatial.MySQLSpatialTemplates; import com.mysema.testutil.ExternalDB; -import org.junit.BeforeClass; -import org.junit.experimental.categories.Category; - @Category(ExternalDB.class) public class MySQLSuiteTest extends AbstractSuite { @@ -24,13 +24,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java index 160b6a1ea8..c923d3ad42 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java @@ -1,9 +1,9 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; +import com.mysema.query.*; import com.mysema.query.sql.spatial.MySQLSpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -21,13 +21,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java new file mode 100644 index 0000000000..07c9617dbc --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java @@ -0,0 +1,33 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.spatial.OracleSpatialTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class OracleLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class SelectOracle extends SelectOracleBase {} + public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initOracle(); + Connections.setTemplates(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java index 8b5732a6a7..74a5f24fb1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java @@ -1,9 +1,9 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; +import com.mysema.query.*; import com.mysema.query.sql.spatial.OracleSpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -23,13 +23,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java index 1939db7fb1..aec564a7f7 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java @@ -1,9 +1,9 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; +import com.mysema.query.*; import com.mysema.query.sql.OracleTemplates; import com.mysema.testutil.ExternalDB; @@ -21,13 +21,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java new file mode 100644 index 0000000000..a8b8386466 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java @@ -0,0 +1,54 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.Configuration; +import com.mysema.query.sql.spatial.PostGISTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class PostgreSQLLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase { + + private Configuration previous; + + @Override + public void setUp() throws Exception { + //NOTE: replacing the templates with a non-quoting one + previous = configuration; + configuration = new Configuration(PostGISTemplates.builder().newLineToSingleSpace().build()); + super.setUp(); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + //NOTE: restoring old templates + configuration = previous; + } + + } + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Spatial extends SpatialBase {} + public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initPostgres(); + Connections.setTemplates(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java index 3f9c111da3..4ae96b6472 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java @@ -1,13 +1,13 @@ package com.mysema.query.suites; +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + import com.mysema.query.*; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.spatial.PostGISTemplates; import com.mysema.testutil.ExternalDB; -import org.junit.BeforeClass; -import org.junit.experimental.categories.Category; - @Category(ExternalDB.class) public class PostgreSQLSuiteTest extends AbstractSuite { @@ -44,13 +44,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initPostgres(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java new file mode 100644 index 0000000000..8de46e1bf7 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java @@ -0,0 +1,28 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; + +import com.mysema.query.*; +import com.mysema.query.sql.SQLiteTemplates; + +public class SQLiteLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initSQLite(); + Connections.setTemplates(SQLiteTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java index ac6cabe198..57f40a0cff 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java @@ -1,8 +1,8 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; +import com.mysema.query.*; import com.mysema.query.sql.SQLiteTemplates; public class SQLiteSuiteTest extends AbstractSuite { @@ -18,13 +18,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initSQLite(); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java new file mode 100644 index 0000000000..4cf6682bc0 --- /dev/null +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java @@ -0,0 +1,34 @@ +package com.mysema.query.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.mysema.query.*; +import com.mysema.query.sql.spatial.TeradataSpatialTemplates; +import com.mysema.testutil.ExternalDB; + +@Category(ExternalDB.class) +public class TeradataLiteralsSuiteTest extends AbstractSuite { + + public static class BeanPopulation extends BeanPopulationBase {} + public static class Delete extends DeleteBase {} + public static class Insert extends InsertBase {} + public static class LikeEscape extends LikeEscapeBase {} + public static class Merge extends MergeBase {} + public static class Select extends SelectBase {} + public static class SelectTeradata extends SelectTeradataBase {} + public static class Spatial extends SpatialBase {} + public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} + public static class Subqueries extends SubqueriesBase {} + public static class Types extends TypesBase {} + public static class Union extends UnionBase {} + public static class Update extends UpdateBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initTeradata(); + Connections.setTemplates(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java index db6c8b73d1..b99e12dd9f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java @@ -1,9 +1,9 @@ package com.mysema.query.suites; -import com.mysema.query.*; import org.junit.BeforeClass; import org.junit.experimental.categories.Category; +import com.mysema.query.*; import com.mysema.query.sql.spatial.TeradataSpatialTemplates; import com.mysema.testutil.ExternalDB; @@ -24,13 +24,6 @@ public static class Types extends TypesBase {} public static class Union extends UnionBase {} public static class Update extends UpdateBase {} - // with literals - public static class DeleteUseLiterals extends DeleteUseLiteralsBase {} - public static class InsertUseLiterals extends InsertUseLiteralsBase {} - public static class MergeUseLiterals extends MergeUseLiteralsBase {} - public static class SelectUseLiterals extends SelectUseLiteralsBase {} - public static class UpdateUseLiterals extends UpdateUseLiteralsBase {} - @BeforeClass public static void setUp() throws Exception { Connections.initTeradata(); From 85fb210332471c35ec05d273bc8ef42b97341873 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Dec 2014 23:22:40 +0200 Subject: [PATCH 0668/1968] Use srid parameter --- .../java/com/mysema/query/sql/spatial/GeoDBWkbType.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java index 4e42c43f5e..1c3770078d 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBWkbType.java @@ -13,13 +13,13 @@ */ package com.mysema.query.sql.spatial; -import javax.annotation.Nullable; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import com.mysema.query.sql.types.AbstractType; +import javax.annotation.Nullable; + import org.geolatte.geom.ByteBuffer; import org.geolatte.geom.ByteOrder; import org.geolatte.geom.Geometry; @@ -28,6 +28,8 @@ import org.geolatte.geom.codec.WkbEncoder; import org.geolatte.geom.codec.Wkt; +import com.mysema.query.sql.types.AbstractType; + /** * @author tiwe * @@ -79,7 +81,7 @@ public String getLiteral(Geometry geometry) { if (geometry.getSRID() > -1) { return "ST_GeomFromText('" + str + "', " + geometry.getSRID() + ")"; } else { - return "ST_GeomFromText('" + str + "')"; + return "ST_GeomFromText('" + str + "', -1)"; } } From 69c74e3d84a4067602df779f00e45e786cb037de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 20 Dec 2014 23:48:17 +0200 Subject: [PATCH 0669/1968] Remove templates field --- .../src/test/java/com/mysema/query/AbstractBaseTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java index acb5362337..293187cb69 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/AbstractBaseTest.java @@ -75,8 +75,6 @@ public TestQuery clone(Connection conn) { protected Configuration configuration = Connections.getConfiguration(); - protected SQLTemplates templates = configuration.getTemplates(); - @Nullable protected String expectedQuery; From 75ac91fdfbc1afafb458aa874c71ec7974ab5f03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 21 Dec 2014 00:05:04 +0200 Subject: [PATCH 0670/1968] Improve Connections signature --- .../src/test/java/com/mysema/query/Connections.java | 6 +----- .../com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/CUBRIDSuiteTest.java | 2 +- .../com/mysema/query/suites/DerbyLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/DerbySuiteTest.java | 2 +- .../com/mysema/query/suites/FirebirdLiteralsSuiteTest.java | 2 +- .../java/com/mysema/query/suites/FirebirdSuiteTest.java | 2 +- .../java/com/mysema/query/suites/H2ExceptionSuiteTest.java | 2 +- .../java/com/mysema/query/suites/H2LiteralsSuiteTest.java | 2 +- .../src/test/java/com/mysema/query/suites/H2SuiteTest.java | 2 +- .../java/com/mysema/query/suites/H2WithQuotingTest.java | 2 +- .../test/java/com/mysema/query/suites/H2WithSchemaTest.java | 2 +- .../com/mysema/query/suites/HsqldbLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/HsqldbSuiteTest.java | 2 +- .../com/mysema/query/suites/MSSQLLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/MSSQLSuiteTest.java | 2 +- .../com/mysema/query/suites/MySQLLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/MySQLSuiteTest.java | 2 +- .../java/com/mysema/query/suites/MySQLWithQuotingTest.java | 2 +- .../com/mysema/query/suites/OracleLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/OracleSuiteTest.java | 2 +- .../java/com/mysema/query/suites/OracleWithQuotingTest.java | 2 +- .../mysema/query/suites/PostgreSQLLiteralsSuiteTest.java | 2 +- .../java/com/mysema/query/suites/PostgreSQLSuiteTest.java | 2 +- .../com/mysema/query/suites/SQLiteLiteralsSuiteTest.java | 2 +- .../test/java/com/mysema/query/suites/SQLiteSuiteTest.java | 2 +- .../com/mysema/query/suites/TeradataLiteralsSuiteTest.java | 2 +- .../java/com/mysema/query/suites/TeradataSuiteTest.java | 2 +- 28 files changed, 28 insertions(+), 32 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 35287d7c43..73fbdbea1b 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -83,11 +83,7 @@ public static Configuration getConfiguration() { return configurationHolder.get(); } - public static void setConfiguration(Configuration conf) { - configurationHolder.set(conf); - } - - public static void setTemplates(SQLTemplates templates) { + public static void initConfiguration(SQLTemplates templates) { configurationHolder.set(new Configuration(templates)); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java index e167a181e0..08d7d90ef4 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java @@ -24,7 +24,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initCubrid(); - Connections.setTemplates(CUBRIDTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(CUBRIDTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java index 9bad786e32..502ff9a062 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java @@ -24,7 +24,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initCubrid(); - Connections.setTemplates(CUBRIDTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(CUBRIDTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java index 508615bce2..682d31d889 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initDerby(); - Connections.setTemplates(DerbyTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(DerbyTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java index 6e6f7c49c5..b1335b1445 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initDerby(); - Connections.setTemplates(DerbyTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(DerbyTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java index a2f3934df7..d24bf83a61 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java @@ -24,7 +24,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initFirebird(); - Connections.setTemplates(FirebirdTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(FirebirdTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java index 2f937a6acd..758362c275 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -24,6 +24,6 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initFirebird(); - Connections.setTemplates(FirebirdTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(FirebirdTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java index 4a9ba41849..9931860dd0 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2ExceptionSuiteTest.java @@ -25,7 +25,7 @@ public class H2ExceptionSuiteTest extends AbstractBaseTest { @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.setTemplates(H2Templates.builder().build()); + Connections.initConfiguration(H2Templates.builder().build()); Connections.getConnection().createStatement() .execute("ALTER TABLE SURVEY ADD CONSTRAINT UNIQUE_ID UNIQUE(ID)"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java index 7969379fe3..9be16a43d0 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java @@ -22,7 +22,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.setTemplates(GeoDBTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(GeoDBTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java index 34c729572e..90b98593f6 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java @@ -22,7 +22,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.setTemplates(GeoDBTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(GeoDBTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java index a69e0c5814..23d2dfc078 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.setTemplates(H2Templates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(H2Templates.builder().quote().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java index c7c571727d..e4c420264d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.setTemplates(H2Templates.builder().printSchema().newLineToSingleSpace().build()); + Connections.initConfiguration(H2Templates.builder().printSchema().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java index 41b61b152e..cd700620ab 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initHSQL(); - Connections.setTemplates(HSQLDBTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(HSQLDBTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java index 69acb60632..860b44af7f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initHSQL(); - Connections.setTemplates(HSQLDBTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(HSQLDBTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java index 7d06f5690b..fec86772db 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java @@ -26,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initSQLServer(); - Connections.setTemplates(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java index 3b07000743..4f98097af2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java @@ -26,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initSQLServer(); - Connections.setTemplates(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java index 7cf33863f7..ed63824019 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLLiteralsSuiteTest.java @@ -27,7 +27,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); - Connections.setTemplates(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java index e0c9642050..8bd973c124 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLSuiteTest.java @@ -27,7 +27,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); - Connections.setTemplates(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java index c923d3ad42..8bea1ea321 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java @@ -24,7 +24,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); - Connections.setTemplates(MySQLSpatialTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(MySQLSpatialTemplates.builder().quote().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java index 07c9617dbc..6e3b2ee575 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java @@ -26,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); - Connections.setTemplates(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java index 74a5f24fb1..0a92e4d2d6 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java @@ -26,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); - Connections.setTemplates(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java index aec564a7f7..5ab4c9a62c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java @@ -24,7 +24,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); - Connections.setTemplates(OracleTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(OracleTemplates.builder().quote().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java index a8b8386466..5c1869e5f3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLLiteralsSuiteTest.java @@ -47,7 +47,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initPostgres(); - Connections.setTemplates(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java index 4ae96b6472..6731ecfb11 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/PostgreSQLSuiteTest.java @@ -47,7 +47,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initPostgres(); - Connections.setTemplates(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java index 8de46e1bf7..05cf6a167e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initSQLite(); - Connections.setTemplates(SQLiteTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(SQLiteTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java index 57f40a0cff..20d90e667a 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java @@ -21,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initSQLite(); - Connections.setTemplates(SQLiteTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(SQLiteTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java index 4cf6682bc0..6350a3ab25 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java @@ -27,7 +27,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initTeradata(); - Connections.setTemplates(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java index b99e12dd9f..1fdd575b5d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java @@ -27,7 +27,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initTeradata(); - Connections.setTemplates(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); } } From 34d4859b228161af3c37eaafb1661f515a7ac217 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 21 Dec 2014 22:25:23 +0200 Subject: [PATCH 0671/1968] Use unquoted literals as default --- .../src/main/java/com/mysema/query/sql/SQLTemplates.java | 7 +++++-- .../com/mysema/query/sql/spatial/GeoDBTemplates.java | 9 --------- .../com/mysema/query/sql/spatial/GeometryWkbType.java | 2 +- .../mysema/query/sql/spatial/GeometryWktClobType.java | 2 +- .../com/mysema/query/sql/spatial/GeometryWktType.java | 2 +- .../mysema/query/sql/spatial/MySQLSpatialTemplates.java | 9 --------- .../com/mysema/query/sql/spatial/PGgeometryType.java | 2 +- 7 files changed, 9 insertions(+), 24 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java index 20c18deb40..a61f7dcf52 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLTemplates.java @@ -13,6 +13,8 @@ */ package com.mysema.query.sql; +import static com.google.common.base.CharMatcher.inRange; + import java.lang.reflect.Field; import java.sql.Types; import java.util.Arrays; @@ -32,7 +34,6 @@ import com.mysema.query.QueryModifiers; import com.mysema.query.sql.types.Type; import com.mysema.query.types.*; -import static com.google.common.base.CharMatcher.inRange; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -496,7 +497,9 @@ public String serialize(String literal, int jdbcType) { case Types.TINYINT: return literal; default: - return "'" + literal + "'"; + // for other JDBC types the Type instance is expected to provide + // the necessary quoting + return literal; } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java index b8ff49f6d9..fb5d08e361 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeoDBTemplates.java @@ -50,13 +50,4 @@ public GeoDBTemplates(char escape, boolean quote) { add(SpatialTemplatesSupport.getSpatialOps(true)); } - public String serialize(String literal, int jdbcType) { - // TODO better check for spatial literals - if (literal.startsWith("ST_")) { - return literal; - } else { - return super.serialize(literal, jdbcType); - } - } - } \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java index fc2caed404..5431fbfb93 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWkbType.java @@ -73,7 +73,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + return "'" + Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry) + "'"; } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java index 3738da6915..3092f5aa23 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktClobType.java @@ -59,7 +59,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + return "'" + Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry) + "'"; } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java index 7ec344986c..d831ac63eb 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/GeometryWktType.java @@ -61,6 +61,6 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + return "'" + Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry) + "'"; } } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java index 743b4ddf02..9d7ffb4d84 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/MySQLSpatialTemplates.java @@ -52,13 +52,4 @@ public MySQLSpatialTemplates(char escape, boolean quote) { add(SpatialOps.NUM_INTERIOR_RING, "NumInteriorRings({0})"); } - public String serialize(String literal, int jdbcType) { - // TODO better check for spatial literals - if (literal.startsWith("GeomFromText")) { - return literal; - } else { - return super.serialize(literal, jdbcType); - } - } - } diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java index 5b36fc5541..77f17cc148 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/spatial/PGgeometryType.java @@ -58,7 +58,7 @@ public void setValue(PreparedStatement st, int startIndex, Geometry value) throw @Override public String getLiteral(Geometry geometry) { - return Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry); + return "'" + Wkt.newEncoder(Wkt.Dialect.POSTGIS_EWKT_1).encode(geometry) + "'"; } } From 1888f04d292b7147c7e0b97fd6425c48b76f23f4 Mon Sep 17 00:00:00 2001 From: David Haraburda Date: Wed, 7 Jan 2015 15:51:39 -0600 Subject: [PATCH 0672/1968] Simple change to allow arbitrary table types for export (codegen) to be specified. --- .../maven/AbstractMetaDataExportMojo.java | 9 ++++++++ .../query/sql/codegen/MetaDataExporter.java | 23 ++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java index 34792c8248..de99575d08 100644 --- a/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java @@ -261,6 +261,14 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ */ private boolean spatial; + /** + * comma separated list of "table types" to export. + * ex: "TABLE, VIEW, MATERIALIZED VIEW" + * + * @parameter + */ + private String tableTypesToExport; + /** * java import added to generated query classes: * com.bar for package (without .* notation) @@ -326,6 +334,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { exporter.setExportTables(exportTables); exporter.setExportViews(exportViews); exporter.setExportAll(exportAll); + exporter.setTableTypesToExport(tableTypesToExport); exporter.setExportPrimaryKeys(exportPrimaryKeys); exporter.setExportForeignKeys(exportForeignKeys); exporter.setSpatial(spatial); diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java index 9dfa2570d3..15a93d8862 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java @@ -109,6 +109,9 @@ public class MetaDataExporter { private boolean exportForeignKeys = true; private boolean spatial = false; + + @Nullable + private String tableTypesToExport; public MetaDataExporter() {} @@ -200,7 +203,18 @@ public void export(DatabaseMetaData md) throws SQLException { } String[] typesArray = null; - if (!exportAll) { + + if(tableTypesToExport != null && !tableTypesToExport.isEmpty()) { + List types = new ArrayList(); + if(tableTypesToExport.contains(",")) { + for(String tableType : tableTypesToExport.split(",")) { + types.add(tableType.trim()); + } + } else { + types.add(tableTypesToExport.trim()); + } + typesArray = types.toArray(new String[types.size()]); + } else if (!exportAll) { List types = new ArrayList(2); if (exportTables) { types.add("TABLE"); @@ -645,4 +659,11 @@ public void setSpatial(boolean spatial) { this.spatial = spatial; } + /** + * @param tableTypesToExport + */ + public void setTableTypesToExport(String tableTypesToExport) { + this.tableTypesToExport = tableTypesToExport; + } + } From 47c6068a944e27e6de8015ed4768bcae14311958 Mon Sep 17 00:00:00 2001 From: David Haraburda Date: Thu, 8 Jan 2015 12:31:35 -0600 Subject: [PATCH 0673/1968] Update formatting --- .../query/sql/codegen/MetaDataExporter.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java index 15a93d8862..82875a492e 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java @@ -203,17 +203,17 @@ public void export(DatabaseMetaData md) throws SQLException { } String[] typesArray = null; - - if(tableTypesToExport != null && !tableTypesToExport.isEmpty()) { - List types = new ArrayList(); - if(tableTypesToExport.contains(",")) { - for(String tableType : tableTypesToExport.split(",")) { - types.add(tableType.trim()); - } - } else { - types.add(tableTypesToExport.trim()); - } - typesArray = types.toArray(new String[types.size()]); + + if (tableTypesToExport != null && !tableTypesToExport.isEmpty()) { + List types = new ArrayList(); + if (tableTypesToExport.contains(",")) { + for (String tableType : tableTypesToExport.split(",")) { + types.add(tableType.trim()); + } + } else { + types.add(tableTypesToExport.trim()); + } + typesArray = types.toArray(new String[types.size()]); } else if (!exportAll) { List types = new ArrayList(2); if (exportTables) { @@ -662,8 +662,8 @@ public void setSpatial(boolean spatial) { /** * @param tableTypesToExport */ - public void setTableTypesToExport(String tableTypesToExport) { - this.tableTypesToExport = tableTypesToExport; - } + public void setTableTypesToExport(String tableTypesToExport) { + this.tableTypesToExport = tableTypesToExport; + } } From f89b44676f104931ca8f4e5396351dc32ab20f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 8 Jan 2015 20:44:04 +0200 Subject: [PATCH 0674/1968] Fix tests --- .../src/test/java/com/mysema/query/Connections.java | 4 ++++ .../test/java/com/mysema/query/SubqueriesBase.java | 13 ++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 455c08ca12..82de4f001c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -354,6 +354,10 @@ public static void initDB2() throws SQLException, ClassNotFoundException { dropTable(templates, "DATE_TEST"); stmt.execute(CREATE_TABLE_DATETEST); + // numbers + dropTable(templates, "NUMBER_TEST"); + stmt.execute("create table NUMBER_TEST(col1 int)"); + // xml dropTable(templates, "XML_TEST"); stmt.execute("create table XML_TEST(COL varchar(128))"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java b/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java index 6f3e91edff..0fb20d0774 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/SubqueriesBase.java @@ -1,9 +1,16 @@ package com.mysema.query; +import static com.mysema.query.Constants.*; +import static com.mysema.query.Target.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + import java.math.BigDecimal; import java.sql.SQLException; import java.util.List; +import org.junit.Test; + import com.google.common.collect.ImmutableList; import com.mysema.query.sql.Configuration; import com.mysema.query.sql.ForeignKey; @@ -18,11 +25,6 @@ import com.mysema.query.types.path.PathBuilder; import com.mysema.query.types.query.ListSubQuery; import com.mysema.testutil.ExcludeIn; -import org.junit.Test; -import static com.mysema.query.Constants.*; -import static com.mysema.query.Target.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; public class SubqueriesBase extends AbstractBaseTest { @@ -54,6 +56,7 @@ public void List_In_Query() { @Test @SkipForQuoted + @ExcludeIn(DB2) // ID is reserved IN DB2 public void SubQueries() throws SQLException { // subquery in where block expectedQuery = "select e.ID from EMPLOYEE e " From f669353a40d1a73230f8cc82bdeb0b1f4627c75b Mon Sep 17 00:00:00 2001 From: David Haraburda Date: Fri, 9 Jan 2015 10:52:40 -0600 Subject: [PATCH 0675/1968] Update AntMetaDataExporter, added documentation --- .../src/main/docbook/en-US/content/tutorials/sql.xml | 4 ++++ .../com/mysema/query/sql/ant/AntMetaDataExporter.java | 9 +++++++++ .../com/mysema/query/sql/codegen/MetaDataExporter.java | 8 ++------ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index c379743ab7..e95493b0ec 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -229,6 +229,10 @@ exportPrimaryKeys export primary keys (default: true) + + tableTypesToExport + Comma-separated list of table types to export (allowable values will depend on JDBC driver). Allows for arbitrary set of types to be exported, e.g.: "TABLE, MATERIALIZED VIEW". The exportTables and exportViews parameters will be ignored if this parameter is set. (default: none) + exportForeignKeys export foreign keys (default: true) diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java index d34ba5feb3..2661322b5c 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/ant/AntMetaDataExporter.java @@ -194,6 +194,14 @@ public class AntMetaDataExporter extends Task { */ private boolean spatial; + /** + * comma separated list of "table types" to export. + * ex: "TABLE, VIEW, MATERIALIZED VIEW" + * + * @parameter + */ + private String tableTypesToExport; + /** * java import added to generated query classes: * com.bar for package (without .* notation) @@ -242,6 +250,7 @@ public void execute() { exporter.setExportTables(exportTables); exporter.setExportViews(exportViews); exporter.setExportAll(exportAll); + exporter.setTableTypesToExport(tableTypesToExport); exporter.setExportPrimaryKeys(exportPrimaryKeys); exporter.setExportForeignKeys(exportForeignKeys); exporter.setSpatial(spatial); diff --git a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java index 82875a492e..6095bed05c 100644 --- a/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/mysema/query/sql/codegen/MetaDataExporter.java @@ -206,12 +206,8 @@ public void export(DatabaseMetaData md) throws SQLException { if (tableTypesToExport != null && !tableTypesToExport.isEmpty()) { List types = new ArrayList(); - if (tableTypesToExport.contains(",")) { - for (String tableType : tableTypesToExport.split(",")) { - types.add(tableType.trim()); - } - } else { - types.add(tableTypesToExport.trim()); + for (String tableType : tableTypesToExport.split(",")) { + types.add(tableType.trim()); } typesArray = types.toArray(new String[types.size()]); } else if (!exportAll) { From 8ec81089109c1938b433882922d4068f89320605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 20:07:37 +0200 Subject: [PATCH 0676/1968] Fix boolean mapping --- .../src/main/java/com/mysema/query/sql/DB2Templates.java | 1 + querydsl-sql/src/test/java/com/mysema/query/Connections.java | 2 +- .../src/test/java/com/mysema/query/suites/DB2SuiteTest.java | 1 + .../java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java index 8073cfac26..ab1d18055a 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DB2Templates.java @@ -187,6 +187,7 @@ public DB2Templates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc_timestamp({0}, 'minute')"); add(Ops.DateTimeOps.TRUNC_SECOND, "trunc_timestamp({0}, 'second')"); + addTypeNameToCode("smallint", Types.BOOLEAN, true); addTypeNameToCode("smallint", Types.TINYINT, true); addTypeNameToCode("long varchar for bit data", Types.LONGVARBINARY); addTypeNameToCode("varchar () for bit data", Types.VARBINARY); diff --git a/querydsl-sql/src/test/java/com/mysema/query/Connections.java b/querydsl-sql/src/test/java/com/mysema/query/Connections.java index 82de4f001c..f7a57f7180 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/Connections.java +++ b/querydsl-sql/src/test/java/com/mysema/query/Connections.java @@ -356,7 +356,7 @@ public static void initDB2() throws SQLException, ClassNotFoundException { // numbers dropTable(templates, "NUMBER_TEST"); - stmt.execute("create table NUMBER_TEST(col1 int)"); + stmt.execute("create table NUMBER_TEST(col1 smallint)"); // xml dropTable(templates, "XML_TEST"); diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java index e08862fd24..44a7640fda 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2SuiteTest.java @@ -13,6 +13,7 @@ public class DB2SuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java index 682d31d889..0c9e56c105 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbyLiteralsSuiteTest.java @@ -10,6 +10,7 @@ public class DerbyLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} From 2c82c0add5a04aeb9ebe2087fce1d5381a3de00e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 22:30:28 +0200 Subject: [PATCH 0677/1968] Add KeywordQuoting tests --- .../src/main/java/com/mysema/query/sql/DerbyTemplates.java | 4 +++- .../java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java | 1 + .../test/java/com/mysema/query/suites/CUBRIDSuiteTest.java | 1 + .../java/com/mysema/query/suites/DB2LiteralsSuiteTest.java | 1 + .../src/test/java/com/mysema/query/suites/DerbySuiteTest.java | 1 + .../com/mysema/query/suites/FirebirdLiteralsSuiteTest.java | 1 + .../test/java/com/mysema/query/suites/FirebirdSuiteTest.java | 1 + .../java/com/mysema/query/suites/H2LiteralsSuiteTest.java | 1 + .../src/test/java/com/mysema/query/suites/H2SuiteTest.java | 1 + .../test/java/com/mysema/query/suites/H2WithQuotingTest.java | 1 + .../test/java/com/mysema/query/suites/H2WithSchemaTest.java | 1 + .../java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java | 1 + .../test/java/com/mysema/query/suites/HsqldbSuiteTest.java | 1 + .../java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java | 1 + .../src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java | 1 + .../java/com/mysema/query/suites/MySQLWithQuotingTest.java | 1 + .../java/com/mysema/query/suites/OracleLiteralsSuiteTest.java | 1 + .../test/java/com/mysema/query/suites/OracleSuiteTest.java | 1 + .../java/com/mysema/query/suites/OracleWithQuotingTest.java | 1 + .../java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java | 1 + .../test/java/com/mysema/query/suites/SQLiteSuiteTest.java | 1 + .../com/mysema/query/suites/TeradataLiteralsSuiteTest.java | 1 + .../test/java/com/mysema/query/suites/TeradataSuiteTest.java | 1 + 23 files changed, 25 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java index bb71afd3da..4a05788e9c 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/DerbyTemplates.java @@ -119,7 +119,9 @@ public DerbyTemplates(char escape, boolean quote) { @Override public String serialize(String literal, int jdbcType) { - if (jdbcType == Types.TIMESTAMP) { + if (jdbcType == Types.BOOLEAN) { + return "1".equals(literal) ? "true" : "false"; + } else if (jdbcType == Types.TIMESTAMP) { return "{ts '" + literal + "'}"; } else if (jdbcType == Types.DATE) { return "{d '" + literal + "'}"; diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java index 08d7d90ef4..98cb4f3f7c 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDLiteralsSuiteTest.java @@ -13,6 +13,7 @@ public class CUBRIDLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java index 502ff9a062..196b2a7f22 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/CUBRIDSuiteTest.java @@ -13,6 +13,7 @@ public class CUBRIDSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2LiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2LiteralsSuiteTest.java index 0003cdded1..a165157ab3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DB2LiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DB2LiteralsSuiteTest.java @@ -13,6 +13,7 @@ public class DB2LiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java index b1335b1445..6026661f07 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/DerbySuiteTest.java @@ -10,6 +10,7 @@ public class DerbySuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java index d24bf83a61..c869c518e2 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdLiteralsSuiteTest.java @@ -13,6 +13,7 @@ public class FirebirdLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java index 758362c275..aa3f03b52e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/FirebirdSuiteTest.java @@ -13,6 +13,7 @@ public class FirebirdSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java index 9be16a43d0..1b89ff9e9f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2LiteralsSuiteTest.java @@ -10,6 +10,7 @@ public class H2LiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java index 90b98593f6..4ba5156c7f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2SuiteTest.java @@ -10,6 +10,7 @@ public class H2SuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java index 23d2dfc078..65980d851d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithQuotingTest.java @@ -10,6 +10,7 @@ public class H2WithQuotingTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java index e4c420264d..e3c1bd1e6d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/H2WithSchemaTest.java @@ -10,6 +10,7 @@ public class H2WithSchemaTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java index cd700620ab..47a4ce0e22 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbLiteralsSuiteTest.java @@ -10,6 +10,7 @@ public class HsqldbLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java index 860b44af7f..d456064bf3 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/HsqldbSuiteTest.java @@ -10,6 +10,7 @@ public class HsqldbSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java index fec86772db..615fcd67a6 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLLiteralsSuiteTest.java @@ -13,6 +13,7 @@ public class MSSQLLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java index 4f98097af2..7114a06d28 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MSSQLSuiteTest.java @@ -13,6 +13,7 @@ public class MSSQLSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java index 8bea1ea321..d7ba8caac0 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/MySQLWithQuotingTest.java @@ -13,6 +13,7 @@ public class MySQLWithQuotingTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java index 6e3b2ee575..0243462bc5 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleLiteralsSuiteTest.java @@ -13,6 +13,7 @@ public class OracleLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java index 0a92e4d2d6..c84b903dec 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleSuiteTest.java @@ -13,6 +13,7 @@ public class OracleSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java index 5ab4c9a62c..181229855d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/OracleWithQuotingTest.java @@ -13,6 +13,7 @@ public class OracleWithQuotingTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java index 05cf6a167e..519bdf7c77 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteLiteralsSuiteTest.java @@ -10,6 +10,7 @@ public class SQLiteLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java index 20d90e667a..e72845e00e 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/SQLiteSuiteTest.java @@ -10,6 +10,7 @@ public class SQLiteSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java index 6350a3ab25..40313c390f 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataLiteralsSuiteTest.java @@ -13,6 +13,7 @@ public class TeradataLiteralsSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} diff --git a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java index 1fdd575b5d..dd679dff98 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/suites/TeradataSuiteTest.java @@ -13,6 +13,7 @@ public class TeradataSuiteTest extends AbstractSuite { public static class BeanPopulation extends BeanPopulationBase {} public static class Delete extends DeleteBase {} public static class Insert extends InsertBase {} + public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} From 5a765ccb54b5f2351a99c33964caed7f729b6684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 22:53:34 +0200 Subject: [PATCH 0678/1968] Add more type related tests --- .../test/java/com/mysema/query/TypesBase.java | 39 +++++++++++++++++-- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java b/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java index 4493821ef7..54c1604ef1 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java @@ -1,20 +1,53 @@ package com.mysema.query; -import static com.mysema.query.Target.CUBRID; -import static com.mysema.query.Target.POSTGRES; -import static com.mysema.query.Target.TERADATA; +import static com.mysema.query.Target.*; +import java.math.BigDecimal; +import java.math.BigInteger; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.SQLException; +import java.util.Map; import org.junit.Test; +import com.google.common.collect.Maps; +import com.mysema.query.ddl.CreateTableClause; +import com.mysema.query.ddl.DropTableClause; import com.mysema.testutil.ExcludeIn; public class TypesBase extends AbstractBaseTest { + @Test + public void CreateTables() { + Map, Object> instances = Maps.newHashMap(); + instances.put(BigInteger.class, BigInteger.valueOf(1)); + instances.put(Long.class, Long.valueOf(1)); + instances.put(Integer.class, Integer.valueOf(1)); + instances.put(Short.class, Short.valueOf((short)1)); + instances.put(Byte.class, Byte.valueOf((byte)1)); + instances.put(BigDecimal.class, BigDecimal.valueOf(1.0)); + instances.put(Double.class, Double.valueOf(1.0)); + instances.put(Float.class, Float.valueOf((float)1.0)); + instances.put(Boolean.class, Boolean.TRUE); + instances.put(Character.class, Character.valueOf('a')); + instances.put(String.class, "ABC"); + + for (Map.Entry, Object> entry : instances.entrySet()) { + String tableName = "test_" + entry.getKey().getSimpleName(); + CreateTableClause c = new CreateTableClause(connection, configuration, tableName) + .column("col", entry.getKey()); + if (entry.getKey().equals(String.class)) { + c.size(256); + } + c.execute(); + // TODO insert + new DropTableClause(connection, configuration, tableName).execute(); + } + + } + @Test @ExcludeIn({CUBRID, POSTGRES, TERADATA}) public void DumpTypes() throws SQLException { From 1ae65f3a82b2e919b2253218ce622378d345a0b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 22:55:48 +0200 Subject: [PATCH 0679/1968] Add mapping for boolean --- .../src/main/java/com/mysema/query/sql/CUBRIDTemplates.java | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java index ad6a2ff7f1..4c2351e76f 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java @@ -79,6 +79,7 @@ public CUBRIDTemplates(char escape, boolean quote) { add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); + addTypeNameToCode("numeric(1,0)", Types.BOOLEAN, true); addTypeNameToCode("numeric(3,0)", Types.TINYINT, true); addTypeNameToCode("numeric(38,0)", Types.BIGINT, true); addTypeNameToCode("bit varying", Types.LONGVARBINARY); From 58d4da9b8f12e88bc989bdff8f50a74c83a9fee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 23:08:33 +0200 Subject: [PATCH 0680/1968] Add inserts to test --- .../java/com/mysema/query/sql/PostgresTemplates.java | 9 +++++++++ .../src/test/java/com/mysema/query/TypesBase.java | 11 +++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java index 5dbee73322..7268d2ca0b 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/PostgresTemplates.java @@ -155,4 +155,13 @@ public PostgresTemplates(char escape, boolean quote) { addTypeNameToCode("timestamptz", Types.TIMESTAMP); } + @Override + public String serialize(String literal, int jdbcType) { + if (jdbcType == Types.BOOLEAN) { + return "1".equals(literal) ? "true" : "false"; + } else { + return super.serialize(literal, jdbcType); + } + } + } diff --git a/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java b/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java index 54c1604ef1..256476ec02 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java @@ -15,13 +15,17 @@ import com.google.common.collect.Maps; import com.mysema.query.ddl.CreateTableClause; import com.mysema.query.ddl.DropTableClause; +import com.mysema.query.sql.RelationalPath; +import com.mysema.query.sql.RelationalPathBase; +import com.mysema.query.support.Expressions; +import com.mysema.query.types.Path; import com.mysema.testutil.ExcludeIn; public class TypesBase extends AbstractBaseTest { @Test public void CreateTables() { - Map, Object> instances = Maps.newHashMap(); + Map, Object> instances = Maps.newLinkedHashMap(); instances.put(BigInteger.class, BigInteger.valueOf(1)); instances.put(Long.class, Long.valueOf(1)); instances.put(Integer.class, Integer.valueOf(1)); @@ -36,13 +40,16 @@ public void CreateTables() { for (Map.Entry, Object> entry : instances.entrySet()) { String tableName = "test_" + entry.getKey().getSimpleName(); + new DropTableClause(connection, configuration, tableName).execute(); CreateTableClause c = new CreateTableClause(connection, configuration, tableName) .column("col", entry.getKey()); if (entry.getKey().equals(String.class)) { c.size(256); } c.execute(); - // TODO insert + RelationalPath entityPath = new RelationalPathBase(Object.class, tableName, "", tableName); + Path columnPath = Expressions.path(entry.getKey(), entityPath, "col"); + insert(entityPath).set((Path)columnPath, entry.getValue()).execute(); new DropTableClause(connection, configuration, tableName).execute(); } From e38b972d84ddda69267bc51bf573a70f59b05bea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 23:32:43 +0200 Subject: [PATCH 0681/1968] Add schema name --- querydsl-sql/src/test/java/com/mysema/query/TypesBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java b/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java index 256476ec02..8a467c133d 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java +++ b/querydsl-sql/src/test/java/com/mysema/query/TypesBase.java @@ -47,7 +47,7 @@ public void CreateTables() { c.size(256); } c.execute(); - RelationalPath entityPath = new RelationalPathBase(Object.class, tableName, "", tableName); + RelationalPath entityPath = new RelationalPathBase(Object.class, tableName, "PUBLIC", tableName); Path columnPath = Expressions.path(entry.getKey(), entityPath, "col"); insert(entityPath).set((Path)columnPath, entry.getValue()).execute(); new DropTableClause(connection, configuration, tableName).execute(); From 6fb83c440abaae8b2c61ab4fc1a6b8bf2b92357f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 9 Jan 2015 23:51:50 +0200 Subject: [PATCH 0682/1968] Fix SQLite BigInteger mappings --- .../com/mysema/query/sql/SQLiteTemplates.java | 7 ++- .../query/sql/types/BigIntegerAsLongType.java | 56 +++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java index 23da12b8f0..e02ba7e5a9 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/SQLiteTemplates.java @@ -15,11 +15,13 @@ import java.sql.Types; -import com.mysema.query.sql.types.BigDecimalAsDoubleType; -import com.mysema.query.types.Ops; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; +import com.mysema.query.sql.types.BigDecimalAsDoubleType; +import com.mysema.query.sql.types.BigIntegerAsLongType; +import com.mysema.query.types.Ops; + /** * SQLiteTemplates is a SQL dialect for SQLite * @@ -58,6 +60,7 @@ public SQLiteTemplates(char escape, boolean quote) { super("\"", escape, quote); setDummyTable(null); addCustomType(BigDecimalAsDoubleType.DEFAULT); + addCustomType(BigIntegerAsLongType.DEFAULT); setUnionsWrapped(false); setLimitRequired(true); setNullsFirst(null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java new file mode 100644 index 0000000000..ac44c9ad2a --- /dev/null +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java @@ -0,0 +1,56 @@ +/* + * Copyright 2015, Timo Westkämper + * + * 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 com.mysema.query.sql.types; + +import java.math.BigInteger; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; + +/** + * BigIntegerType maps BigInteger to Long on the JDBC level + * + * @author tiwe + * + */ +public class BigIntegerAsLongType extends AbstractType { + + public static final BigIntegerAsLongType DEFAULT = new BigIntegerAsLongType(); + + public BigIntegerAsLongType() { + super(Types.NUMERIC); + } + + public BigIntegerAsLongType(int type) { + super(type); + } + + @Override + public BigInteger getValue(ResultSet rs, int startIndex) throws SQLException { + return BigInteger.valueOf(rs.getLong(startIndex)); + } + + @Override + public Class getReturnedClass() { + return BigInteger.class; + } + + @Override + public void setValue(PreparedStatement st, int startIndex, BigInteger value) + throws SQLException { + st.setLong(startIndex, value.longValue()); + } + +} From 0b05284023c03323fd9f8d636bedd7b4fa1e9b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 10 Jan 2015 00:05:02 +0200 Subject: [PATCH 0683/1968] Improve null handling in Type instances --- .../java/com/mysema/query/sql/CUBRIDTemplates.java | 2 ++ .../mysema/query/sql/types/BigDecimalAsDoubleType.java | 3 ++- .../mysema/query/sql/types/BigIntegerAsLongType.java | 3 ++- .../com/mysema/query/sql/types/NumericBooleanType.java | 2 ++ .../test/java/com/mysema/query/sql/types/TypeTest.java | 10 +++++++--- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java index 4c2351e76f..0fcd8e82b8 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/CUBRIDTemplates.java @@ -17,6 +17,7 @@ import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; +import com.mysema.query.sql.types.NumericBooleanType; import com.mysema.query.types.Ops; /** @@ -54,6 +55,7 @@ public CUBRIDTemplates(boolean quote) { public CUBRIDTemplates(char escape, boolean quote) { super("\"", escape, quote); setDummyTable(null); + addCustomType(NumericBooleanType.DEFAULT); setParameterMetadataAvailable(false); setNullsFirst(null); setNullsLast(null); diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigDecimalAsDoubleType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigDecimalAsDoubleType.java index b95abd511a..550a6b156e 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigDecimalAsDoubleType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigDecimalAsDoubleType.java @@ -39,7 +39,8 @@ public BigDecimalAsDoubleType(int type) { @Override public BigDecimal getValue(ResultSet rs, int startIndex) throws SQLException { - return BigDecimal.valueOf(rs.getDouble(startIndex)); + Number num = (Number)rs.getObject(startIndex); + return num != null ? BigDecimal.valueOf(num.doubleValue()) : null; } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java index ac44c9ad2a..f58433c150 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/BigIntegerAsLongType.java @@ -39,7 +39,8 @@ public BigIntegerAsLongType(int type) { @Override public BigInteger getValue(ResultSet rs, int startIndex) throws SQLException { - return BigInteger.valueOf(rs.getLong(startIndex)); + Number num = (Number) rs.getObject(startIndex); + return num != null ? BigInteger.valueOf(num.longValue()) : null; } @Override diff --git a/querydsl-sql/src/main/java/com/mysema/query/sql/types/NumericBooleanType.java b/querydsl-sql/src/main/java/com/mysema/query/sql/types/NumericBooleanType.java index 75ad920a0f..fd809e25e2 100644 --- a/querydsl-sql/src/main/java/com/mysema/query/sql/types/NumericBooleanType.java +++ b/querydsl-sql/src/main/java/com/mysema/query/sql/types/NumericBooleanType.java @@ -28,6 +28,8 @@ */ public class NumericBooleanType extends AbstractType { + public static NumericBooleanType DEFAULT = new NumericBooleanType(); + public NumericBooleanType() { super(Types.INTEGER); } diff --git a/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java b/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java index 7c9176b2f3..8457827d24 100644 --- a/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java +++ b/querydsl-sql/src/test/java/com/mysema/query/sql/types/TypeTest.java @@ -13,6 +13,9 @@ */ package com.mysema.query.sql.types; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; @@ -23,15 +26,14 @@ import java.sql.*; import java.util.*; -import com.mysema.commons.lang.Pair; import org.easymock.EasyMock; import org.joda.time.DateTime; import org.joda.time.LocalDate; import org.joda.time.LocalDateTime; import org.joda.time.LocalTime; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; + +import com.mysema.commons.lang.Pair; public class TypeTest implements InvocationHandler{ @@ -61,6 +63,8 @@ public void test() throws MalformedURLException, SQLException{ List> valueAndType = new ArrayList>(); valueAndType.add(Pair.of(new BigDecimal("1"), new BigDecimalType())); valueAndType.add(Pair.of(new BigInteger("2"), new BigIntegerType())); + valueAndType.add(Pair.of(new BigDecimal("1.0"), new BigDecimalAsDoubleType())); + valueAndType.add(Pair.of(new BigInteger("2"), new BigIntegerAsLongType())); //valueAndType.add(Pair.of(Boolean.TRUE, new BooleanType())); valueAndType.add(Pair.of(Byte.valueOf((byte)1), new ByteType())); valueAndType.add(Pair.of(new byte[0], new BytesType())); From eb076cb518bcab97af1aed7af9628f0949d55aa1 Mon Sep 17 00:00:00 2001 From: David Haraburda Date: Sun, 11 Jan 2015 10:05:47 -0600 Subject: [PATCH 0684/1968] Update javadoc --- .../query/maven/AbstractMetaDataExportMojo.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java index de99575d08..e558fa04d7 100644 --- a/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/mysema/query/maven/AbstractMetaDataExportMojo.java @@ -261,12 +261,14 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ */ private boolean spatial; - /** - * comma separated list of "table types" to export. - * ex: "TABLE, VIEW, MATERIALIZED VIEW" - * - * @parameter - */ + /** + * Comma-separated list of table types to export (allowable values will + * depend on JDBC driver). Allows for arbitrary set of types to be exported, + * e.g.: "TABLE, MATERIALIZED VIEW". The exportTables and exportViews + * parameters will be ignored if this parameter is set. (default: none) + * + * @parameter + */ private String tableTypesToExport; /** From 076820bfa4bd28e5b17fb23728678c472733fa26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 13 Jan 2015 23:00:21 +0200 Subject: [PATCH 0685/1968] Change groupId from com.mysema.querydsl to com.querydsl --- querydsl-apt/pom.xml | 28 ++++++++++++------------- querydsl-codegen/pom.xml | 10 ++++----- querydsl-collections/pom.xml | 18 ++++++++-------- querydsl-core/pom.xml | 6 +++--- querydsl-docs/pom.xml | 4 ++-- querydsl-hibernate-search/pom.xml | 10 ++++----- querydsl-jdo/pom.xml | 26 +++++++++++------------ querydsl-jpa-codegen/pom.xml | 14 ++++++------- querydsl-jpa/pom.xml | 20 +++++++++--------- querydsl-lucene3/pom.xml | 18 ++++++++-------- querydsl-lucene4/pom.xml | 18 ++++++++-------- querydsl-maven-plugin/pom.xml | 10 ++++----- querydsl-mongodb/pom.xml | 18 ++++++++-------- querydsl-root/pom.xml | 34 +++++++++++++++---------------- querydsl-scala/pom.xml | 26 +++++++++++------------ querydsl-spatial/pom.xml | 18 ++++++++-------- querydsl-sql-codegen/pom.xml | 24 +++++++++++----------- querydsl-sql-spring/pom.xml | 8 ++++---- querydsl-sql/pom.xml | 16 +++++++-------- 19 files changed, 163 insertions(+), 163 deletions(-) diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index e2024df789..e970fc16c6 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-apt Querydsl - APT support APT based Source code generation for Querydsl @@ -30,7 +30,7 @@ - com.mysema.querydsl + com.querydsl querydsl-codegen ${project.version} @@ -101,7 +101,7 @@ test - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -128,14 +128,14 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index 86e9d61d6d..ef80c35594 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-collections Querydsl - Collections support Collections support for Querydsl @@ -24,12 +24,12 @@ - com.mysema.querydsl + com.querydsl querydsl-codegen ${project.version} - com.mysema.querydsl + com.querydsl querydsl-apt ${project.version} @@ -54,7 +54,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -94,7 +94,7 @@ target/generated-test-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor true @@ -103,4 +103,4 @@ - + diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 73b8a079eb..89b8f4ec44 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -3,13 +3,13 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-core Querydsl - Core module core module for querydsl diff --git a/querydsl-docs/pom.xml b/querydsl-docs/pom.xml index 4d68710df2..c138cbb8a3 100644 --- a/querydsl-docs/pom.xml +++ b/querydsl-docs/pom.xml @@ -3,13 +3,13 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root 3.2.1 ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-docs Querydsl - Documentation jdocbook diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 018953305e..6d7cf624cf 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -3,13 +3,13 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-hibernate-search Querydsl - Hibernate Search support Hibernate Search support for querydsl @@ -36,7 +36,7 @@ - com.mysema.querydsl + com.querydsl querydsl-lucene3 ${project.version} @@ -112,7 +112,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index 5404e9832e..f708b7657d 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-jdo Querydsl - JDO support JDO support for Querydsl @@ -42,25 +42,25 @@ --> - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} - com.mysema.querydsl + com.querydsl querydsl-codegen ${project.version} provided - com.mysema.querydsl + com.querydsl querydsl-apt ${project.version} provided - com.mysema.querydsl + com.querydsl querydsl-sql ${project.version} compile @@ -111,7 +111,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -244,7 +244,7 @@ target/generated-test-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor true @@ -252,13 +252,13 @@ - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${project.version} org.hsqldb.jdbcDriver jdbc:hsqldb:target/jdo - com.mysema.query.jdo.test.domain.sql + com.querydsl.jdo.test.domain.sql sa src/test/java S @@ -289,4 +289,4 @@ - + diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index 582b18ccd1..ea0fd01e84 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -3,13 +3,13 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-jpa-codegen Querydsl - JPA Codegen support JPA Codegen support for Querydsl @@ -71,17 +71,17 @@ - com.mysema.querydsl + com.querydsl querydsl-codegen ${project.version} - com.mysema.querydsl + com.querydsl querydsl-jpa ${project.version} - com.mysema.querydsl + com.querydsl querydsl-jpa ${project.version} test @@ -89,7 +89,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 10f63e1263..fe2a42ade8 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -3,13 +3,13 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-jpa Querydsl - JPA support JPA support for Querydsl @@ -73,19 +73,19 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} - com.mysema.querydsl + com.querydsl querydsl-apt ${project.version} provided - com.mysema.querydsl + com.querydsl querydsl-sql ${project.version} compile @@ -196,7 +196,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -321,14 +321,14 @@ target/generated-test-sources/java - com.mysema.query.apt.hibernate.HibernateAnnotationProcessor + com.querydsl.apt.hibernate.HibernateAnnotationProcessor true - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${project.version} - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -87,7 +87,7 @@ - com.mysema.querydsl + com.querydsl querydsl-apt ${project.version} @@ -111,7 +111,7 @@ target/generated-test-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor true @@ -119,4 +119,4 @@ - + diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index af9d075831..626d859b37 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -3,13 +3,13 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-maven-plugin Querydsl - Maven plugin Querydsl Maven plugin @@ -56,7 +56,7 @@ - com.mysema.querydsl + com.querydsl querydsl-sql-codegen ${project.version} @@ -89,7 +89,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index a936b9c6c2..cf23dbeba0 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-mongodb Querydsl - Mongodb support Mongodb support for Querydsl @@ -47,12 +47,12 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} - com.mysema.querydsl + com.querydsl querydsl-apt ${project.version} provided @@ -69,7 +69,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -95,7 +95,7 @@ target/generated-test-sources/java - com.mysema.query.apt.morphia.MorphiaAnnotationProcessor + com.querydsl.apt.morphia.MorphiaAnnotationProcessor true true @@ -154,4 +154,4 @@ - + diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index a5a1a94aac..75075279e2 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -2,9 +2,9 @@ 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT Querydsl parent project for Querydsl modules ${project.homepage} @@ -258,47 +258,47 @@ Core - com.mysema.query:com.mysema.query.alias:com.mysema.query.annotations:com.mysema.query.codegen:com.mysema.query.dml:com.mysema.query.functions:com.mysema.query.serialization:com.mysema.query.support:com.mysema.query.types* + com.querydsl.core* APT - com.mysema.query.apt* + com.querydsl.apt* Spatial - com.mysema.query.spatial* + com.querydsl.spatial* Collections - com.mysema.query.collections* + com.querydsl.collections* JPA - com.mysema.query.jpa* + com.querydsl.jpa* JDO - com.mysema.query.jdo* + com.querydsl.jdo* SQL - com.mysema.query.sql* + com.querydsl.sql* Spatial - com.mysema.query.spatial* + com.querydsl.spatial* Lucene - com.mysema.query.lucene + com.querydsl.lucene3:com.querydsl.lucene4 Hibernate Search - com.mysema.query.search + com.querydsl.search Mongodb - com.mysema.query.mongodb* + com.querydsl.mongodb* @@ -352,7 +352,7 @@ maven-surefire-plugin -Xms256m -Xmx512m -XX:MaxPermSize=512m - com.mysema.testutil.ExternalDB + com.querydsl.core.testutil.ExternalDB @@ -507,7 +507,7 @@ org.apache.maven.plugins maven-surefire-plugin - com.mysema.testutil.Performance + com.querydsl.core.testutil.Performance **/*$* **/DB2*SuiteTest.java @@ -528,7 +528,7 @@ org.apache.maven.plugins maven-surefire-plugin - com.mysema.testutil.Performance + com.querydsl.core.testutil.Performance **/*$* **/DB2*SuiteTest.java @@ -542,7 +542,7 @@ listener - com.mysema.testutil.TravisFoldListener + com.querydsl.core.testutil.TravisFoldListener diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index acd3b3ebff..84b39b7952 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-scala Querydsl - Scala support jar @@ -25,7 +25,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} @@ -44,13 +44,13 @@ - com.mysema.querydsl + com.querydsl querydsl-sql ${project.version} provided - com.mysema.querydsl + com.querydsl querydsl-sql-codegen ${project.version} provided @@ -58,7 +58,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -66,7 +66,7 @@ - com.mysema.querydsl + com.querydsl querydsl-jpa ${project.version} test @@ -174,7 +174,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test test-jar - com.mysema.querydsl + com.querydsl querydsl-apt ${project.version} test @@ -86,7 +86,7 @@ target/generated-test-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor @@ -98,4 +98,4 @@ 1.11 - + diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index 3d97afed9f..85b06a6ca4 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -1,15 +1,15 @@ - + 4.0.0 - com.mysema.querydsl + com.querydsl querydsl-root - 3.6.1.BUILD-SNAPSHOT + 4.0.0.BUILD-SNAPSHOT ../querydsl-root/pom.xml - com.mysema.querydsl + com.querydsl querydsl-sql-codegen Querydsl - SQL codegen support SQL codegen support for Querydsl @@ -21,17 +21,17 @@ - com.mysema.querydsl + com.querydsl querydsl-codegen ${project.version} - com.mysema.querydsl + com.querydsl querydsl-sql ${project.version} - com.mysema.querydsl + com.querydsl querydsl-spatial ${project.version} @@ -56,7 +56,7 @@ - com.mysema.querydsl + com.querydsl querydsl-sql ${project.version} test @@ -121,7 +121,7 @@ - com.mysema.querydsl + com.querydsl querydsl-core ${project.version} test @@ -191,7 +191,7 @@ @@ -220,7 +220,7 @@ import com.mysema.query.annotations.Config; target/generated-sources/java - com.mysema.query.apt.jpa.JPAAnnotationProcessor + com.querydsl.apt.jpa.JPAAnnotationProcessor true @@ -305,7 +305,7 @@ public static BooleanPath isManagedBy(QUser user, User other) { @@ -385,7 +385,7 @@ public class QTimestamp extends DateTimePath { - To actually create the types use the com.mysema.query.apt.QuerydslAnnotationProcessor. + To actually create the types use the com.querydsl.apt.QuerydslAnnotationProcessor. In Maven you do it like this: @@ -405,7 +405,7 @@ public class QTimestamp extends DateTimePath { target/generated-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor @@ -431,7 +431,7 @@ public class QTimestamp extends DateTimePath { To make GenericExporter available add a dependency to the querydsl-codegen module to your project, or to be more precise - com.mysema.querydsl:querydsl-codegen:${querydsl.version}. + com.querydsl:querydsl-codegen:${querydsl.version}. Below is an example for JPA @@ -527,7 +527,7 @@ exporter.export(DomainClass.class.getPackage()); ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} @@ -637,12 +637,12 @@ exporter.export(DomainClass.class.getPackage()); ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} - com.mysema.querydsl + com.querydsl querydsl-scala ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml index 3e0f166a45..5588651ad3 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml @@ -14,7 +14,7 @@ Complex predicates - To construct complex boolean expressions, use the com.mysema.query.BooleanBuilder class. It + To construct complex boolean expressions, use the com.querydsl.core.BooleanBuilder class. It implements Predicate and can be used in cascaded form: @@ -41,7 +41,7 @@ public List getCustomer(String... names) { Dynamic expressions - The com.mysema.query.support.Expressions + The com.querydsl.core.support.Expressions class is a static factory class for dynamic expression construction. The factory methods are named by the returned type and are mostly self-documenting. @@ -82,7 +82,7 @@ Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant); also a more fluent API for dynamic path creation. - For dynamic path generation the com.mysema.query.types.path.PathBuilder class can be used. It extends + For dynamic path generation the com.querydsl.core.types.path.PathBuilder class can be used. It extends EntityPathBase and can be used as an alternative to class generation and alias-usage for path generation. @@ -184,9 +184,9 @@ Expression cases = customer.annualSpending To avoid a generic signature in expression types the type hierarchies are flattened. The result is that all generated query types are direct subclasses of - com.mysema.query.types.path.EntityPathBase + com.querydsl.core.types.path.EntityPathBase or - com.mysema.query.types.path.BeanPath + com.querydsl.core.types.path.BeanPath and cannot be directly cast to their logical supertypes. diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml index cf0048dc79..157518db6b 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/result-handling.xml @@ -5,19 +5,19 @@ Querydsl provides two ways to customize results, FactoryExpressions for row based transformation and ResultTransformer for aggregation. - The com.mysema.query.types.FactoryExpression interface is used for Bean creation, + The com.querydsl.core.types.FactoryExpression interface is used for Bean creation, constructor invocation and for the creation of more complex objects. The functionality of the FactoryExpression implementations of Querydsl can be accessed via the - com.mysema.query.types.Projections class. + com.querydsl.core.types.Projections class. - For the com.mysema.query.ResultTransformer interface GroupBy is the + For the com.querydsl.core.ResultTransformer interface GroupBy is the main implementation. Returning multiple columns - Since Querydsl 3.0 the default type for multi-column results is com.mysema.query.Tuple. + Since Querydsl 3.0 the default type for multi-column results is com.querydsl.core.Tuple. Tuple provides provides a typesafe Map like interface to access column data from a Tuple row object. dtos = query.from(customer) The - com.mysema.query.group.GroupBy + com.querydsl.core.group.GroupBy class provides aggregation functionality which can be used to aggregate query results in memory. Below are some usage examples. @@ -150,7 +150,7 @@ List dtos = query.from(customer) > results = query.from(post, comment) .where(comment.post.id.eq(post.id)) @@ -177,7 +177,7 @@ Map results = query.from(post, comment) More examples can be found here . diff --git a/querydsl-docs/src/main/docbook/en-US/content/intro.xml b/querydsl-docs/src/main/docbook/en-US/content/intro.xml index e47c81a607..67577921c9 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/intro.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/intro.xml @@ -51,8 +51,8 @@ To get an impression of the expressivity of the Querydsl query and expression types go to - the javadocs and explore com.mysema.query.Query, com.mysema.query.Projectable - and com.mysema.query.types.Expression. + the javadocs and explore com.querydsl.core.Query, com.querydsl.core.Projectable + and com.querydsl.core.types.Expression. diff --git a/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml b/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml index 36a82fec98..d0954097aa 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/troubleshooting.xml @@ -15,20 +15,20 @@ stacktrace: (APTTypeModel.java:55) - at com.mysema.query.apt.APTTypeModel.get(APTTypeModel.java:48) - at com.mysema.query.apt.Processor$2.visitType(Processor.java:114) + at com.querydsl.apt.APTTypeModel.(APTTypeModel.java:55) + at com.querydsl.apt.APTTypeModel.get(APTTypeModel.java:48) + at com.querydsl.apt.Processor$2.visitType(Processor.java:114) ... 35 more ]]> @@ -59,7 +59,7 @@ Caused by: java.lang.IllegalArgumentException: Insufficient type arguments for L An easy to use solution is to initialize the classes in a single thread before they are used in different threads. - The com.mysema.util.ClassPathUtils class can be used for that like this: + The com.querydsl.core.util.ClassPathUtils class can be used for that like this: @@ -136,14 +136,14 @@ for (String name : from(cat,cats) - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-collections ${querydsl.version} @@ -160,7 +160,7 @@ for (String name : from(cat,cats) If you are not using JPA or JDO you can generate expression types for your domain types by annotating them with the - com.mysema.query.annotations.QueryEntity + com.querydsl.core.annotations.QueryEntity annotation and adding the following plugin configuration into your Maven configuration (pom.xml): @@ -181,7 +181,7 @@ for (String name : from(cat,cats) target/generated-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor @@ -207,7 +207,7 @@ for (String name : from(cat,cats) - + @@ -239,7 +239,7 @@ for (String name : from(cat,cats) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml index 924be21fc0..76f6d76e08 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jdo.xml @@ -20,14 +20,14 @@ - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-jdo ${querydsl.version} @@ -61,7 +61,7 @@ target/generated-sources/java - com.mysema.query.apt.jdo.JDOAnnotationProcessor + com.querydsl.apt.jdo.JDOAnnotationProcessor @@ -107,7 +107,7 @@ - + @@ -390,10 +390,10 @@ query.from(department) represents the following native JDO query -SELECT this FROM com.mysema.query.jdoql.models.company.Department -WHERE this.employees.size() == -(SELECT max(d.employees.size()) FROM com.mysema.query.jdoql.models.company.Department d) - + SELECT this FROM com.querydsl.jdo.models.company.Department + WHERE this.employees.size() == + (SELECT max(d.employees.size()) FROM com.querydsl.jdo.models.company.Department d) + Another example @@ -411,10 +411,10 @@ query.from(employee) which represents the following native JDO query -SELECT this FROM com.mysema.query.jdoql.models.company.Employee -WHERE this.weeklyhours > -(SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager) - + SELECT this FROM com.querydsl.jdo.models.company.Employee + WHERE this.weeklyhours > + (SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager) + @@ -434,7 +434,7 @@ WHERE this.weeklyhours > ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml index a7cbde8014..77e895db85 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml @@ -26,14 +26,14 @@ - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-jpa ${querydsl.version} @@ -65,7 +65,7 @@ target/generated-sources/java - com.mysema.query.apt.jpa.JPAAnnotationProcessor + com.querydsl.apt.jpa.JPAAnnotationProcessor @@ -84,7 +84,7 @@ If you use Hibernate annotations in your domain types you should use the APT processor - com.mysema.query.apt.hibernate.HibernateAnnotationProcessor + com.querydsl.apt.hibernate.HibernateAnnotationProcessor instead. @@ -118,7 +118,7 @@ - + @@ -149,9 +149,9 @@ If you are using Querydsl JPA with Spring Roo you can replace - com.mysema.query.apt.jpa.JPAAnnotationProcessor + com.querydsl.apt.jpa.JPAAnnotationProcessor with - com.mysema.query.apt.roo.RooAnnotationProcessor + com.querydsl.apt.roo.RooAnnotationProcessor which will handle @RooJpaEntity and @RooJpaActiveRecord annotated classes instead of @@ -173,7 +173,7 @@ metadata to create your Querydsl model. - com.mysema.query.jpa.codegen.HibernateDomainExporter provides the + com.querydsl.jpa.codegen.HibernateDomainExporter provides the functionality for this: ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml index 35822df666..7b45aefb04 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/lucene.xml @@ -18,7 +18,7 @@ - com.mysema.querydsl + com.querydsl querydsl-lucene3 ${querydsl.version} @@ -34,7 +34,7 @@ - com.mysema.querydsl + com.querydsl querydsl-lucene4 ${querydsl.version} @@ -205,7 +205,7 @@ query Fuzzy searches Fuzzy searches can be expressed via fuzzyLike methods in the - com.mysema.query.lucene.LuceneExpressions class: + com.querydsl.lucene3.LuceneExpressions class: - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-mongodb ${querydsl.version} @@ -55,7 +55,7 @@ target/generated-sources/java - com.mysema.query.apt.morphia.MorphiaAnnotationProcessor + com.querydsl.apt.morphia.MorphiaAnnotationProcessor diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml index c02520c5b5..24266a95d4 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml @@ -10,7 +10,7 @@ - com.mysema.querydsl + com.querydsl querydsl-scala ${querydsl.version} @@ -77,7 +77,7 @@ map.get("X") map("X") The RichProjectable and RichSimpleProjectable wrappers should be used to enable Scala projections for Querydsl queries. - By importing the contents of com.mysema.query.scala.Helpers + By importing the contents of com.querydsl.scala.Helpers the needed implicit conversions become available. @@ -99,7 +99,7 @@ query.from(person).list(person.firstName, person.lastName, person.age) @@ -126,7 +126,7 @@ val directory = new java.io.File("target/jdbcgen1") val namingStrategy = new DefaultNamingStrategy() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") -exporter.setPackageName("com.mysema") +exporter.setPackageName("com.querydsl") exporter.setSchemaPattern("PUBLIC") exporter.setTargetFolder(directory) exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) @@ -142,7 +142,7 @@ val directory = new java.io.File("target/jdbcgen2") val namingStrategy = new DefaultNamingStrategy() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") -exporter.setPackageName("com.mysema") +exporter.setPackageName("com.querydsl") exporter.setSchemaPattern("PUBLIC") exporter.setTargetFolder(directory) exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) @@ -164,7 +164,7 @@ exporter.export(connection.getMetaData) The domain oriented queries are implemented as implicit conversions from RelationalPath instances into queries. This functionality can be made available by implementing the - com.mysema.query.scala.sql.SQLHelpers + com.querydsl.scala.sql.SQLHelpers trait in your service or DAO classes. @@ -195,7 +195,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) ]]> - See the signature of the com.mysema.query.scala.sql.RichSimpleQuery + See the signature of the com.querydsl.scala.sql.RichSimpleQuery class for details. @@ -215,7 +215,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} @@ -235,7 +235,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) 5.1.16 - com.mysema.querydsl + com.querydsl querydsl-scala ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml index 2b7f9fa910..b62eda16e3 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml @@ -21,7 +21,7 @@ - com.mysema.querydsl + com.querydsl querydsl-spatial ${querydsl.version} @@ -62,7 +62,7 @@ ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} ... diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index e23d8a4144..a63e93c216 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -16,13 +16,13 @@ - com.mysema.querydsl + com.querydsl querydsl-sql ${querydsl.version} - com.mysema.querydsl + com.querydsl querydsl-sql-codegen ${querydsl.version} provided @@ -53,7 +53,7 @@ ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} @@ -262,7 +262,7 @@ - com.mysema.query.sql.types.InputStreamType + com.querydsl.sql.types.InputStreamType ]]> @@ -356,7 +356,7 @@ Code generation via ANT - The ANT task com.mysema.query.sql.ant.AntMetaDataExporter + The ANT task com.querydsl.sql.codegen.ant.AntMetaDataExporter of the querydsl-sql module provides the same functionality as an ANT task. The configuration parameters of the task are the same as for the Maven plugin. @@ -398,8 +398,9 @@ exporter.export(conn.getMetaData()); Configuration - The configuration is done via the com.mysema.query.sql.Configuration class which takes the - Querydsl SQL dialect as an argument. For H2 you would create it like this + The configuration is done via the com.querydsl.sql.Configuration class which takes + the + Querydsl SQL dialect as an argument. For H2 you would create it like this - The class com.mysema.query.support.Expressions offers also other useful static methods for + The class com.querydsl.core.support.Expressions offers also other useful static methods for projections, operation and template creation. @@ -721,7 +722,7 @@ public class MySQLQuery extends AbstractSQLQuery { The flags are custom SQL snippets that can be inserted at specific points in the serialization. The supported positions are the enums of the - com.mysema.query.QueryFlag.Position enum class. + com.querydsl.core.QueryFlag.Position enum class. @@ -1114,7 +1115,7 @@ System.out.println(bindings.getSQL()); Querydsl SQL provides the possibility to declare custom type mappings for ResultSet/Statement interaction. The custom type mappings can be - declared in com.mysema.query.sql.Configuration instances, which are supplied as constructor + declared in com.querydsl.sql.Configuration instances, which are supplied as constructor arguments to the actual queries: diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml index 9e26ae7bc3..49fb9f656c 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/alias.xml @@ -43,8 +43,8 @@ for (String name : query.from($(c),cats) diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml index 05bbb1ba37..bc2f954401 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/codegen.xml @@ -11,7 +11,7 @@ 기본적으로 Querydsl은 처음 2레벨의 레퍼런스 프로퍼티만 초기화한다. 더 깊은 경로로 초기화해야 한다면, - com.mysema.query.annotations.QueryInit 애노테이션을 도메인 타입에 적용해야 한다. + com.querydsl.core.annotations.QueryInit 애노테이션을 도메인 타입에 적용해야 한다. 더 깊은 레벨로 초기화가 필요한 프로퍼티에 QueryInit 어노테이션을 적용한다. 다음은 적용 예를 보여주고 있다. @@ -117,9 +117,9 @@ public class User { @@ -212,7 +212,7 @@ import com.mysema.query.annotations.Config; target/generated-sources/java - com.mysema.query.apt.jpa.JPAAnnotationProcessor + com.querydsl.apt.jpa.JPAAnnotationProcessor true @@ -294,7 +294,7 @@ public static BooleanPath isManagedBy(QUser user, User other) { @@ -372,7 +372,7 @@ public class QTimestamp extends DateTimePath { - 실제로 타입을 생성하려면 com.mysema.query.apt.QuerydslAnnotationProcessor를 사용한다. + 실제로 타입을 생성하려면 com.querydsl.apt.QuerydslAnnotationProcessor를 사용한다. 메이븐 설정 방법은 다음과 같다. @@ -392,7 +392,7 @@ public class QTimestamp extends DateTimePath { target/generated-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor @@ -417,7 +417,7 @@ public class QTimestamp extends DateTimePath { GenericExporter를 사용하려면 querydsl-codegen 모듈을 의존에 추가해주어야 한다. - (더 정확하게는 com.mysema.querydsl:querydsl-codegen:${querydsl.version} 모듈) + (더 정확하게는 com.querydsl:querydsl-codegen:${querydsl.version} 모듈) 다음은 JPA를 위한 예제다. @@ -513,7 +513,7 @@ exporter.export(DomainClass.class.getPackage()); ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} @@ -622,12 +622,12 @@ exporter.export(DomainClass.class.getPackage()); ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} - com.mysema.querydsl + com.querydsl querydsl-scala ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml index 27b6cf6eeb..ec06492977 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/creating-queries.xml @@ -12,7 +12,7 @@ 복합 조건(complext predicates) - 복합 불리언 표현식을 작성하려면 com.mysema.query.BooleanBuilder 클래스를 사용한다. + 복합 불리언 표현식을 작성하려면 com.querydsl.core.BooleanBuilder 클래스를 사용한다. 이 클래스는 Predicate을 구현하고 있고 메서드 체인 형식으로 사용할 수 있다. @@ -40,7 +40,7 @@ public List getCustomer(String... names) { 동적 표현식 - com.mysema.query.support.Expressions 클래스는 동적인 표현식 생성을 위한 정적 팩토리 클래스다. + com.querydsl.core.support.Expressions 클래스는 동적인 표현식 생성을 위한 정적 팩토리 클래스다. 팩토리 메서드는 리턴 타입에 따라 이름을 지었으므로 쉽게 유추할 수 있다. @@ -77,7 +77,7 @@ Expressions.predicate(Ops.STARTS_WITH, personFirstName, constant); Expressions 기반의 표현식 생성 외에 Querydsl은 동적 경로 생성을 위한 더 표현력이 좋은 API를 제공한다. - 동적 경로 생성을 위해 com.mysema.query.types.path.PathBuilder 클래스를 사용할 수 있다. + 동적 경로 생성을 위해 com.querydsl.core.types.path.PathBuilder 클래스를 사용할 수 있다. 이 클래스는 EntityPathBase 클래스를 확장하고 있고 경로 생성을 위해 클래스 생성과 별칭 사용 대신에 사용가능하다. @@ -164,7 +164,7 @@ Expression cases = customer.annualSpending 표현식 타입에서 지네릭 시그너처를 피하기 위해, 타입 계층을 단순화시킨다. 그 결과로 모든 생성된 쿼리 타입은 - com.mysema.query.types.path.EntityPathBasecom.mysema.query.types.path.BeanPath를 + com.querydsl.core.types.path.EntityPathBasecom.querydsl.core.types.path.BeanPath를 직접 상속받으며, 논리적인 상위 타입으로 타입 변환할 수 없다. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml index 6e51b1df93..5a82c376c1 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/general/result-handling.xml @@ -5,17 +5,17 @@ Querydsl은 결과 처리를 커스터마이징 하기 위해 행 기반 변환을 위한 FactoryExpressions과 집합을 위한 ResultTransformer를 제공하고 있다. - com.mysema.query.types.FactoryExpression 인터페이스는 빈 생성, 생성자 호출 - 그리고 더 복잡한 객체를 생성하기 위해 사용된다. com.mysema.query.types.Projections 클래스를 + com.querydsl.core.types.FactoryExpression 인터페이스는 빈 생성, 생성자 호출 + 그리고 더 복잡한 객체를 생성하기 위해 사용된다. com.querydsl.core.types.Projections 클래스를 이용해서 FactoryExpression 구현체 기능에 접근할 수 있다. - com.mysema.query.ResultTransformer 인터페이스의 주요 구현체는 GroupBy 클래스이다. + com.querydsl.core.ResultTransformer 인터페이스의 주요 구현체는 GroupBy 클래스이다. 다중 컬럼 리턴 - Querydsl 3.0 부터 다중 컬럼 결과를 위한 기본 타입은 com.mysema.query.Tuple 이다. + Querydsl 3.0 부터 다중 컬럼 결과를 위한 기본 타입은 com.querydsl.core.Tuple 이다. Tuple은 타입에 안전한 Map을 제공하고, 이를 통해 Tuple 행 객체로부터 컬럼 데이터에 접근할 수 있다. dtos = query.from(customer) 결과 집합(aggregation) - com.mysema.query.group.GroupBy 클래스는 메모리에서 쿼리 결과에 대한 집합 연산을 수행하는 + com.querydsl.core.group.GroupBy 클래스는 메모리에서 쿼리 결과에 대한 집합 연산을 수행하는 집합 함수를 제공한다. 다음은 사용 예이다. @@ -141,7 +141,7 @@ List dtos = query.from(customer) > results = query.from(post, comment) .where(comment.post.id.eq(post.id)) @@ -166,7 +166,7 @@ Map results = query.from(post, comment) 더 많은 예제는 여기를 참고한다. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml b/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml index 13a305c986..5f92e87eca 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/intro.xml @@ -50,8 +50,8 @@ - Javadoc에서 com.mysema.query.Query, com.mysema.query.Projectable 그리고 - com.mysema.query.types.Expression의 내용을 보면 Querydsl 쿼리와 표현 타입이 제공하는 + Javadoc에서 com.querydsl.core.Query, com.querydsl.core.Projectable 그리고 + com.querydsl.query.types.Expression의 내용을 보면 Querydsl 쿼리와 표현 타입이 제공하는 표현력을 알게 될 것이다. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml b/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml index 5b3bb0c605..1a9f5004ea 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/troubleshooting.xml @@ -13,20 +13,20 @@ 올바르게 인코딩되지 않은 필드나 getter를 사용할 경우, 다음과 같은 에러가 발생한다. (APTTypeModel.java:55) - at com.mysema.query.apt.APTTypeModel.get(APTTypeModel.java:48) - at com.mysema.query.apt.Processor$2.visitType(Processor.java:114) + at com.querydsl.apt.APTTypeModel.(APTTypeModel.java + at com.querydsl.apt.APTTypeModel.get(APTTypeModel:48) + at com.querydsl.apt.Processor$2.visitType(Processor.java:114) ... 35 more ]]> @@ -55,7 +55,7 @@ Caused by: java.lang.IllegalArgumentException: Insufficient type arguments for L 이에 대한 가장 쉬운 해결책은 멀티쓰레드 환경에서 사용되기 전에 단일 쓰레드에서 클래스를 초기화하는 것이다. - 이런 목적으로 com.mysema.util.ClassPathUtils 클래스를 사용할 수 있다. + 이런 목적으로 com.querydsl.core.util.ClassPathUtils 클래스를 사용할 수 있다. @@ -125,14 +125,14 @@ for (String name : from(cat,cats) - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-collections ${querydsl.version} @@ -146,7 +146,7 @@ for (String name : from(cat,cats) - JPA나 JDO를 사용하지 않는다면, 도메인 타입에 com.mysema.query.annotations.QueryEntity + JPA나 JDO를 사용하지 않는다면, 도메인 타입에 com.querydsl.core.annotations.QueryEntity 애노테이션을 적용하고 메이븐 설정(pom.xml)에 다음 플러그인 설정을 추가함으로써 표현식 타입을 생성할 수 있다. @@ -167,7 +167,7 @@ for (String name : from(cat,cats) target/generated-sources/java - com.mysema.query.apt.QuerydslAnnotationProcessor + com.querydsl.apt.QuerydslAnnotationProcessor @@ -192,7 +192,7 @@ for (String name : from(cat,cats) - + @@ -220,7 +220,7 @@ for (String name : from(cat,cats) diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml index b12bb0f802..dc4d132b7f 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jdo.xml @@ -18,14 +18,14 @@ - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-jdo ${querydsl.version} @@ -57,7 +57,7 @@ target/generated-sources/java - com.mysema.query.apt.jdo.JDOAnnotationProcessor + com.querydsl.apt.jdo.JDOAnnotationProcessor @@ -101,7 +101,7 @@ - + @@ -370,10 +370,10 @@ query.from(department) 위 코드는 다음의 네이티브 JDO 쿼리를 표현한다. -SELECT this FROM com.mysema.query.jdoql.models.company.Department -WHERE this.employees.size() == -(SELECT max(d.employees.size()) FROM com.mysema.query.jdoql.models.company.Department d) - + SELECT this FROM com.querydsl.jdo.models.company.Department + WHERE this.employees.size() == + (SELECT max(d.employees.size()) FROM com.querydsl.jdo.models.company.Department d) + 다른 예제 @@ -391,10 +391,10 @@ query.from(employee) 위 코드는 다음의 네이티브 JDO 쿼리를 표현한다. -SELECT this FROM com.mysema.query.jdoql.models.company.Employee -WHERE this.weeklyhours > -(SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager) - + SELECT this FROM com.querydsl.jdo.models.company.Employee + WHERE this.weeklyhours > + (SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager) + @@ -416,7 +416,7 @@ WHERE this.weeklyhours > ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml index 42f601cdf1..6f85f51792 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml @@ -24,14 +24,14 @@ - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-jpa ${querydsl.version} @@ -63,7 +63,7 @@ target/generated-sources/java - com.mysema.query.apt.jpa.JPAAnnotationProcessor + com.querydsl.apt.jpa.JPAAnnotationProcessor @@ -81,7 +81,7 @@ 도메인 타입으로 Hibernate 애노테이션을 사용하면, APT 프로세서로 - com.mysema.query.apt.hibernate.HibernateAnnotationProcessor를 사용해야 한다. + com.querydsl.apt.hibernate.HibernateAnnotationProcessor를 사용해야 한다. @@ -115,7 +115,7 @@ - + @@ -141,8 +141,8 @@ 스프링 Roo에서 Querydsl JPA를 사용한다면, - com.mysema.query.apt.jpa.JPAAnnotationProcessor 대신 - com.mysema.query.apt.roo.RooAnnotationProcessor를 사용할 수 있다. + com.querydsl.apt.jpa.JPAAnnotationProcessor 대신 + com.querydsl.apt.roo.RooAnnotationProcessor를 사용할 수 있다. RooAnnotationProcessor는 @Entity가 적용된 클래스 대신 @RooJpaEntity@RooJpaActiveRecord 애노테이션이 적용된 클래스를 처리한다. @@ -164,7 +164,7 @@ - com.mysema.query.jpa.codegen.HibernateDomainExporter가 이 기능을 제공한다. + com.querydsl.jpa.codegen.HibernateDomainExporter가 이 기능을 제공한다. ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml index 691699dc3b..b1ed94965b 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/lucene.xml @@ -17,7 +17,7 @@ - com.mysema.querydsl + com.querydsl querydsl-lucene3 ${querydsl.version} @@ -33,7 +33,7 @@ - com.mysema.querydsl + com.querydsl querydsl-lucene4 ${querydsl.version} @@ -191,7 +191,7 @@ query 퍼지(fuzzy) 검색 - com.mysema.query.lucene.LuceneExpressions 클래스에서 정의된 + com.querydsl.lucene3.LuceneExpressions 클래스에서 정의된 fuzzyLike 메서드를 이용해서 퍼지 검색을 할 수 있다. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml index fc325e7933..a5c7c6b60b 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml @@ -15,14 +15,14 @@ - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-mongodb ${querydsl.version} @@ -54,7 +54,7 @@ target/generated-sources/java - com.mysema.query.apt.morphia.MorphiaAnnotationProcessor + com.querydsl.apt.morphia.MorphiaAnnotationProcessor diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/scala.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/scala.xml index f2f3c39761..271c4ebc80 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/scala.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/scala.xml @@ -10,7 +10,7 @@ - com.mysema.querydsl + com.querydsl querydsl-scala ${querydsl.version} @@ -77,7 +77,7 @@ map.get("X") map("X") Querydsl 쿼리에서 Scala 프로젝션을 활성화하려면 RichProjectableRichSimpleProjectable 래퍼를 사용해야 한다. - com.mysema.query.scala.Helpers를 임포트 함으로써 필요한 임의 변환이 가능해진다. + com.querydsl.scala.Helpers를 임포트 함으로써 필요한 임의 변환이 가능해진다. @@ -96,7 +96,7 @@ query.from(person).list(person.firstName, person.lastName, person.age) @@ -122,7 +122,7 @@ val directory = new java.io.File("target/jdbcgen1") val namingStrategy = new DefaultNamingStrategy() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") -exporter.setPackageName("com.mysema") +exporter.setPackageName("com.querydsl") exporter.setSchemaPattern("PUBLIC") exporter.setTargetFolder(directory) exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) @@ -138,7 +138,7 @@ val directory = new java.io.File("target/jdbcgen2") val namingStrategy = new DefaultNamingStrategy() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") -exporter.setPackageName("com.mysema") +exporter.setPackageName("com.querydsl") exporter.setSchemaPattern("PUBLIC") exporter.setTargetFolder(directory) exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) @@ -158,7 +158,7 @@ exporter.export(connection.getMetaData) RelationalPath 인스턴스를 쿼리로 임의 변환해서 도메인 지향 쿼리를 구현한다. - 서비스나 DAO 클래스가 com.mysema.query.scala.sql.SQLHelpers 트레잇을 상속하면 + 서비스나 DAO 클래스가 com.querydsl.scala.sql.SQLHelpers 트레잇을 상속하면 이 기능을 사용할 수 있다. @@ -187,7 +187,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) ]]> - 자세한 내용은 com.mysema.query.scala.sql.RichSimpleQuery의 시그너처를 참고하기 바란다. + 자세한 내용은 com.querydsl.scala.sql.RichSimpleQuery의 시그너처를 참고하기 바란다. @@ -206,7 +206,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} @@ -226,7 +226,7 @@ Employee.select({ e => e.firstName }, { e => e.lastName }) 5.1.16 - com.mysema.querydsl + com.querydsl querydsl-scala ${querydsl.version} diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index a88ca14d7a..367b2cc7e8 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -15,13 +15,13 @@ - com.mysema.querydsl + com.querydsl querydsl-sql ${querydsl.version} - com.mysema.querydsl + com.querydsl querydsl-sql-codegen ${querydsl.version} provided @@ -50,7 +50,7 @@ ... - com.mysema.querydsl + com.querydsl querydsl-maven-plugin ${querydsl.version} @@ -248,7 +248,7 @@ - com.mysema.query.sql.types.InputStreamType + com.querydsl.sql.types.InputStreamType ]]> @@ -342,7 +342,7 @@ ANT를 통한 코드 생성 - Querydsl-sql 모듈이 제공하는 com.mysema.query.sql.ant.AntMetaDataExporter + Querydsl-sql 모듈이 제공하는 com.querydsl.sql.codegen.ant.AntMetaDataExporter ANT 태스크는 ANT 태스크(어떤 ANT 태스크?)와 같은 기능을 제공한다. 태스크의 설정 파라미터느는 메이븐 플러그인과 동일하다. @@ -384,7 +384,7 @@ exporter.export(conn.getMetaData()); 설정 - com.mysema.query.sql.Configuration 클래스를 이용해서 설정하며, + com.querydsl.sql.Configuration 클래스를 이용해서 설정하며, Configuration 클래스는 생성자 인자로 Querydsl SQL Dialect를 취한다. 예를 들어, H2 DB 사용시 다음과 같이 생성한다. @@ -659,7 +659,7 @@ query.list(Expressions.constant(1), Expressions.constant("abc")); ]]> - com.mysema.query.support.Expressions 클래스는 + com.querydsl.core.support.Expressions 클래스는 프로젝션, 오퍼레이션, 템플릿 생성을 위한 유용한 정적 메서드도 제공한다. @@ -703,7 +703,7 @@ public class MySQLQuery extends AbstractSQLQuery { 플래그는 직렬화 과정에서 특정 위치에 삽입될 수 있는 커스텀 SQL 부분 코드다. - com.mysema.query.QueryFlag.Position 열거 타입에 지원되는 위치가 정의되어 있다. + com.querydsl.core.QueryFlag.Position 열거 타입에 지원되는 위치가 정의되어 있다. @@ -1051,7 +1051,7 @@ System.out.println(bindings.getSQL()); 커스텀 타입 Querydsl SQL은 ResultSet/Statement에서 커스텀 타입 매핑을 지원한다. - com.mysema.query.sql.Configuration 객체를 이용해서 커스텀 카입 매핑을 등록한다. + com.querydsl.sql.Configuration 객체를 이용해서 커스텀 카입 매핑을 등록한다. Configuration 객체는 실제 쿼리의 생성자 인자로 제공된다. diff --git a/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/package-info.java b/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/package-info.java deleted file mode 100644 index 245cd2a63c..0000000000 --- a/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/package-info.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.mysema.query.hibernate.search; diff --git a/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/SearchQuery.java b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java similarity index 90% rename from querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/SearchQuery.java rename to querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java index cefc01df49..0cacad1ddc 100644 --- a/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/SearchQuery.java +++ b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; import java.util.List; @@ -23,18 +23,18 @@ import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.QueryMetadata; -import com.mysema.query.QueryModifiers; -import com.mysema.query.SearchResults; -import com.mysema.query.SimpleProjectable; -import com.mysema.query.SimpleQuery; -import com.mysema.query.lucene.LuceneSerializer; -import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.ParamExpression; -import com.mysema.query.types.Predicate; +import com.querydsl.core.NonUniqueResultException; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.QueryModifiers; +import com.querydsl.core.SearchResults; +import com.querydsl.core.SimpleProjectable; +import com.querydsl.core.SimpleQuery; +import com.querydsl.lucene3.LuceneSerializer; +import com.querydsl.core.support.QueryMixin; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.ParamExpression; +import com.querydsl.core.types.Predicate; /** * SearchQuery is a Query implementation for Hibernate Search diff --git a/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/SearchSerializer.java b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchSerializer.java similarity index 92% rename from querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/SearchSerializer.java rename to querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchSerializer.java index 880c147b21..6b7129c986 100644 --- a/querydsl-hibernate-search/src/main/java/com/mysema/query/hibernate/search/SearchSerializer.java +++ b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchSerializer.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; import org.hibernate.search.annotations.Field; -import com.mysema.query.lucene.LuceneSerializer; -import com.mysema.query.types.Path; +import com.querydsl.lucene3.LuceneSerializer; +import com.querydsl.core.types.Path; /** * SearchSerializer extends the LuceneSerializer to use {@link Field} annotation data from paths diff --git a/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/package-info.java b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/package-info.java new file mode 100644 index 0000000000..56e60beecd --- /dev/null +++ b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/package-info.java @@ -0,0 +1,15 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.hibernate.search; diff --git a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/AbstractQueryTest.java b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/AbstractQueryTest.java similarity index 94% rename from querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/AbstractQueryTest.java rename to querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/AbstractQueryTest.java index 420b180163..816efc019a 100644 --- a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/AbstractQueryTest.java +++ b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/AbstractQueryTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; import java.io.File; import java.io.IOException; @@ -29,7 +29,7 @@ import org.junit.Before; import org.junit.BeforeClass; -import com.mysema.util.FileUtils; +import com.querydsl.core.util.FileUtils; public abstract class AbstractQueryTest { @@ -38,7 +38,7 @@ public abstract class AbstractQueryTest { @BeforeClass public static void setUpClass() throws IOException{ FileUtils.delete(new File("target/derbydb")); - FileUtils.delete(new File("target/lucene")); + FileUtils.delete(new File("target/lucene3")); AnnotationConfiguration cfg = new AnnotationConfiguration(); cfg.addAnnotatedClass(User.class); Properties props = new Properties(); diff --git a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/QUser.java b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/QUser.java similarity index 85% rename from querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/QUser.java rename to querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/QUser.java index c6284d61b6..285c4e0bc7 100644 --- a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/QUser.java +++ b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/QUser.java @@ -11,11 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; -import com.mysema.query.types.PathMetadataFactory; -import com.mysema.query.types.path.EntityPathBase; -import com.mysema.query.types.path.StringPath; +import com.querydsl.core.types.PathMetadataFactory; +import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.path.StringPath; public class QUser extends EntityPathBase { diff --git a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/SearchQueryTest.java b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/SearchQueryTest.java similarity index 96% rename from querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/SearchQueryTest.java rename to querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/SearchQueryTest.java index a299836c65..0adafd5379 100644 --- a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/SearchQueryTest.java +++ b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/SearchQueryTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -26,10 +26,10 @@ import org.junit.Ignore; import org.junit.Test; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.SearchResults; -import com.mysema.query.types.OrderSpecifier; -import com.mysema.query.types.expr.BooleanExpression; +import com.querydsl.core.NonUniqueResultException; +import com.querydsl.core.SearchResults; +import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.expr.BooleanExpression; public class SearchQueryTest extends AbstractQueryTest { diff --git a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/SearchSerializerTest.java b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/SearchSerializerTest.java similarity index 90% rename from querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/SearchSerializerTest.java rename to querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/SearchSerializerTest.java index af73823364..0670fda693 100644 --- a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/SearchSerializerTest.java +++ b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/SearchSerializerTest.java @@ -11,14 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; import static org.junit.Assert.*; import org.junit.Test; -import com.mysema.query.hibernate.search.SearchSerializer; - public class SearchSerializerTest { @Test diff --git a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/User.java b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/User.java similarity index 98% rename from querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/User.java rename to querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/User.java index 272a7c0cfc..1863a41c9c 100644 --- a/querydsl-hibernate-search/src/test/java/com/mysema/query/hibernate/search/User.java +++ b/querydsl-hibernate-search/src/test/java/com/querydsl/hibernate/search/User.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.hibernate.search; +package com.querydsl.hibernate.search; import java.io.Serializable; diff --git a/querydsl-jdo/README.md b/querydsl-jdo/README.md index bfd46dcea5..6e7c980339 100644 --- a/querydsl-jdo/README.md +++ b/querydsl-jdo/README.md @@ -8,14 +8,14 @@ The JDO module provides integration with the JDO API. ```XML - com.mysema.querydsl + com.querydsl querydsl-apt ${querydsl.version} provided - com.mysema.querydsl + com.querydsl querydsl-jdo ${querydsl.version} @@ -45,7 +45,7 @@ And now, configure the Maven APT plugin which generates the query types used by target/generated-sources/java - com.mysema.query.apt.jdo.JDOAnnotationProcessor + com.querydsl.apt.jdo.JDOAnnotationProcessor diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index f708b7657d..ac5e43c36d 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -158,7 +158,7 @@ ${dn.plugin.version} target/test-classes - com/mysema/query/jdo/test/domain/*.class + com/querydsl/jdo/test/domain/*.class src/test/resources/log4j.properties true src/test/resources/datanucleus.properties @@ -226,7 +226,7 @@ - com/mysema/query/PackageVerification.java + com/querydsl/jdo/PackageVerification.java diff --git a/querydsl-jdo/src/apt/META-INF/services/javax.annotation.processing.Processor b/querydsl-jdo/src/apt/META-INF/services/javax.annotation.processing.Processor index 390c5f8f7f..ff511957d0 100644 --- a/querydsl-jdo/src/apt/META-INF/services/javax.annotation.processing.Processor +++ b/querydsl-jdo/src/apt/META-INF/services/javax.annotation.processing.Processor @@ -1 +1 @@ -com.mysema.query.apt.jdo.JDOAnnotationProcessor \ No newline at end of file +com.querydsl.apt.jdo.JDOAnnotationProcessor \ No newline at end of file diff --git a/querydsl-jdo/src/main/assembly.xml b/querydsl-jdo/src/main/assembly.xml index 8f6d041068..6166d16b40 100644 --- a/querydsl-jdo/src/main/assembly.xml +++ b/querydsl-jdo/src/main/assembly.xml @@ -18,8 +18,8 @@ compile cglib:cglib - com.mysema.querydsl:querydsl-sql - com.mysema.querydsl:querydsl-jdo + com.querydsl:querydsl-sql + com.querydsl:querydsl-jdo org.slf4j:slf4j-api org.slf4j:slf4j-log4j12 @@ -28,7 +28,7 @@ true provided - com.mysema.querydsl:* + com.querydsl:* com.mysema.codegen:* diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java similarity index 97% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java index 5d11d7f6dd..b65354eea2 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.annotation.Nullable; import javax.jdo.PersistenceManager; @@ -23,11 +23,11 @@ import com.google.common.collect.Lists; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; -import com.mysema.query.*; -import com.mysema.query.support.ProjectableQuery; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Expression; -import com.mysema.query.types.FactoryExpression; +import com.querydsl.core.*; +import com.querydsl.core.support.ProjectableQuery; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.FactoryExpression; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOSubQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java similarity index 86% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOSubQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java index 5c07f535ec..3ad4db6087 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/AbstractJDOSubQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java @@ -11,14 +11,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.QueryMetadata; -import com.mysema.query.support.DetachableQuery; -import com.mysema.query.types.CollectionExpression; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Expression; +import com.querydsl.core.DefaultQueryMetadata; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.support.DetachableQuery; +import com.querydsl.core.types.CollectionExpression; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.Expression; /** * Abstract superclass for SubQuery implementations diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOCommonQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOCommonQuery.java similarity index 89% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOCommonQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOCommonQuery.java index 4ca54bcf49..5b3a9aa02a 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOCommonQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOCommonQuery.java @@ -11,10 +11,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; -import com.mysema.query.Query; -import com.mysema.query.types.EntityPath; +import com.querydsl.core.Query; +import com.querydsl.core.types.EntityPath; /** * JDOCommonQuery is a parent interface for JDOQLQuery and JDOSubQuery diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLQuery.java similarity index 96% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLQuery.java index 5c515fdbd9..c1ce4adac1 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLQuery.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.jdo.PersistenceManager; import java.io.Closeable; -import com.mysema.query.Projectable; +import com.querydsl.core.Projectable; /** * Query interface for JDOQL queries diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java similarity index 97% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java index 921d1ddccf..c388d20212 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLSerializer.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.annotation.Nullable; import java.util.*; @@ -19,11 +19,11 @@ import com.google.common.collect.ImmutableList; import com.google.common.primitives.Primitives; -import com.mysema.query.JoinExpression; -import com.mysema.query.QueryMetadata; -import com.mysema.query.support.SerializerBase; -import com.mysema.query.types.*; -import com.mysema.query.types.expr.Param; +import com.querydsl.core.JoinExpression; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.support.SerializerBase; +import com.querydsl.core.types.*; +import com.querydsl.core.types.expr.Param; /** * JDOQLSerializer serializes Querydsl queries and expressions into JDOQL strings diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java similarity index 93% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java index 8a6873860f..0e90338daf 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQLTemplates.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java @@ -11,10 +11,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; -import com.mysema.query.types.JavaTemplates; -import com.mysema.query.types.Ops; +import com.querydsl.core.types.JavaTemplates; +import com.querydsl.core.types.Ops; /** * JDOQLTemplates provides patterns for JDOQL serialization diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQuery.java similarity index 96% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQuery.java index cd08e6a8d1..c8629db80c 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQuery.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.jdo.PersistenceManager; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.QueryMetadata; +import com.querydsl.core.DefaultQueryMetadata; +import com.querydsl.core.QueryMetadata; /** * JDOQuery is the default implementation of the JDOQLQuery interface diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQueryFactory.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryFactory.java similarity index 89% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQueryFactory.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryFactory.java index 3406d049ad..c9a4877c32 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQueryFactory.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryFactory.java @@ -11,14 +11,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.inject.Provider; import javax.jdo.PersistenceManager; -import com.mysema.query.QueryFactory; -import com.mysema.query.jdo.dml.JDODeleteClause; -import com.mysema.query.types.EntityPath; +import com.querydsl.core.QueryFactory; +import com.querydsl.jdo.dml.JDODeleteClause; +import com.querydsl.core.types.EntityPath; /** * Factory class for query and DML clause creation diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQueryMixin.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java similarity index 81% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQueryMixin.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java index 143080b0a2..e3957343e3 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOQueryMixin.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java @@ -11,18 +11,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; -import com.mysema.query.QueryMetadata; -import com.mysema.query.support.CollectionAnyVisitor; -import com.mysema.query.support.Context; -import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.Ops; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.PredicateOperation; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.support.CollectionAnyVisitor; +import com.querydsl.core.support.Context; +import com.querydsl.core.support.QueryMixin; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.ExpressionUtils; +import com.querydsl.core.types.Ops; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.Predicate; +import com.querydsl.core.types.PredicateOperation; /** * JDOQueryMixin extends {@link QueryMixin} to provide module specific extensions diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOSubQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOSubQuery.java similarity index 81% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOSubQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/JDOSubQuery.java index 4285c47b26..56c21832ec 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/JDOSubQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOSubQuery.java @@ -11,15 +11,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; -import com.mysema.query.QueryMetadata; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Operation; -import com.mysema.query.types.Ops; -import com.mysema.query.types.expr.BooleanExpression; -import com.mysema.query.types.expr.NumberOperation; -import com.mysema.query.types.query.NumberSubQuery; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Operation; +import com.querydsl.core.types.Ops; +import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.query.NumberSubQuery; /** * JDOSubQuery is subquery implementation for JDOQL diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/JDODeleteClause.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDODeleteClause.java similarity index 90% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/JDODeleteClause.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDODeleteClause.java index 568c0ecb65..8c45429971 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/JDODeleteClause.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDODeleteClause.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.dml; +package com.querydsl.jdo.dml; import java.util.ArrayList; import java.util.List; @@ -20,14 +20,14 @@ import javax.jdo.PersistenceManager; import javax.jdo.Query; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.JoinType; -import com.mysema.query.QueryMetadata; -import com.mysema.query.dml.DeleteClause; -import com.mysema.query.jdo.JDOQLSerializer; -import com.mysema.query.jdo.JDOQLTemplates; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Predicate; +import com.querydsl.core.DefaultQueryMetadata; +import com.querydsl.core.JoinType; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.dml.DeleteClause; +import com.querydsl.jdo.JDOQLSerializer; +import com.querydsl.jdo.JDOQLTemplates; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.Predicate; /** * DeleteClause implementation for JDO diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/JDOUpdateClause.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java similarity index 87% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/JDOUpdateClause.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java index 4fe34d853f..67cdd5169f 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/JDOUpdateClause.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java @@ -11,18 +11,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.dml; +package com.querydsl.jdo.dml; import java.util.List; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.QueryMetadata; -import com.mysema.query.dml.UpdateClause; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ExpressionUtils; -import com.mysema.query.types.NullExpression; -import com.mysema.query.types.Path; -import com.mysema.query.types.Predicate; +import com.querydsl.core.DefaultQueryMetadata; +import com.querydsl.core.QueryMetadata; +import com.querydsl.core.dml.UpdateClause; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.ExpressionUtils; +import com.querydsl.core.types.NullExpression; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.Predicate; /** * UpdateClause implementation for JDO diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/package-info.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/package-info.java similarity index 94% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/package-info.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/dml/package-info.java index f2555d0450..e2f3cc3933 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/dml/package-info.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/package-info.java @@ -15,4 +15,4 @@ /** * DML operations support for Querydsl JDOQL */ -package com.mysema.query.jdo.dml; +package com.querydsl.jdo.dml; diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/package-info.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/package-info.java similarity index 95% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/package-info.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/package-info.java index f513725e6c..60b595f9fb 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/package-info.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/package-info.java @@ -14,4 +14,4 @@ /** * JDOQL support for Querydsl */ -package com.mysema.query.jdo; +package com.querydsl.jdo; diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java similarity index 96% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java index 2e81deaed9..b1203b6b0c 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/AbstractSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java @@ -11,11 +11,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.sql; +package com.querydsl.jdo.sql; -import javax.annotation.Nullable; -import javax.jdo.PersistenceManager; -import javax.jdo.Query; import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; @@ -23,18 +20,23 @@ import java.util.Collections; import java.util.List; +import javax.annotation.Nullable; +import javax.jdo.PersistenceManager; +import javax.jdo.Query; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.common.collect.Lists; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; -import com.mysema.query.*; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.ProjectableSQLQuery; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.support.QueryMixin; -import com.mysema.query.types.Expression; -import com.mysema.query.types.FactoryExpression; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.querydsl.core.*; +import com.querydsl.core.support.QueryMixin; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.FactoryExpression; +import com.querydsl.sql.Configuration; +import com.querydsl.sql.ProjectableSQLQuery; +import com.querydsl.sql.SQLSerializer; /** * Base class for JDO based SQLQuery implementations diff --git a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/JDOSQLQuery.java similarity index 88% rename from querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/sql/JDOSQLQuery.java index 23321a2996..6c18bb55da 100644 --- a/querydsl-jdo/src/main/java/com/mysema/query/jdo/sql/JDOSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/JDOSQLQuery.java @@ -11,13 +11,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.sql; +package com.querydsl.jdo.sql; -import com.mysema.query.DefaultQueryMetadata; -import com.mysema.query.QueryMetadata; -import com.mysema.query.sql.Configuration; -import com.mysema.query.sql.SQLSerializer; -import com.mysema.query.sql.SQLTemplates; +import com.querydsl.core.DefaultQueryMetadata; +import com.querydsl.core.QueryMetadata; +import com.querydsl.sql.Configuration; +import com.querydsl.sql.SQLSerializer; +import com.querydsl.sql.SQLTemplates; import javax.annotation.Nullable; import javax.jdo.PersistenceManager; diff --git a/querydsl-lucene4/src/main/java/com/mysema/query/lucene/package-info.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/package-info.java similarity index 94% rename from querydsl-lucene4/src/main/java/com/mysema/query/lucene/package-info.java rename to querydsl-jdo/src/main/java/com/querydsl/jdo/sql/package-info.java index 0f6c4a03a6..b8796af02a 100644 --- a/querydsl-lucene4/src/main/java/com/mysema/query/lucene/package-info.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/package-info.java @@ -12,4 +12,4 @@ * limitations under the License. */ -package com.mysema.query.lucene; +package com.querydsl.jdo.sql; diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/AbstractJDOTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/AbstractJDOTest.java similarity index 89% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/AbstractJDOTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/AbstractJDOTest.java index f4934ebf36..9ef79292fc 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/AbstractJDOTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/AbstractJDOTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import java.util.List; @@ -24,12 +24,12 @@ import org.junit.AfterClass; import org.junit.Before; -import com.mysema.query.jdo.dml.JDODeleteClause; -import com.mysema.query.jdo.test.domain.Book; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.Store; -import com.mysema.query.types.EntityPath; -import com.mysema.query.types.Predicate; +import com.querydsl.jdo.dml.JDODeleteClause; +import com.querydsl.jdo.test.domain.Book; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.Store; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.Predicate; public abstract class AbstractJDOTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/AggregateTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/AggregateTest.java similarity index 94% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/AggregateTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/AggregateTest.java index 94dbf5610c..13b27ce44c 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/AggregateTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/AggregateTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; @@ -21,8 +21,8 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; public class AggregateTest extends AbstractJDOTest{ diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/BasicsTest.java similarity index 89% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/BasicsTest.java index 8b51bedcbf..151f43db15 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/BasicsTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/BasicsTest.java @@ -11,21 +11,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.jdo.PersistenceManager; import javax.jdo.Transaction; import java.io.IOException; import com.google.common.collect.ImmutableList; -import com.mysema.query.BooleanBuilder; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.jdo.test.domain.Book; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QBook; -import com.mysema.query.jdo.test.domain.QProduct; -import com.mysema.query.types.Expression; -import com.mysema.query.types.Projections; +import com.querydsl.core.BooleanBuilder; +import com.querydsl.core.NonUniqueResultException; +import com.querydsl.jdo.test.domain.Book; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QBook; +import com.querydsl.jdo.test.domain.QProduct; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Projections; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; @@ -46,9 +46,9 @@ public class BasicsTest extends AbstractJDOTest { public void Serialization() throws IOException{ JDOQuery query = query(); - assertEquals("FROM com.mysema.query.jdo.test.domain.Product", query.from(product).toString()); - assertEquals("FROM com.mysema.query.jdo.test.domain.Product" + - "\nVARIABLES com.mysema.query.jdo.test.domain.Product product2", + assertEquals("FROM com.querydsl.jdo.test.domain.Product", query.from(product).toString()); + assertEquals("FROM com.querydsl.jdo.test.domain.Product" + + "\nVARIABLES com.querydsl.jdo.test.domain.Product product2", query.from(product2).toString()); query.where(product.ne(product2)).list(product, product2); @@ -59,9 +59,9 @@ public void Serialization() throws IOException{ public void SubQuerySerialization() throws IOException{ JDOSubQuery query = sub(); - assertEquals("FROM com.mysema.query.jdo.test.domain.Product", query.from(product).toString()); - assertEquals("FROM com.mysema.query.jdo.test.domain.Product" + - "\nVARIABLES com.mysema.query.jdo.test.domain.Product product2", + assertEquals("FROM com.querydsl.jdo.test.domain.Product", query.from(product).toString()); + assertEquals("FROM com.querydsl.jdo.test.domain.Product" + + "\nVARIABLES com.querydsl.jdo.test.domain.Product product2", query.from(product2).toString()); } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/CollectionTest.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/CollectionTest.java index 022afea9cb..de353665a9 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/CollectionTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/CollectionTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.jdo.PersistenceManager; import javax.jdo.Transaction; @@ -20,10 +20,10 @@ import org.junit.Ignore; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Book; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; -import com.mysema.query.jdo.test.domain.QStore; +import com.querydsl.jdo.test.domain.Book; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QStore; public class CollectionTest extends AbstractJDOTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/DependenciesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/DependenciesTest.java similarity index 80% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/DependenciesTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/DependenciesTest.java index be4d64c523..c6d494a5f5 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/DependenciesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/DependenciesTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertFalse; @@ -28,9 +28,9 @@ public class DependenciesTest { @Ignore public void test() throws IOException{ JDepend jdepend = new JDepend(); - jdepend.addDirectory("target/classes/com/mysema/query/jdo"); - jdepend.addDirectory("target/classes/com/mysema/query/jdo/dml"); - jdepend.addDirectory("target/classes/com/mysema/query/jdo/sql"); + jdepend.addDirectory("target/classes/com/querydsl/jdo"); + jdepend.addDirectory("target/classes/com/querydsl/jdo/dml"); + jdepend.addDirectory("target/classes/com/querydsl/jdo/sql"); jdepend.analyze(); assertFalse(jdepend.containsCycles()); diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/FetchPlanTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/FetchPlanTest.java similarity index 95% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/FetchPlanTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/FetchPlanTest.java index c0dc45362f..518a0ddf0e 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/FetchPlanTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/FetchPlanTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; @@ -28,9 +28,9 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; -import com.mysema.query.jdo.test.domain.QStore; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QStore; public class FetchPlanTest extends AbstractJDOTest{ diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/GroupByTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/GroupByTest.java similarity index 94% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/GroupByTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/GroupByTest.java index 9fc8912329..0412bd33b1 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/GroupByTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/GroupByTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; @@ -21,8 +21,8 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; public class GroupByTest extends AbstractJDOTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOQLMethodsTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLMethodsTest.java similarity index 88% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOQLMethodsTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLMethodsTest.java index a83696aafd..b640bc6be9 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOQLMethodsTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLMethodsTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import java.util.Arrays; import java.util.List; @@ -22,14 +22,14 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; -import com.mysema.query.jdo.test.domain.QStore; -import com.mysema.query.types.expr.BooleanExpression; -import com.mysema.query.types.expr.NumberExpression; -import com.mysema.query.types.expr.StringExpression; -import com.mysema.query.types.path.ListPath; -import com.mysema.query.types.path.MapPath; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QStore; +import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.expr.StringExpression; +import com.querydsl.core.types.path.ListPath; +import com.querydsl.core.types.path.MapPath; public class JDOQLMethodsTest extends AbstractJDOTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOQueryFactoryTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryFactoryTest.java similarity index 95% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOQueryFactoryTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryFactoryTest.java index 34381e8d35..66134359ad 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOQueryFactoryTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryFactoryTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertNotNull; @@ -22,7 +22,7 @@ import org.junit.Before; import org.junit.Test; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QProduct; public class JDOQueryFactoryTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/JDOQueryStandardTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java similarity index 90% rename from querydsl-jdo/src/test/java/com/mysema/query/JDOQueryStandardTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java index 07d3d595c7..0096d6f5f9 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/JDOQueryStandardTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java @@ -11,12 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query; +package com.querydsl.jdo; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; import java.util.Calendar; import java.util.Date; @@ -30,18 +27,13 @@ import org.junit.Test; import com.mysema.commons.lang.Pair; -import com.mysema.query.jdo.AbstractJDOTest; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; -import com.mysema.query.jdo.test.domain.QStore; -import com.mysema.query.jdo.test.domain.Store; -import com.mysema.query.types.ArrayConstructorExpression; -import com.mysema.query.types.ConstructorExpression; -import com.mysema.query.types.Expression; -import com.mysema.query.types.ParamNotSetException; -import com.mysema.query.types.Predicate; -import com.mysema.query.types.QTuple; -import com.mysema.query.types.expr.Param; +import com.querydsl.core.*; +import com.querydsl.core.types.*; +import com.querydsl.core.types.expr.Param; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QStore; +import com.querydsl.jdo.test.domain.Store; public class JDOQueryStandardTest extends AbstractJDOTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOSQLQueryTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSQLQueryTest.java similarity index 90% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOSQLQueryTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSQLQueryTest.java index 8efdd20c95..31345c96bd 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOSQLQueryTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSQLQueryTest.java @@ -11,26 +11,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.jdo.PersistenceManager; import javax.jdo.Transaction; import java.sql.SQLException; import java.util.List; -import com.mysema.query.NonUniqueResultException; -import com.mysema.query.SearchResults; -import com.mysema.query.Tuple; -import com.mysema.query.jdo.sql.JDOSQLQuery; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.sql.SProduct; -import com.mysema.query.sql.HSQLDBTemplates; -import com.mysema.query.sql.SQLSubQuery; -import com.mysema.query.sql.SQLTemplates; -import com.mysema.query.types.ConstructorExpression; -import com.mysema.query.types.Expression; -import com.mysema.query.types.SubQueryExpression; -import com.mysema.query.types.expr.BooleanExpression; +import com.querydsl.core.NonUniqueResultException; +import com.querydsl.core.SearchResults; +import com.querydsl.core.Tuple; +import com.querydsl.jdo.sql.JDOSQLQuery; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.sql.SProduct; +import com.querydsl.sql.HSQLDBTemplates; +import com.querydsl.sql.SQLSubQuery; +import com.querydsl.sql.SQLTemplates; +import com.querydsl.core.types.ConstructorExpression; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.core.types.expr.BooleanExpression; import org.junit.BeforeClass; import org.junit.Ignore; import org.junit.Test; diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOSubQueryTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOSubQueryTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java index f0d3043d66..555b8a8b24 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/JDOSubQueryTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java @@ -11,13 +11,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QProduct; public class JDOSubQueryTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/OrderingTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/OrderingTest.java similarity index 95% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/OrderingTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/OrderingTest.java index df96122d9e..bfbeefcac2 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/OrderingTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/OrderingTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -25,10 +25,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mysema.query.SearchResults; -import com.mysema.query.Tuple; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.core.SearchResults; +import com.querydsl.core.Tuple; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; public class OrderingTest extends AbstractJDOTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/PackageVerification.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/PackageVerification.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/PackageVerification.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/PackageVerification.java index 61cbc40b7f..2cc3f3792d 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/PackageVerification.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/PackageVerification.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -27,9 +27,9 @@ import com.google.common.base.Charsets; import com.google.common.io.Resources; import com.mysema.codegen.CodeWriter; -import com.mysema.query.apt.jdo.JDOAnnotationProcessor; -import com.mysema.query.codegen.CodegenModule; -import com.mysema.query.types.Expression; +import com.querydsl.apt.jdo.JDOAnnotationProcessor; +import com.querydsl.codegen.CodegenModule; +import com.querydsl.core.types.Expression; public class PackageVerification { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/QueryMutabilityTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/QueryMutabilityTest.java similarity index 93% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/QueryMutabilityTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/QueryMutabilityTest.java index f0d86eb1f8..9717759f3c 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/QueryMutabilityTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/QueryMutabilityTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import static org.junit.Assert.assertEquals; @@ -20,8 +20,8 @@ import org.junit.Test; -import com.mysema.query.QueryMutability; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.core.QueryMutability; +import com.querydsl.jdo.test.domain.QProduct; public class QueryMutabilityTest extends AbstractJDOTest{ diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/SubqueriesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/SubqueriesTest.java similarity index 96% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/SubqueriesTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/SubqueriesTest.java index 292e1b6dd1..222ff8e423 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/SubqueriesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/SubqueriesTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo; +package com.querydsl.jdo; import javax.jdo.PersistenceManager; import javax.jdo.Transaction; @@ -19,8 +19,8 @@ import org.junit.BeforeClass; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QProduct; public class SubqueriesTest extends AbstractJDOTest { diff --git a/querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/TemplatesTest.java similarity index 90% rename from querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/TemplatesTest.java index 55e2774332..e525e53c6c 100644 --- a/querydsl-jpa/src/test/java/com/mysema/query/jpa/TemplatesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/TemplatesTest.java @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa; +package com.querydsl.jdo; -import com.mysema.query.TemplatesTestBase; +import com.querydsl.core.TemplatesTestBase; public class TemplatesTest extends TemplatesTestBase { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Account.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Account.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Account.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Account.java index b874746b8b..78f122884b 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Account.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Account.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * User account for a person. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Department.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Department.java similarity index 94% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Department.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Department.java index fb7213f0a0..e228ea6412 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Department.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Department.java @@ -11,13 +11,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.util.HashSet; import java.util.List; import java.util.Set; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Department in a company. Has a Manager, and a set of Projects being worked diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Developer.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Developer.java similarity index 93% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Developer.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Developer.java index 68b8977a49..1541759544 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Developer.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Developer.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Developer of software for a system. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/DeveloperRC.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/DeveloperRC.java similarity index 94% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/DeveloperRC.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/DeveloperRC.java index 4d8d42e603..d58b6b5edd 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/DeveloperRC.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/DeveloperRC.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.math.BigDecimal; import java.math.BigInteger; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; @QueryEntity public class DeveloperRC extends PersonRC { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Employee.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Employee.java similarity index 96% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Employee.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Employee.java index 5cd01fc5ad..80114de1fe 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Employee.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Employee.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Employee in a company. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/InsuranceDepartment.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/InsuranceDepartment.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/InsuranceDepartment.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/InsuranceDepartment.java index 837e2e7933..b22a861c16 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/InsuranceDepartment.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/InsuranceDepartment.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; @QueryEntity public class InsuranceDepartment extends Department { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Manager.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Manager.java similarity index 95% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Manager.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Manager.java index b5f11d00ee..081fe23202 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Manager.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Manager.java @@ -11,13 +11,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.util.Collection; import java.util.HashSet; import java.util.Set; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Manager of a set of Employees, and departments. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Office.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Office.java similarity index 98% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Office.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Office.java index b645b2fcdd..803212f35d 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Office.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Office.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.io.Serializable; import java.util.Date; @@ -19,7 +19,7 @@ import java.util.Set; import java.util.StringTokenizer; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * An office in the company. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Organisation.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Organisation.java similarity index 90% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Organisation.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Organisation.java index 598fde8d4d..17806d7ad7 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Organisation.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Organisation.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Organisation that hands out qualifications to employees after taking training diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Person.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Person.java similarity index 98% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Person.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Person.java index f04fb499a7..3fb76b1233 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Person.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Person.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.io.Serializable; import java.util.HashMap; @@ -19,7 +19,7 @@ import java.util.Random; import java.util.StringTokenizer; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Person in a company. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonHolder.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonHolder.java similarity index 96% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonHolder.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonHolder.java index 6c72c4f979..2e56347fa3 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonHolder.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonHolder.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Convenience class that can be used in query results for holding Person diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonRC.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonRC.java similarity index 95% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonRC.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonRC.java index fd890c36bf..c42e781c05 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonRC.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonRC.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.math.BigDecimal; import java.math.BigInteger; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; @QueryEntity public class PersonRC { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonalDetails.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonalDetails.java similarity index 96% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonalDetails.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonalDetails.java index da0b68758b..a33df8ae0d 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PersonalDetails.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PersonalDetails.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Details of a person. Represents a subset of the information available from diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PhoneNumber.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PhoneNumber.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PhoneNumber.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PhoneNumber.java index af9707eff9..606801ad1b 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/PhoneNumber.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/PhoneNumber.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Phone number of a person. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Project.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Project.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Project.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Project.java index 0325ecaa45..d439395a6b 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Project.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Project.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Project in a company. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Qualification.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Qualification.java similarity index 94% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Qualification.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Qualification.java index faa54b28f1..05e9342262 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/company/Qualification.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/company/Qualification.java @@ -11,11 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.company; +package com.querydsl.jdo.models.company; import java.util.Date; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Qualification of a person. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Cloth.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Cloth.java similarity index 90% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Cloth.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Cloth.java index f23339896d..3df757b0a7 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Cloth.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Cloth.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.fitness; +package com.querydsl.jdo.models.fitness; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Item of clothing in a Gym. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Gym.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Gym.java similarity index 98% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Gym.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Gym.java index 5a5414675a..3f2dd2eb1f 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Gym.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Gym.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.fitness; +package com.querydsl.jdo.models.fitness; import java.util.HashMap; import java.util.Map; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Gymnasium. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/GymEquipment.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/GymEquipment.java similarity index 92% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/GymEquipment.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/GymEquipment.java index e3a5e458e1..1ef11c04e0 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/GymEquipment.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/GymEquipment.java @@ -11,9 +11,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.fitness; +package com.querydsl.jdo.models.fitness; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Piece of equipment in a Gym. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Wardrobe.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java similarity index 94% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Wardrobe.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java index 3afdbfadd5..6a94675a4d 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/models/fitness/Wardrobe.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java @@ -11,12 +11,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.models.fitness; +package com.querydsl.jdo.models.fitness; import java.util.ArrayList; import java.util.List; -import com.mysema.query.annotations.QueryEntity; +import com.querydsl.core.annotations.QueryEntity; /** * Container for clothes in a Gym. diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/AbstractTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/AbstractTest.java similarity index 80% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/AbstractTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/AbstractTest.java index 60a302707a..3b2b401902 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/AbstractTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/AbstractTest.java @@ -11,13 +11,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.serialization; +package com.querydsl.jdo.serialization; -import com.mysema.query.jdo.JDOQLSerializer; -import com.mysema.query.jdo.JDOSubQuery; -import com.mysema.query.jdo.JDOQLTemplates; -import com.mysema.query.types.Expression; -import com.mysema.query.types.SubQueryExpression; +import com.querydsl.jdo.JDOQLSerializer; +import com.querydsl.jdo.JDOSubQuery; +import com.querydsl.jdo.JDOQLTemplates; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.SubQueryExpression; public abstract class AbstractTest { diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/ContainerTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/ContainerTest.java similarity index 81% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/ContainerTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/ContainerTest.java index 78dc0c523a..0505bf8157 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/ContainerTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/ContainerTest.java @@ -11,15 +11,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.serialization; +package com.querydsl.jdo.serialization; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; -import com.mysema.query.jdo.models.fitness.QGym; -import com.mysema.query.jdo.models.fitness.Wardrobe; +import com.querydsl.jdo.models.fitness.QGym; +import com.querydsl.jdo.models.fitness.Wardrobe; public class ContainerTest extends AbstractTest{ @@ -39,9 +39,9 @@ public void NotContainsValuesInMapFields() { // + "WHERE !this.wardrobes.containsValue(wrd) " // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE !this.wardrobes.containsValue(a1) " + - "PARAMETERS com.mysema.query.jdo.models.fitness.Wardrobe a1", + "PARAMETERS com.querydsl.jdo.models.fitness.Wardrobe a1", serialize(query().from(gym) .where(gym.wardrobes.containsValue(wrd).not()).list(gym))); @@ -51,9 +51,9 @@ public void NotContainsValuesInMapFields() { // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd,org.jpox.samples.models.fitness.Wardrobe wrd2"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE !this.wardrobes.containsValue(a1) && !this.wardrobes.containsValue(a2) " + - "PARAMETERS com.mysema.query.jdo.models.fitness.Wardrobe a1, com.mysema.query.jdo.models.fitness.Wardrobe a2", + "PARAMETERS com.querydsl.jdo.models.fitness.Wardrobe a1, com.querydsl.jdo.models.fitness.Wardrobe a2", serialize(query().from(gym) .where(gym.wardrobes.containsValue(wrd).not(), gym.wardrobes.containsValue(wrd2).not()) @@ -64,9 +64,9 @@ public void NotContainsValuesInMapFields() { // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd,org.jpox.samples.models.fitness.Wardrobe wrd2,org.jpox.samples.models.fitness.Wardrobe wrd1"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE !this.wardrobes.containsValue(a1) && !this.wardrobes.containsValue(a2) && this.wardrobes.containsValue(a3) " + - "PARAMETERS com.mysema.query.jdo.models.fitness.Wardrobe a1, com.mysema.query.jdo.models.fitness.Wardrobe a2, com.mysema.query.jdo.models.fitness.Wardrobe a3", + "PARAMETERS com.querydsl.jdo.models.fitness.Wardrobe a1, com.querydsl.jdo.models.fitness.Wardrobe a2, com.querydsl.jdo.models.fitness.Wardrobe a3", serialize(query().from(gym) .where( @@ -83,9 +83,9 @@ public void NotContainsKeysInMapFields() { // + "WHERE !this.wardrobes2.containsKey(wrd) " // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE !this.wardrobes2.containsKey(a1) " + - "PARAMETERS com.mysema.query.jdo.models.fitness.Wardrobe a1", + "PARAMETERS com.querydsl.jdo.models.fitness.Wardrobe a1", serialize(query().from(gym) .where(gym.wardrobes2.containsKey(wrd).not()).list(gym))); @@ -94,9 +94,9 @@ public void NotContainsKeysInMapFields() { // + "WHERE !this.wardrobes2.containsKey(wrd) && !this.wardrobes2.containsKey(wrd2) " // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd,org.jpox.samples.models.fitness.Wardrobe wrd2"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE !this.wardrobes2.containsKey(a1) && !this.wardrobes2.containsKey(a2) " + - "PARAMETERS com.mysema.query.jdo.models.fitness.Wardrobe a1, com.mysema.query.jdo.models.fitness.Wardrobe a2", + "PARAMETERS com.querydsl.jdo.models.fitness.Wardrobe a1, com.querydsl.jdo.models.fitness.Wardrobe a2", serialize(query().from(gym) .where( @@ -108,9 +108,9 @@ public void NotContainsKeysInMapFields() { // + "WHERE !this.wardrobes2.containsKey(wrd) && !this.wardrobes2.containsKey(wrd2) && this.wardrobes2.containsKey(wrd1) " // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd,org.jpox.samples.models.fitness.Wardrobe wrd2,org.jpox.samples.models.fitness.Wardrobe wrd1"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE !this.wardrobes2.containsKey(a1) && !this.wardrobes2.containsKey(a2) && this.wardrobes2.containsKey(a3) " + - "PARAMETERS com.mysema.query.jdo.models.fitness.Wardrobe a1, com.mysema.query.jdo.models.fitness.Wardrobe a2, com.mysema.query.jdo.models.fitness.Wardrobe a3", + "PARAMETERS com.querydsl.jdo.models.fitness.Wardrobe a1, com.querydsl.jdo.models.fitness.Wardrobe a2, com.querydsl.jdo.models.fitness.Wardrobe a3", serialize(query().from(gym) .where( @@ -145,9 +145,9 @@ public void GetInMapFields() { // + "WHERE this.wardrobes.get(wrd.model) == wrd " // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "WHERE this.wardrobes.get(a1) == a2 " + - "PARAMETERS java.lang.String a1, com.mysema.query.jdo.models.fitness.Wardrobe a2", + "PARAMETERS java.lang.String a1, com.querydsl.jdo.models.fitness.Wardrobe a2", serialize(query().from(gym) .where(gym.wardrobes.get(wrd.getModel()).eq(wrd)).list(gym))); @@ -159,7 +159,7 @@ public void GetInOrderingInMapFields() { // + "PARAMETERS org.jpox.samples.models.fitness.Wardrobe wrd"); // .setOrdering("this.wardrobes.get(wrd.model).model ascending"); assertEquals( - "SELECT FROM com.mysema.query.jdo.models.fitness.Gym " + + "SELECT FROM com.querydsl.jdo.models.fitness.Gym " + "PARAMETERS java.lang.String a1 " + "ORDER BY this.wardrobes.get(a1).model ASC", diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/ExprSerializationTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/ExprSerializationTest.java similarity index 91% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/ExprSerializationTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/ExprSerializationTest.java index 69b2ade6f8..4cb07c517d 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/ExprSerializationTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/ExprSerializationTest.java @@ -11,20 +11,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.serialization; +package com.querydsl.jdo.serialization; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.mysema.query.jdo.JDOQLSerializer; -import com.mysema.query.jdo.JDOQLTemplates; -import com.mysema.query.jdo.test.domain.Book; -import com.mysema.query.jdo.test.domain.Product; -import com.mysema.query.jdo.test.domain.QBook; -import com.mysema.query.jdo.test.domain.QProduct; -import com.mysema.query.jdo.test.domain.QStore; -import com.mysema.query.types.Expression; +import com.querydsl.jdo.JDOQLSerializer; +import com.querydsl.jdo.JDOQLTemplates; +import com.querydsl.jdo.test.domain.Book; +import com.querydsl.jdo.test.domain.Product; +import com.querydsl.jdo.test.domain.QBook; +import com.querydsl.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.QStore; +import com.querydsl.core.types.Expression; public class ExprSerializationTest { @@ -37,7 +37,7 @@ public class ExprSerializationTest { @Test public void InstanceOf() { assertEquals( - "product instanceof com.mysema.query.jdo.test.domain.Book", + "product instanceof com.querydsl.jdo.test.domain.Book", serialize(product.instanceOf(Book.class))); } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/GroupByTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/GroupByTest.java similarity index 77% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/GroupByTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/GroupByTest.java index ff2fa56c60..ebece5aeb4 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/GroupByTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/GroupByTest.java @@ -1,10 +1,10 @@ -package com.mysema.query.jdo.serialization; +package com.querydsl.jdo.serialization; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.mysema.query.jdo.models.company.QEmployee; +import com.querydsl.jdo.models.company.QEmployee; public class GroupByTest extends AbstractTest { @@ -12,7 +12,7 @@ public class GroupByTest extends AbstractTest { public void GroupBy() { QEmployee employee = QEmployee.employee; assertEquals( - "SELECT FROM com.mysema.query.jdo.models.company.Employee "+ + "SELECT FROM com.querydsl.jdo.models.company.Employee "+ "PARAMETERS java.lang.String a1 "+ "GROUP BY this.emailAddress "+ "HAVING this.emailAddress != a1", diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/QuerySerializationTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/QuerySerializationTest.java similarity index 78% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/QuerySerializationTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/QuerySerializationTest.java index 48d4b3ebba..759b0438f7 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/QuerySerializationTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/QuerySerializationTest.java @@ -11,14 +11,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.serialization; +package com.querydsl.jdo.serialization; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.mysema.query.jdo.test.domain.Book; -import com.mysema.query.jdo.test.domain.QProduct; +import com.querydsl.jdo.test.domain.Book; +import com.querydsl.jdo.test.domain.QProduct; public class QuerySerializationTest extends AbstractTest{ @@ -30,7 +30,7 @@ public class QuerySerializationTest extends AbstractTest{ public void SelectFromWhereOrder() { assertEquals( "SELECT UNIQUE this.name " + - "FROM com.mysema.query.jdo.test.domain.Product " + + "FROM com.querydsl.jdo.test.domain.Product " + "WHERE this.name == a1 " + "PARAMETERS java.lang.String a1 " + "ORDER BY this.name ASC", @@ -45,7 +45,7 @@ public void SelectFromWhereOrder() { public void SelectFromWhereGroupBy() { assertEquals( "SELECT this.name " + - "FROM com.mysema.query.jdo.test.domain.Product " + + "FROM com.querydsl.jdo.test.domain.Product " + "WHERE this.name.startsWith(a1) || this.name.endsWith(a2) " + "PARAMETERS java.lang.String a1, java.lang.String a2 " + "GROUP BY this.price", @@ -60,9 +60,9 @@ public void SelectFromWhereGroupBy() { public void SelectFrom2Sources() { assertEquals( "SELECT this.name " + - "FROM com.mysema.query.jdo.test.domain.Product " + + "FROM com.querydsl.jdo.test.domain.Product " + "WHERE this.name == other.name " + - "VARIABLES com.mysema.query.jdo.test.domain.Product other", + "VARIABLES com.querydsl.jdo.test.domain.Product other", serialize(query().from(product, other) .where(product.name.eq(other.name)) @@ -73,9 +73,9 @@ public void SelectFrom2Sources() { public void WithSubQuery() { assertEquals( "SELECT this.price " + - "FROM com.mysema.query.jdo.test.domain.Product " + + "FROM com.querydsl.jdo.test.domain.Product " + "WHERE this.price < " + - "(SELECT avg(other.price) FROM com.mysema.query.jdo.test.domain.Product other)", + "(SELECT avg(other.price) FROM com.querydsl.jdo.test.domain.Product other)", serialize(query().from(product) .where(product.price.lt(query().from(other).unique(other.price.avg()))) @@ -87,8 +87,8 @@ public void WithSubQuery2() { // FIXME : how to model this ?!? assertEquals( "SELECT this.name " + - "FROM com.mysema.query.jdo.test.domain.Product " + - "WHERE (SELECT other.price FROM com.mysema.query.jdo.test.domain.Product other " + + "FROM com.querydsl.jdo.test.domain.Product " + + "WHERE (SELECT other.price FROM com.querydsl.jdo.test.domain.Product other " + "WHERE other.name == a1 " + "PARAMETERS java.lang.String a1).contains(this.price)", @@ -101,8 +101,8 @@ public void WithSubQuery2() { public void InstanceofQuery() { assertEquals( "SELECT " + - "FROM com.mysema.query.jdo.test.domain.Product " + - "WHERE this instanceof com.mysema.query.jdo.test.domain.Book", + "FROM com.querydsl.jdo.test.domain.Product " + + "WHERE this instanceof com.querydsl.jdo.test.domain.Book", serialize(query().from(product) .where(product.instanceOf(Book.class)) diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/SubqueriesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/SubqueriesTest.java similarity index 82% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/SubqueriesTest.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/SubqueriesTest.java index 029abfe8d4..e41f81e4f7 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/serialization/SubqueriesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/serialization/SubqueriesTest.java @@ -11,14 +11,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.serialization; +package com.querydsl.jdo.serialization; import static org.junit.Assert.assertEquals; import org.junit.Test; -import com.mysema.query.jdo.models.company.QDepartment; -import com.mysema.query.jdo.models.company.QEmployee; +import com.querydsl.jdo.models.company.QDepartment; +import com.querydsl.jdo.models.company.QEmployee; public class SubqueriesTest extends AbstractTest{ @@ -35,9 +35,9 @@ public class SubqueriesTest extends AbstractTest{ @Test public void test1() { assertEquals( - "SELECT FROM com.mysema.query.jdo.models.company.Department " + + "SELECT FROM com.querydsl.jdo.models.company.Department " + "WHERE this.employees.size() == " + - "(SELECT max(d.employees.size()) FROM com.mysema.query.jdo.models.company.Department d)", + "(SELECT max(d.employees.size()) FROM com.querydsl.jdo.models.company.Department d)", serialize(query().from(department).where(department.employees.size().eq( query().from(d).unique(d.employees.size().max()) @@ -50,7 +50,7 @@ public void test1() { @Test public void test2() { assertEquals( - "SELECT FROM com.mysema.query.jdo.models.company.Employee " + + "SELECT FROM com.querydsl.jdo.models.company.Employee " + "WHERE this.weeklyhours > " + "(SELECT avg(e.weeklyhours) FROM this.department.employees e)", @@ -67,7 +67,7 @@ public void test2() { @Test public void test3() { assertEquals( - "SELECT FROM com.mysema.query.jdo.models.company.Employee " + + "SELECT FROM com.querydsl.jdo.models.company.Employee " + "WHERE this.weeklyhours > " + "(SELECT avg(e.weeklyhours) FROM this.department.employees e WHERE e.manager == this.manager)", @@ -81,9 +81,9 @@ public void test3() { @Test public void test4() { assertEquals( - "SELECT FROM com.mysema.query.jdo.models.company.Employee " + + "SELECT FROM com.querydsl.jdo.models.company.Employee " + "WHERE this.weeklyhours > " + - "(SELECT avg(e.weeklyhours) FROM com.mysema.query.jdo.models.company.Employee e)", + "(SELECT avg(e.weeklyhours) FROM com.querydsl.jdo.models.company.Employee e)", serialize(query().from(employee).where(employee.weeklyhours.gt( query().from(e).unique(e.weeklyhours.avg()) @@ -97,9 +97,9 @@ public void test4() { @Test public void test5() { assertEquals( - "SELECT FROM com.mysema.query.jdo.models.company.Employee " + + "SELECT FROM com.querydsl.jdo.models.company.Employee " + "WHERE this.weeklyhours == e.weeklyhours && this.firstName == a1 " + - "VARIABLES com.mysema.query.jdo.models.company.Employee e " + + "VARIABLES com.querydsl.jdo.models.company.Employee e " + "PARAMETERS java.lang.String a1", serialize(query().from(employee, e) diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Book.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Book.java similarity index 98% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Book.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Book.java index e91c801d28..e127cab910 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Book.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Book.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain; +package com.querydsl.jdo.test.domain; import java.util.Date; diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Product.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Product.java similarity index 98% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Product.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Product.java index 262408cd6e..575eac3612 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Product.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Product.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain; +package com.querydsl.jdo.test.domain; import java.util.Date; diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QBook.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java similarity index 70% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QBook.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java index e8cd5581e1..0b5ad1e236 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QBook.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java @@ -11,21 +11,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain; +package com.querydsl.jdo.test.domain; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.PathMetadataFactory; -import com.mysema.query.types.path.DateTimePath; -import com.mysema.query.types.path.EntityPathBase; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.PathMetadataFactory; +import com.querydsl.core.types.path.DateTimePath; +import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.path.StringPath; /** * QBook is a Querydsl query type for Book * */ @SuppressWarnings("serial") -public class QBook extends EntityPathBase{ +public class QBook extends EntityPathBase{ public static final QBook book = new QBook("book"); @@ -46,15 +46,15 @@ public class QBook extends EntityPathBase public final NumberPath price = createNumber("price",Double.class); public QBook(String path) { - this(com.mysema.query.jdo.test.domain.Book.class, path); + this(com.querydsl.jdo.test.domain.Book.class, path); } - public QBook(Class cl, String path) { + public QBook(Class cl, String path) { super(cl, PathMetadataFactory.forVariable(path)); } public QBook(PathMetadata metadata) { - super(com.mysema.query.jdo.test.domain.Book.class, metadata); + super(com.querydsl.jdo.test.domain.Book.class, metadata); } } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QProduct.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java similarity index 67% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QProduct.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java index 1ba0192a95..96c65f164c 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QProduct.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java @@ -11,23 +11,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain; +package com.querydsl.jdo.test.domain; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.PathMetadataFactory; -import com.mysema.query.types.path.DatePath; -import com.mysema.query.types.path.DateTimePath; -import com.mysema.query.types.path.EntityPathBase; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; -import com.mysema.query.types.path.TimePath; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.PathMetadataFactory; +import com.querydsl.core.types.path.DatePath; +import com.querydsl.core.types.path.DateTimePath; +import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.path.TimePath; /** * QProduct is a Querydsl query type for Product * */ @SuppressWarnings("serial") -public class QProduct extends EntityPathBase{ +public class QProduct extends EntityPathBase{ public static final QProduct product = new QProduct("product"); @@ -46,15 +46,15 @@ public class QProduct extends EntityPathBase price = createNumber("price",Double.class); public QProduct(String path) { - this(com.mysema.query.jdo.test.domain.Product.class, path); + this(com.querydsl.jdo.test.domain.Product.class, path); } - public QProduct(Class cl, String path) { + public QProduct(Class cl, String path) { super(cl, PathMetadataFactory.forVariable(path)); } public QProduct(PathMetadata metadata) { - super(com.mysema.query.jdo.test.domain.Product.class, metadata); + super(com.querydsl.jdo.test.domain.Product.class, metadata); } } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QStore.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java similarity index 75% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QStore.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java index f6fbf65103..b8d4cf2723 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/QStore.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java @@ -11,22 +11,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain; +package com.querydsl.jdo.test.domain; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.PathMetadataFactory; -import com.mysema.query.types.path.EntityPathBase; -import com.mysema.query.types.path.ListPath; -import com.mysema.query.types.path.MapPath; -import com.mysema.query.types.path.PathInits; -import com.mysema.query.types.path.StringPath; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.PathMetadataFactory; +import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.path.ListPath; +import com.querydsl.core.types.path.MapPath; +import com.querydsl.core.types.path.PathInits; +import com.querydsl.core.types.path.StringPath; /** * QStore is a Querydsl query type for Store * */ @SuppressWarnings("serial") -public class QStore extends EntityPathBase{ +public class QStore extends EntityPathBase{ public static final QStore store = new QStore("store"); @@ -40,7 +40,7 @@ public QProduct productsByName(String key) { return new QProduct(PathMetadataFactory.forMapAccess(productsByName,key)); } - public QProduct productsByName(com.mysema.query.types.Expression key) { + public QProduct productsByName(com.querydsl.core.types.Expression key) { return new QProduct(PathMetadataFactory.forMapAccess(productsByName,key)); } diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Store.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Store.java similarity index 97% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Store.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Store.java index 3f2f106e21..925ccc450e 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/Store.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/Store.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain; +package com.querydsl.jdo.test.domain; import java.util.ArrayList; import java.util.HashMap; diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java similarity index 79% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java index c95020d0e5..c635b39282 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SBook.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java @@ -11,16 +11,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain.sql; - -import com.mysema.query.sql.ForeignKey; -import com.mysema.query.sql.PrimaryKey; -import com.mysema.query.sql.RelationalPathBase; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.path.BeanPath; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; -import static com.mysema.query.types.PathMetadataFactory.forVariable; +package com.querydsl.jdo.test.domain.sql; + +import com.querydsl.sql.ForeignKey; +import com.querydsl.sql.PrimaryKey; +import com.querydsl.sql.RelationalPathBase; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.path.BeanPath; +import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.path.StringPath; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; /** diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java similarity index 89% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java index 3dc564dea9..3ace67d68b 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SProduct.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java @@ -11,15 +11,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain.sql; - -import com.mysema.query.sql.ColumnMetadata; -import com.mysema.query.sql.ForeignKey; -import com.mysema.query.sql.PrimaryKey; -import com.mysema.query.sql.RelationalPathBase; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.path.*; -import static com.mysema.query.types.PathMetadataFactory.forVariable; +package com.querydsl.jdo.test.domain.sql; + +import com.querydsl.sql.ColumnMetadata; +import com.querydsl.sql.ForeignKey; +import com.querydsl.sql.PrimaryKey; +import com.querydsl.sql.RelationalPathBase; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.path.*; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; /** diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java similarity index 79% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java index e9f71a5fe0..046c0c7025 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStore.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java @@ -11,16 +11,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain.sql; - -import com.mysema.query.sql.ForeignKey; -import com.mysema.query.sql.PrimaryKey; -import com.mysema.query.sql.RelationalPathBase; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.path.BeanPath; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; -import static com.mysema.query.types.PathMetadataFactory.forVariable; +package com.querydsl.jdo.test.domain.sql; + +import com.querydsl.sql.ForeignKey; +import com.querydsl.sql.PrimaryKey; +import com.querydsl.sql.RelationalPathBase; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.path.BeanPath; +import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.path.StringPath; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; /** diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java similarity index 83% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java index ccf862072b..ea2792ff3b 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProducts.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java @@ -11,15 +11,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain.sql; - -import com.mysema.query.sql.ForeignKey; -import com.mysema.query.sql.PrimaryKey; -import com.mysema.query.sql.RelationalPathBase; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.path.BeanPath; -import com.mysema.query.types.path.NumberPath; -import static com.mysema.query.types.PathMetadataFactory.forVariable; +package com.querydsl.jdo.test.domain.sql; + +import com.querydsl.sql.ForeignKey; +import com.querydsl.sql.PrimaryKey; +import com.querydsl.sql.RelationalPathBase; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.path.BeanPath; +import com.querydsl.core.types.path.NumberPath; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; /** diff --git a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java similarity index 82% rename from querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java rename to querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java index ea6b4b1283..81689a5fb3 100644 --- a/querydsl-jdo/src/test/java/com/mysema/query/jdo/test/domain/sql/SStoreProductsbyname.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java @@ -11,16 +11,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jdo.test.domain.sql; - -import com.mysema.query.sql.ForeignKey; -import com.mysema.query.sql.PrimaryKey; -import com.mysema.query.sql.RelationalPathBase; -import com.mysema.query.types.PathMetadata; -import com.mysema.query.types.path.BeanPath; -import com.mysema.query.types.path.NumberPath; -import com.mysema.query.types.path.StringPath; -import static com.mysema.query.types.PathMetadataFactory.forVariable; +package com.querydsl.jdo.test.domain.sql; + +import com.querydsl.sql.ForeignKey; +import com.querydsl.sql.PrimaryKey; +import com.querydsl.sql.RelationalPathBase; +import com.querydsl.core.types.PathMetadata; +import com.querydsl.core.types.path.BeanPath; +import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.path.StringPath; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; /** diff --git a/querydsl-jdo/src/test/resources/log4j.properties b/querydsl-jdo/src/test/resources/log4j.properties index 798d8a2b5d..16778a1801 100644 --- a/querydsl-jdo/src/test/resources/log4j.properties +++ b/querydsl-jdo/src/test/resources/log4j.properties @@ -8,4 +8,4 @@ log4j.appender.stdout.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss}] (%F log4j.rootLogger=WARN, stdout -#log4j.logger.com.mysema.query.jdo=DEBUG +#log4j.logger.com.querydsl.jdo=DEBUG diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/AbstractDomainExporter.java similarity index 97% rename from querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java rename to querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/AbstractDomainExporter.java index c5237fe0f9..457a928969 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/AbstractDomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/AbstractDomainExporter.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import javax.annotation.Nullable; import javax.persistence.Embeddable; @@ -31,13 +31,13 @@ import com.mysema.codegen.JavaWriter; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; -import com.mysema.query.QueryException; -import com.mysema.query.annotations.PropertyType; -import com.mysema.query.annotations.QueryInit; -import com.mysema.query.annotations.QueryType; -import com.mysema.query.codegen.*; -import com.mysema.util.Annotations; -import com.mysema.util.ReflectionUtils; +import com.querydsl.core.QueryException; +import com.querydsl.core.annotations.PropertyType; +import com.querydsl.core.annotations.QueryInit; +import com.querydsl.core.annotations.QueryType; +import com.querydsl.codegen.*; +import com.querydsl.core.util.Annotations; +import com.querydsl.core.util.ReflectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/Constants.java b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/Constants.java similarity index 97% rename from querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/Constants.java rename to querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/Constants.java index 1bb386ede2..e355c67b83 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/Constants.java +++ b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/Constants.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import java.util.List; diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/HibernateDomainExporter.java similarity index 98% rename from querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java rename to querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/HibernateDomainExporter.java index 39ea8c1c9e..6e31548559 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/HibernateDomainExporter.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import javax.xml.stream.XMLStreamException; import java.io.File; @@ -23,10 +23,10 @@ import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; -import com.mysema.query.codegen.EntityType; -import com.mysema.query.codegen.Property; -import com.mysema.query.codegen.SerializerConfig; -import com.mysema.query.codegen.SimpleSerializerConfig; +import com.querydsl.codegen.EntityType; +import com.querydsl.codegen.Property; +import com.querydsl.codegen.SerializerConfig; +import com.querydsl.codegen.SimpleSerializerConfig; import org.hibernate.MappingException; import org.hibernate.cfg.Configuration; import org.hibernate.mapping.*; diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/JPADomainExporter.java similarity index 97% rename from querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java rename to querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/JPADomainExporter.java index fe7fdcd80e..b433b6463a 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/JPADomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/JPADomainExporter.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import javax.persistence.Temporal; import javax.persistence.metamodel.*; @@ -26,10 +26,10 @@ import com.mysema.codegen.model.SimpleType; import com.mysema.codegen.model.Type; import com.mysema.codegen.model.TypeCategory; -import com.mysema.query.codegen.EntityType; -import com.mysema.query.codegen.Property; -import com.mysema.query.codegen.SerializerConfig; -import com.mysema.query.codegen.SimpleSerializerConfig; +import com.querydsl.codegen.EntityType; +import com.querydsl.codegen.Property; +import com.querydsl.codegen.SerializerConfig; +import com.querydsl.codegen.SimpleSerializerConfig; import org.hibernate.MappingException; /** diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/ant/AntJPADomainExporter.java similarity index 97% rename from querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java rename to querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/ant/AntJPADomainExporter.java index 8dc5af85d5..9785064f43 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/ant/AntJPADomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/querydsl/jpa/codegen/ant/AntJPADomainExporter.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.ant; +package com.querydsl.jpa.codegen.ant; import java.io.File; import java.io.IOException; @@ -9,7 +9,7 @@ import javax.persistence.Persistence; import javax.persistence.metamodel.Metamodel; -import com.mysema.query.jpa.codegen.JPADomainExporter; +import com.querydsl.jpa.codegen.JPADomainExporter; /** * AntJPADomainExporter exports JPA 2 metamodels to Querydsl expression types diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/ISomething.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/ISomething.java deleted file mode 100644 index ef4150673f..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/ISomething.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mysema.query.jpa.domain11; - -public interface ISomething { - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Entity.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Entity.java deleted file mode 100644 index 0131b51f7a..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Entity.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.mysema.query.jpa.domain15; - -import com.mysema.query.annotations.QueryEntity; - -@QueryEntity -public class Entity extends Superclass { - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Entity2.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Entity2.java deleted file mode 100644 index dad7b094b9..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Entity2.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.mysema.query.jpa.domain15; - -import com.mysema.query.annotations.QueryEntity; - -@QueryEntity -public class Entity2 extends Superclass { - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom.java deleted file mode 100644 index 1d044120f9..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mysema.query.jpa.domain16; - -public class Custom { - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom2.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom2.java deleted file mode 100644 index fae9f71eab..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom2.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mysema.query.jpa.domain16; - -public class Custom2 { - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom3.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom3.java deleted file mode 100644 index be472f5e41..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Custom3.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.mysema.query.jpa.domain16; - -public class Custom3 { - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporter16Test.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporter16Test.java deleted file mode 100644 index 787461d647..0000000000 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/DomainExporter16Test.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.mysema.query.jpa.domain16; - -import java.io.File; -import java.io.IOException; - -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; -import org.hibernate.cfg.Configuration; -import org.junit.Test; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class DomainExporter16Test { - - @Test - public void Execute() throws IOException { - File gen = new File("target/" + getClass().getSimpleName()); - FileUtils.delete(gen); - Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain16/domain.hbm.xml")); - HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); - exporter.execute(); - - assertTrue(new File(gen, "com/mysema/query/jpa/domain16/QEntity.java").exists()); - assertFalse(new File(gen, "com/mysema/query/jpa/domain16/QCustom.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain16/QCustom2.java").exists()); - assertFalse(new File(gen, "com/mysema/query/jpa/domain16/QCustom3.java").exists()); - - CompileUtils.compile(gen.getAbsolutePath()); - } - -} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/CompileUtils.java similarity index 96% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/CompileUtils.java index 07574246ea..195080e16f 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/CompileUtils.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/CompileUtils.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import java.io.File; import java.io.IOException; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/GenericExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/GenericExporterTest.java similarity index 81% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/GenericExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/GenericExporterTest.java index 5d03a6889e..794b6e3525 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/GenericExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/GenericExporterTest.java @@ -1,10 +1,10 @@ -package com.mysema.query.jpa; +package com.querydsl.jpa.codegen; import java.io.File; import org.junit.Test; -import com.mysema.query.codegen.GenericExporter; +import com.querydsl.codegen.GenericExporter; public class GenericExporterTest { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java similarity index 85% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java index 0840e8a31e..ed7739b851 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/HibernateDomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import java.io.File; import java.io.IOException; @@ -20,12 +20,12 @@ import com.google.common.base.Charsets; import com.google.common.io.Files; -import com.mysema.query.annotations.Config; -import com.mysema.query.codegen.SerializerConfig; -import com.mysema.query.codegen.SimpleSerializerConfig; -import com.mysema.query.jpa.domain.Domain; -import com.mysema.query.jpa.domain2.Domain2; -import com.mysema.util.FileUtils; +import com.querydsl.core.annotations.Config; +import com.querydsl.codegen.SerializerConfig; +import com.querydsl.codegen.SimpleSerializerConfig; +import com.querydsl.jpa.domain.Domain; +import com.querydsl.jpa.domain2.Domain2; +import com.querydsl.core.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; import static org.junit.Assert.assertTrue; @@ -46,7 +46,7 @@ public void Execute_MyEntity() throws IOException { new File("target/gen6"), config); exporter.execute(); - File targetFile = new File("target/gen6/com/mysema/query/jpa/codegen/QMyEntity.java"); + File targetFile = new File("target/gen6/com/querydsl/jpa/codegen/QMyEntity.java"); assertContains(targetFile, "StringPath pk1", "StringPath pk2", "StringPath prop1"); CompileUtils.compile("target/gen6"); @@ -62,7 +62,7 @@ public void Execute_Contact() throws IOException { new File("target/gen1"), config); exporter.execute(); - File targetFile = new File("target/gen1/com/mysema/query/jpa/domain2/QContact.java"); + File targetFile = new File("target/gen1/com/querydsl/jpa/domain2/QContact.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); @@ -79,7 +79,7 @@ public void Execute_Contact_with_Suffix() throws IOException { "target/gen1"), config); exporter.execute(); - File targetFile = new File("target/gen1/com/mysema/query/jpa/domain2/ContactType.java"); + File targetFile = new File("target/gen1/com/querydsl/jpa/domain2/ContactType.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); @@ -96,7 +96,7 @@ public void Execute_Contact2() throws IOException { new File("target/gen2"), config); exporter.execute(); - File targetFile = new File("target/gen2/com/mysema/query/jpa/domain2/QContact.java"); + File targetFile = new File("target/gen2/com/querydsl/jpa/domain2/QContact.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); @@ -115,12 +115,12 @@ public void Execute_Multiple() throws IOException { exporter.execute(); List failures = new ArrayList(); - for (File file : new File("target/gen3/com/mysema/query/jpa/domain").listFiles()) { + for (File file : new File("target/gen3/com/querydsl/jpa/domain").listFiles()) { String result1 = Files.toString(file, Charsets.UTF_8); String result2 = Files .toString( new File( - "../querydsl-jpa/target/generated-test-sources/java/com/mysema/query/jpa/domain", + "../querydsl-jpa/target/generated-test-sources/java/com/querydsl/jpa/domain", file.getName()), Charsets.UTF_8); if (!result1.equals(result2)) { System.err.println(file.getName()); @@ -147,12 +147,12 @@ public void Execute_Multiple2() throws IOException { exporter.execute(); List failures = new ArrayList(); - for (File file : new File("target/gen4/com/mysema/query/jpa/domain2").listFiles()) { + for (File file : new File("target/gen4/com/querydsl/jpa/domain2").listFiles()) { String result1 = Files.toString(file, Charsets.UTF_8); String result2 = Files .toString( new File( - "../querydsl-jpa/target/generated-test-sources/java/com/mysema/query/jpa/domain2", + "../querydsl-jpa/target/generated-test-sources/java/com/querydsl/jpa/domain2", file.getName()), Charsets.UTF_8); if (!result1.equals(result2)) { System.err.println(file.getName()); @@ -178,10 +178,10 @@ public void Execute_Store() throws IOException { new File("target/gen5"), config); exporter.execute(); - File targetFile = new File("target/gen5/com/mysema/query/jpa/domain3/QStore.java"); + File targetFile = new File("target/gen5/com/querydsl/jpa/domain3/QStore.java"); assertContains(targetFile, "StringPath code", "StringPath address"); - targetFile = new File("target/gen5/com/mysema/query/jpa/domain3/QHardwareStore.java"); + targetFile = new File("target/gen5/com/querydsl/jpa/domain3/QHardwareStore.java"); assertContains(targetFile, "StringPath code = _super.code;", "StringPath address"); CompileUtils.compile("target/gen5"); diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/JPADomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/JPADomainExporterTest.java similarity index 86% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/JPADomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/JPADomainExporterTest.java index e53586e1ee..37211dba0b 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/JPADomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/JPADomainExporterTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -36,12 +36,12 @@ import com.google.common.base.Charsets; import com.google.common.io.Files; -import com.mysema.query.annotations.Config; -import com.mysema.query.codegen.SerializerConfig; -import com.mysema.query.codegen.SimpleSerializerConfig; -import com.mysema.query.jpa.domain.Domain; -import com.mysema.query.jpa.domain2.Domain2; -import com.mysema.util.FileUtils; +import com.querydsl.codegen.SerializerConfig; +import com.querydsl.codegen.SimpleSerializerConfig; +import com.querydsl.core.annotations.Config; +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.domain.Domain; +import com.querydsl.jpa.domain2.Domain2; public class JPADomainExporterTest { @@ -83,7 +83,7 @@ public void Execute_MyEntity() throws IOException { new File("target/jpagen6"), convert(config)); exporter.execute(); - File targetFile = new File("target/jpagen6/com/mysema/query/jpa/codegen/QMyEntity.java"); + File targetFile = new File("target/jpagen6/com/querydsl/jpa/codegen/QMyEntity.java"); assertContains(targetFile, "StringPath pk1", "StringPath pk2", "StringPath prop1"); } @@ -97,7 +97,7 @@ public void Execute_Contact() throws IOException { new File("target/jpagen1"), convert(config)); exporter.execute(); - File targetFile = new File("target/jpagen1/com/mysema/query/jpa/domain2/QContact.java"); + File targetFile = new File("target/jpagen1/com/querydsl/jpa/domain2/QContact.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); } @@ -112,7 +112,7 @@ public void Execute_Contact_with_Suffix() throws IOException { "target/jpagen1"), convert(config)); exporter.execute(); - File targetFile = new File("target/jpagen1/com/mysema/query/jpa/domain2/ContactType.java"); + File targetFile = new File("target/jpagen1/com/querydsl/jpa/domain2/ContactType.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); } @@ -127,7 +127,7 @@ public void Execute_Contact2() throws IOException { new File("target/jpagen2"), convert(config)); exporter.execute(); - File targetFile = new File("target/jpagen2/com/mysema/query/jpa/domain2/QContact.java"); + File targetFile = new File("target/jpagen2/com/querydsl/jpa/domain2/QContact.java"); assertContains(targetFile, "StringPath email", "StringPath firstName", "NumberPath id", "StringPath lastName"); } @@ -144,12 +144,12 @@ public void Execute_Multiple() throws IOException { exporter.execute(); List failures = new ArrayList(); - for (File file : new File("target/jpagen3/com/mysema/query/jpa/domain").listFiles()) { + for (File file : new File("target/jpagen3/com/querydsl/jpa/domain").listFiles()) { String result1 = Files.toString(file, Charsets.UTF_8); String result2 = Files .toString( new File( - "../querydsl-jpa/target/generated-test-sources/java/com/mysema/query/jpa/domain", + "../querydsl-jpa/target/generated-test-sources/java/com/querydsl/jpa/domain", file.getName()), Charsets.UTF_8); if (!result1.equals(result2)) { System.err.println(file.getName()); @@ -177,12 +177,12 @@ public void Execute_Multiple2() throws IOException { exporter.execute(); List failures = new ArrayList(); - for (File file : new File("target/jpagen4/com/mysema/query/jpa/domain2").listFiles()) { + for (File file : new File("target/jpagen4/com/querydsl/jpa/domain2").listFiles()) { String result1 = Files.toString(file, Charsets.UTF_8); String result2 = Files .toString( new File( - "../querydsl-jpa/target/generated-test-sources/java/com/mysema/query/jpa/domain2", + "../querydsl-jpa/target/generated-test-sources/java/com/querydsl/jpa/domain2", file.getName()), Charsets.UTF_8); if (!result1.equals(result2)) { System.err.println(file.getName()); @@ -207,10 +207,10 @@ public void Execute_Store() throws IOException { new File("target/jpagen5"), convert(config)); exporter.execute(); - File targetFile = new File("target/jpagen5/com/mysema/query/jpa/domain3/QStore.java"); + File targetFile = new File("target/jpagen5/com/querydsl/jpa/domain3/QStore.java"); assertContains(targetFile, "StringPath code", "StringPath address"); - targetFile = new File("target/jpagen5/com/mysema/query/jpa/domain3/QHardwareStore.java"); + targetFile = new File("target/jpagen5/com/querydsl/jpa/domain3/QHardwareStore.java"); assertContains(targetFile, "StringPath code = _super.code;", "StringPath address"); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/MyEntity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/MyEntity.java similarity index 92% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/MyEntity.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/MyEntity.java index 4ed1ed05aa..962e977041 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/codegen/MyEntity.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/MyEntity.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.codegen; +package com.querydsl.jpa.codegen; public class MyEntity { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/ant/AntJPADomainExporterTest.java similarity index 87% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/ant/AntJPADomainExporterTest.java index fff9e5744c..398c547278 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/AntJPADomainExporterTest.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/ant/AntJPADomainExporterTest.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.ant; +package com.querydsl.jpa.codegen.ant; import static org.junit.Assert.assertTrue; @@ -19,7 +19,7 @@ public void testExecute() { exporter.execute(); // Verify that the Querydsl query type was created successfully. - assertTrue(new File("target/AntJPADomainExporterTest/com/mysema/query/jpa/ant/QDepartments.java").exists()); + assertTrue(new File("target/AntJPADomainExporterTest/com/querydsl/jpa/codegen/ant/QDepartments.java").exists()); } } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/ant/Departments.java similarity index 96% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/ant/Departments.java index 5064e18a0e..7e43fd9537 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/ant/Departments.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/ant/Departments.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.ant; +package com.querydsl.jpa.codegen.ant; /** * Auto-generated by: diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/CustomType.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/CustomType.java similarity index 59% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/CustomType.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/CustomType.java index 9c9c719d01..0124b19df9 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/CustomType.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/CustomType.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain10; +package com.querydsl.jpa.domain10; public class CustomType { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporter10Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/DomainExporter10Test.java similarity index 57% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporter10Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/DomainExporter10Test.java index dc3d5b28ad..75e6bf8a68 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/DomainExporter10Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/DomainExporter10Test.java @@ -1,15 +1,17 @@ -package com.mysema.query.jpa.domain10; +package com.querydsl.jpa.domain10; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter10Test { @@ -18,12 +20,12 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain10/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain10/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain10/QEntity.java").exists()); - assertFalse(new File(gen, "com/mysema/query/jpa/domain10/QCustomType.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain10/QEntity.java").exists()); + assertFalse(new File(gen, "com/querydsl/jpa/domain10/QCustomType.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/Entity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/Entity.java similarity index 65% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/Entity.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/Entity.java index 446f958884..02e6b74b00 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain10/Entity.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain10/Entity.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain10; +package com.querydsl.jpa.domain10; public class Entity { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporter11Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/DomainExporter11Test.java similarity index 52% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporter11Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/DomainExporter11Test.java index d6e87a9089..122b2e695c 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/DomainExporter11Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/DomainExporter11Test.java @@ -1,16 +1,18 @@ -package com.mysema.query.jpa.domain11; +package com.querydsl.jpa.domain11; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.google.common.base.Charsets; -import com.google.common.io.Files; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter11Test { @@ -19,17 +21,17 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain11/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain11/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain11/QOtherthing.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain11/QSomething.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain11/QOtherthing.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain11/QSomething.java").exists()); - String str = Files.toString(new File(gen, "com/mysema/query/jpa/domain11/QOtherthing.java"), Charsets.UTF_8); + String str = Files.toString(new File(gen, "com/querydsl/jpa/domain11/QOtherthing.java"), Charsets.UTF_8); assertTrue(str.contains("QSomething")); - str = Files.toString(new File(gen, "com/mysema/query/jpa/domain11/QSomething.java"), Charsets.UTF_8); + str = Files.toString(new File(gen, "com/querydsl/jpa/domain11/QSomething.java"), Charsets.UTF_8); assertTrue(str.contains("id")); CompileUtils.compile(gen.getAbsolutePath()); diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/ISomething.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/ISomething.java new file mode 100644 index 0000000000..3409174e26 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/ISomething.java @@ -0,0 +1,5 @@ +package com.querydsl.jpa.domain11; + +public interface ISomething { + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/Otherthing.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/Otherthing.java similarity index 66% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/Otherthing.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/Otherthing.java index d27c95195a..03879e9064 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/Otherthing.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/Otherthing.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain11; +package com.querydsl.jpa.domain11; public class Otherthing { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/Something.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/Something.java similarity index 64% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/Something.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/Something.java index dabeb47dfc..9bd03a8143 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain11/Something.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain11/Something.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain11; +package com.querydsl.jpa.domain11; public class Something implements ISomething { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporter12Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/DomainExporter12Test.java similarity index 56% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporter12Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/DomainExporter12Test.java index 34d94b8aa7..7f63e4aade 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporter12Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/DomainExporter12Test.java @@ -1,14 +1,16 @@ -package com.mysema.query.jpa.domain12; +package com.querydsl.jpa.domain12; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter12Test { @@ -17,12 +19,12 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain12/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain12/QEntity.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain12/QSupertype.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain12/QEntity.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain12/QSupertype.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Entity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/Entity.java similarity index 69% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Entity.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/Entity.java index 3babb46e26..c9876ce6a3 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Entity.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/Entity.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain12; +package com.querydsl.jpa.domain12; public class Entity extends Supertype { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Supertype.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/Supertype.java similarity index 56% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Supertype.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/Supertype.java index 69986c7224..447bac4f78 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Supertype.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain12/Supertype.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain12; +package com.querydsl.jpa.domain12; public class Supertype { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporter13Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/DomainExporter13Test.java similarity index 61% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporter13Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/DomainExporter13Test.java index 109993a5f8..dd785ff561 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/DomainExporter13Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/DomainExporter13Test.java @@ -1,14 +1,16 @@ -package com.mysema.query.jpa.domain13; +package com.querydsl.jpa.domain13; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter13Test { @@ -17,11 +19,11 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain13/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain13/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain13/QEntity.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain13/QEntity.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/Entity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/Entity.java similarity index 59% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/Entity.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/Entity.java index e1c6154b9d..ace5e36591 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/Entity.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/Entity.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain13; +package com.querydsl.jpa.domain13; class Entity { String id; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/Status.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/Status.java similarity index 53% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/Status.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/Status.java index 1c8409f07f..bab628f907 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain13/Status.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain13/Status.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain13; +package com.querydsl.jpa.domain13; public enum Status { BUSY, AVAILABLE; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporter14Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/DomainExporter14Test.java similarity index 55% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporter14Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/DomainExporter14Test.java index 22804fb742..00852806cc 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/DomainExporter14Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/DomainExporter14Test.java @@ -1,14 +1,16 @@ -package com.mysema.query.jpa.domain14; +package com.querydsl.jpa.domain14; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter14Test { @@ -17,12 +19,12 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain14/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain14/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain14/QSiCZuCapiRechtMapping.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain14/QMappingID.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain14/QSiCZuCapiRechtMapping.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain14/QMappingID.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/MappingID.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/MappingID.java similarity index 93% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/MappingID.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/MappingID.java index dac7633174..1a774a78e5 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/MappingID.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/MappingID.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain14; +package com.querydsl.jpa.domain14; import java.io.Serializable; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/SiCZuCapiRechtMapping.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/SiCZuCapiRechtMapping.java similarity index 87% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/SiCZuCapiRechtMapping.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/SiCZuCapiRechtMapping.java index b74794d59c..e508880967 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain14/SiCZuCapiRechtMapping.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain14/SiCZuCapiRechtMapping.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain14; +package com.querydsl.jpa.domain14; public abstract class SiCZuCapiRechtMapping { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporter15Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/DomainExporter15Test.java similarity index 51% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporter15Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/DomainExporter15Test.java index d4a783d93e..8ae61a89a4 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/DomainExporter15Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/DomainExporter15Test.java @@ -1,14 +1,16 @@ -package com.mysema.query.jpa.domain15; +package com.querydsl.jpa.domain15; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter15Test { @@ -17,13 +19,13 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain15/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain15/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain15/QEntity.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain15/QEntity2.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain15/QSuperclass.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain15/QEntity.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain15/QEntity2.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain15/QSuperclass.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Entity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Entity.java new file mode 100644 index 0000000000..bb430b5e81 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Entity.java @@ -0,0 +1,8 @@ +package com.querydsl.jpa.domain15; + +import com.querydsl.core.annotations.QueryEntity; + +@QueryEntity +public class Entity extends Superclass { + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Entity2.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Entity2.java new file mode 100644 index 0000000000..c100cb24c3 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Entity2.java @@ -0,0 +1,8 @@ +package com.querydsl.jpa.domain15; + +import com.querydsl.core.annotations.QueryEntity; + +@QueryEntity +public class Entity2 extends Superclass { + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Superclass.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Superclass.java similarity index 62% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Superclass.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Superclass.java index 83369488e5..8b58f0f662 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain15/Superclass.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain15/Superclass.java @@ -1,8 +1,8 @@ -package com.mysema.query.jpa.domain15; +package com.querydsl.jpa.domain15; import java.util.List; -import com.mysema.query.annotations.QuerySupertype; +import com.querydsl.core.annotations.QuerySupertype; @QuerySupertype public class Superclass { diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom.java new file mode 100644 index 0000000000..034abaecb2 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom.java @@ -0,0 +1,5 @@ +package com.querydsl.jpa.domain16; + +public class Custom { + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom2.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom2.java new file mode 100644 index 0000000000..cfae369b13 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom2.java @@ -0,0 +1,5 @@ +package com.querydsl.jpa.domain16; + +public class Custom2 { + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom3.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom3.java new file mode 100644 index 0000000000..49f746e9e8 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Custom3.java @@ -0,0 +1,5 @@ +package com.querydsl.jpa.domain16; + +public class Custom3 { + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/DomainExporter16Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/DomainExporter16Test.java new file mode 100644 index 0000000000..efb443abd8 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/DomainExporter16Test.java @@ -0,0 +1,35 @@ +package com.querydsl.jpa.domain16; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; + +import org.hibernate.cfg.Configuration; +import org.junit.Test; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; + +public class DomainExporter16Test { + + @Test + public void Execute() throws IOException { + File gen = new File("target/" + getClass().getSimpleName()); + FileUtils.delete(gen); + Configuration config = new Configuration(); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain16/domain.hbm.xml")); + HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); + exporter.execute(); + + assertTrue(new File(gen, "com/querydsl/jpa/domain16/QEntity.java").exists()); + assertFalse(new File(gen, "com/querydsl/jpa/domain16/QCustom.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain16/QCustom2.java").exists()); + assertFalse(new File(gen, "com/querydsl/jpa/domain16/QCustom3.java").exists()); + + CompileUtils.compile(gen.getAbsolutePath()); + } + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Entity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Entity.java similarity index 84% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Entity.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Entity.java index bd8af9787c..13d14667d4 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain16/Entity.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain16/Entity.java @@ -1,7 +1,7 @@ -package com.mysema.query.jpa.domain16; +package com.querydsl.jpa.domain16; -import com.mysema.query.annotations.PropertyType; -import com.mysema.query.annotations.QueryType; +import com.querydsl.core.annotations.PropertyType; +import com.querydsl.core.annotations.QueryType; public class Entity { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/CapiBCKeyedByGrundstueck.java similarity index 66% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/CapiBCKeyedByGrundstueck.java index e8c0ed1f78..78bec6bdcb 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBCKeyedByGrundstueck.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/CapiBCKeyedByGrundstueck.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain17; +package com.querydsl.jpa.domain17; public abstract class CapiBCKeyedByGrundstueck extends CapiBusinessClass { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/CapiBusinessClass.java similarity index 65% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/CapiBusinessClass.java index 33c8cacd01..6cfb042ebe 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/CapiBusinessClass.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/CapiBusinessClass.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain17; +package com.querydsl.jpa.domain17; public abstract class CapiBusinessClass implements ICapiBusinessClass { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporter17Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/DomainExporter17Test.java similarity index 65% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporter17Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/DomainExporter17Test.java index ae3d309e82..9abb516ead 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/DomainExporter17Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/DomainExporter17Test.java @@ -1,11 +1,11 @@ -package com.mysema.query.jpa.domain17; +package com.querydsl.jpa.domain17; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; +import com.querydsl.core.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; @@ -16,7 +16,7 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain17/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/HidaBez.java similarity index 77% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/HidaBez.java index 447217b369..a8bacbad61 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBez.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/HidaBez.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain17; +package com.querydsl.jpa.domain17; public abstract class HidaBez, G extends HidaBezGruppe> extends CapiBCKeyedByGrundstueck { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/HidaBezGruppe.java similarity index 86% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/HidaBezGruppe.java index 994770e78e..afe00811aa 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/HidaBezGruppe.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/HidaBezGruppe.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain17; +package com.querydsl.jpa.domain17; import java.util.SortedSet; import java.util.TreeSet; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/ICapiBusinessClass.java similarity index 68% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/ICapiBusinessClass.java index e6a3429b86..f2c044df7e 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain17/ICapiBusinessClass.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain17/ICapiBusinessClass.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain17; +package com.querydsl.jpa.domain17; public interface ICapiBusinessClass extends Comparable { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Contact.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Contact.java similarity index 90% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Contact.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Contact.java index e4a4334653..eb4378acc1 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Contact.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Contact.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; public abstract class Contact { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Customer.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Customer.java similarity index 66% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Customer.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Customer.java index 5c4e4afda7..475e877d49 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Customer.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Customer.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; public class Customer extends Person { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/CustomerContact.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/CustomerContact.java similarity index 56% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/CustomerContact.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/CustomerContact.java index 0678eb177e..4735cf134c 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/CustomerContact.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/CustomerContact.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; public class CustomerContact extends Contact { } \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/CustomerHistory.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/CustomerHistory.java similarity index 59% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/CustomerHistory.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/CustomerHistory.java index a844fde7ae..8a30f68a9b 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/CustomerHistory.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/CustomerHistory.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; public class CustomerHistory extends HistoryEntity { } \ No newline at end of file diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporter5Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/DomainExporter5Test.java similarity index 78% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporter5Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/DomainExporter5Test.java index 5f460496e3..154d04f94d 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/DomainExporter5Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/DomainExporter5Test.java @@ -1,17 +1,19 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.util.Arrays; -import com.google.common.base.Charsets; -import com.google.common.io.Files; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter5Test { @@ -23,12 +25,12 @@ public void Execute() throws IOException { for (String res : Arrays.asList("Customer.hbm.xml", "CustomerContact.hbm.xml", "CustomerHistory.hbm.xml")) { - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain5/" + res)); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain5/" + res)); } HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - File targetFile = new File(gen, "com/mysema/query/jpa/domain5/QCustomer.java"); + File targetFile = new File(gen, "com/querydsl/jpa/domain5/QCustomer.java"); assertContains(targetFile, "SetPath", "SetPath"); diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/HistoryEntity.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/HistoryEntity.java similarity index 91% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/HistoryEntity.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/HistoryEntity.java index f4e38b2811..8d27601b14 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/HistoryEntity.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/HistoryEntity.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; public class HistoryEntity { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Person.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Person.java similarity index 94% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Person.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Person.java index c6155f8747..9a6204886b 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain5/Person.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain5/Person.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain5; +package com.querydsl.jpa.domain5; import java.util.HashSet; import java.util.Set; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/Contact.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/Contact.java similarity index 93% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/Contact.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/Contact.java index bf9b839e29..5aa11a7cb5 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/Contact.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/Contact.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain6; +package com.querydsl.jpa.domain6; import java.util.List; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporter6Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/DomainExporter6Test.java similarity index 73% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporter6Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/DomainExporter6Test.java index 51ce24c0c5..3f9d2db4b8 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/DomainExporter6Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/DomainExporter6Test.java @@ -1,16 +1,18 @@ -package com.mysema.query.jpa.domain6; +package com.querydsl.jpa.domain6; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.google.common.base.Charsets; -import com.google.common.io.Files; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter6Test { @@ -19,14 +21,14 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain6/Contact.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain6/Contact.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - File targetFile = new File(gen, "com/mysema/query/jpa/domain6/QContact.java"); + File targetFile = new File(gen, "com/querydsl/jpa/domain6/QContact.java"); assertContains(targetFile, "ListPath phoneNumbers"); - targetFile = new File(gen, "com/mysema/query/jpa/domain6/QPhoneNumber.java"); + targetFile = new File(gen, "com/querydsl/jpa/domain6/QPhoneNumber.java"); assertContains(targetFile, "QPhoneNumber extends BeanPath", "StringPath number = createString(\"number\")"); diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/PhoneNumber.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/PhoneNumber.java similarity index 90% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/PhoneNumber.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/PhoneNumber.java index f0cb7fae91..ddca9faf01 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain6/PhoneNumber.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain6/PhoneNumber.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain6; +package com.querydsl.jpa.domain6; public class PhoneNumber { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/A.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/A.java similarity index 78% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/A.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/A.java index 3729373db9..94c19ac649 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/A.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/A.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain7; +package com.querydsl.jpa.domain7; import java.util.ArrayList; import java.util.List; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/B.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/B.java similarity index 81% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/B.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/B.java index 292a8d192d..9bcdb45738 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/B.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/B.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain7; +package com.querydsl.jpa.domain7; import java.util.ArrayList; import java.util.List; diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/C.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/C.java similarity index 63% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/C.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/C.java index 47bc9beab6..b7e21d9f87 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/C.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/C.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain7; +package com.querydsl.jpa.domain7; public class C { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporter7Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/DomainExporter7Test.java similarity index 52% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporter7Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/DomainExporter7Test.java index 2d5d56a54b..e774a7fa33 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain7/DomainExporter7Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain7/DomainExporter7Test.java @@ -1,14 +1,16 @@ -package com.mysema.query.jpa.domain7; +package com.querydsl.jpa.domain7; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter7Test { @@ -17,13 +19,13 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain7/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain7/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain7/QA.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain7/QB.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain7/QC.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain7/QA.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain7/QB.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain7/QC.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/A.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/A.java similarity index 55% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/A.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/A.java index 313354ad39..969a89ec7e 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/A.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/A.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain8; +package com.querydsl.jpa.domain8; public class A { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/B.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/B.java similarity index 65% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/B.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/B.java index be05b7ff21..87c9eec169 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/B.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/B.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain8; +package com.querydsl.jpa.domain8; public class B extends A { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporter8Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/DomainExporter8Test.java similarity index 56% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporter8Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/DomainExporter8Test.java index efd41186cf..ec09e656f6 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain8/DomainExporter8Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain8/DomainExporter8Test.java @@ -1,14 +1,16 @@ -package com.mysema.query.jpa.domain8; +package com.querydsl.jpa.domain8; + +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import static org.junit.Assert.assertTrue; + +import com.querydsl.core.util.FileUtils; +import com.querydsl.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; public class DomainExporter8Test { @@ -17,12 +19,12 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain8/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain8/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); - assertTrue(new File(gen, "com/mysema/query/jpa/domain8/QA.java").exists()); - assertTrue(new File(gen, "com/mysema/query/jpa/domain8/QB.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain8/QA.java").exists()); + assertTrue(new File(gen, "com/querydsl/jpa/domain8/QB.java").exists()); CompileUtils.compile(gen.getAbsolutePath()); } diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporter9Test.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/DomainExporter9Test.java similarity index 65% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporter9Test.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/DomainExporter9Test.java index 320ab1d041..8157db787b 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/DomainExporter9Test.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/DomainExporter9Test.java @@ -1,14 +1,14 @@ -package com.mysema.query.jpa.domain9; +package com.querydsl.jpa.domain9; import java.io.File; import java.io.IOException; -import com.mysema.query.jpa.codegen.CompileUtils; +import com.querydsl.jpa.codegen.CompileUtils; import org.hibernate.cfg.Configuration; import org.junit.Test; -import com.mysema.query.jpa.codegen.HibernateDomainExporter; -import com.mysema.util.FileUtils; +import com.querydsl.jpa.codegen.HibernateDomainExporter; +import com.querydsl.core.util.FileUtils; public class DomainExporter9Test { @@ -17,7 +17,7 @@ public void Execute() throws IOException { File gen = new File("target/" + getClass().getSimpleName()); FileUtils.delete(gen); Configuration config = new Configuration(); - config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain9/domain.hbm.xml")); + config.addFile(new File("src/test/resources/com/querydsl/jpa/domain9/domain.hbm.xml")); HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); exporter.execute(); diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/EigentumPersonRechtsgueltig.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/EigentumPersonRechtsgueltig.java similarity index 67% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/EigentumPersonRechtsgueltig.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/EigentumPersonRechtsgueltig.java index 08b0b00b62..a15ab0721a 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/EigentumPersonRechtsgueltig.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/EigentumPersonRechtsgueltig.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain9; +package com.querydsl.jpa.domain9; public abstract class EigentumPersonRechtsgueltig { diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/EigentumPersonRechtsgueltigSnapshot.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/EigentumPersonRechtsgueltigSnapshot.java similarity index 71% rename from querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/EigentumPersonRechtsgueltigSnapshot.java rename to querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/EigentumPersonRechtsgueltigSnapshot.java index 6bc5aa0c44..355008b083 100644 --- a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain9/EigentumPersonRechtsgueltigSnapshot.java +++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain9/EigentumPersonRechtsgueltigSnapshot.java @@ -1,4 +1,4 @@ -package com.mysema.query.jpa.domain9; +package com.querydsl.jpa.domain9; public class EigentumPersonRechtsgueltigSnapshot extends EigentumPersonRechtsgueltig { diff --git a/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml b/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml index 5454ddac91..59811934c6 100644 --- a/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml +++ b/querydsl-jpa-codegen/src/test/resources/META-INF/orm.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm orm_2_0.xsd" version="2.0"> - com.mysema.query.jpa.ant + com.querydsl.jpa.codegen.ant PROPERTY diff --git a/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml b/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml index 89caf15074..fe29de5beb 100644 --- a/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml +++ b/querydsl-jpa-codegen/src/test/resources/META-INF/persistence.xml @@ -6,7 +6,7 @@ org.hibernate.ejb.HibernatePersistence META-INF/orm.xml - com.mysema.query.jpa.ant.Departments + com.querydsl.jpa.codegen.ant.Departments true diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain10/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain10/domain.hbm.xml similarity index 85% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain10/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain10/domain.hbm.xml index 3ff1b00de0..4f5f577d14 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain10/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain10/domain.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain11/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain11/domain.hbm.xml similarity index 86% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain11/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain11/domain.hbm.xml index 40f62b43f3..5dcb0883c4 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain11/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain11/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain12/domain.hbm.xml similarity index 85% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain12/domain.hbm.xml index 30b532309e..8f00a4a5dd 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain12/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain13/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain13/domain.hbm.xml similarity index 71% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain13/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain13/domain.hbm.xml index 19dffc8fda..ad41fc2aee 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain13/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain13/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + @@ -11,7 +11,7 @@ - com.mysema.query.jpa.domain13.Status + com.querydsl.jpa.domain13.Status diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain14/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain14/domain.hbm.xml similarity index 82% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain14/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain14/domain.hbm.xml index f0475c0cde..20af550544 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain14/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain14/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain15/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain15/domain.hbm.xml similarity index 88% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain15/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain15/domain.hbm.xml index fb9537b380..31c5f05a0c 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain15/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain15/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain16/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain16/domain.hbm.xml similarity index 82% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain16/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain16/domain.hbm.xml index 672d3347d8..92e5a2f7d8 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain16/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain16/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain17/domain.hbm.xml similarity index 87% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain17/domain.hbm.xml index 0560bdf818..23dce4967e 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain17/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain17/domain.hbm.xml @@ -3,7 +3,7 @@ "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/Customer.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/Customer.hbm.xml similarity index 90% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/Customer.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/Customer.hbm.xml index 2b5303f7d0..aec87ca6d6 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/Customer.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/Customer.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/CustomerContact.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/CustomerContact.hbm.xml similarity index 83% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/CustomerContact.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/CustomerContact.hbm.xml index 2bf759fdc5..4350a53157 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/CustomerContact.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/CustomerContact.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/CustomerHistory.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/CustomerHistory.hbm.xml similarity index 83% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/CustomerHistory.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/CustomerHistory.hbm.xml index f24609dd0a..c93ed9cf72 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain5/CustomerHistory.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain5/CustomerHistory.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain6/Contact.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain6/Contact.hbm.xml similarity index 90% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain6/Contact.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain6/Contact.hbm.xml index c54f660d43..523a201e81 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain6/Contact.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain6/Contact.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain7/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain7/domain.hbm.xml similarity index 96% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain7/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain7/domain.hbm.xml index 7088c06fb4..bd4496eb7b 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain7/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain7/domain.hbm.xml @@ -2,7 +2,7 @@ - + a_id_seq diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain8/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain8/domain.hbm.xml similarity index 90% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain8/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain8/domain.hbm.xml index e6fdd7b958..42064e13e7 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain8/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain8/domain.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain9/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain9/domain.hbm.xml similarity index 86% rename from querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain9/domain.hbm.xml rename to querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain9/domain.hbm.xml index 73b0dbd0f8..b7698cb1c9 100644 --- a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain9/domain.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/com/querydsl/jpa/domain9/domain.hbm.xml @@ -2,7 +2,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/contact.hbm.xml b/querydsl-jpa-codegen/src/test/resources/contact.hbm.xml index bbe23fcf41..72265d314c 100644 --- a/querydsl-jpa-codegen/src/test/resources/contact.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/contact.hbm.xml @@ -1,6 +1,6 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/contact2.hbm.xml b/querydsl-jpa-codegen/src/test/resources/contact2.hbm.xml index 5d84dc2f6d..49c99a45fe 100644 --- a/querydsl-jpa-codegen/src/test/resources/contact2.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/contact2.hbm.xml @@ -1,7 +1,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/entity.hbm.xml b/querydsl-jpa-codegen/src/test/resources/entity.hbm.xml index e6c1a9789a..4cf5f79ed0 100644 --- a/querydsl-jpa-codegen/src/test/resources/entity.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/entity.hbm.xml @@ -1,7 +1,7 @@ - + diff --git a/querydsl-jpa-codegen/src/test/resources/hibernate.cfg.xml b/querydsl-jpa-codegen/src/test/resources/hibernate.cfg.xml index eb1c3b8cf2..9f53f999be 100644 --- a/querydsl-jpa-codegen/src/test/resources/hibernate.cfg.xml +++ b/querydsl-jpa-codegen/src/test/resources/hibernate.cfg.xml @@ -5,7 +5,7 @@ - com.mysema.query.jpa.support.ExtendedDerbyDialect + com.querydsl.jpa.support.ExtendedDerbyDialect org.apache.derby.jdbc.EmbeddedDriver jdbc:derby:target/derbydb;create=true diff --git a/querydsl-jpa-codegen/src/test/resources/store.hbm.xml b/querydsl-jpa-codegen/src/test/resources/store.hbm.xml index 09cf3dfd0e..07a20d88aa 100644 --- a/querydsl-jpa-codegen/src/test/resources/store.hbm.xml +++ b/querydsl-jpa-codegen/src/test/resources/store.hbm.xml @@ -2,7 +2,7 @@ - + @@ -48,7 +48,7 @@ org.hibernate.ejb.HibernatePersistence - + @@ -114,61 +114,61 @@ org.batoo.jpa.core.BatooPersistenceProvider - com.mysema.query.jpa.domain.Account - com.mysema.query.jpa.domain.Animal - com.mysema.query.jpa.domain.AuditLog - com.mysema.query.jpa.domain.Author - com.mysema.query.jpa.domain.Bar - com.mysema.query.jpa.domain.Book - com.mysema.query.jpa.domain.Calendar - com.mysema.query.jpa.domain.Cat - com.mysema.query.jpa.domain.Catalog - com.mysema.query.jpa.domain.Company - com.mysema.query.jpa.domain.Customer - com.mysema.query.jpa.domain.Department - com.mysema.query.jpa.domain.Document - com.mysema.query.jpa.domain.Dolphin - com.mysema.query.jpa.domain.DomesticCat - com.mysema.query.jpa.domain.EmbeddedType - com.mysema.query.jpa.domain.Employee - com.mysema.query.jpa.domain.Entity1 - com.mysema.query.jpa.domain.Entity2 - com.mysema.query.jpa.domain.EvilType - com.mysema.query.jpa.domain.Foo - com.mysema.query.jpa.domain.Formula - com.mysema.query.jpa.domain.Human - com.mysema.query.jpa.domain.InheritedProperties - com.mysema.query.jpa.domain.Item - com.mysema.query.jpa.domain.Location - com.mysema.query.jpa.domain.Mammal - com.mysema.query.jpa.domain.Name - com.mysema.query.jpa.domain.NameList - com.mysema.query.jpa.domain.Named - com.mysema.query.jpa.domain.Nationality - com.mysema.query.jpa.domain.Novel - com.mysema.query.jpa.domain.Numeric - com.mysema.query.jpa.domain.Order - com.mysema.query.jpa.domain.Parameter - com.mysema.query.jpa.domain.Payment - com.mysema.query.jpa.domain.Person - com.mysema.query.jpa.domain.PersonId - com.mysema.query.jpa.domain.Player - com.mysema.query.jpa.domain.Price - com.mysema.query.jpa.domain.Product - com.mysema.query.jpa.domain.Show - com.mysema.query.jpa.domain.SimpleTypes - com.mysema.query.jpa.domain.Status - com.mysema.query.jpa.domain.StatusChange - com.mysema.query.jpa.domain.Store - com.mysema.query.jpa.domain.Superclass - com.mysema.query.jpa.domain.User - com.mysema.query.jpa.domain.World - com.mysema.query.jpa.domain4.BookDefinition - com.mysema.query.jpa.domain4.BookID - com.mysema.query.jpa.domain4.BookMark - com.mysema.query.jpa.domain4.BookVersion - com.mysema.query.jpa.domain4.BookVersionPK - com.mysema.query.jpa.domain4.Library + com.querydsl.jpa.domain.Account + com.querydsl.jpa.domain.Animal + com.querydsl.jpa.domain.AuditLog + com.querydsl.jpa.domain.Author + com.querydsl.jpa.domain.Bar + com.querydsl.jpa.domain.Book + com.querydsl.jpa.domain.Calendar + com.querydsl.jpa.domain.Cat + com.querydsl.jpa.domain.Catalog + com.querydsl.jpa.domain.Company + com.querydsl.jpa.domain.Customer + com.querydsl.jpa.domain.Department + com.querydsl.jpa.domain.Document + com.querydsl.jpa.domain.Dolphin + com.querydsl.jpa.domain.DomesticCat + com.querydsl.jpa.domain.EmbeddedType + com.querydsl.jpa.domain.Employee + com.querydsl.jpa.domain.Entity1 + com.querydsl.jpa.domain.Entity2 + com.querydsl.jpa.domain.EvilType + com.querydsl.jpa.domain.Foo + com.querydsl.jpa.domain.Formula + com.querydsl.jpa.domain.Human + com.querydsl.jpa.domain.InheritedProperties + com.querydsl.jpa.domain.Item + com.querydsl.jpa.domain.Location + com.querydsl.jpa.domain.Mammal + com.querydsl.jpa.domain.Name + com.querydsl.jpa.domain.NameList + com.querydsl.jpa.domain.Named + com.querydsl.jpa.domain.Nationality + com.querydsl.jpa.domain.Novel + com.querydsl.jpa.domain.Numeric + com.querydsl.jpa.domain.Order + com.querydsl.jpa.domain.Parameter + com.querydsl.jpa.domain.Payment + com.querydsl.jpa.domain.Person + com.querydsl.jpa.domain.PersonId + com.querydsl.jpa.domain.Player + com.querydsl.jpa.domain.Price + com.querydsl.jpa.domain.Product + com.querydsl.jpa.domain.Show + com.querydsl.jpa.domain.SimpleTypes + com.querydsl.jpa.domain.Status + com.querydsl.jpa.domain.StatusChange + com.querydsl.jpa.domain.Store + com.querydsl.jpa.domain.Superclass + com.querydsl.jpa.domain.User + com.querydsl.jpa.domain.World + com.querydsl.jpa.domain4.BookDefinition + com.querydsl.jpa.domain4.BookID + com.querydsl.jpa.domain4.BookMark + com.querydsl.jpa.domain4.BookVersion + com.querydsl.jpa.domain4.BookVersionPK + com.querydsl.jpa.domain4.Library @@ -260,7 +260,7 @@ org.hibernate.ejb.HibernatePersistence - + @@ -277,7 +277,7 @@ org.hibernate.ejb.HibernatePersistence - + diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/derby.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/derby.properties similarity index 81% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/derby.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/derby.properties index 209cbf0650..434e34d120 100644 --- a/querydsl-jpa/src/test/resources/com/mysema/testutil/derby.properties +++ b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/derby.properties @@ -1,6 +1,6 @@ ## Derby #hibernate.dialect=org.hibernate.dialect.DerbyDialect -hibernate.dialect=com.mysema.query.jpa.support.ExtendedDerbyDialect +hibernate.dialect=com.querydsl.jpa.support.ExtendedDerbyDialect hibernate.connection.driver_class=org.apache.derby.jdbc.EmbeddedDriver hibernate.connection.url=jdbc:derby:target/derbydb;create=true diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/h2.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/h2.properties similarity index 100% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/h2.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/h2.properties diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/hsqldb.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/hsqldb.properties similarity index 83% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/hsqldb.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/hsqldb.properties index 372403c439..f2b58247d1 100644 --- a/querydsl-jpa/src/test/resources/com/mysema/testutil/hsqldb.properties +++ b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/hsqldb.properties @@ -1,6 +1,6 @@ ## HSQL #hibernate.dialect=org.hibernate.dialect.HSQLDialect -hibernate.dialect=com.mysema.query.jpa.support.ExtendedHSQLDialect +hibernate.dialect=com.querydsl.jpa.support.ExtendedHSQLDialect hibernate.connection.url=jdbc:hsqldb:file:target/testdb;shutdown=true hibernate.connection.driver_class=org.hsqldb.jdbcDriver hibernate.connection.username=sa diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/mssql.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/mssql.properties similarity index 100% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/mssql.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/mssql.properties diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/mysql.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/mysql.properties similarity index 100% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/mysql.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/mysql.properties diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/oracle.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/oracle.properties similarity index 85% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/oracle.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/oracle.properties index 26248b1a9d..11964df35d 100644 --- a/querydsl-jpa/src/test/resources/com/mysema/testutil/oracle.properties +++ b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/oracle.properties @@ -1,6 +1,6 @@ ## MySQL #hibernate.dialect=org.hibernate.dialect.Oracle10gDialect -hibernate.dialect=com.mysema.query.jpa.support.ExtendedOracleDialect +hibernate.dialect=com.querydsl.jpa.support.ExtendedOracleDialect hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:xe hibernate.connection.username=querydsl diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/postgres.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/postgres.properties similarity index 100% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/postgres.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/postgres.properties diff --git a/querydsl-jpa/src/test/resources/com/mysema/testutil/teradata.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/teradata.properties similarity index 83% rename from querydsl-jpa/src/test/resources/com/mysema/testutil/teradata.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/teradata.properties index a621b98997..82e1bf205a 100644 --- a/querydsl-jpa/src/test/resources/com/mysema/testutil/teradata.properties +++ b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/teradata.properties @@ -1,4 +1,4 @@ -hibernate.dialect=com.mysema.query.jpa.support.TeradataDialect +hibernate.dialect=com.querydsl.jpa.support.TeradataDialect hibernate.connection.driver_class=com.teradata.jdbc.TeraDriver hibernate.connection.url=jdbc:teradata://teradata/dbc hibernate.connection.username=querydsl diff --git a/querydsl-jpa/src/test/resources/contact.hbm.xml b/querydsl-jpa/src/test/resources/contact.hbm.xml index bbe23fcf41..72265d314c 100644 --- a/querydsl-jpa/src/test/resources/contact.hbm.xml +++ b/querydsl-jpa/src/test/resources/contact.hbm.xml @@ -1,6 +1,6 @@ - + diff --git a/querydsl-jpa/src/test/resources/contact2.hbm.xml b/querydsl-jpa/src/test/resources/contact2.hbm.xml index 5d84dc2f6d..49c99a45fe 100644 --- a/querydsl-jpa/src/test/resources/contact2.hbm.xml +++ b/querydsl-jpa/src/test/resources/contact2.hbm.xml @@ -1,7 +1,7 @@ - + diff --git a/querydsl-jpa/src/test/resources/hibernate.cfg.xml b/querydsl-jpa/src/test/resources/hibernate.cfg.xml index eb1c3b8cf2..9f53f999be 100644 --- a/querydsl-jpa/src/test/resources/hibernate.cfg.xml +++ b/querydsl-jpa/src/test/resources/hibernate.cfg.xml @@ -5,7 +5,7 @@ - com.mysema.query.jpa.support.ExtendedDerbyDialect + com.querydsl.jpa.support.ExtendedDerbyDialect org.apache.derby.jdbc.EmbeddedDriver jdbc:derby:target/derbydb;create=true diff --git a/querydsl-jpa/src/test/resources/log4j.properties b/querydsl-jpa/src/test/resources/log4j.properties index 7cc69be2d3..feedb7dbce 100644 --- a/querydsl-jpa/src/test/resources/log4j.properties +++ b/querydsl-jpa/src/test/resources/log4j.properties @@ -12,5 +12,5 @@ log4j.appender.querydsl=org.apache.log4j.ConsoleAppender log4j.appender.querydsl.layout=org.apache.log4j.PatternLayout log4j.appender.querydsl.layout.ConversionPattern=Querydsl : %C#%M - %m%n -#log4j.logger.com.mysema.query.jpa.hibernate=DEBUG, querydsl -#log4j.logger.com.mysema.query.jpa.impl=DEBUG, querydsl \ No newline at end of file +#log4j.logger.com.querydsl.jpa.hibernate=DEBUG, querydsl +#log4j.logger.com.querydsl.jpa.impl=DEBUG, querydsl \ No newline at end of file diff --git a/querydsl-jpa/src/test/resources/store.hbm.xml b/querydsl-jpa/src/test/resources/store.hbm.xml index 09cf3dfd0e..07a20d88aa 100644 --- a/querydsl-jpa/src/test/resources/store.hbm.xml +++ b/querydsl-jpa/src/test/resources/store.hbm.xml @@ -2,7 +2,7 @@ - + + + cglib + cglib + ${cglib.version} + test + + + org.hsqldb + hsqldb + ${hsqldb.version} + test + + + + org.apache.derby + derby + ${derby.version} + test + + + mysql + mysql-connector-java + ${mysql.version} + test + + + org.postgresql + postgresql + ${postgresql.version} + test + + + org.postgis + postgis-jdbc + 1.3.3 + true + + + com.oracle + ojdbc6 + ${oracle.version} + true + + + oracle + sdoapi + 11.2.0 + true + + + net.sourceforge.jtds + jtds + ${jtds.version} + test + + + com.h2database + h2 + ${h2.version} + test + + + org.opengeo + geodb + 0.7 + test + + + + cubrid + cubrid-jdbc + ${cubrid.version} + test + + + org.firebirdsql.jdbc + jaybird-jdk16 + ${firebird.version} + test + + + + org.xerial + sqlite-jdbc + ${sqlite.version} + test + + + + com.querydsl + querydsl-core + ${project.version} + test + test-jar + + + com.querydsl + querydsl-sql + ${project.version} + test + test-jar + + + + + jdepend + jdepend + 2.9.1 + test + + + + + com.infradna.tool + bridge-method-annotation + ${bridge-method.version} + + + org.jenkins-ci + annotation-indexer + + + + + org.jvnet.hudson + annotation-indexer + 1.2 + true + + + + + + + com.infradna.tool + bridge-method-injector + ${bridge-method.version} + + + + process + + + + + + com.infradna.tool + bridge-method-annotation + ${bridge-method.version} + true + + + org.jenkins-ci + annotation-indexer + + + + + org.jvnet.hudson + annotation-indexer + 1.2 + + + + + org.apache.felix + maven-bundle-plugin + + + + org.apache.maven.plugins + maven-jar-plugin + + + test-jar + + test-jar + + + + + + maven-source-plugin + + + package + + test-jar + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + derby.stream.error.file + target/derby.log + + + + + + + + + + + teradata + + + com.teradata + teradata-jdbc + ${teradata.version} + test + + + com.teradata + teradata-config + ${teradata.version} + test + + + + + db2 + + + com.ibm.db2 + db2-jdbc + 1.0 + + + + + + diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeoDBTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeoDBTemplates.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeoDBTemplates.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeoDBTemplates.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeoDBWkbType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeoDBWkbType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeoDBWkbType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeoDBWkbType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeometryWkbType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeometryWkbType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeometryWkbType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeometryWkbType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeometryWktClobType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeometryWktClobType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeometryWktClobType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeometryWktClobType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeometryWktType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeometryWktType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/GeometryWktType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/GeometryWktType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/JGeometryConverter.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/JGeometryConverter.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/JGeometryConverter.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/JGeometryConverter.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/JGeometryType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/JGeometryType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/JGeometryType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/JGeometryType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/MySQLSpatialTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/MySQLSpatialTemplates.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/MySQLSpatialTemplates.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/MySQLSpatialTemplates.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/MySQLWkbType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/MySQLWkbType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/MySQLWkbType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/MySQLWkbType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/OracleSpatialTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/OracleSpatialTemplates.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/OracleSpatialTemplates.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/OracleSpatialTemplates.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/PGgeometryConverter.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PGgeometryConverter.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/PGgeometryConverter.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PGgeometryConverter.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/PGgeometryType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PGgeometryType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/PGgeometryType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PGgeometryType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplates.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplates.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplates.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryReader.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryReader.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryReader.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryReader.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryType.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryType.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryType.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryType.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryWriter.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryWriter.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryWriter.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SQLServerGeometryWriter.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/SpatialRefSys.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialRefSys.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/SpatialRefSys.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialRefSys.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/spatial/TeradataSpatialTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/TeradataSpatialTemplates.java similarity index 100% rename from querydsl-sql/src/main/java/com/querydsl/sql/spatial/TeradataSpatialTemplates.java rename to querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/TeradataSpatialTemplates.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/GeoDBTemplatesTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/GeoDBTemplatesTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/GeoDBTemplatesTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/GeoDBTemplatesTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/JGeometryConverterTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/JGeometryConverterTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/JGeometryConverterTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/JGeometryConverterTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/MySQLSpatialTemplatesTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/MySQLSpatialTemplatesTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/MySQLSpatialTemplatesTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/MySQLSpatialTemplatesTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/PGgeometryConverterTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/PGgeometryConverterTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/PGgeometryConverterTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/PGgeometryConverterTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/PostGISTemplatesTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/PostGISTemplatesTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/PostGISTemplatesTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/PostGISTemplatesTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/QShapes.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/QShapes.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/QShapes.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/QShapes.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplatesTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplatesTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplatesTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SQLServer2008SpatialTemplatesTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/SQLServerGeometryWriterTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SQLServerGeometryWriterTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/SQLServerGeometryWriterTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SQLServerGeometryWriterTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/Shapes.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/Shapes.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/Shapes.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/Shapes.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SpatialBase.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java similarity index 99% rename from querydsl-sql/src/test/java/com/querydsl/sql/SpatialBase.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java index e3a4f7e778..8763a5d25d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SpatialBase.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java @@ -1,4 +1,4 @@ -package com.querydsl.sql; +package com.querydsl.sql.spatial; import java.util.List; @@ -9,6 +9,7 @@ import com.querydsl.spatial.GeometryExpressions; import com.querydsl.spatial.PointExpression; import com.querydsl.spatial.path.*; +import com.querydsl.sql.AbstractBaseTest; import com.querydsl.sql.spatial.QShapes; import com.querydsl.sql.spatial.QSpatialRefSys; import com.querydsl.sql.spatial.Shapes; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/spatial/TeradataSpatialTemplatesTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/TeradataSpatialTemplatesTest.java similarity index 100% rename from querydsl-sql/src/test/java/com/querydsl/sql/spatial/TeradataSpatialTemplatesTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/TeradataSpatialTemplatesTest.java diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/H2LiteralsSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/H2LiteralsSuiteTest.java new file mode 100644 index 0000000000..e03a096f5c --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/H2LiteralsSuiteTest.java @@ -0,0 +1,21 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; + +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.GeoDBTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +public class H2LiteralsSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initH2(); + Connections.initConfiguration(GeoDBTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/H2SuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/H2SuiteTest.java new file mode 100644 index 0000000000..6763ca1e7c --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/H2SuiteTest.java @@ -0,0 +1,20 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; + +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.GeoDBTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +public class H2SuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initH2(); + Connections.initConfiguration(GeoDBTemplates.builder().newLineToSingleSpace().build()); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MSSQLLiteralsSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MSSQLLiteralsSuiteTest.java new file mode 100644 index 0000000000..374b0eca71 --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MSSQLLiteralsSuiteTest.java @@ -0,0 +1,24 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.SQLServer2008SpatialTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class MSSQLLiteralsSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initSQLServer(); + Connections.initConfiguration(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MSSQLSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MSSQLSuiteTest.java new file mode 100644 index 0000000000..71b8b07734 --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MSSQLSuiteTest.java @@ -0,0 +1,23 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.SQLServer2008SpatialTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class MSSQLSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initSQLServer(); + Connections.initConfiguration(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MySQLLiteralsSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MySQLLiteralsSuiteTest.java new file mode 100644 index 0000000000..feb79d2d2f --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MySQLLiteralsSuiteTest.java @@ -0,0 +1,24 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.MySQLSpatialTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class MySQLLiteralsSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initMySQL(); + Connections.initConfiguration(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MySQLSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MySQLSuiteTest.java new file mode 100644 index 0000000000..0fdbfea877 --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/MySQLSuiteTest.java @@ -0,0 +1,23 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.MySQLSpatialTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class MySQLSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initMySQL(); + Connections.initConfiguration(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java new file mode 100644 index 0000000000..d83b92e555 --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java @@ -0,0 +1,24 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.PostGISTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class PostgreSQLLiteralsSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initPostgres(); + Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java new file mode 100644 index 0000000000..b3bc6b5fa5 --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java @@ -0,0 +1,23 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.PostGISTemplates; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class PostgreSQLSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initPostgres(); + Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/SpatialTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java similarity index 89% rename from querydsl-sql/src/test/java/com/querydsl/sql/suites/SpatialTest.java rename to querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java index ce8f571425..aff7063729 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/SpatialTest.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java @@ -1,10 +1,6 @@ -package com.querydsl.sql.suites; +package com.querydsl.sql.spatial.suites; -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; +import java.sql.*; import org.junit.After; import org.junit.Before; diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/TeradataLiteralsSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/TeradataLiteralsSuiteTest.java new file mode 100644 index 0000000000..2be616c173 --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/TeradataLiteralsSuiteTest.java @@ -0,0 +1,24 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.spatial.TeradataSpatialTemplates; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class TeradataLiteralsSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initTeradata(); + Connections.initConfiguration(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.getConfiguration().setUseLiterals(true); + } + +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/TeradataSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/TeradataSuiteTest.java new file mode 100644 index 0000000000..4c6dc2e66b --- /dev/null +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/TeradataSuiteTest.java @@ -0,0 +1,23 @@ +package com.querydsl.sql.spatial.suites; + +import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; +import com.querydsl.sql.spatial.SpatialBase; +import com.querydsl.sql.spatial.TeradataSpatialTemplates; +import com.querydsl.sql.suites.AbstractSuite; + +@Category(ExternalDB.class) +public class TeradataSuiteTest extends AbstractSuite { + + public static class Spatial extends SpatialBase {} + + @BeforeClass + public static void setUp() throws Exception { + Connections.initTeradata(); + Connections.initConfiguration(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + } + +} diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index e96a00cc27..e0ab21871f 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -30,18 +30,7 @@ querydsl-core ${project.version} - - com.querydsl - querydsl-spatial - ${project.version} - true - - - com.vividsolutions - jts - 1.10 - true - + joda-time joda-time @@ -105,19 +94,19 @@ org.postgis postgis-jdbc 1.3.3 - true + test com.oracle ojdbc6 ${oracle.version} - true + test oracle sdoapi 11.2.0 - true + test net.sourceforge.jtds @@ -164,8 +153,14 @@ ${project.version} test test-jar - - + + + com.querydsl + querydsl-spatial + ${project.version} + test + + jdepend jdepend diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java index 2e1c557848..edd7a14c68 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java @@ -6,12 +6,12 @@ import javax.annotation.Generated; -import com.querydsl.sql.ColumnMetadata; -import com.querydsl.sql.spatial.RelationalPathSpatial; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.path.BooleanPath; import com.querydsl.core.types.path.NumberPath; +import com.querydsl.sql.ColumnMetadata; +import com.querydsl.sql.RelationalPathBase; @@ -19,7 +19,7 @@ * QNumberTest is a Querydsl query type for QNumberTest */ @Generated("com.querydsl.sql.codegen.MetaDataSerializer") -public class QNumberTest extends RelationalPathSpatial { +public class QNumberTest extends RelationalPathBase { private static final long serialVersionUID = 291758928; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java index 4abaf4823d..34abad8ac1 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java @@ -1,15 +1,17 @@ package com.querydsl.sql.domain; -import javax.annotation.Generated; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; + import java.sql.Types; import java.util.UUID; -import com.querydsl.sql.ColumnMetadata; -import com.querydsl.sql.spatial.RelationalPathSpatial; +import javax.annotation.Generated; + import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.path.SimplePath; -import static com.querydsl.core.types.PathMetadataFactory.forVariable; +import com.querydsl.sql.ColumnMetadata; +import com.querydsl.sql.RelationalPathBase; @@ -17,7 +19,7 @@ * QUuids is a Querydsl query type for QUuids */ @Generated("com.querydsl.sql.codegen.MetaDataSerializer") -public class QUuids extends RelationalPathSpatial { +public class QUuids extends RelationalPathBase { private static final long serialVersionUID = -1780705501; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java index 68fa74e0ac..528bb4f27c 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java @@ -1,14 +1,16 @@ package com.querydsl.sql.domain; -import javax.annotation.Generated; +import static com.querydsl.core.types.PathMetadataFactory.forVariable; + import java.sql.Types; -import com.querydsl.sql.ColumnMetadata; -import com.querydsl.sql.spatial.RelationalPathSpatial; +import javax.annotation.Generated; + import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.path.StringPath; -import static com.querydsl.core.types.PathMetadataFactory.forVariable; +import com.querydsl.sql.ColumnMetadata; +import com.querydsl.sql.RelationalPathBase; @@ -16,7 +18,7 @@ * QXmlTest is a Querydsl query type for QXmlTest */ @Generated("com.querydsl.sql.codegen.MetaDataSerializer") -public class QXmlTest extends RelationalPathSpatial { +public class QXmlTest extends RelationalPathBase { private static final long serialVersionUID = 574759316; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2LiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2LiteralsSuiteTest.java index 13a7e76285..5b05a92ca0 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2LiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2LiteralsSuiteTest.java @@ -3,7 +3,6 @@ import org.junit.BeforeClass; import com.querydsl.sql.*; -import com.querydsl.sql.spatial.GeoDBTemplates; public class H2LiteralsSuiteTest extends AbstractSuite { @@ -14,7 +13,6 @@ public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class Spatial extends SpatialBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} @@ -23,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.initConfiguration(GeoDBTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(H2Templates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2SuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2SuiteTest.java index 38466dbda7..816c60c278 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2SuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2SuiteTest.java @@ -3,7 +3,6 @@ import org.junit.BeforeClass; import com.querydsl.sql.*; -import com.querydsl.sql.spatial.GeoDBTemplates; public class H2SuiteTest extends AbstractSuite { @@ -14,7 +13,6 @@ public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class Spatial extends SpatialBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} @@ -23,7 +21,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initH2(); - Connections.initConfiguration(GeoDBTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(H2Templates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2WithQuotingTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2WithQuotingTest.java index d2f6f0f1a5..658db25f12 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2WithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/H2WithQuotingTest.java @@ -12,7 +12,6 @@ public static class Insert extends InsertBase {} public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} - public static class Select extends SelectBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLLiteralsSuiteTest.java index 300b764442..b2892cb7ec 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLLiteralsSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.SQLServer2008SpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class MSSQLLiteralsSuiteTest extends AbstractSuite { @@ -17,7 +16,6 @@ public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} @@ -27,7 +25,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initSQLServer(); - Connections.initConfiguration(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(SQLServer2008Templates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLSuiteTest.java index 2aaadee65d..201c05a256 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MSSQLSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.SQLServer2008SpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class MSSQLSuiteTest extends AbstractSuite { @@ -17,7 +16,6 @@ public static class KeywordQuoting extends KeywordQuotingBase {} public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} @@ -27,7 +25,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initSQLServer(); - Connections.initConfiguration(SQLServer2008SpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(SQLServer2008Templates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLLiteralsSuiteTest.java index 1bb578951f..93a6f04d18 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLLiteralsSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.MySQLSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class MySQLLiteralsSuiteTest extends AbstractSuite { @@ -18,7 +17,6 @@ public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectMySQL extends SelectMySQLBase {} - public static class Spatial extends SpatialBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} @@ -27,7 +25,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); - Connections.initConfiguration(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(MySQLTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLSuiteTest.java index 13a6152f2c..4207c793a1 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.MySQLSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class MySQLSuiteTest extends AbstractSuite { @@ -18,7 +17,6 @@ public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectMySQL extends SelectMySQLBase {} - public static class Spatial extends SpatialBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} public static class Union extends UnionBase {} @@ -27,7 +25,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); - Connections.initConfiguration(MySQLSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(MySQLTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLWithQuotingTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLWithQuotingTest.java index 4bfcf25818..c2511cb1b8 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLWithQuotingTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/MySQLWithQuotingTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.MySQLSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class MySQLWithQuotingTest extends AbstractSuite { @@ -25,7 +24,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initMySQL(); - Connections.initConfiguration(MySQLSpatialTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(MySQLTemplates.builder().quote().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleLiteralsSuiteTest.java index 66aeebb298..bcf5577fb0 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleLiteralsSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.OracleSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class OracleLiteralsSuiteTest extends AbstractSuite { @@ -27,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); - Connections.initConfiguration(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(OracleTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleSuiteTest.java index dc2dbef0bf..e293f7e5f7 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/OracleSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.OracleSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class OracleSuiteTest extends AbstractSuite { @@ -27,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initOracle(); - Connections.initConfiguration(OracleSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(OracleTemplates.builder().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java index 162f9d7ca6..552f51ded3 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.PostGISTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class PostgreSQLLiteralsSuiteTest extends AbstractSuite { @@ -21,7 +20,7 @@ public static class KeywordQuoting extends KeywordQuotingBase { public void setUp() throws Exception { //NOTE: replacing the templates with a non-quoting one previous = configuration; - configuration = new Configuration(PostGISTemplates.builder().newLineToSingleSpace().build()); + configuration = new Configuration(PostgresTemplates.builder().newLineToSingleSpace().build()); super.setUp(); } @@ -36,7 +35,6 @@ public void tearDown() throws Exception { public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} @@ -46,7 +44,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initPostgres(); - Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(PostgresTemplates.builder().quote().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java index b752714562..a8cbb03b59 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.PostGISTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class PostgreSQLSuiteTest extends AbstractSuite { @@ -21,7 +20,7 @@ public static class KeywordQuoting extends KeywordQuotingBase { public void setUp() throws Exception { //NOTE: replacing the templates with a non-quoting one previous = configuration; - configuration = new Configuration(PostGISTemplates.builder().newLineToSingleSpace().build()); + configuration = new Configuration(PostgresTemplates.builder().newLineToSingleSpace().build()); super.setUp(); } @@ -36,7 +35,6 @@ public void tearDown() throws Exception { public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} - public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} @@ -46,7 +44,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initPostgres(); - Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initConfiguration(PostgresTemplates.builder().quote().newLineToSingleSpace().build()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataLiteralsSuiteTest.java index a396688447..171679656d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataLiteralsSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.TeradataSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class TeradataLiteralsSuiteTest extends AbstractSuite { @@ -18,7 +17,6 @@ public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectTeradata extends SelectTeradataBase {} - public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} @@ -28,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initTeradata(); - Connections.initConfiguration(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(TeradataTemplates.builder().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataSuiteTest.java index 2b6e58ce05..abf3ead40f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/TeradataSuiteTest.java @@ -3,9 +3,8 @@ import org.junit.BeforeClass; import org.junit.experimental.categories.Category; -import com.querydsl.sql.*; -import com.querydsl.sql.spatial.TeradataSpatialTemplates; import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.sql.*; @Category(ExternalDB.class) public class TeradataSuiteTest extends AbstractSuite { @@ -18,7 +17,6 @@ public static class LikeEscape extends LikeEscapeBase {} public static class Merge extends MergeBase {} public static class Select extends SelectBase {} public static class SelectTeradata extends SelectTeradataBase {} - public static class Spatial extends SpatialBase {} public static class SelectWindowFunctions extends SelectWindowFunctionsBase {} public static class Subqueries extends SubqueriesBase {} public static class Types extends TypesBase {} @@ -28,7 +26,7 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { Connections.initTeradata(); - Connections.initConfiguration(TeradataSpatialTemplates.builder().newLineToSingleSpace().build()); + Connections.initConfiguration(TeradataTemplates.builder().newLineToSingleSpace().build()); } } From 54735d4270187a164421748d38d4d62d64327861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 21 Jan 2015 18:11:22 +0200 Subject: [PATCH 0688/1968] Remove type(?) expression customizations --- .../java/com/querydsl/jpa/HQLTemplates.java | 9 --------- .../java/com/querydsl/jpa/JPQLSerializer.java | 20 ------------------- .../java/com/querydsl/jpa/JPQLTemplates.java | 5 ----- 3 files changed, 34 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java index d2326483b6..0d8984e6db 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java @@ -75,10 +75,6 @@ public HQLTemplates(char escape) { builder.put(BigDecimal.class, "big_decimal"); typeNames = builder.build(); - // TODO : remove this when Hibernate supports type(alias) - add(Ops.INSTANCE_OF, "{0}.class = {1}"); - // TODO : remove this when Hibernate supports type(alias) - add(JPQLOps.TYPE, "{0}.class"); // TODO : remove this when Hibernate supports member of properly add(JPQLOps.MEMBER_OF, "{0} in elements({1})"); add(JPQLOps.NOT_MEMBER_OF, "{0} not in elements({1})"); @@ -110,11 +106,6 @@ public boolean wrapElements(Operator operator) { return wrapElements.contains(operator); } - @Override - public boolean isTypeAsString() { - return true; - } - @Override public String getTypeForCast(Class cl) { return typeNames.get(cl); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java index 2a20e081f6..777e4eb81b 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java @@ -417,9 +417,6 @@ protected void visitOperation(Class type, Operator operator, List> args) { visitOperation(targetType, JPQLOps.CAST, ImmutableList.of(args.get(0), ConstantImpl.create(typeName))); } - private void visitInstanceOf(Class type, Operator operator, - List> args) { - if (templates.isTypeAsString()) { - final List> newArgs = new ArrayList>(args); - final Class cl = ((Class) ((Constant) newArgs.get(1)).getConstant()); - // use discriminator value instead of fqnm - if (cl.isAnnotationPresent(DiscriminatorValue.class)) { - newArgs.set(1, ConstantImpl.create(cl.getAnnotation(DiscriminatorValue.class).value())); - } else { - newArgs.set(1, ConstantImpl.create(cl.getSimpleName())); - } - super.visitOperation(type, operator, newArgs); - } else { - super.visitOperation(type, operator, args); - } - } - private void visitPathInCollection(Class type, Operator operator, List> args) { Path lhs = (Path) args.get(0); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index d2896b259e..45ff42ad98 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -146,11 +146,6 @@ public boolean wrapElements(Operator operator) { return false; } - public boolean isTypeAsString() { - // TODO : get rid of this when Hibernate supports type(alias) - return false; - } - public String getTypeForCast(Class cl) { return cl.getSimpleName().toLowerCase(); } From 39099ae97f5e9c82c1c2317580c1d81490896ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 24 Jan 2015 22:59:16 +0200 Subject: [PATCH 0689/1968] Add test case for CaseBuilder usage --- .../test/java/com/querydsl/jpa/AbstractJPATest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 68aedaf2c8..628c3c9569 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -321,6 +321,19 @@ public void Case3() { .otherwise(4)); } + @Test + public void CaseBuilder() { + QCat cat2 = new QCat("cat2"); + NumberExpression casex = new CaseBuilder() + .when(cat.weight.isNull().and(cat.weight.isNull())).then(0) + .when(cat.weight.isNull()).then(cat2.weight) + .when(cat2.weight.isNull()).then(cat.weight) + .otherwise(cat.weight.add(cat2.weight)); + + query().from(cat, cat2).orderBy(casex.asc()).list(cat.id, cat2.id); + query().from(cat, cat2).orderBy(casex.desc()).list(cat.id, cat2.id); + } + @Test public void Cast() { List cats = query().from(cat).list(cat); From 065d7b0d5bf2e6a884fc3475931acd2a4034f23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 25 Jan 2015 15:56:48 +0200 Subject: [PATCH 0690/1968] Fix javadoc grouping --- querydsl-root/pom.xml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 8ba7215bd6..4eb5805d8b 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -256,10 +256,18 @@ Core com.querydsl.core* + + Codegen + com.querydsl.codegen* + APT com.querydsl.apt* + + Maven + com.querydsl.maven* + Spatial com.querydsl.spatial* @@ -285,12 +293,16 @@ com.querydsl.spatial* - Lucene - com.querydsl.lucene3:com.querydsl.lucene4 + Lucene 3 + com.querydsl.lucene3 + + + Lucene 4 + com.querydsl.lucene4 Hibernate Search - com.querydsl.search + com.querydsl.hibernate.search Mongodb From 1284c98bd869b8cf8d83babea073d57bb53073ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 25 Jan 2015 21:54:04 +0200 Subject: [PATCH 0691/1968] Replace List with Map for updates in SQLUpdateClause --- .../java/com/querydsl/sql/OracleTemplates.java | 5 ++--- .../java/com/querydsl/sql/SQLListener.java | 10 +++++----- .../com/querydsl/sql/SQLListenerAdapter.java | 14 +++++++------- .../java/com/querydsl/sql/SQLListeners.java | 13 +++++++------ .../java/com/querydsl/sql/SQLSerializer.java | 17 ++++++++--------- .../querydsl/sql/SQLServer2005Templates.java | 5 ++--- .../java/com/querydsl/sql/SQLTemplates.java | 2 +- .../com/querydsl/sql/dml/SQLUpdateBatch.java | 9 ++++----- .../com/querydsl/sql/dml/SQLUpdateClause.java | 18 +++++++++--------- .../com/querydsl/sql/SQLListenersTest.java | 4 ++-- .../com/querydsl/sql/TestLoggingListener.java | 4 ++-- 11 files changed, 49 insertions(+), 52 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index 026e94e2c8..85082bc5f6 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -14,9 +14,8 @@ package com.querydsl.sql; import java.sql.Types; -import java.util.List; +import java.util.Map; -import com.mysema.commons.lang.Pair; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; @@ -209,7 +208,7 @@ public void serializeDelete(QueryMetadata metadata, RelationalPath entity, SQ @Override public void serializeUpdate(QueryMetadata metadata, RelationalPath entity, - List, Expression>> updates, SQLSerializer context) { + Map, Expression> updates, SQLSerializer context) { context.serializeForUpdate(metadata, entity, updates); // limit diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLListener.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLListener.java index 849eac0604..7a2c5c0540 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLListener.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLListener.java @@ -14,15 +14,15 @@ package com.querydsl.sql; import java.util.List; +import java.util.Map; -import com.mysema.commons.lang.Pair; import com.querydsl.core.QueryMetadata; -import com.querydsl.sql.dml.SQLInsertBatch; -import com.querydsl.sql.dml.SQLMergeBatch; -import com.querydsl.sql.dml.SQLUpdateBatch; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.sql.dml.SQLInsertBatch; +import com.querydsl.sql.dml.SQLMergeBatch; +import com.querydsl.sql.dml.SQLUpdateBatch; /** * Listener interface for SQL queries and clauses @@ -106,7 +106,7 @@ void notifyInsert(RelationalPath entity, QueryMetadata md, List> colu * @param updates metadata of batches */ void notifyUpdate(RelationalPath entity, QueryMetadata md, - List, Expression>> updates); + Map, Expression> updates); /** * Notify about a batch update diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLListenerAdapter.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLListenerAdapter.java index f829794c54..2f1d5ca3f8 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLListenerAdapter.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLListenerAdapter.java @@ -1,15 +1,15 @@ package com.querydsl.sql; -import com.mysema.commons.lang.Pair; +import java.util.List; +import java.util.Map; + import com.querydsl.core.QueryMetadata; -import com.querydsl.sql.dml.SQLInsertBatch; -import com.querydsl.sql.dml.SQLMergeBatch; -import com.querydsl.sql.dml.SQLUpdateBatch; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; import com.querydsl.core.types.SubQueryExpression; - -import java.util.List; +import com.querydsl.sql.dml.SQLInsertBatch; +import com.querydsl.sql.dml.SQLMergeBatch; +import com.querydsl.sql.dml.SQLUpdateBatch; /** * A simple adapter class that knows if the underlying listener is a simple or detailed SQL listener @@ -127,7 +127,7 @@ public void notifyInserts(final RelationalPath entity, final QueryMetadata md } @Override - public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) { + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final Map, Expression> updates) { sqlListener.notifyUpdate(entity, md, updates); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLListeners.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLListeners.java index 4e982ed58b..b1be74cfa2 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLListeners.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLListeners.java @@ -13,18 +13,19 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; import java.util.List; +import java.util.Map; + +import javax.annotation.Nullable; import com.google.common.collect.Lists; -import com.mysema.commons.lang.Pair; import com.querydsl.core.QueryMetadata; -import com.querydsl.sql.dml.SQLInsertBatch; -import com.querydsl.sql.dml.SQLMergeBatch; -import com.querydsl.sql.dml.SQLUpdateBatch; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.sql.dml.SQLInsertBatch; +import com.querydsl.sql.dml.SQLMergeBatch; +import com.querydsl.sql.dml.SQLUpdateBatch; /** * SQLListeners is an SQLListener implementation which dispatches the @@ -126,7 +127,7 @@ public void notifyInserts(RelationalPath entity, QueryMetadata md, @Override public void notifyUpdate(RelationalPath entity, QueryMetadata md, - List, Expression>> updates) { + Map, Expression> updates) { if (parent != null) { parent.notifyUpdate(entity, md, updates); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java index 2b6b94e899..d5826fdf6a 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java @@ -21,18 +21,17 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.mysema.commons.lang.Pair; import com.querydsl.core.JoinExpression; import com.querydsl.core.JoinFlag; import com.querydsl.core.QueryFlag; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; -import com.querydsl.sql.types.Null; import com.querydsl.core.support.Expressions; import com.querydsl.core.support.SerializerBase; import com.querydsl.core.types.*; import com.querydsl.core.types.Template.Element; import com.querydsl.core.types.template.NumberTemplate; +import com.querydsl.sql.types.Null; /** * SqlSerializer serializes Querydsl queries into SQL @@ -563,12 +562,12 @@ void serializeForInsert(QueryMetadata metadata, RelationalPath entity, List

entity, - List, Expression>> updates) { + Map, Expression> updates) { templates.serializeUpdate(metadata, entity, updates, this); } void serializeForUpdate(QueryMetadata metadata, RelationalPath entity, - List, Expression>> updates) { + Map, Expression> updates) { this.entity = entity; serialize(Position.START, metadata.getFlags()); @@ -585,16 +584,16 @@ void serializeForUpdate(QueryMetadata metadata, RelationalPath entity, append(templates.getSet()); boolean first = true; skipParent = true; - for (final Pair,Expression> update : updates) { + for (final Map.Entry,Expression> update : updates.entrySet()) { if (!first) { append(COMMA); } - handle(update.getFirst()); + handle(update.getKey()); append(" = "); - if (!useLiterals && update.getSecond() instanceof Constant) { - constantPaths.add(update.getFirst()); + if (!useLiterals && update.getValue() instanceof Constant) { + constantPaths.add(update.getKey()); } - handle(update.getSecond()); + handle(update.getValue()); first = false; } skipParent = false; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java index 2faf457eef..6e4243ddbf 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java @@ -13,9 +13,8 @@ */ package com.querydsl.sql; -import java.util.List; +import java.util.Map; -import com.mysema.commons.lang.Pair; import com.querydsl.core.QueryFlag; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; @@ -130,7 +129,7 @@ public void serializeDelete(QueryMetadata metadata, RelationalPath entity, SQ @Override public void serializeUpdate(QueryMetadata metadata, RelationalPath entity, - List, Expression>> updates, SQLSerializer context) { + Map, Expression> updates, SQLSerializer context) { // limit QueryModifiers mod = metadata.getModifiers(); if (mod.isRestricting()) { diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index f131955254..516d362c4d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -941,7 +941,7 @@ public void serializeMerge(QueryMetadata metadata, RelationalPath entity, * @param context */ public void serializeUpdate(QueryMetadata metadata, RelationalPath entity, - List, Expression>> updates, SQLSerializer context) { + Map, Expression> updates, SQLSerializer context) { context.serializeForUpdate(metadata, entity, updates); // limit diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateBatch.java b/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateBatch.java index 6b6c0eb455..b0e10a0804 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateBatch.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateBatch.java @@ -13,9 +13,8 @@ */ package com.querydsl.sql.dml; -import java.util.List; +import java.util.Map; -import com.mysema.commons.lang.Pair; import com.querydsl.core.QueryMetadata; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; @@ -30,9 +29,9 @@ public class SQLUpdateBatch { private final QueryMetadata metadata; - private final List,Expression>> updates; + private final Map,Expression> updates; - public SQLUpdateBatch(QueryMetadata metadata, List,Expression>> updates) { + public SQLUpdateBatch(QueryMetadata metadata, Map,Expression> updates) { this.metadata = metadata; this.updates = updates; } @@ -41,7 +40,7 @@ public QueryMetadata getMetadata() { return metadata; } - public List, Expression>> getUpdates() { + public Map, Expression> getUpdates() { return updates; } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateClause.java b/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateClause.java index 687a9f7459..e11f0c1c30 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateClause.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/dml/SQLUpdateClause.java @@ -47,7 +47,7 @@ public class SQLUpdateClause extends AbstractSQLClause implemen private final List batches = new ArrayList(); - private List,Expression>> updates = new ArrayList,Expression>>(); + private Map, Expression> updates = Maps.newLinkedHashMap(); private QueryMetadata metadata = new DefaultQueryMetadata(); @@ -97,7 +97,7 @@ public SQLUpdateClause addFlag(Position position, Expression flag) { */ public SQLUpdateClause addBatch() { batches.add(new SQLUpdateBatch(metadata, updates)); - updates = new ArrayList,Expression>>(); + updates = Maps.newLinkedHashMap(); metadata = new DefaultQueryMetadata(); metadata.addJoin(JoinType.DEFAULT, entity); return this; @@ -231,9 +231,9 @@ public List getSQL() { @Override public SQLUpdateClause set(Path path, T value) { if (value instanceof Expression) { - updates.add(Pair.,Expression>of(path, (Expression)value)); + updates.put(path, (Expression)value); } else if (value != null) { - updates.add(Pair.,Expression>of(path, ConstantImpl.create(value))); + updates.put(path, ConstantImpl.create(value)); } else { setNull(path); } @@ -243,7 +243,7 @@ public SQLUpdateClause set(Path path, T value) { @Override public SQLUpdateClause set(Path path, Expression expression) { if (expression != null) { - updates.add(Pair.,Expression>of(path, expression)); + updates.put(path, expression); } else { setNull(path); } @@ -252,7 +252,7 @@ public SQLUpdateClause set(Path path, Expression expression) @Override public SQLUpdateClause setNull(Path path) { - updates.add(Pair.,Expression>of(path, Null.CONSTANT)); + updates.put(path, Null.CONSTANT); return this; } @@ -260,11 +260,11 @@ public SQLUpdateClause setNull(Path path) { public SQLUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++) { if (values.get(i) instanceof Expression) { - updates.add(Pair.,Expression>of(paths.get(i), (Expression)values.get(i))); + updates.put(paths.get(i), (Expression) values.get(i)); } else if (values.get(i) != null) { - updates.add(Pair.,Expression>of(paths.get(i), ConstantImpl.create(values.get(i)))); + updates.put(paths.get(i), ConstantImpl.create(values.get(i))); } else { - updates.add(Pair.,Expression>of(paths.get(i), Null.CONSTANT)); + updates.put(paths.get(i), Null.CONSTANT); } } return this; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLListenersTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLListenersTest.java index 1be08f5719..1e0e017a33 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLListenersTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLListenersTest.java @@ -4,11 +4,11 @@ import static org.junit.Assert.assertThat; import java.util.List; +import java.util.Map; import org.hamcrest.CoreMatchers; import org.junit.Test; -import com.mysema.commons.lang.Pair; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.QueryMetadata; import com.querydsl.core.types.Expression; @@ -203,7 +203,7 @@ public void notifyInserts(final RelationalPath entity, final QueryMetadata md } @Override - public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final Map, Expression> updates) { } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/TestLoggingListener.java b/querydsl-sql/src/test/java/com/querydsl/sql/TestLoggingListener.java index 77f2f1217b..01c322490d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/TestLoggingListener.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/TestLoggingListener.java @@ -3,8 +3,8 @@ import static java.lang.String.format; import java.util.List; +import java.util.Map; -import com.mysema.commons.lang.Pair; import com.querydsl.core.QueryMetadata; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; @@ -132,7 +132,7 @@ public void notifyInserts(final RelationalPath entity, final QueryMetadata md } @Override - public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final List, Expression>> updates) + public void notifyUpdate(final RelationalPath entity, final QueryMetadata md, final Map, Expression> updates) { if (enabled) System.out.println(format("\t\t\tnotifyUpdate %s", entity)); } From 77d025f7a2c1ecefa69d750c9266ecaa2945f49a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 25 Jan 2015 22:09:31 +0200 Subject: [PATCH 0692/1968] Improve GroupBy generics --- .../src/main/java/com/querydsl/core/group/GAvg.java | 2 +- .../src/main/java/com/querydsl/core/group/GMax.java | 2 +- .../src/main/java/com/querydsl/core/group/GMin.java | 2 +- .../src/main/java/com/querydsl/core/group/GSum.java | 2 +- .../src/main/java/com/querydsl/core/group/GroupBy.java | 8 ++++---- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GAvg.java b/querydsl-core/src/main/java/com/querydsl/core/group/GAvg.java index 5f289507ee..bc96c837d9 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GAvg.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GAvg.java @@ -24,7 +24,7 @@ * @param */ @SuppressWarnings("unchecked") -public class GAvg> extends AbstractGroupExpression { +public class GAvg extends AbstractGroupExpression { private static final long serialVersionUID = 3518868612387641383L; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GMax.java b/querydsl-core/src/main/java/com/querydsl/core/group/GMax.java index d2805f07ad..5ccbf13d3b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GMax.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GMax.java @@ -20,7 +20,7 @@ * * @param */ -class GMax> extends AbstractGroupExpression { +class GMax> extends AbstractGroupExpression { private static final long serialVersionUID = 3815394663181131511L; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GMin.java b/querydsl-core/src/main/java/com/querydsl/core/group/GMin.java index c4dc364e60..5594488274 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GMin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GMin.java @@ -20,7 +20,7 @@ * * @param */ -class GMin> extends AbstractGroupExpression { +class GMin> extends AbstractGroupExpression { private static final long serialVersionUID = 8312168556148122576L; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GSum.java b/querydsl-core/src/main/java/com/querydsl/core/group/GSum.java index 481a13c36b..9c5b5fb59f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GSum.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GSum.java @@ -24,7 +24,7 @@ * @param */ @SuppressWarnings("unchecked") -public class GSum> extends AbstractGroupExpression { +public class GSum extends AbstractGroupExpression { private static final long serialVersionUID = 3518868612387641383L; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 32062297b3..24b03893b9 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -57,7 +57,7 @@ public static GroupByBuilder> groupBy(Expression... keys) { * @param expression * @return */ - public static > AbstractGroupExpression min(Expression expression) { + public static > AbstractGroupExpression min(Expression expression) { return new GMin(expression); } @@ -67,7 +67,7 @@ public static > AbstractGroupExpression min(Expres * @param expression * @return */ - public static > AbstractGroupExpression sum(Expression expression) { + public static AbstractGroupExpression sum(Expression expression) { return new GSum(expression); } @@ -77,7 +77,7 @@ public static > AbstractGroupExpression s * @param expression * @return */ - public static > AbstractGroupExpression avg(Expression expression) { + public static AbstractGroupExpression avg(Expression expression) { return new GAvg(expression); } @@ -87,7 +87,7 @@ public static > AbstractGroupExpression a * @param expression * @return */ - public static > AbstractGroupExpression max(Expression expression) { + public static > AbstractGroupExpression max(Expression expression) { return new GMax(expression); } From bcdeaf94344de633da41c99a572932af64932886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 27 Jan 2015 16:04:54 +0200 Subject: [PATCH 0693/1968] Use wildcards consistently --- querydsl-root/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 4eb5805d8b..a926c6135e 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -294,15 +294,15 @@ Lucene 3 - com.querydsl.lucene3 + com.querydsl.lucene3* Lucene 4 - com.querydsl.lucene4 + com.querydsl.lucene4* Hibernate Search - com.querydsl.hibernate.search + com.querydsl.hibernate.search* Mongodb From f5518f11fbf77477ad6b412652c68eeea024e9eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 22 Jan 2015 22:47:30 +0200 Subject: [PATCH 0694/1968] Make QueryMetadata.projection a single Expression --- .../collections/AbstractCollQuery.java | 6 +- .../collections/DefaultQueryEngine.java | 4 +- .../querydsl/core/DefaultQueryMetadata.java | 34 +++--- .../java/com/querydsl/core/EmptyMetadata.java | 11 +- .../java/com/querydsl/core/QueryMetadata.java | 21 ++-- .../com/querydsl/core/QueryModifiers.java | 3 + .../core/support/DetachableMixin.java | 22 +++- .../com/querydsl/core/support/QueryBase.java | 3 +- .../com/querydsl/core/support/QueryMixin.java | 28 ++--- .../querydsl/core/support/ReplaceVisitor.java | 7 +- .../types/AppendingFactoryExpression.java | 53 ++++++++ .../com/querydsl/core/types/Projections.java | 13 ++ .../core/types/ValidatingVisitor.java | 4 +- .../core/types/query/ListSubQuery.java | 30 +---- .../com/querydsl/core/util/ArrayUtils.java | 8 ++ .../core/DefaultQueryMetadataTest.java | 23 ++-- .../core/QueryMetadaSerializationTest.java | 2 +- .../com/querydsl/core/QueryMutability.java | 24 ---- .../core/support/DetachableMixinTest.java | 12 +- .../support/QueryMixinPerformanceTest.java | 4 +- .../hibernate/search/SearchQuery.java | 2 +- .../com/querydsl/jdo/AbstractJDOQuery.java | 26 ++-- .../com/querydsl/jdo/JDOQLSerializer.java | 11 +- .../com/querydsl/jdo/dml/JDOUpdateClause.java | 21 ++-- .../querydsl/jdo/sql/AbstractSQLQuery.java | 13 +- .../com/querydsl/jdo/JDOSubQueryTest.java | 32 ----- .../java/com/querydsl/jpa/JPAQueryMixin.java | 2 +- .../java/com/querydsl/jpa/JPQLSerializer.java | 25 ++-- .../com/querydsl/jpa/NativeSQLSerializer.java | 113 +++++++++--------- .../jpa/hibernate/AbstractHibernateQuery.java | 33 ++--- .../jpa/hibernate/HibernateUpdateClause.java | 34 +++--- .../sql/AbstractHibernateSQLQuery.java | 29 +++-- .../querydsl/jpa/impl/AbstractJPAQuery.java | 49 ++++---- .../querydsl/jpa/impl/JPAUpdateClause.java | 30 +++-- .../java/com/querydsl/jpa/package-info.java | 2 +- .../querydsl/jpa/sql/AbstractJPASQLQuery.java | 74 ++++++------ .../java/com/querydsl/jpa/HibernateBase.java | 28 ++++- .../test/java/com/querydsl/jpa/JPABase.java | 30 ++++- .../querydsl/jpa/JPAQueryMutability2Test.java | 20 +--- .../com/querydsl/jpa/JPASubQueryTest.java | 42 ------- .../com/querydsl/jpa/JPQLSerializerTest.java | 16 +-- .../querydsl/jpa/NativeSQLSerializerTest.java | 9 +- .../java/com/querydsl/jpa/QueryHelper.java | 22 ++-- .../com/querydsl/jpa/SerializationBase.java | 15 ++- .../com/querydsl/mongodb/MongodbQuery.java | 27 +++-- .../com/querydsl/sql/AbstractSQLQuery.java | 19 +-- .../java/com/querydsl/sql/DB2Templates.java | 5 +- .../com/querydsl/sql/DetachableSQLQuery.java | 2 +- .../com/querydsl/sql/ProjectableSQLQuery.java | 26 ++-- .../querydsl/sql/RelationalPathExtractor.java | 8 +- .../java/com/querydsl/sql/SQLSerializer.java | 25 ++-- .../querydsl/sql/SQLServer2005Templates.java | 8 +- .../main/java/com/querydsl/sql/UnionImpl.java | 23 +--- .../sql/AbstractSQLTemplatesTest.java | 2 +- .../com/querydsl/sql/ExtendedSQLTest.java | 5 +- .../com/querydsl/sql/OracleTemplatesTest.java | 4 +- .../java/com/querydsl/sql/PaginationTest.java | 2 +- .../com/querydsl/sql/PerformanceTest.java | 2 +- .../querydsl/sql/PostgresTemplatesTest.java | 2 +- .../querydsl/sql/QueryPerformanceTest.java | 4 +- .../com/querydsl/sql/SQLSerializerTest.java | 14 +-- .../sql/SQLServer2005TemplatesTest.java | 6 +- .../sql/SQLServer2012TemplatesTest.java | 12 +- .../querydsl/sql/SQLServerTemplatesTest.java | 4 +- .../com/querydsl/sql/SQLSubQueryTest.java | 22 ++-- .../querydsl/sql/mysql/MySQLQueryTest.java | 10 +- 66 files changed, 594 insertions(+), 628 deletions(-) create mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java delete mode 100644 querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java delete mode 100644 querydsl-jpa/src/test/java/com/querydsl/jpa/JPASubQueryTest.java diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/AbstractCollQuery.java b/querydsl-collections/src/main/java/com/querydsl/collections/AbstractCollQuery.java index acc00ab0b6..0a1e2e9ac0 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/AbstractCollQuery.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/AbstractCollQuery.java @@ -200,7 +200,7 @@ public CloseableIterator iterate(Expression... args) { @Override public CloseableIterator iterate(Expression projection) { try { - projection = queryMixin.addProjection(projection); + projection = queryMixin.setProjection(projection); return new IteratorAdapter(queryEngine.list(getMetadata(), iterables, projection).iterator()); } finally { reset(); @@ -215,7 +215,7 @@ public List list(Expression... args) { @Override public List list(Expression projection) { try { - projection = queryMixin.addProjection(projection); + projection = queryMixin.setProjection(projection); return queryEngine.list(getMetadata(), iterables, projection); } finally { reset(); @@ -229,7 +229,7 @@ public SearchResults listResults(Expression... args) { @Override public SearchResults listResults(Expression projection) { - projection = queryMixin.addProjection(projection); + projection = queryMixin.setProjection(projection); long count = queryEngine.count(getMetadata(), iterables); if (count > 0l) { List list = queryEngine.list(getMetadata(), iterables, projection); diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java b/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java index 735b47d132..3c5fedb740 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java @@ -188,7 +188,7 @@ private List evaluateSingleSource(QueryMetadata metadata, Map, order(metadata, sources, list); } // projection - if (metadata.getProjection().size() > 1 || !metadata.getProjection().get(0).equals(source)) { + if (metadata.getProjection() != null && !metadata.getProjection().equals(source)) { list = project(metadata, sources, list); } // limit + offset @@ -224,7 +224,7 @@ private void order(QueryMetadata metadata, List> sources, List } private List project(QueryMetadata metadata, List> sources, List list) { - Expression projection = metadata.getProjection().get(0); + Expression projection = metadata.getProjection(); Operator aggregator = null; if (projection instanceof Operation && Ops.aggOps.contains(((Operation)projection).getOperator())) { Operation aggregation = (Operation)projection; diff --git a/querydsl-core/src/main/java/com/querydsl/core/DefaultQueryMetadata.java b/querydsl-core/src/main/java/com/querydsl/core/DefaultQueryMetadata.java index 04446a086f..bce18a5e35 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/DefaultQueryMetadata.java +++ b/querydsl-core/src/main/java/com/querydsl/core/DefaultQueryMetadata.java @@ -13,17 +13,19 @@ */ package com.querydsl.core; -import javax.annotation.Nullable; +import static com.querydsl.core.util.CollectionUtils.*; + import java.util.List; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; + import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.querydsl.core.types.*; -import static com.querydsl.core.util.CollectionUtils.*; /** * DefaultQueryMetadata is the default implementation of the {@link QueryMetadata} interface @@ -54,12 +56,12 @@ public class DefaultQueryMetadata implements QueryMetadata, Cloneable { private Set joinFlags = ImmutableSet.of(); - @Nullable private QueryModifiers modifiers = QueryModifiers.EMPTY; private List> orderBy = ImmutableList.of(); - private List> projection = ImmutableList.of(); + @Nullable + private Expression projection; // NOTE : this is not necessarily serializable private Map,Object> params = ImmutableMap., Object>of(); @@ -176,10 +178,10 @@ public void addOrderBy(OrderSpecifier o) { } @Override - public void addProjection(Expression o) { + public void setProjection(Expression o) { addLastJoin(); validate(o); - projection = add(projection, o); + projection = o; } @Override @@ -200,11 +202,6 @@ public void clearOrderBy() { orderBy = ImmutableList.of(); } - @Override - public void clearProjection() { - projection = ImmutableList.of(); - } - @Override public void clearWhere() { where = new BooleanBuilder(); @@ -221,7 +218,7 @@ public QueryMetadata clone() { clone.joins = copyOf(joins); clone.modifiers = modifiers; clone.orderBy = copyOf(orderBy); - clone.projection = copyOf(projection); + clone.projection = projection; clone.params = copyOf(params); clone.where = where; clone.flags = copyOfSorted(flags); @@ -248,7 +245,6 @@ public List getJoins() { } @Override - @Nullable public QueryModifiers getModifiers() { return modifiers; } @@ -264,7 +260,7 @@ public List> getOrderBy() { } @Override - public List> getProjection() { + public Expression getProjection() { return projection; } @@ -285,7 +281,6 @@ public boolean isUnique() { @Override public void reset() { - clearProjection(); params = ImmutableMap.of(); modifiers = QueryModifiers.EMPTY; } @@ -305,7 +300,10 @@ public void setLimit(Long limit) { } @Override - public void setModifiers(@Nullable QueryModifiers restriction) { + public void setModifiers(QueryModifiers restriction) { + if (restriction == null) { + throw new NullPointerException(); + } this.modifiers = restriction; } @@ -372,10 +370,10 @@ public boolean equals(Object o) { && q.isDistinct() == distinct && q.isUnique() == unique && q.getJoins().equals(joins) - && Objects.equal(q.getModifiers(), modifiers) + && q.getModifiers().equals(modifiers) && q.getOrderBy().equals(orderBy) && q.getParams().equals(params) - && q.getProjection().equals(projection) + && Objects.equal(q.getProjection(), projection) && Objects.equal(q.getWhere(), where); } else { diff --git a/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java b/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java index 02645d7066..2291fcda5b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java +++ b/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java @@ -61,7 +61,7 @@ public void addOrderBy(OrderSpecifier o) { } @Override - public void addProjection(Expression o) { + public void setProjection(Expression o) { throw new UnsupportedOperationException(); } @@ -75,11 +75,6 @@ public void clearOrderBy() { throw new UnsupportedOperationException(); } - @Override - public void clearProjection() { - throw new UnsupportedOperationException(); - } - @Override public void clearWhere() { throw new UnsupportedOperationException(); @@ -116,8 +111,8 @@ public List> getOrderBy() { } @Override - public List> getProjection() { - return Collections.emptyList(); + public Expression getProjection() { + return null; } @Override diff --git a/querydsl-core/src/main/java/com/querydsl/core/QueryMetadata.java b/querydsl-core/src/main/java/com/querydsl/core/QueryMetadata.java index 3eb31d1adb..00ffb33d4f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/QueryMetadata.java +++ b/querydsl-core/src/main/java/com/querydsl/core/QueryMetadata.java @@ -76,13 +76,6 @@ public interface QueryMetadata extends Serializable { */ void addOrderBy(OrderSpecifier o); - /** - * Add the given projections - * - * @param o - */ - void addProjection(Expression o); - /** * Add the given where expressions * @@ -95,11 +88,6 @@ public interface QueryMetadata extends Serializable { */ void clearOrderBy(); - /** - * Clear the projection - */ - void clearProjection(); - /** * Clear the where expressions */ @@ -124,6 +112,7 @@ public interface QueryMetadata extends Serializable { * * @return */ + @Nullable Predicate getHaving(); /** @@ -152,7 +141,8 @@ public interface QueryMetadata extends Serializable { * * @return */ - List> getProjection(); + @Nullable + Expression getProjection(); /** * Get the parameters @@ -221,6 +211,11 @@ public interface QueryMetadata extends Serializable { */ void setParam(ParamExpression param, T value); + /** + * @param o + */ + void setProjection(Expression o); + /** * @param flag */ diff --git a/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java b/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java index 68962e0381..fd6f3b7ba8 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java +++ b/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java @@ -30,6 +30,9 @@ public final class QueryModifiers implements Serializable{ private static final long serialVersionUID = 2934344588433680339L; + /** + * No limit and not offset restriction + */ public static final QueryModifiers EMPTY = new QueryModifiers(); private static int toInt(Long l) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java index 4be60d10a8..784023087c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java @@ -105,10 +105,20 @@ public BooleanExpression notExists() { private QueryMetadata projection(Expression... projection) { QueryMetadata metadata = queryMixin.getMetadata().clone(); - for (Expression expr : projection) { - expr = queryMixin.convert(expr, false); - metadata.addProjection(nullAsTemplate(expr)); + Expression[] copy = new Expression[projection.length]; + for (int i = 0; i < copy.length; i++) { + Expression expr = queryMixin.convert(projection[i], false); + copy[i] = nullAsTemplate(expr); } + metadata.setProjection(Projections.tuple(copy)); + return metadata; + } + + private QueryMetadata projection(Expression projection) { + QueryMetadata metadata = queryMixin.getMetadata().clone(); + Expression expr = queryMixin.convert(projection, false); + expr = nullAsTemplate(expr); + metadata.setProjection(expr); return metadata; } @@ -174,4 +184,10 @@ private QueryMetadata uniqueProjection(Expression... projection) { return metadata; } + private QueryMetadata uniqueProjection(Expression projection) { + QueryMetadata metadata = projection(projection); + metadata.setUnique(true); + return metadata; + } + } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryBase.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryBase.java index 7605f16c22..b9f7f2cd94 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryBase.java @@ -152,7 +152,8 @@ public Q offset(long offset) { } /** - * Defines both limit and offset of the query results + * Defines both limit and offset of the query results, + * use {@link QueryModifiers#EMPTY} to apply no paging. * * @param modifiers * @return diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java index 285178caef..7ecff70d6f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java @@ -22,20 +22,8 @@ import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; import com.querydsl.core.Tuple; -import com.querydsl.core.types.CollectionExpression; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.FactoryExpressionUtils; +import com.querydsl.core.types.*; import com.querydsl.core.types.FactoryExpressionUtils.FactoryExpressionAdapter; -import com.querydsl.core.types.MapExpression; -import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.ParamExpression; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.ProjectionRole; -import com.querydsl.core.types.QTuple; -import com.querydsl.core.types.SubQueryExpression; /** * Mixin style Query implementation @@ -105,16 +93,18 @@ public T removeFlag(QueryFlag queryFlag) { return self; } - public Expression addProjection(Expression e) { + public Expression setProjection(Expression e) { e = convert(e, false); - metadata.addProjection(e); + metadata.setProjection(e); return e; } - public T addProjection(Expression... o) { - for (Expression e : o) { - metadata.addProjection(convert(e, false)); + public T setProjection(Expression... o) { + Expression[] copy = new Expression[o.length]; + for (int i = 0; i < copy.length; i++) { + copy[i] = convert(o[i], false); } + metadata.setProjection(Projections.tuple(copy)); return self; } @@ -169,7 +159,7 @@ public Expression createProjection(Expression[] args) { return new QTuple(args); } - protected Expression createAlias(Expression expr, Path alias) { + protected Expression createAlias(Expression expr, Path alias) { assertRoot(alias); return ExpressionUtils.as((Expression)expr, alias); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java index 894446ec41..77798dc498 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java @@ -13,11 +13,12 @@ */ package com.querydsl.core.support; -import javax.annotation.Nullable; import java.util.List; import java.util.Map; import java.util.Objects; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; import com.querydsl.core.*; import com.querydsl.core.types.*; @@ -120,8 +121,8 @@ public Expression visit(SubQueryExpression expr, @Nullable Void context) { .entrySet()) { md.setParam((ParamExpression)entry.getKey().accept(this, null), entry.getValue()); } - for (Expression e : expr.getMetadata().getProjection()) { - md.addProjection(e.accept(this, null)); + if (expr.getMetadata().getProjection() != null) { + md.setProjection(expr.getMetadata().getProjection().accept(this, null)); } Predicate where = expr.getMetadata().getWhere(); if (where != null) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java new file mode 100644 index 0000000000..33711fef50 --- /dev/null +++ b/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java @@ -0,0 +1,53 @@ +/* + * Copyright 2015, Timo Westkämper + * + * 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 com.querydsl.core.types; + +import java.util.List; + +import javax.annotation.Nullable; + +import com.google.common.collect.ImmutableList; + +public class AppendingFactoryExpression extends FactoryExpressionBase { + + private final Expression base; + + private final List> args; + + public AppendingFactoryExpression(Expression base, Expression... rest) { + super(base.getType()); + this.base = base; + ImmutableList.Builder> builder = ImmutableList.builder(); + builder.add(base); + builder.add(rest); + this.args = builder.build(); + } + + @Override + public List> getArgs() { + return args; + } + + @Nullable + @Override + public T newInstance(Object... args) { + return (T) args[0]; + } + + @Nullable + @Override + public R accept(Visitor v, @Nullable C context) { + return base.accept(v, context); + } +} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java b/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java index 79585e242f..d8d0538c8d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java @@ -32,6 +32,19 @@ public final class Projections { public static ArrayConstructorExpression array(Class type, Expression... exprs) { return new ArrayConstructorExpression(type, exprs); } + + /** + * Create an appending factory expression which serializes all the arguments but the uses + * the base value as the return value + * + * @param base + * @param rest + * @param + * @return + */ + public static AppendingFactoryExpression appending(Expression base, Expression... rest) { + return new AppendingFactoryExpression(base, rest); + } /** * Create a Bean populating projection for the given type and expressions diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ValidatingVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/types/ValidatingVisitor.java index a4feeeaaef..7eb2e33ba9 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ValidatingVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ValidatingVisitor.java @@ -85,8 +85,8 @@ public Set> visit(SubQueryExpression expr, Set> k Set> old = known; final QueryMetadata md = expr.getMetadata(); known = visitJoins(md.getJoins(), known); - for (Expression p : md.getProjection()) { - known = p.accept(this, known); + if (md.getProjection() != null) { + known = md.getProjection().accept(this, known); } for (OrderSpecifier o : md.getOrderBy()) { known = o.getTarget().accept(this, known); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java index cce875908a..9855adea28 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java @@ -18,20 +18,8 @@ import javax.annotation.Nullable; import com.querydsl.core.QueryMetadata; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.OperationImpl; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.SubQueryExpressionImpl; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.CollectionExpressionBase; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.*; +import com.querydsl.core.types.expr.*; /** * List result subquery @@ -85,19 +73,13 @@ public NumberExpression countDistinct() { private NumberExpression count(Operator operator) { QueryMetadata md = subQueryMixin.getMetadata().clone(); - Expression e = null; - if (md.getProjection().size() == 1) { - e = md.getProjection().get(0); - } else if (!md.getProjection().isEmpty()) { - e = ExpressionUtils.list(Object.class, md.getProjection()); - } - md.clearProjection(); + Expression e = md.getProjection(); if (e != null) { - md.addProjection(OperationImpl.create(Long.class, operator, e)); + md.setProjection(OperationImpl.create(Long.class, operator, e)); } else if (operator == Ops.AggOps.COUNT_AGG) { - md.addProjection(Wildcard.count); + md.setProjection(Wildcard.count); } else { - md.addProjection(Wildcard.countDistinct); + md.setProjection(Wildcard.countDistinct); } return new NumberSubQuery(Long.class, md); diff --git a/querydsl-core/src/main/java/com/querydsl/core/util/ArrayUtils.java b/querydsl-core/src/main/java/com/querydsl/core/util/ArrayUtils.java index a15ecf93e4..60774641d8 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/util/ArrayUtils.java +++ b/querydsl-core/src/main/java/com/querydsl/core/util/ArrayUtils.java @@ -23,6 +23,14 @@ */ public final class ArrayUtils { + public static T[] combine(Class type, T first, T second, T... rest) { + T[] array = (T[]) Array.newInstance(type, rest.length + 2); + array[0] = first; + array[1] = second; + System.arraycopy(rest, 0, array, 2, rest.length); + return array; + } + public static Object[] combine(int size, Object[]... arrays) { int offset = 0; Object[] target = new Object[size]; diff --git a/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java b/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java index c08f6a33e6..8404060063 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java @@ -13,15 +13,17 @@ */ package com.querydsl.core; +import static org.junit.Assert.*; + import java.util.Arrays; +import org.junit.Test; + import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.expr.Param; import com.querydsl.core.types.path.StringPath; -import org.junit.Test; -import static org.junit.Assert.*; public class DefaultQueryMetadataTest { @@ -132,9 +134,8 @@ public void GetOrderBy() { @Test public void GetProjection() { metadata.addJoin(JoinType.DEFAULT, str); - metadata.addProjection(str); - metadata.addProjection(str.append("abc")); - assertEquals(Arrays.asList(str, str.append("abc")), metadata.getProjection()); + metadata.setProjection(str.append("abc")); + assertEquals(str.append("abc"), metadata.getProjection()); } @Test @@ -176,8 +177,7 @@ public void Clone() { QueryModifiers modifiers = new QueryModifiers(1l,2l); metadata.setModifiers(modifiers); metadata.addOrderBy(str.asc()); - metadata.addProjection(str); - metadata.addProjection(str.append("abc")); + metadata.setProjection(str.append("abc")); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); @@ -215,8 +215,7 @@ public void Equals() { QueryModifiers modifiers = new QueryModifiers(1l,2l); metadata.setModifiers(modifiers); metadata.addOrderBy(str.asc()); - metadata.addProjection(str); - metadata.addProjection(str.append("abc")); + metadata.setProjection(str.append("abc")); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); @@ -234,8 +233,7 @@ public void Equals() { assertFalse(metadata.equals(metadata2)); metadata2.addOrderBy(str.asc()); assertFalse(metadata.equals(metadata2)); - metadata2.addProjection(str); - metadata2.addProjection(str.append("abc")); + metadata2.setProjection(str.append("abc")); assertFalse(metadata.equals(metadata2)); metadata2.addWhere(str.eq("b")); metadata2.addWhere(str.isNotEmpty()); @@ -251,8 +249,7 @@ public void HashCode() { QueryModifiers modifiers = new QueryModifiers(1l,2l); metadata.setModifiers(modifiers); metadata.addOrderBy(str.asc()); - metadata.addProjection(str); - metadata.addProjection(str.append("abc")); + metadata.setProjection(str.append("abc")); metadata.addWhere(str.eq("b")); metadata.addWhere(str.isNotEmpty()); metadata.hashCode(); diff --git a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java index 1f0fe34596..7259f98e21 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java @@ -56,7 +56,7 @@ public void Serialization() throws IOException, ClassNotFoundException{ // metadata.getJoins().get(0).addFlag(new JoinFlag("")); metadata.addJoinCondition(expr.isEmpty()); metadata.addOrderBy(expr.asc()); - metadata.addProjection(expr); + metadata.setProjection(expr); metadata.addWhere(expr.isEmpty()); // serialize metadata diff --git a/querydsl-core/src/test/java/com/querydsl/core/QueryMutability.java b/querydsl-core/src/test/java/com/querydsl/core/QueryMutability.java index da9c64b672..e659da6cd0 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QueryMutability.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QueryMutability.java @@ -13,13 +13,11 @@ */ package com.querydsl.core; -import java.io.Closeable; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import com.querydsl.core.support.QueryBase; import com.querydsl.core.types.Expression; -import static org.junit.Assert.assertTrue; public final class QueryMutability & Projectable> { @@ -37,65 +35,43 @@ public QueryMutability(T query) throws SecurityException, public void test(Expression p1, Expression p2) throws IOException { System.err.println("count"); query.count(); - assertProjectionEmpty(); System.err.println("countDistinct"); query.distinct().count(); - assertProjectionEmpty(); System.err.println("iterate"); query.iterate(p1); - assertProjectionEmpty(); query.iterate(p1, p2); - assertProjectionEmpty(); System.err.println("iterateDistinct"); query.distinct().iterate(p1); - assertProjectionEmpty(); query.distinct().iterate(p1, p2); - assertProjectionEmpty(); System.err.println("list"); query.list(p1); - assertProjectionEmpty(); query.list(p1, p2); - assertProjectionEmpty(); System.err.println("distinct list"); query.distinct().list(p1); - assertProjectionEmpty(); query.distinct().list(p1, p2); - assertProjectionEmpty(); System.err.println("listResults"); query.listResults(p1); - assertProjectionEmpty(); System.err.println("distinct listResults"); query.distinct().listResults(p1); - assertProjectionEmpty(); System.err.println("map"); query.map(p1, p2); - assertProjectionEmpty(); System.err.println("uniqueResult"); query.uniqueResult(p1); - assertProjectionEmpty(); query.uniqueResult(p1, p2); - assertProjectionEmpty(); - } - - private void assertProjectionEmpty() throws IOException{ - assertTrue(metadata.getProjection().isEmpty()); - if (query instanceof Closeable) { - ((Closeable)query).close(); - } } } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java index dd9ec2a407..b33a06f1ff 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java @@ -23,11 +23,7 @@ import org.junit.Test; import com.querydsl.core.alias.Alias; -import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.NullExpression; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.core.types.*; import com.querydsl.core.types.query.ListSubQuery; @@ -60,7 +56,7 @@ public void Projections() { public void List_Objects() { query.from(new PathImpl(Object.class, "x")); ListSubQuery subQuery = detachable.list(new PathImpl(Object.class, "x"), "XXX"); - List> exprs = subQuery.getMetadata().getProjection(); + List> exprs = ((FactoryExpression)subQuery.getMetadata().getProjection()).getArgs(); assertEquals(new PathImpl(Object.class, "x"), exprs.get(0)); assertEquals(ConstantImpl.create("XXX"), exprs.get(1)); } @@ -69,7 +65,7 @@ public void List_Objects() { public void Unique_Objects() { query.from(new PathImpl(Object.class, "x")); SubQueryExpression subQuery = detachable.unique(new PathImpl(Object.class, "x"), "XXX"); - List> exprs = subQuery.getMetadata().getProjection(); + List> exprs = ((FactoryExpression)subQuery.getMetadata().getProjection()).getArgs(); assertEquals(new PathImpl(Object.class, "x"), exprs.get(0)); assertEquals(ConstantImpl.create("XXX"), exprs.get(1)); } @@ -78,7 +74,7 @@ public void Unique_Objects() { public void Null_As_Template() { query.from(new PathImpl(Object.class, "x")); SubQueryExpression subQuery = detachable.unique(new PathImpl(Object.class, "x"), null); - List> exprs = subQuery.getMetadata().getProjection(); + List> exprs = ((FactoryExpression)subQuery.getMetadata().getProjection()).getArgs(); assertEquals(new PathImpl(Object.class, "x"), exprs.get(0)); assertEquals(NullExpression.DEFAULT, exprs.get(1)); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java index 456fa5e9dd..cb82e358a3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/QueryMixinPerformanceTest.java @@ -23,7 +23,7 @@ public void Normal() { // 1791 QueryMixin mixin = new QueryMixin(); mixin.from(entity); mixin.where(other.eq(new DummyEntity())); - mixin.addProjection(entity); + mixin.setProjection(entity); } System.err.println(System.currentTimeMillis() - start); } @@ -40,7 +40,7 @@ public void Array_Arguments() { // 2260 QueryMixin mixin = new QueryMixin(); mixin.from(entities); mixin.where(other.eq(new DummyEntity())); - mixin.addProjection(entity); + mixin.setProjection(entity); } System.err.println(System.currentTimeMillis() - start); } diff --git a/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java index 0cacad1ddc..8c38f6388c 100644 --- a/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java +++ b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java @@ -104,7 +104,7 @@ private FullTextQuery createQuery(boolean forCount) { // paging QueryModifiers modifiers = metadata.getModifiers(); - if (modifiers != null && modifiers.isRestricting() && !forCount) { + if (modifiers.isRestricting() && !forCount) { Integer limit = modifiers.getLimitAsInteger(); Integer offset = modifiers.getOffsetAsInteger(); if (limit != null) { diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java index b65354eea2..cda3e68c2a 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOQuery.java @@ -13,13 +13,18 @@ */ package com.querydsl.jdo; -import javax.annotation.Nullable; -import javax.jdo.PersistenceManager; -import javax.jdo.Query; import java.io.Closeable; import java.io.IOException; import java.util.*; +import javax.annotation.Nullable; +import javax.jdo.PersistenceManager; +import javax.jdo.Query; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + import com.google.common.collect.Lists; import com.mysema.commons.lang.CloseableIterator; import com.mysema.commons.lang.IteratorAdapter; @@ -28,9 +33,6 @@ import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; import com.querydsl.core.types.FactoryExpression; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.MDC; /** * Abstract base class for custom implementations of the JDOCommonQuery interface. @@ -150,9 +152,9 @@ private Query createQuery(boolean forCount) { queries.add(query); if (!forCount) { - List> projection = queryMixin.getMetadata().getProjection(); - if (projection.get(0) instanceof FactoryExpression) { - this.projection = (FactoryExpression)projection.get(0); + Expression projection = queryMixin.getMetadata().getProjection(); + if (projection instanceof FactoryExpression) { + this.projection = (FactoryExpression)projection; } if (!fetchGroups.isEmpty()) { query.getFetchPlan().setGroups(fetchGroups); @@ -260,7 +262,7 @@ public List list(Expression... args) { @SuppressWarnings("unchecked") public List list(Expression expr) { try { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); Object rv = execute(createQuery(false), false); return rv instanceof List ? (List)rv : Collections.singletonList((RT)rv); } finally { @@ -277,7 +279,7 @@ public SearchResults listResults(Expression... args) { @SuppressWarnings("unchecked") public SearchResults listResults(Expression expr) { try { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); Query countQuery = createQuery(true); countQuery.setUnique(true); countQuery.setResult("count(this)"); @@ -338,7 +340,7 @@ public Tuple uniqueResult(Expression... args) { @SuppressWarnings("unchecked") @Nullable public RT uniqueResult(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); return (RT)uniqueResult(); } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java index c388d20212..24e2d556af 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java @@ -13,10 +13,11 @@ */ package com.querydsl.jdo; -import javax.annotation.Nullable; import java.util.*; import java.util.Map.Entry; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; import com.google.common.primitives.Primitives; import com.querydsl.core.JoinExpression; @@ -96,7 +97,7 @@ public Map getConstantToLabel() { } public void serialize(QueryMetadata metadata, boolean forCountRow, boolean subQuery) { - final List> select = metadata.getProjection(); + final Expression select = metadata.getProjection(); final List joins = metadata.getJoins(); final Expression source = joins.get(0).getTarget(); final Predicate where = metadata.getWhere(); @@ -117,7 +118,7 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, boolean subQu append(")"); } - } else if (!select.isEmpty()) { + } else if (select != null) { if (metadata.isDistinct()) { append(SELECT_DISTINCT); } else if (metadata.isUnique() && !subQuery) { @@ -125,8 +126,8 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, boolean subQu } else { append(SELECT); } - if (select.size() >1 || !select.get(0).equals(source) || metadata.isDistinct()) { - handle(COMMA, select); + if (!select.equals(source) || metadata.isDistinct()) { + handle(select); } else { skippedSelect = true; } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java index 67cdd5169f..4672611de7 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java @@ -14,12 +14,14 @@ package com.querydsl.jdo.dml; import java.util.List; +import java.util.Map; +import com.google.common.collect.Maps; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.QueryMetadata; import com.querydsl.core.dml.UpdateClause; +import com.querydsl.core.support.Expressions; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.NullExpression; import com.querydsl.core.types.Path; import com.querydsl.core.types.Predicate; @@ -34,6 +36,8 @@ public class JDOUpdateClause implements UpdateClause { private final QueryMetadata metadata = new DefaultQueryMetadata(); + private final Map, Expression> updates = Maps.newLinkedHashMap(); + @Override public long execute() { // TODO : implement @@ -45,10 +49,9 @@ public long execute() { public JDOUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++) { if (values.get(i) != null) { - metadata.addProjection(ExpressionUtils.eqConst(((Expression)paths.get(i)), values.get(i))); + updates.put(paths.get(i), Expressions.constant(values.get(i))); } else { - metadata.addProjection(ExpressionUtils.eq(((Expression)paths.get(i)), - new NullExpression(paths.get(i).getType()))); + updates.put(paths.get(i), new NullExpression(paths.get(i).getType())); } } return this; @@ -57,9 +60,9 @@ public JDOUpdateClause set(List> paths, List values) { @Override public JDOUpdateClause set(Path path, T value) { if (value != null) { - metadata.addProjection(ExpressionUtils.eqConst(path, value)); + updates.put(path, Expressions.constant(value)); } else { - metadata.addProjection(ExpressionUtils.eq(path, new NullExpression(path.getType()))); + updates.put(path, new NullExpression(path.getType())); } return this; } @@ -67,13 +70,13 @@ public JDOUpdateClause set(Path path, T value) { @Override public JDOUpdateClause set(Path path, Expression expression) { - metadata.addProjection(ExpressionUtils.eq(path, expression)); + updates.put(path, expression); return this; } @Override public JDOUpdateClause setNull(Path path) { - metadata.addProjection(ExpressionUtils.eq(path, new NullExpression(path.getType()))); + updates.put(path, new NullExpression(path.getType())); return this; } @@ -87,7 +90,7 @@ public JDOUpdateClause where(Predicate... o) { @Override public boolean isEmpty() { - return metadata.getProjection().isEmpty(); + return updates.isEmpty(); } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java index b1203b6b0c..a44b0e2aa4 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/sql/AbstractSQLQuery.java @@ -48,7 +48,6 @@ @SuppressWarnings("rawtypes") public abstract class AbstractSQLQuery> extends ProjectableSQLQuery { - private static final Logger logger = LoggerFactory.getLogger(JDOSQLQuery.class); private final Closeable closeable = new Closeable() { @@ -119,9 +118,9 @@ private Query createQuery(boolean forCount) { queries.add(query); if (!forCount) { - List> projection = queryMixin.getMetadata().getProjection(); - if (projection.get(0) instanceof FactoryExpression) { - this.projection = (FactoryExpression)projection.get(0); + Expression projection = queryMixin.getMetadata().getProjection(); + if (projection instanceof FactoryExpression) { + this.projection = (FactoryExpression)projection; } } else { query.setResultClass(Long.class); @@ -200,7 +199,7 @@ public List list(Expression... args) { @Override @SuppressWarnings("unchecked") public List list(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); Object rv = execute(createQuery(false), false); reset(); return rv instanceof List ? (List)rv : Collections.singletonList((RT) rv); @@ -214,7 +213,7 @@ public SearchResults listResults(Expression... args) { @Override @SuppressWarnings("unchecked") public SearchResults listResults(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); Query countQuery = createQuery(true); countQuery.setUnique(true); long total = (Long) execute(countQuery, true); @@ -255,7 +254,7 @@ public Tuple uniqueResult(Expression... args) { @SuppressWarnings("unchecked") @Nullable public RT uniqueResult(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); return (RT)uniqueResult(); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java deleted file mode 100644 index 555b8a8b24..0000000000 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOSubQueryTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.jdo; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.querydsl.jdo.test.domain.QProduct; - -public class JDOSubQueryTest { - - @Test - public void Multiple_Projections() { - JDOSubQuery query = new JDOSubQuery(); - query.from(QProduct.product); - assertEquals(1, query.list(QProduct.product).getMetadata().getProjection().size()); - assertEquals(1, query.list(QProduct.product).getMetadata().getProjection().size()); - } - -} diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index 339f134aed..f915876af5 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -83,7 +83,7 @@ public T fetchAll() { } @Override - protected Expression createAlias(Expression expr, Path alias) { + protected Expression createAlias(Expression expr, Path alias) { aliases.put(expr, alias); return super.createAlias(expr, alias); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java index 2a20e081f6..45792387db 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java @@ -154,7 +154,7 @@ private void handleJoinTarget(JoinExpression je) { } public void serialize(QueryMetadata metadata, boolean forCountRow, @Nullable String projection) { - final List> select = metadata.getProjection(); + final Expression select = metadata.getProjection(); final List joins = metadata.getJoins(); final Predicate where = metadata.getWhere(); final List> groupBy = metadata.getGroupBy(); @@ -173,12 +173,12 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, @Nullable Str } else { append(SELECT_COUNT_DISTINCT); } - if(!select.isEmpty()) { - if (select.get(0) instanceof FactoryExpression) { + if (select != null) { + if (select instanceof FactoryExpression) { handle(joins.get(0).getTarget()); } else { // TODO : make sure this works - handle(COMMA, select); + handle(select); } } else { handle(joins.get(0).getTarget()); @@ -191,8 +191,8 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, @Nullable Str } else { append(SELECT_DISTINCT); } - if (!select.isEmpty()) { - handle(COMMA, select); + if (select != null) { + handle(select); } else { handle(metadata.getJoins().get(0).getTarget()); } @@ -248,11 +248,20 @@ public void serializeForDelete(QueryMetadata md) { } } - public void serializeForUpdate(QueryMetadata md) { + public void serializeForUpdate(QueryMetadata md, Map, Expression> updates) { append(UPDATE); handleJoinTarget(md.getJoins().get(0)); append(SET); - handle(COMMA, md.getProjection()); + boolean first = true; + for (Map.Entry, Expression> entry : updates.entrySet()) { + if (!first) { + append(", "); + } + handle(entry.getKey()); + append(" = "); + handle(entry.getValue()); + first = false; + } if (md.getWhere() != null) { append(WHERE).handle(md.getWhere()); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java index 2da5e522ee..cffbc893f9 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java @@ -13,21 +13,22 @@ */ package com.querydsl.jpa; -import javax.persistence.Column; -import javax.persistence.Table; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; +import javax.persistence.Column; +import javax.persistence.Table; + import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableList; import com.google.common.collect.ListMultimap; import com.google.common.collect.Lists; import com.querydsl.core.JoinExpression; import com.querydsl.core.QueryMetadata; -import com.querydsl.sql.*; import com.querydsl.core.types.*; +import com.querydsl.sql.*; /** * NativeSQLSerializer extends the SQLSerializer class to extract referenced entity paths and change @@ -103,72 +104,66 @@ private boolean isAllExpression(Expression expr) { @Override public void serialize(QueryMetadata metadata, boolean forCountRow) { // TODO get rid of this wrapping when Hibernate doesn't require unique aliases anymore - int size = metadata.getProjection().size(); - Expression[] args = metadata.getProjection().toArray(new Expression[size]); boolean modified = false; Set used = new HashSet(); - for (int i = 0; i < args.length; i++) { - if (args[i] instanceof Path) { - Path path = (Path)args[i]; - if (!used.add(path.getMetadata().getName())) { - String alias = "col__"+(i+1); - aliases.put(args[i], alias); - args[i] = ExpressionUtils.as(args[i], alias); - modified = true; - } else if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { - aliases.put(path, path.getAnnotatedElement().getAnnotation(Column.class).name()); - } else { - aliases.put(path, ColumnMetadata.getName(path)); - } - } else if (args[i] instanceof FactoryExpression) { - FactoryExpression factoryExpr = (FactoryExpression)args[i]; - List> fargs = Lists.newArrayList(factoryExpr.getArgs()); - for (int j = 0; j < fargs.size(); j++) { - if (fargs.get(j) instanceof Path) { - Path path = (Path) fargs.get(j); - String columnName; - if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { - columnName = path.getAnnotatedElement().getAnnotation(Column.class).name(); - } else { - columnName = ColumnMetadata.getName(path); - } - if (!used.add(columnName)) { - String alias = "col__"+(i+1)+"_"+(j+1); - aliases.put(path, alias); - fargs.set(j, ExpressionUtils.as(fargs.get(j), alias)); - } else { - aliases.put(path, columnName); - } - } else if (isAlias(fargs.get(j))) { - Operation operation = (Operation)fargs.get(j); - aliases.put(operation, operation.getArg(1).toString()); - } else if (!isAllExpression(fargs.get(j))) { - String alias = "col__"+(i+1)+"_"+(j+1); - aliases.put(fargs.get(j), alias); + Expression projection = metadata.getProjection(); + if (projection instanceof Path) { + Path path = (Path)projection; + if (!used.add(path.getMetadata().getName())) { + String alias = "col_1"; + aliases.put(projection, alias); + projection = ExpressionUtils.as(projection, alias); + modified = true; + } else if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { + aliases.put(path, path.getAnnotatedElement().getAnnotation(Column.class).name()); + } else { + aliases.put(path, ColumnMetadata.getName(path)); + } + } else if (projection instanceof FactoryExpression) { + FactoryExpression factoryExpr = (FactoryExpression)projection; + List> fargs = Lists.newArrayList(factoryExpr.getArgs()); + for (int j = 0; j < fargs.size(); j++) { + if (fargs.get(j) instanceof Path) { + Path path = (Path) fargs.get(j); + String columnName; + if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { + columnName = path.getAnnotatedElement().getAnnotation(Column.class).name(); + } else { + columnName = ColumnMetadata.getName(path); + } + if (!used.add(columnName)) { + String alias = "col_"+(j+1); + aliases.put(path, alias); fargs.set(j, ExpressionUtils.as(fargs.get(j), alias)); + } else { + aliases.put(path, columnName); } + } else if (isAlias(fargs.get(j))) { + Operation operation = (Operation)fargs.get(j); + aliases.put(operation, operation.getArg(1).toString()); + } else if (!isAllExpression(fargs.get(j))) { + String alias = "col_"+(j+1); + aliases.put(fargs.get(j), alias); + fargs.set(j, ExpressionUtils.as(fargs.get(j), alias)); } - args[i] = new QTuple(ImmutableList.copyOf(fargs)); + } + projection = new QTuple(ImmutableList.copyOf(fargs)); + modified = true; + } else if (isAlias(projection)) { + Operation operation = (Operation)projection; + aliases.put(operation, operation.getArg(1).toString()); + } else { + // https://github.com/querydsl/querydsl/issues/80 + if (!isAllExpression(projection)) { + String alias = "col_1"; + aliases.put(projection, alias); + projection = ExpressionUtils.as(projection, alias); modified = true; - } else if (isAlias(args[i])) { - Operation operation = (Operation)args[i]; - aliases.put(operation, operation.getArg(1).toString()); - } else { - // https://github.com/querydsl/querydsl/issues/80 - if (!isAllExpression(args[i])) { - String alias = "col__"+(i+1); - aliases.put(args[i], alias); - args[i] = ExpressionUtils.as(args[i], alias); - modified = true; - } } } if (modified) { metadata = metadata.clone(); - metadata.clearProjection(); - for (Expression arg : args) { - metadata.addProjection(arg); - } + metadata.setProjection(projection); } super.serialize(metadata, forCountRow); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java index 0390e2b665..f5b355efcb 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/AbstractHibernateQuery.java @@ -29,10 +29,8 @@ import com.querydsl.core.*; import com.querydsl.core.NonUniqueResultException; import com.querydsl.core.QueryException; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.FactoryExpressionUtils; -import com.querydsl.core.types.Path; +import com.querydsl.core.types.*; +import com.querydsl.core.util.ArrayUtils; import com.querydsl.jpa.*; /** @@ -95,7 +93,7 @@ public long count() { * @return */ public Query createQuery(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); return createQuery(getMetadata().getModifiers(), false); } @@ -108,9 +106,8 @@ public Query createQuery(Expression expr) { * @return */ public Query createQuery(Expression expr1, Expression expr2, Expression... rest) { - queryMixin.addProjection(expr1); - queryMixin.addProjection(expr2); - queryMixin.addProjection(rest); + queryMixin.setProjection(ExpressionUtils.list(Object[].class, + ArrayUtils.combine(Expression.class, expr1, expr2, rest))); return createQuery(getMetadata().getModifiers(), false); } @@ -121,7 +118,7 @@ public Query createQuery(Expression expr1, Expression expr2, Expression * @return */ public Query createQuery(Expression[] args) { - queryMixin.addProjection(args); + queryMixin.setProjection(ExpressionUtils.list(Object[].class, args)); return createQuery(getMetadata().getModifiers(), false); } @@ -168,17 +165,9 @@ private Query createQuery(@Nullable QueryModifiers modifiers, boolean forCount) } // set transformer, if necessary - List> projection = getMetadata().getProjection(); - if (projection.size() == 1 && !forCount) { - Expression expr = projection.get(0); - if (expr instanceof FactoryExpression) { - query.setResultTransformer(new FactoryExpressionTransformer((FactoryExpression) projection.get(0))); - } - } else if (!forCount) { - FactoryExpression proj = FactoryExpressionUtils.wrap(projection); - if (proj != null) { - query.setResultTransformer(new FactoryExpressionTransformer(proj)); - } + Expression projection = getMetadata().getProjection(); + if (!forCount && projection instanceof FactoryExpression) { + query.setResultTransformer(new FactoryExpressionTransformer((FactoryExpression) projection)); } return query; } @@ -236,7 +225,7 @@ public SearchResults listResults(Expression... args) { @Override public SearchResults listResults(Expression expr) { try{ - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); Query countQuery = createQuery(null, true); long total = (Long) countQuery.uniqueResult(); @@ -397,7 +386,7 @@ public Tuple uniqueResult(Expression... args) { @Override @SuppressWarnings("unchecked") public RT uniqueResult(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); return (RT)uniqueResult(); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java index 865994424a..6ccac3e44c 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java @@ -17,18 +17,21 @@ import java.util.List; import java.util.Map; +import org.hibernate.LockMode; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.StatelessSession; + +import com.google.common.collect.Maps; import com.querydsl.core.JoinType; import com.querydsl.core.dml.UpdateClause; +import com.querydsl.core.support.Expressions; +import com.querydsl.core.support.QueryMixin; +import com.querydsl.core.types.*; import com.querydsl.jpa.HQLTemplates; import com.querydsl.jpa.JPAQueryMixin; import com.querydsl.jpa.JPQLSerializer; import com.querydsl.jpa.JPQLTemplates; -import com.querydsl.core.support.QueryMixin; -import com.querydsl.core.types.*; -import org.hibernate.LockMode; -import org.hibernate.Query; -import org.hibernate.Session; -import org.hibernate.StatelessSession; /** * UpdateClause implementation for Hibernate @@ -41,6 +44,8 @@ public class HibernateUpdateClause implements private final QueryMixin queryMixin = new JPAQueryMixin(); + private final Map, Expression> updates = Maps.newLinkedHashMap(); + private final SessionHolder session; private final JPQLTemplates templates; @@ -69,7 +74,7 @@ public HibernateUpdateClause(SessionHolder session, EntityPath entity, @Override public long execute() { JPQLSerializer serializer = new JPQLSerializer(templates, null); - serializer.serializeForUpdate(queryMixin.getMetadata()); + serializer.serializeForUpdate(queryMixin.getMetadata(), updates); Map constants = serializer.getConstantToLabel(); Query query = session.createQuery(serializer.toString()); @@ -83,7 +88,7 @@ public long execute() { @Override public HibernateUpdateClause set(Path path, T value) { if (value != null) { - queryMixin.addProjection(ExpressionUtils.eqConst(path, value)); + updates.put(path, Expressions.constant(value)); } else { setNull(path); } @@ -93,7 +98,7 @@ public HibernateUpdateClause set(Path path, T value) { @Override public HibernateUpdateClause set(Path path, Expression expression) { if (expression != null) { - queryMixin.addProjection(ExpressionUtils.eq(path, expression)); + updates.put(path, expression); } else { setNull(path); } @@ -102,7 +107,7 @@ public HibernateUpdateClause set(Path path, Expression expre @Override public HibernateUpdateClause setNull(Path path) { - queryMixin.addProjection(ExpressionUtils.eq(path, new NullExpression(path.getType()))); + updates.put(path, new NullExpression(path.getType())); return this; } @@ -111,10 +116,9 @@ public HibernateUpdateClause setNull(Path path) { public HibernateUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++) { if (values.get(i) != null) { - queryMixin.addProjection(ExpressionUtils.eqConst((Expression)paths.get(i), values.get(i))); + updates.put(paths.get(i), Expressions.constant(values.get(i))); } else { - queryMixin.addProjection(ExpressionUtils.eq(((Expression)paths.get(i)), - new NullExpression(paths.get(i).getType()))); + updates.put(paths.get(i), new NullExpression(paths.get(i).getType())); } } @@ -141,13 +145,13 @@ public HibernateUpdateClause setLockMode(Path path, LockMode lockMode) { @Override public String toString() { JPQLSerializer serializer = new JPQLSerializer(templates, null); - serializer.serializeForUpdate(queryMixin.getMetadata()); + serializer.serializeForUpdate(queryMixin.getMetadata(), updates); return serializer.toString(); } @Override public boolean isEmpty() { - return queryMixin.getMetadata().getProjection().isEmpty(); + return updates.isEmpty(); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java index 45ed8bbe40..a48f1c0009 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/sql/AbstractHibernateSQLQuery.java @@ -79,7 +79,13 @@ public AbstractHibernateSQLQuery(SessionHolder session, Configuration conf, Quer public Query createQuery(Expression... args) { queryMixin.getMetadata().setValidate(false); - queryMixin.addProjection(args); + queryMixin.setProjection(args); + return createQuery(false); + } + + public Query createQuery(Expression arg) { + queryMixin.getMetadata().setValidate(false); + queryMixin.setProjection(arg); return createQuery(false); } @@ -95,10 +101,9 @@ private Query createQuery(boolean forCount) { ListMultimap, String> aliases = serializer.getAliases(); Set used = Sets.newHashSet(); // set entity paths - List> projection = queryMixin.getMetadata().getProjection(); - Expression proj = projection.get(0); - if (proj instanceof FactoryExpression) { - for (Expression expr : ((FactoryExpression)proj).getArgs()) { + Expression projection = queryMixin.getMetadata().getProjection(); + if (projection instanceof FactoryExpression) { + for (Expression expr : ((FactoryExpression)projection).getArgs()) { if (isEntityExpression(expr)) { query.addEntity(extractEntityExpression(expr).toString(), expr.getType()); } else if (aliases.containsKey(expr)) { @@ -111,10 +116,10 @@ private Query createQuery(boolean forCount) { } } } - } else if (isEntityExpression(proj)) { - query.addEntity(extractEntityExpression(proj).toString(), proj.getType()); - } else if (aliases.containsKey(proj)) { - for (String scalar : aliases.get(proj)) { + } else if (isEntityExpression(projection)) { + query.addEntity(extractEntityExpression(projection).toString(), projection.getType()); + } else if (aliases.containsKey(projection)) { + for (String scalar : aliases.get(projection)) { if (!used.contains(scalar)) { query.addScalar(scalar); used.add(scalar); @@ -124,8 +129,8 @@ private Query createQuery(boolean forCount) { } // set result transformer, if projection is a FactoryExpression instance - if (projection.size() == 1 && proj instanceof FactoryExpression) { - query.setResultTransformer(new FactoryExpressionTransformer((FactoryExpression) proj)); + if (projection instanceof FactoryExpression) { + query.setResultTransformer(new FactoryExpressionTransformer((FactoryExpression) projection)); } } @@ -177,7 +182,7 @@ public CloseableIterator iterate(Expression projection) { public SearchResults listResults(Expression projection) { // TODO : handle entity projections as well try { - queryMixin.addProjection(projection); + queryMixin.setProjection(projection); Query query = createQuery(true); long total = ((Number)query.uniqueResult()).longValue(); if (total > 0) { diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java index 28c55d0d01..42382c4bf6 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/AbstractJPAQuery.java @@ -13,29 +13,32 @@ */ package com.querydsl.jpa.impl; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import javax.annotation.Nullable; import javax.persistence.EntityManager; import javax.persistence.FlushModeType; import javax.persistence.LockModeType; import javax.persistence.Query; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.*; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.ExpressionUtils; +import com.querydsl.core.types.FactoryExpression; +import com.querydsl.core.util.ArrayUtils; import com.querydsl.jpa.JPAQueryBase; import com.querydsl.jpa.JPQLSerializer; import com.querydsl.jpa.JPQLTemplates; import com.querydsl.jpa.QueryHandler; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.FactoryExpressionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.MDC; /** * Abstract base class for JPA API based implementations of the JPQLQuery interface @@ -90,7 +93,7 @@ public long count() { * @return */ public Query createQuery(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); return createQuery(getMetadata().getModifiers(), false); } @@ -103,9 +106,7 @@ public Query createQuery(Expression expr) { * @return */ public Query createQuery(Expression expr1, Expression expr2, Expression... rest) { - queryMixin.addProjection(expr1); - queryMixin.addProjection(expr2); - queryMixin.addProjection(rest); + queryMixin.setProjection(ExpressionUtils.list(Object[].class, ArrayUtils.combine(Expression.class, expr1, expr2, rest))); return createQuery(getMetadata().getModifiers(), false); } @@ -116,7 +117,7 @@ public Query createQuery(Expression expr1, Expression expr2, Expression * @return */ public Query createQuery(Expression[] args) { - queryMixin.addProjection(args); + queryMixin.setProjection(ExpressionUtils.list(Object[].class, args)); return createQuery(getMetadata().getModifiers(), false); } @@ -148,20 +149,12 @@ private Query createQuery(@Nullable QueryModifiers modifiers, boolean forCount) } // set transformer, if necessary and possible - List> projection = getMetadata().getProjection(); + Expression projection = getMetadata().getProjection(); - FactoryExpression wrapped = projection.size() > 1 ? FactoryExpressionUtils.wrap(projection) : null; + if (!forCount && projection instanceof FactoryExpression) { - if (!forCount && ((projection.size() == 1 && projection.get(0) instanceof FactoryExpression) || wrapped != null)) { - Expression expr = wrapped != null ? wrapped : projection.get(0); - - if (!queryHandler.transform(query, (FactoryExpression)expr)) { - this.projection = (FactoryExpression)projection.get(0); - if (wrapped != null) { - this.projection = wrapped; - getMetadata().clearProjection(); - getMetadata().addProjection(wrapped); - } + if (!queryHandler.transform(query, (FactoryExpression) projection)) { + this.projection = (FactoryExpression) projection; } } @@ -257,7 +250,7 @@ public SearchResults listResults(Expression... args) { @Override public SearchResults listResults(Expression expr) { try { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); Query countQuery = createQuery(null, true); long total = (Long) countQuery.getSingleResult(); if (total > 0) { @@ -297,7 +290,7 @@ protected void reset() { @Override public RT uniqueResult(Expression expr) { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); return uniqueResult(); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java index 11671c40d3..8fe0f2e48f 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java @@ -13,20 +13,23 @@ */ package com.querydsl.jpa.impl; +import java.util.List; +import java.util.Map; + import javax.annotation.Nullable; import javax.persistence.EntityManager; import javax.persistence.LockModeType; import javax.persistence.Query; -import java.util.List; -import java.util.Map; +import com.google.common.collect.Maps; import com.querydsl.core.JoinType; import com.querydsl.core.dml.UpdateClause; +import com.querydsl.core.support.Expressions; +import com.querydsl.core.support.QueryMixin; +import com.querydsl.core.types.*; import com.querydsl.jpa.JPAQueryMixin; import com.querydsl.jpa.JPQLSerializer; import com.querydsl.jpa.JPQLTemplates; -import com.querydsl.core.support.QueryMixin; -import com.querydsl.core.types.*; /** * UpdateClause implementation for JPA @@ -38,6 +41,8 @@ public class JPAUpdateClause implements UpdateClause { private final QueryMixin queryMixin = new JPAQueryMixin(); + private final Map, Expression> updates = Maps.newLinkedHashMap(); + private final EntityManager entityManager; private final JPQLTemplates templates; @@ -58,7 +63,7 @@ public JPAUpdateClause(EntityManager em, EntityPath entity, JPQLTemplates tem @Override public long execute() { JPQLSerializer serializer = new JPQLSerializer(templates, entityManager); - serializer.serializeForUpdate(queryMixin.getMetadata()); + serializer.serializeForUpdate(queryMixin.getMetadata(), updates); Map constants = serializer.getConstantToLabel(); Query query = entityManager.createQuery(serializer.toString()); @@ -72,7 +77,7 @@ public long execute() { @Override public JPAUpdateClause set(Path path, T value) { if (value != null) { - queryMixin.addProjection(ExpressionUtils.eqConst(path, value)); + updates.put(path, Expressions.constant(value)); } else { setNull(path); } @@ -82,7 +87,7 @@ public JPAUpdateClause set(Path path, T value) { @Override public JPAUpdateClause set(Path path, Expression expression) { if (expression != null) { - queryMixin.addProjection(ExpressionUtils.eq(path, expression)); + updates.put(path, expression); } else { setNull(path); } @@ -91,7 +96,7 @@ public JPAUpdateClause set(Path path, Expression expression) @Override public JPAUpdateClause setNull(Path path) { - queryMixin.addProjection(ExpressionUtils.eq(path, new NullExpression(path.getType()))); + updates.put(path, new NullExpression(path.getType())); return this; } @@ -100,10 +105,9 @@ public JPAUpdateClause setNull(Path path) { public JPAUpdateClause set(List> paths, List values) { for (int i = 0; i < paths.size(); i++) { if (values.get(i) != null) { - queryMixin.addProjection(ExpressionUtils.eqConst((Expression)paths.get(i), values.get(i))); + updates.put(paths.get(i), Expressions.constant(values.get(i))); } else { - queryMixin.addProjection(ExpressionUtils.eq((Expression)paths.get(i), - new NullExpression(paths.get(i).getType()))); + updates.put(paths.get(i), new NullExpression(paths.get(i).getType())); } } return this; @@ -125,13 +129,13 @@ public JPAUpdateClause setLockMode(LockModeType lockMode) { @Override public String toString() { JPQLSerializer serializer = new JPQLSerializer(templates, entityManager); - serializer.serializeForUpdate(queryMixin.getMetadata()); + serializer.serializeForUpdate(queryMixin.getMetadata(), updates); return serializer.toString(); } @Override public boolean isEmpty() { - return queryMixin.getMetadata().getProjection().isEmpty(); + return updates.isEmpty(); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/package-info.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/package-info.java index 45b00edecb..f20038573b 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/package-info.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/package-info.java @@ -14,6 +14,6 @@ /** - * Query implementations for HQL and JPAQL + * Query implementations for HQL and JPQL */ package com.querydsl.jpa; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java index c2cb46656e..71ddbc7506 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/sql/AbstractJPASQLQuery.java @@ -13,15 +13,20 @@ */ package com.querydsl.jpa.sql; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + import javax.annotation.Nullable; import javax.persistence.EntityManager; import javax.persistence.FlushModeType; import javax.persistence.LockModeType; import javax.persistence.Query; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; import com.google.common.collect.HashMultimap; import com.google.common.collect.ListMultimap; @@ -29,6 +34,8 @@ import com.google.common.collect.Sets; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.*; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.FactoryExpression; import com.querydsl.jpa.AbstractSQLQuery; import com.querydsl.jpa.NativeSQLSerializer; import com.querydsl.jpa.QueryHandler; @@ -36,12 +43,6 @@ import com.querydsl.jpa.impl.JPAUtil; import com.querydsl.sql.Configuration; import com.querydsl.sql.SQLSerializer; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.FactoryExpressionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.MDC; /** * AbstractJPASQLQuery is the base class for JPA Native SQL queries @@ -90,7 +91,13 @@ public AbstractJPASQLQuery(EntityManager em, Configuration configuration, QueryH public Query createQuery(Expression... args) { queryMixin.getMetadata().setValidate(false); - queryMixin.addProjection(args); + queryMixin.setProjection(args); + return createQuery(false); + } + + public Query createQuery(Expression arg) { + queryMixin.getMetadata().setValidate(false); + queryMixin.setProjection(arg); return createQuery(false); } @@ -98,19 +105,14 @@ private Query createQuery(boolean forCount) { NativeSQLSerializer serializer = (NativeSQLSerializer) serialize(forCount); String queryString = serializer.toString(); logQuery(queryString, serializer.getConstantToLabel()); - List> projection = queryMixin.getMetadata().getProjection(); + Expression projection = queryMixin.getMetadata().getProjection(); Query query; - Expression proj = projection.get(0); - if (!FactoryExpression.class.isAssignableFrom(proj.getClass()) && isEntityExpression(proj)) { - if (projection.size() == 1) { - if (queryHandler.createNativeQueryTyped()) { - query = entityManager.createNativeQuery(queryString, proj.getType()); - } else { - query = entityManager.createNativeQuery(queryString); - } + if (!FactoryExpression.class.isAssignableFrom(projection.getClass()) && isEntityExpression(projection)) { + if (queryHandler.createNativeQueryTyped()) { + query = entityManager.createNativeQuery(queryString, projection.getType()); } else { - throw new IllegalArgumentException("Only single element entity projections are supported"); + query = entityManager.createNativeQuery(queryString); } } else { @@ -119,8 +121,8 @@ private Query createQuery(boolean forCount) { if (!forCount) { ListMultimap, String> aliases = serializer.getAliases(); Set used = Sets.newHashSet(); - if (proj instanceof FactoryExpression) { - for (Expression expr : ((FactoryExpression)proj).getArgs()) { + if (projection instanceof FactoryExpression) { + for (Expression expr : ((FactoryExpression)projection).getArgs()) { if (isEntityExpression(expr)) { queryHandler.addEntity(query, extractEntityExpression(expr).toString(), expr.getType()); } else if (aliases.containsKey(expr)) { @@ -134,12 +136,12 @@ private Query createQuery(boolean forCount) { } } } - } else if (isEntityExpression(proj)) { - queryHandler.addEntity(query, extractEntityExpression(proj).toString(), proj.getType()); - } else if (aliases.containsKey(proj)) { - for (String scalar : aliases.get(proj)) { + } else if (isEntityExpression(projection)) { + queryHandler.addEntity(query, extractEntityExpression(projection).toString(), projection.getType()); + } else if (aliases.containsKey(projection)) { + for (String scalar : aliases.get(projection)) { if (!used.contains(scalar)) { - queryHandler.addScalar(query, scalar, proj.getType()); + queryHandler.addScalar(query, scalar, projection.getType()); used.add(scalar); break; } @@ -162,17 +164,9 @@ private Query createQuery(boolean forCount) { // set constants JPAUtil.setConstants(query, serializer.getConstantToLabel(), queryMixin.getMetadata().getParams()); - FactoryExpression wrapped = projection.size() > 1 ? FactoryExpressionUtils.wrap(projection) : null; - if ((projection.size() == 1 && projection.get(0) instanceof FactoryExpression) || wrapped != null) { - Expression expr = wrapped != null ? wrapped : projection.get(0); - - if (!queryHandler.transform(query, (FactoryExpression)expr)) { - this.projection = (FactoryExpression)projection.get(0); - if (wrapped != null) { - this.projection = wrapped; - getMetadata().clearProjection(); - getMetadata().addProjection(wrapped); - } + if (projection instanceof FactoryExpression) { + if (!queryHandler.transform(query, (FactoryExpression)projection)) { + this.projection = (FactoryExpression)projection; } } @@ -267,7 +261,7 @@ public CloseableIterator iterate(Expression expr) { public SearchResults listResults(Expression projection) { // TODO : handle entity projections as well try { - queryMixin.addProjection(projection); + queryMixin.setProjection(projection); Query query = createQuery(true); long total = ((Number)query.getSingleResult()).longValue(); if (total > 0) { diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/HibernateBase.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/HibernateBase.java index 2ce37e908d..7292db313d 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/HibernateBase.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/HibernateBase.java @@ -30,6 +30,7 @@ import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.DefaultQueryMetadata; +import com.querydsl.core.types.Expression; import com.querydsl.jpa.domain.Cat; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.hibernate.DefaultSessionHolder; @@ -102,7 +103,7 @@ public void FlushMode() { } @Test - public void Scroll() throws IOException{ + public void Scroll() throws IOException { CloseableIterator cats = new ScrollableResultsIterator(query().from(cat) .createQuery(cat).scroll()); assertTrue(cats.hasNext()); @@ -113,7 +114,7 @@ public void Scroll() throws IOException{ } @Test - public void ScrollArray() throws IOException{ + public void ScrollArray() throws IOException { CloseableIterator rows = new ScrollableResultsIterator(query() .from(cat) .createQuery(cat.name, cat.birthdate).scroll(), true); @@ -127,5 +128,28 @@ public void ScrollArray() throws IOException{ rows.close(); } + @Test + public void createQuery() { + List rows = query().from(cat).createQuery(cat.id, cat.name).list(); + for (Object[] row : rows) { + assertEquals(2, row.length); + } + } + + @Test + public void createQuery2() { + List rows = query().from(cat).createQuery(new Expression[]{cat.id, cat.name}).list(); + for (Object[] row : rows) { + assertEquals(2, row.length); + } + } + + @Test + public void createQuery3() { + List rows = query().from(cat).createQuery(cat.name).list(); + for (String row : rows) { + assertTrue(row instanceof String); + } + } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java index ed810de476..8b3ae67ac4 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java @@ -33,12 +33,13 @@ import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.Target; +import com.querydsl.core.testutil.ExcludeIn; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.expr.BooleanExpression; import com.querydsl.jpa.domain.*; import com.querydsl.jpa.impl.JPADeleteClause; import com.querydsl.jpa.impl.JPAQuery; -import com.querydsl.core.types.EntityPath; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.testutil.ExcludeIn; import com.querydsl.jpa.testutil.JPATestRunner; /** @@ -235,4 +236,27 @@ public void Subquery_UniqueResult() { .singleResult(new QCatSummary(cat.breed.count(), exists))); } + @Test + public void createQuery() { + List rows = query().from(cat).createQuery(cat.id, cat.name).getResultList(); + for (Object[] row : rows) { + assertEquals(2, row.length); + } + } + + @Test + public void createQuery2() { + List rows = query().from(cat).createQuery(new Expression[]{cat.id, cat.name}).getResultList(); + for (Object[] row : rows) { + assertEquals(2, row.length); + } + } + + @Test + public void createQuery3() { + List rows = query().from(cat).createQuery(cat.name).getResultList(); + for (String row : rows) { + assertTrue(row instanceof String); + } + } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java index ffe263b6fa..853007e425 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java @@ -15,16 +15,15 @@ import static com.querydsl.core.support.Expressions.numberOperation; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import javax.persistence.EntityManager; import org.junit.Test; import org.junit.runner.RunWith; +import com.querydsl.core.types.OperatorImpl; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.impl.JPAQuery; -import com.querydsl.core.types.OperatorImpl; import com.querydsl.jpa.testutil.JPATestRunner; @RunWith(JPATestRunner.class) @@ -57,35 +56,22 @@ public void test() { JPAQuery query = query().from(cat); query.count(); - assertProjectionEmpty(query); query.distinct().count(); - assertProjectionEmpty(query); query.iterate(cat); - assertProjectionEmpty(query); query.iterate(cat,cat); - assertProjectionEmpty(query); query.distinct().iterate(cat); - assertProjectionEmpty(query); query.distinct().iterate(cat,cat); - assertProjectionEmpty(query); query.list(cat); - assertProjectionEmpty(query); query.list(cat,cat); - assertProjectionEmpty(query); query.distinct().list(cat); - assertProjectionEmpty(query); query.distinct().list(cat,cat); - assertProjectionEmpty(query); query.listResults(cat); - assertProjectionEmpty(query); query.distinct().listResults(cat); - assertProjectionEmpty(query); query.map(cat.name, cat); - assertProjectionEmpty(query); } @Test @@ -125,8 +111,4 @@ public void Clone_Lose_Templates() { .uniqueResult(numberOperation(Integer.class, customOperator, cat.floatProperty)); } - private void assertProjectionEmpty(JPAQuery query) { - assertTrue(query.getMetadata().getProjection().isEmpty()); - } - } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPASubQueryTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPASubQueryTest.java deleted file mode 100644 index 6e2b046cbf..0000000000 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPASubQueryTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.jpa; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.querydsl.jpa.domain.QCat; - -public class JPASubQueryTest { - - @Test - public void Multiple_Projections() { - QCat cat = QCat.cat; - JPASubQuery query = new JPASubQuery(); - query.from(cat); - assertEquals(1, query.list(cat).getMetadata().getProjection().size()); - assertEquals(1, query.list(cat).getMetadata().getProjection().size()); - } - - @Test - public void Via_Interface() { - QCat cat = QCat.cat; - JPQLSubQuery query = new JPASubQuery(); - query.from(cat); - assertEquals(1, query.list(cat).getMetadata().getProjection().size()); - assertEquals(1, query.list(cat).getMetadata().getProjection().size()); - } - -} diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java index ec25a456ae..ce25d68129 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java @@ -13,16 +13,16 @@ */ package com.querydsl.jpa; +import static org.junit.Assert.assertEquals; + import java.util.Arrays; +import org.junit.Test; + import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.JoinType; import com.querydsl.core.QueryMetadata; import com.querydsl.core.domain.QCat; -import com.querydsl.jpa.domain.JobFunction; -import com.querydsl.jpa.domain.Location; -import com.querydsl.jpa.domain.QDomesticCat; -import com.querydsl.jpa.domain.QEmployee; import com.querydsl.core.support.Expressions; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; @@ -31,8 +31,10 @@ import com.querydsl.core.types.path.EntityPathBase; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; -import org.junit.Test; -import static org.junit.Assert.assertEquals; +import com.querydsl.jpa.domain.JobFunction; +import com.querydsl.jpa.domain.Location; +import com.querydsl.jpa.domain.QDomesticCat; +import com.querydsl.jpa.domain.QEmployee; public class JPQLSerializerTest { @@ -226,7 +228,7 @@ public void Treat() { QueryMetadata md = new DefaultQueryMetadata(); md.addJoin(JoinType.DEFAULT, cat); md.addJoin(JoinType.JOIN, cat.mate.as((Path) QDomesticCat.domesticCat)); - md.addProjection(QDomesticCat.domesticCat); + md.setProjection(QDomesticCat.domesticCat); serializer.serialize(md, false, null); assertEquals("select domesticCat\n" + "from Cat cat\n" + diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java index 38f0a3a7c7..a03349dc26 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java @@ -13,14 +13,15 @@ */ package com.querydsl.jpa; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.JoinType; import com.querydsl.jpa.domain.sql.SAnimal; import com.querydsl.sql.Configuration; import com.querydsl.sql.MySQLTemplates; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; public class NativeSQLSerializerTest { @@ -33,7 +34,7 @@ public void In() { SAnimal cat = SAnimal.animal_; md.addJoin(JoinType.DEFAULT, cat); md.addWhere(cat.name.in("X", "Y")); - md.addProjection(cat.id); + md.setProjection(cat.id); serializer.serialize(md, false); assertEquals("select animal_.id\n" + "from animal_ animal_\n" + diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/QueryHelper.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/QueryHelper.java index 7ab738e6ba..8d7ca8f3f1 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/QueryHelper.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/QueryHelper.java @@ -13,23 +13,27 @@ */ package com.querydsl.jpa; -import javax.annotation.Nullable; +import static org.junit.Assert.assertEquals; + import java.io.ByteArrayOutputStream; import java.io.PrintStream; -import antlr.RecognitionException; -import antlr.TokenStreamException; -import antlr.collections.AST; +import javax.annotation.Nullable; + +import org.hibernate.hql.internal.ast.HqlParser; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.QueryMetadata; import com.querydsl.core.SearchResults; import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; -import org.hibernate.hql.internal.ast.HqlParser; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import static org.junit.Assert.assertEquals; + +import antlr.RecognitionException; +import antlr.TokenStreamException; +import antlr.collections.AST; class QueryHelper extends JPAQueryBase { @@ -90,7 +94,7 @@ public void parse() throws RecognitionException, TokenStreamException { } public QueryHelper select(Expression... exprs) { - queryMixin.addProjection(exprs); + queryMixin.setProjection(exprs); return this; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java index 6809fb84a6..dddb4c30f5 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java @@ -13,17 +13,20 @@ */ package com.querydsl.jpa; -import javax.persistence.EntityManager; +import static org.junit.Assert.*; + import java.io.*; +import javax.persistence.EntityManager; + +import org.junit.Test; +import org.junit.runner.RunWith; + import com.querydsl.core.QueryMetadata; +import com.querydsl.core.types.Predicate; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.impl.JPAQuery; -import com.querydsl.core.types.Predicate; import com.querydsl.jpa.testutil.JPATestRunner; -import org.junit.Test; -import org.junit.runner.RunWith; -import static org.junit.Assert.*; @RunWith(JPATestRunner.class) public class SerializationBase implements JPATest { @@ -42,7 +45,7 @@ public void test() throws IOException, ClassNotFoundException{ QueryMetadata metadata = query.getMetadata(); assertFalse(metadata.getJoins().isEmpty()); assertTrue(metadata.getWhere() != null); - assertTrue(metadata.getProjection().isEmpty()); + assertTrue(metadata.getProjection() != null); // serialize metadata ByteArrayOutputStream baos = new ByteArrayOutputStream(); diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java index cd5acf21ba..a829ce7585 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java @@ -13,12 +13,13 @@ */ package com.querydsl.mongodb; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import javax.annotation.Nullable; + import com.google.common.base.Function; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; @@ -150,7 +151,7 @@ private Predicate allOf(Collection predicates) { protected List getIds(Class targetType, Predicate condition) { DBCollection collection = getCollection(targetType); // TODO : fetch only ids - DBCursor cursor = createCursor(collection, condition, Collections.>emptyList(), + DBCursor cursor = createCursor(collection, condition, null, QueryModifiers.EMPTY, Collections.>emptyList()); if (cursor.hasNext()) { List ids = new ArrayList(cursor.count()); @@ -212,7 +213,7 @@ public MongodbQuery set(ParamExpression param, T value) { } public CloseableIterator iterate(Path... paths) { - queryMixin.addProjection(paths); + queryMixin.setProjection(paths); return iterate(); } @@ -241,7 +242,7 @@ public void close() { } public List list(Path... paths) { - queryMixin.addProjection(paths); + queryMixin.setProjection(paths); return list(); } @@ -265,7 +266,7 @@ protected DBCursor createCursor() { return createCursor(collection, filter, metadata.getProjection(), metadata.getModifiers(), metadata.getOrderBy()); } - protected DBCursor createCursor(DBCollection collection, @Nullable Predicate where, List> projection, + protected DBCursor createCursor(DBCollection collection, @Nullable Predicate where, Expression projection, QueryModifiers modifiers, List> orderBy) { DBCursor cursor = collection.find(createQuery(where), createProjection(projection)); Integer limit = modifiers.getLimitAsInteger(); @@ -285,11 +286,13 @@ protected DBCursor createCursor(DBCollection collection, @Nullable Predicate whe return cursor; } - private DBObject createProjection(List> projection) { - if (!projection.isEmpty()) { + private DBObject createProjection(Expression projection) { + if (projection instanceof FactoryExpression) { DBObject obj = new BasicDBObject(); - for (Expression expr : projection) { - obj.put((String)serializer.handle(expr), 1); + for (Object expr : ((FactoryExpression)projection).getArgs()) { + if (expr instanceof Expression) { + obj.put((String)serializer.handle((Expression) expr), 1); + } } return obj; } @@ -297,7 +300,7 @@ private DBObject createProjection(List> projection) { } public K singleResult(Path...paths) { - queryMixin.addProjection(paths); + queryMixin.setProjection(paths); return singleResult(); } @@ -316,7 +319,7 @@ public K singleResult() { } public K uniqueResult(Path... paths) { - queryMixin.addProjection(paths); + queryMixin.setProjection(paths); return uniqueResult(); } @@ -343,7 +346,7 @@ public K uniqueResult() { } public SearchResults listResults(Path... paths) { - queryMixin.addProjection(paths); + queryMixin.setProjection(paths); return listResults(); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java index 0b70394d0c..e08e8e5b49 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java @@ -13,7 +13,6 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.PreparedStatement; @@ -24,6 +23,12 @@ import java.util.List; import java.util.Map; +import javax.annotation.Nullable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.MDC; + import com.google.common.collect.ImmutableList; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.*; @@ -31,9 +36,6 @@ import com.querydsl.core.types.*; import com.querydsl.core.types.expr.Wildcard; import com.querydsl.core.util.ResultSetAdapter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.MDC; /** * AbstractSQLQuery is the base type for SQL query implementations @@ -157,7 +159,7 @@ protected void endContext(SQLListenerContext context) { * @return */ public ResultSet getResults(Expression... exprs) { - queryMixin.addProjection(exprs); + queryMixin.setProjection(exprs); SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); String queryString = null; @@ -210,7 +212,7 @@ protected Configuration getConfiguration() { @Override public CloseableIterator iterate(Expression expr) { - expr = queryMixin.addProjection(expr); + expr = queryMixin.setProjection(expr); return iterateSingle(queryMixin.getMetadata(), expr); } @@ -288,7 +290,7 @@ public RT produceNext(ResultSet rs) throws Exception { @SuppressWarnings("unchecked") @Override public List list(Expression expr) { - expr = queryMixin.addProjection(expr); + expr = queryMixin.setProjection(expr); SQLListenerContextImpl context = startContext(conn, queryMixin.getMetadata()); String queryString = null; List constants = ImmutableList.of(); @@ -402,10 +404,9 @@ public SearchResults listResults(Expression expr) { return new SearchResults(results, originalModifiers, total); } else { - queryMixin.addProjection(expr); + queryMixin.setProjection(expr); long total = count(); if (total > 0) { - queryMixin.getMetadata().clearProjection(); return new SearchResults(list(expr), originalModifiers, total); } else { return SearchResults.emptyResults(); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java index 3a679823d9..4034ab7353 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java @@ -20,8 +20,10 @@ import com.querydsl.core.QueryFlag; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; +import com.querydsl.core.types.Expression; import com.querydsl.core.types.Ops; import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.Projections; /** * DB2Templates is an SQL dialect for DB2 10.1.2 @@ -233,7 +235,8 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer for (OrderSpecifier os : metadata.getOrderBy()) { rn.orderBy(os); } - metadata.addProjection(rn.as("rn")); + Expression pr = Projections.appending(metadata.getProjection(), rn.as("rn")); + metadata.setProjection(pr); metadata.clearOrderBy(); context.serializeForQuery(metadata, forCountRow); context.append(outerQueryEnd); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java index eabfea99a7..e329f79891 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java @@ -405,7 +405,7 @@ protected SQLSerializer serialize(boolean forCountRow) { * @return */ public SQLBindings getSQL(Expression... exprs) { - queryMixin.addProjection(exprs); + queryMixin.setProjection(exprs); SQLSerializer serializer = serialize(false); ImmutableList.Builder args = ImmutableList.builder(); Map, Object> params = getMetadata().getParams(); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java index a42349f8c7..d7844e3bfa 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java @@ -13,12 +13,13 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import com.infradna.tool.bridge_method_injector.WithBridgeMethods; @@ -300,7 +301,7 @@ private Union innerUnion(SubQueryExpression... sq) { } this.union = UnionUtils.union(sq, unionAll); this.firstUnionSubQuery = sq[0]; - return new UnionImpl((Q)this, sq[0].getMetadata().getProjection()); + return new UnionImpl((Q)this, (Expression) sq[0].getMetadata().getProjection()); } @Override @@ -430,8 +431,7 @@ public Tuple uniqueResult(Expression... args) { @Override public RT uniqueResult(Expression expr) { - if (getMetadata().getModifiers().getLimit() == null - && !expr.toString().contains("count(")) { + if (getMetadata().getModifiers().getLimit() == null && !expr.toString().contains("count(")) { limit(2); } CloseableIterator iterator = iterate(expr); @@ -490,7 +490,7 @@ protected void clone(Q query) { protected abstract SQLSerializer createSerializer(); - private Set> getRootPaths(Collection> exprs) { + private Set> getRootPaths(Collection> exprs) { Set> paths = Sets.newHashSet(); for (Expression e : exprs) { Path path = e.accept(PathExtractor.DEFAULT, null); @@ -501,20 +501,20 @@ private Set> getRootPaths(Collection> exprs) { return paths; } - private Collection> expandProjection(Collection> exprs) { - if (exprs.size() == 1 && exprs.iterator().next() instanceof FactoryExpression) { - return ((FactoryExpression) exprs.iterator().next()).getArgs(); + private Collection> expandProjection(Expression expr) { + if (expr instanceof FactoryExpression) { + return ((FactoryExpression)expr).getArgs(); } else { - return exprs; + return ImmutableList.of(expr); } } protected SQLSerializer serialize(boolean forCountRow) { SQLSerializer serializer = createSerializer(); if (union != null) { - if (queryMixin.getMetadata().getProjection().isEmpty() || - expandProjection(queryMixin.getMetadata().getProjection()).equals( - expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { + if (queryMixin.getMetadata().getProjection() == null || + expandProjection(queryMixin.getMetadata().getProjection()) + .equals(expandProjection(firstUnionSubQuery.getMetadata().getProjection()))) { serializer.serializeUnion(union, queryMixin.getMetadata(), unionAll); } else { QueryMixin mixin2 = new QueryMixin(queryMixin.getMetadata().clone()); @@ -541,7 +541,7 @@ protected SQLSerializer serialize(boolean forCountRow) { * @return */ public SQLBindings getSQL(Expression... exprs) { - queryMixin.addProjection(exprs); + queryMixin.setProjection(exprs); SQLSerializer serializer = serialize(false); ImmutableList.Builder args = ImmutableList.builder(); Map, Object> params = getMetadata().getParams(); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java index 5001fb5324..66dbe3cdbf 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java @@ -44,8 +44,8 @@ public final class RelationalPathExtractor implements Visitor> extract(QueryMetadata md) { Set> known = ImmutableSet.of(); known = DEFAULT.visitJoins(md.getJoins(), known); - for (Expression p : md.getProjection()) { - known = p.accept(DEFAULT, known); + if (md.getProjection() != null) { + known = md.getProjection().accept(DEFAULT, known); } for (OrderSpecifier o : md.getOrderBy()) { known = o.getTarget().accept(DEFAULT, known); @@ -109,8 +109,8 @@ public Set> visit(SubQueryExpression expr, Set> old = known; final QueryMetadata md = expr.getMetadata(); known = visitJoins(md.getJoins(), known); - for (Expression p : md.getProjection()) { - known = p.accept(this, known); + if (md.getProjection() != null) { + known = md.getProjection().accept(this, known); } for (OrderSpecifier o : md.getOrderBy()) { known = o.getTarget().accept(this, known); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java index 2b6b94e899..afecaa2fa1 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java @@ -195,7 +195,7 @@ public void serialize(QueryMetadata metadata, boolean forCountRow) { void serializeForQuery(QueryMetadata metadata, boolean forCountRow) { boolean oldSkipParent = skipParent; skipParent = false; - final List> select = metadata.getProjection(); + final Expression select = metadata.getProjection(); final List joins = metadata.getJoins(); final Predicate where = metadata.getWhere(); final List> groupBy = metadata.getGroupBy(); @@ -205,24 +205,13 @@ void serializeForQuery(QueryMetadata metadata, boolean forCountRow) { final boolean hasFlags = !flags.isEmpty(); String suffix = null; - List> sqlSelect; - if (select.size() == 1) { - final Expression first = select.get(0); - if (first instanceof FactoryExpression) { - sqlSelect = ((FactoryExpression)first).getArgs(); - } else { - sqlSelect = (List)select; - } + List> sqlSelect; + if (select instanceof FactoryExpression) { + sqlSelect = ((FactoryExpression)select).getArgs(); + } else if (select != null) { + sqlSelect = ImmutableList.of(select); } else { - sqlSelect = new ArrayList>(select.size()); - for (Expression selectExpr : select) { - if (selectExpr instanceof FactoryExpression) { - // transforms constructor arguments into individual select expressions - sqlSelect.addAll(((FactoryExpression) selectExpr).getArgs()); - } else { - sqlSelect.add(selectExpr); - } - } + sqlSelect = ImmutableList.of(); } // with diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java index 2faf457eef..bb9e437cc5 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java @@ -21,10 +21,7 @@ import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; import com.querydsl.core.support.Expressions; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.Path; +import com.querydsl.core.types.*; /** @@ -90,7 +87,8 @@ public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer for (OrderSpecifier os : metadata.getOrderBy()) { rn.orderBy(os); } - metadata.addProjection(rn.as("rn")); + Expression pr = Projections.appending(metadata.getProjection(), rn.as("rn")); + metadata.setProjection(pr); metadata.clearOrderBy(); context.serializeForQuery(metadata, forCountRow); context.append(outerQueryEnd); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java b/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java index a62402fd1a..96c94fbe40 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/UnionImpl.java @@ -30,35 +30,25 @@ * @param * @param */ -public class UnionImpl implements Union { +public class UnionImpl & Projectable, RT> implements Union { private final Q query; - private final Expression[] projection; + private final Expression projection; - public UnionImpl(Q query, List> projection) { + public UnionImpl(Q query, Expression projection) { this.query = query; - this.projection = projection.toArray(new Expression[projection.size()]); + this.projection = projection; } - @SuppressWarnings("unchecked") @Override public List list() { - if (projection.length == 1) { - return (List) query.list(projection[0]); - } else { - return (List) query.list(projection); - } + return query.list(projection); } - @SuppressWarnings("unchecked") @Override public CloseableIterator iterate() { - if (projection.length == 1) { - return (CloseableIterator) query.iterate(projection[0]); - } else { - return (CloseableIterator) query.iterate(projection); - } + return query.iterate(projection); } @Override @@ -74,7 +64,6 @@ public Union having(Predicate... o) { } - @SuppressWarnings("unchecked") @Override public Union orderBy(OrderSpecifier... o) { query.orderBy(o); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java index d3eb096f50..dfa11f8d4d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java @@ -45,7 +45,7 @@ public void setUp() { @Test public void NoFrom() { - query.getMetadata().addProjection(NumberTemplate.ONE); + query.getMetadata().setProjection(NumberTemplate.ONE); if (templates.getDummyTable() == null) { assertEquals("select 1", query.toString()); } else { diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java index 311f99fe31..d669599787 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java @@ -7,6 +7,7 @@ import org.junit.Test; import com.querydsl.core.types.PathMetadataFactory; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.expr.Wildcard; import com.querydsl.core.types.path.DatePath; import com.querydsl.core.types.path.NumberPath; @@ -94,9 +95,7 @@ public void test() { .forUpdate(); // of(author.firstName, author.lastName) - query.getMetadata().addProjection(author.firstName); - query.getMetadata().addProjection(author.lastName); - query.getMetadata().addProjection(Wildcard.count); + query.getMetadata().setProjection(Projections.tuple(author.firstName, author.lastName, Wildcard.count)); SQLSerializer serializer = new SQLSerializer(new Configuration(new MySQLTemplates())); serializer.serialize(query.getMetadata(), false); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java index b25433d99d..b364dc7626 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java @@ -57,7 +57,7 @@ public void Union() { @Test public void Modifiers() { query.from(survey1).limit(5).offset(3); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); assertEquals("select * from ( " + "select a.*, rownum rn from ( " + "select survey1.ID from SURVEY survey1 ) " + @@ -68,7 +68,7 @@ public void Modifiers() { @Test public void Modifiers2() { query.from(survey1).limit(5).offset(3); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); query.getMetadata().addFlag(new QueryFlag(QueryFlag.Position.AFTER_PROJECTION, ", count(*) over() ")); assertEquals("select * from ( " + diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java index 1526df386f..15f282c639 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java @@ -39,7 +39,7 @@ public void test() { QueryMixin query = new QueryMixin(); query.from(employee); query.orderBy(employee.firstname.asc()); - query.addProjection(employee.id); + query.setProjection(employee.id); System.out.println(templates.getClass().getSimpleName()); System.out.println(); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PerformanceTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PerformanceTest.java index effd24d92c..22e7835176 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PerformanceTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PerformanceTest.java @@ -29,7 +29,7 @@ public void setUp() { md = new DefaultQueryMetadata(); md.addJoin(JoinType.DEFAULT, survey); md.addWhere(survey.id.eq(10)); - md.addProjection(survey.name); + md.setProjection(survey.name); templates = new H2Templates(); configuration = new Configuration(templates); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java index 4e8a436445..f68b1d8ab4 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java @@ -32,7 +32,7 @@ protected SQLTemplates createTemplates() { @Test public void NoFrom() { - query.getMetadata().addProjection(NumberTemplate.ONE); + query.getMetadata().setProjection(NumberTemplate.ONE); assertEquals("select 1", query.toString()); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QueryPerformanceTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/QueryPerformanceTest.java index ec3a787497..3bb023618d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QueryPerformanceTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QueryPerformanceTest.java @@ -265,7 +265,7 @@ public void Serialization() throws Exception { final QueryMetadata md = new DefaultQueryMetadata(); md.addJoin(JoinType.DEFAULT, companies); md.addWhere(companies.id.eq(1l)); - md.addProjection(companies.name); + md.setProjection(companies.name); Runner.run("ser1", new Benchmark() { @Override @@ -287,7 +287,7 @@ public void Serialization2() throws Exception { final QueryMetadata md = new DefaultQueryMetadata(); md.addJoin(JoinType.DEFAULT, companies); md.addWhere(companies.id.eq(1l)); - md.addProjection(companies.name); + md.setProjection(companies.name); Runner.run("ser2 (non normalized)", new Benchmark() { @Override diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java index be36b73146..4b8ffe9393 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java @@ -21,12 +21,11 @@ import java.util.List; import java.util.TimeZone; +import org.junit.Test; + import com.querydsl.core.BooleanBuilder; import com.querydsl.core.QueryMetadata; import com.querydsl.core.Tuple; -import com.querydsl.sql.domain.QEmployee; -import com.querydsl.sql.domain.QEmployeeNoPK; -import com.querydsl.sql.domain.QSurvey; import com.querydsl.core.support.Expressions; import com.querydsl.core.types.Expression; import com.querydsl.core.types.ExpressionUtils; @@ -36,8 +35,9 @@ import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.PathBuilder; import com.querydsl.core.types.path.StringPath; - -import org.junit.Test; +import com.querydsl.sql.domain.QEmployee; +import com.querydsl.sql.domain.QEmployeeNoPK; +import com.querydsl.sql.domain.QSurvey; public class SQLSerializerTest { @@ -299,7 +299,7 @@ public void WithRecursive() { .from(sub); QueryMetadata md = query.getMetadata(); - md.addProjection(Wildcard.all); + md.setProjection(Wildcard.all); SQLSerializer serializer = new SQLSerializer(Configuration.DEFAULT); serializer.serialize(md, false); assertEquals("with recursive sub as ((select EMPLOYEE.ID, EMPLOYEE.FIRSTNAME, EMPLOYEE.SUPERIOR_ID\n" + @@ -335,7 +335,7 @@ public void WithRecursive2() { .from(sub); QueryMetadata md = query.getMetadata(); - md.addProjection(Wildcard.all); + md.setProjection(Wildcard.all); SQLSerializer serializer = new SQLSerializer(Configuration.DEFAULT); serializer.serialize(md, false); assertEquals("with recursive sub (ID, FIRSTNAME, SUPERIOR_ID) as ((select EMPLOYEE.ID, EMPLOYEE.FIRSTNAME, EMPLOYEE.SUPERIOR_ID\n" + diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java index 3a9a3d386b..b0cfa540f2 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java @@ -31,7 +31,7 @@ public class SQLServer2005TemplatesTest extends AbstractSQLTemplatesTest{ @Override @Test public void NoFrom() { - query.getMetadata().addProjection(NumberTemplate.ONE); + query.getMetadata().setProjection(NumberTemplate.ONE); assertEquals("select 1", query.toString()); } @@ -63,14 +63,14 @@ public void Union() { @Test public void Limit() { query.from(survey1).limit(5); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); assertEquals("select top (?) survey1.ID from SURVEY survey1", query.toString()); } @Test public void Modifiers() { query.from(survey1).limit(5).offset(3); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); assertEquals("select * from (" + " select survey1.ID, row_number() over () as rn from SURVEY survey1) a " + "where rn > ? and rn <= ? order by rn", query.toString()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java index b709f25a81..da866de307 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java @@ -13,6 +13,10 @@ */ package com.querydsl.sql; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Operation; import com.querydsl.core.types.OperationImpl; @@ -20,8 +24,6 @@ import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; -import org.junit.Test; -import static org.junit.Assert.assertEquals; public class SQLServer2012TemplatesTest extends AbstractSQLTemplatesTest { @@ -29,7 +31,7 @@ public class SQLServer2012TemplatesTest extends AbstractSQLTemplatesTest { @Override @Test public void NoFrom() { - query.getMetadata().addProjection(NumberTemplate.ONE); + query.getMetadata().setProjection(NumberTemplate.ONE); assertEquals("select 1", query.toString()); } @@ -61,14 +63,14 @@ public void Union() { @Test public void Limit() { query.from(survey1).limit(5); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); assertEquals("select top 5 survey1.ID from SURVEY survey1", query.toString()); } @Test public void Modifiers() { query.from(survey1).limit(5).offset(3).orderBy(survey1.id.asc()); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); assertEquals("select survey1.ID from SURVEY survey1 order by survey1.ID asc offset ? rows fetch next ? rows only", query.toString()); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java index 1c34dce09c..7a8fd7723b 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java @@ -31,7 +31,7 @@ public class SQLServerTemplatesTest extends AbstractSQLTemplatesTest{ @Override @Test public void NoFrom() { - query.getMetadata().addProjection(NumberTemplate.ONE); + query.getMetadata().setProjection(NumberTemplate.ONE); assertEquals("select 1", query.toString()); } @@ -63,7 +63,7 @@ public void Union() { @Test public void Limit() { query.from(survey1).limit(5); - query.getMetadata().addProjection(survey1.id); + query.getMetadata().setProjection(survey1.id); assertEquals("select top 5 survey1.ID from SURVEY survey1", query.toString()); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java index a72d668617..e668be0f63 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java @@ -13,19 +13,21 @@ */ package com.querydsl.sql; +import static org.junit.Assert.assertEquals; + import java.util.List; +import org.junit.Test; + import com.querydsl.core.DefaultQueryMetadata; -import com.querydsl.sql.domain.QEmployee; -import com.querydsl.sql.domain.QSurvey; import com.querydsl.core.types.*; import com.querydsl.core.types.expr.BooleanOperation; import com.querydsl.core.types.expr.Wildcard; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.query.ListSubQuery; import com.querydsl.core.types.query.NumberSubQuery; -import org.junit.Test; -import static org.junit.Assert.assertEquals; +import com.querydsl.sql.domain.QEmployee; +import com.querydsl.sql.domain.QSurvey; public class SQLSubQueryTest { @@ -41,20 +43,12 @@ public void UnknownOperator() { assertEquals("from EMPLOYEE EMPLOYEE\nwhere com.querydsl.sql.SQLSubQueryTest#unknownfn(EMPLOYEE.ID)", query.toString()); } - @Test - public void Multiple_Projections() { - SQLSubQuery query = new SQLSubQuery(); - query.from(employee); - assertEquals(1, query.list(employee).getMetadata().getProjection().size()); - assertEquals(1, query.list(employee).getMetadata().getProjection().size()); - } - @Test public void List() { SQLSubQuery query = new SQLSubQuery(); query.from(employee); ListSubQuery subQuery = query.list(employee.id, "XXX", employee.firstname); - List> exprs = subQuery.getMetadata().getProjection(); + List> exprs = ((FactoryExpression)subQuery.getMetadata().getProjection()).getArgs(); assertEquals(employee.id, exprs.get(0)); assertEquals(ConstantImpl.create("XXX") , exprs.get(1)); assertEquals(employee.firstname, exprs.get(2)); @@ -102,7 +96,7 @@ public void Unique() { SQLSubQuery query = new SQLSubQuery(); query.from(employee); SubQueryExpression subQuery = query.unique(employee.id, "XXX", employee.firstname); - List> exprs = subQuery.getMetadata().getProjection(); + List> exprs = ((FactoryExpression)subQuery.getMetadata().getProjection()).getArgs(); assertEquals(employee.id, exprs.get(0)); assertEquals(ConstantImpl.create("XXX") , exprs.get(1)); assertEquals(employee.firstname, exprs.get(2)); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/mysql/MySQLQueryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/mysql/MySQLQueryTest.java index a6d683797c..3f3fe2eeb1 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/mysql/MySQLQueryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/mysql/MySQLQueryTest.java @@ -35,7 +35,7 @@ public void setUp() { }}); query.from(survey); query.orderBy(survey.name.asc()); - query.getMetadata().addProjection(survey.name); + query.getMetadata().setProjection(survey.name); } @Test @@ -89,7 +89,7 @@ public void ForceIndex() { query.from(survey); query.forceIndex("col1_index"); query.orderBy(survey.name.asc()); - query.getMetadata().addProjection(survey.name); + query.getMetadata().setProjection(survey.name); assertEquals("select survey.NAME from SURVEY survey force index (col1_index) " + "order by survey.NAME asc", toString(query)); @@ -103,7 +103,7 @@ public void IgnoreIndex() { query.from(survey); query.ignoreIndex("col1_index"); query.orderBy(survey.name.asc()); - query.getMetadata().addProjection(survey.name); + query.getMetadata().setProjection(survey.name); assertEquals("select survey.NAME from SURVEY survey ignore index (col1_index) " + "order by survey.NAME asc", toString(query)); @@ -117,7 +117,7 @@ public void UseIndex() { query.from(survey); query.useIndex("col1_index"); query.orderBy(survey.name.asc()); - query.getMetadata().addProjection(survey.name); + query.getMetadata().setProjection(survey.name); assertEquals("select survey.NAME from SURVEY survey use index (col1_index) " + "order by survey.NAME asc", toString(query)); @@ -131,7 +131,7 @@ public void UseIndex2() { query.from(survey); query.useIndex("col1_index","col2_index"); query.orderBy(survey.name.asc()); - query.getMetadata().addProjection(survey.name); + query.getMetadata().setProjection(survey.name); assertEquals("select survey.NAME from SURVEY survey use index (col1_index, col2_index) " + "order by survey.NAME asc", toString(query)); From 51bea939b4234d275e857143ec61b9a115d01332 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 27 Jan 2015 22:00:03 +0200 Subject: [PATCH 0695/1968] Remove duplicate group --- querydsl-root/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index a926c6135e..6e202e69b6 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -288,10 +288,6 @@ SQL com.querydsl.sql* - - Spatial - com.querydsl.spatial* - Lucene 3 com.querydsl.lucene3* From eaa57555a4abf37c6831572f8f6fcbbf3a127148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 27 Jan 2015 22:25:51 +0200 Subject: [PATCH 0696/1968] Use Q type parameter in MongodbQuery for subclass --- .../querydsl/mongodb/AnyEmbeddedBuilder.java | 8 ++-- .../com/querydsl/mongodb/JoinBuilder.java | 9 +++-- .../com/querydsl/mongodb/MongodbQuery.java | 37 ++++++++++--------- .../mongodb/morphia/MorphiaQuery.java | 2 +- .../java/com/querydsl/mongodb/JoinTest.java | 4 +- .../querydsl/mongodb/MongodbQueryTest.java | 8 ++-- 6 files changed, 35 insertions(+), 33 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java index 0dcc7616e6..69bbb5b9b6 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java @@ -28,19 +28,19 @@ * * @param */ -public class AnyEmbeddedBuilder { +public class AnyEmbeddedBuilder, K> { - private final QueryMixin> queryMixin; + private final QueryMixin queryMixin; private final Path> collection; - public AnyEmbeddedBuilder(QueryMixin> queryMixin, + public AnyEmbeddedBuilder(QueryMixin queryMixin, Path> collection) { this.queryMixin = queryMixin; this.collection = collection; } - public MongodbQuery on(Predicate... conditions) { + public Q on(Predicate... conditions) { return queryMixin.where(PredicateOperation.create( MongodbOps.ELEM_MATCH, collection, ExpressionUtils.allOf(conditions))); } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java index 342202c6ad..da8cd90bc3 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java @@ -24,24 +24,25 @@ * * @author tiwe * + * @param * @param * @param */ -public class JoinBuilder { +public class JoinBuilder, K, T> { - private final QueryMixin> queryMixin; + private final QueryMixin queryMixin; private final Path ref; private final Path target; - public JoinBuilder(QueryMixin> queryMixin, Path ref, Path target) { + public JoinBuilder(QueryMixin queryMixin, Path ref, Path target) { this.queryMixin = queryMixin; this.ref = ref; this.target = target; } - public MongodbQuery on(Predicate... conditions) { + public Q on(Predicate... conditions) { queryMixin.addJoin(JoinType.JOIN, ExpressionUtils.as((Path)ref, target)); queryMixin.on(conditions); return queryMixin.getSelf(); diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java index a829ce7585..6d3c45f5b0 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java @@ -35,16 +35,17 @@ * * @author laimw * + * @param * @param */ -public abstract class MongodbQuery implements SimpleQuery>, SimpleProjectable { +public abstract class MongodbQuery, K> implements SimpleQuery, SimpleProjectable { @SuppressWarnings("serial") private static class NoResults extends RuntimeException {} private final MongodbSerializer serializer; - private final QueryMixin> queryMixin; + private final QueryMixin queryMixin; private final DBCollection collection; @@ -60,7 +61,7 @@ private static class NoResults extends RuntimeException {} * @param serializer */ public MongodbQuery(DBCollection collection, Function transformer, MongodbSerializer serializer) { - this.queryMixin = new QueryMixin>(this, new DefaultQueryMetadata().noValidate(), false); + this.queryMixin = new QueryMixin((Q)this, new DefaultQueryMetadata().noValidate(), false); this.transformer = transformer; this.collection = collection; this.serializer = serializer; @@ -73,8 +74,8 @@ public MongodbQuery(DBCollection collection, Function transformer, * @param target * @return */ - public JoinBuilder join(Path ref, Path target) { - return new JoinBuilder(queryMixin, ref, target); + public JoinBuilder join(Path ref, Path target) { + return new JoinBuilder(queryMixin, ref, target); } /** @@ -84,8 +85,8 @@ public JoinBuilder join(Path ref, Path target) { * @param target * @return */ - public JoinBuilder join(CollectionPathBase ref, Path target) { - return new JoinBuilder(queryMixin, ref, target); + public JoinBuilder join(CollectionPathBase ref, Path target) { + return new JoinBuilder(queryMixin, ref, target); } /** @@ -95,8 +96,8 @@ public JoinBuilder join(CollectionPathBase ref, Path target) * @param target * @return */ - public AnyEmbeddedBuilder anyEmbedded(Path> collection, Path target) { - return new AnyEmbeddedBuilder(queryMixin, collection); + public AnyEmbeddedBuilder anyEmbedded(Path> collection, Path target) { + return new AnyEmbeddedBuilder(queryMixin, collection); } protected abstract DBCollection getCollection(Class type); @@ -170,45 +171,45 @@ public boolean notExists() { } @Override - public MongodbQuery distinct() { + public Q distinct() { return queryMixin.distinct(); } - public MongodbQuery where(Predicate e) { + public Q where(Predicate e) { return queryMixin.where(e); } @Override - public MongodbQuery where(Predicate... e) { + public Q where(Predicate... e) { return queryMixin.where(e); } @Override - public MongodbQuery limit(long limit) { + public Q limit(long limit) { return queryMixin.limit(limit); } @Override - public MongodbQuery offset(long offset) { + public Q offset(long offset) { return queryMixin.offset(offset); } @Override - public MongodbQuery restrict(QueryModifiers modifiers) { + public Q restrict(QueryModifiers modifiers) { return queryMixin.restrict(modifiers); } - public MongodbQuery orderBy(OrderSpecifier o) { + public Q orderBy(OrderSpecifier o) { return queryMixin.orderBy(o); } @Override - public MongodbQuery orderBy(OrderSpecifier... o) { + public Q orderBy(OrderSpecifier... o) { return queryMixin.orderBy(o); } @Override - public MongodbQuery set(ParamExpression param, T value) { + public Q set(ParamExpression param, T value) { return queryMixin.set(param, value); } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java index efc6d8bfb3..991cff6517 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java @@ -32,7 +32,7 @@ * @author tiwe * */ -public class MorphiaQuery extends MongodbQuery { +public class MorphiaQuery extends MongodbQuery, K> { private final EntityCache cache; diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/JoinTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/JoinTest.java index 47fafaec4b..a72d8b3b2e 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/JoinTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/JoinTest.java @@ -145,11 +145,11 @@ public void Deep() { .singleResult().getFirstName()); } - private MongodbQuery query() { + private MorphiaQuery query() { return new MorphiaQuery(morphia, ds, user); } - private MongodbQuery where(Predicate ... e) { + private MorphiaQuery where(Predicate ... e) { return query().where(e); } } diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index d8109dbf0a..01d3a8bcbc 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -381,7 +381,7 @@ public void Iterate() { @Test public void UniqueResultAndLimitAndOffset() { - MongodbQuery q = query().where(user.firstName.startsWith("Ja")).orderBy(user.age.asc()); + MorphiaQuery q = query().where(user.firstName.startsWith("Ja")).orderBy(user.age.asc()); assertEquals(4, q.list().size()); assertEquals(u1, q.list().get(0)); } @@ -485,11 +485,11 @@ private void assertQuery(Predicate e, OrderSpecifier orderBy, User ... expect assertQuery(where(e).orderBy(orderBy), expected); } - private MongodbQuery where(EntityPath entity, Predicate... e) { + private MorphiaQuery where(EntityPath entity, Predicate... e) { return new MorphiaQuery(morphia, ds, entity).where(e); } - private MongodbQuery where(Predicate ... e) { + private MorphiaQuery where(Predicate ... e) { return query().where(e); } @@ -501,7 +501,7 @@ private MorphiaQuery query(EntityPath path) { return new MorphiaQuery(morphia, ds, path); } - private void assertQuery(MongodbQuery query, User ... expected ) { + private void assertQuery(MorphiaQuery query, User ... expected ) { //System.out.println(query.toString()); List results = query.list(); From dc5f5a08d097baf32283a48afa0501502da27b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 27 Jan 2015 23:48:21 +0200 Subject: [PATCH 0697/1968] Hide Projection constructors --- .../querydsl/codegen/EntitySerializer.java | 19 +-- .../collections/CollQueryStandardTest.java | 4 +- .../querydsl/collections/GroupBy3Test.java | 10 +- .../collections/SerializationTest.java | 5 +- .../java/com/querydsl/core/group/GroupBy.java | 4 +- .../querydsl/core/group/GroupByIterate.java | 4 +- .../com/querydsl/core/group/GroupByList.java | 4 +- .../com/querydsl/core/group/GroupByMap.java | 4 +- .../com/querydsl/core/support/QueryMixin.java | 2 +- .../types/AppendingFactoryExpression.java | 2 +- .../core/types/ConstructorExpression.java | 12 +- .../com/querydsl/core/types/Projections.java | 127 +++++++++++++++++- .../java/com/querydsl/core/types/QBean.java | 16 +-- .../java/com/querydsl/core/types/QList.java | 9 +- .../java/com/querydsl/core/types/QMap.java | 9 +- .../java/com/querydsl/core/types/QTuple.java | 9 +- .../core/support/NumberConversionsTest.java | 9 +- .../core/support/ProjectableQueryTest.java | 6 +- .../querydsl/core/types/expr/QTupleTest.java | 3 +- .../querydsl/jdo/JDOQueryStandardTest.java | 2 +- .../com/querydsl/jpa/NativeSQLSerializer.java | 2 +- .../com/querydsl/jpa/AbstractJPATest.java | 10 +- .../com/querydsl/jpa/AbstractSQLTest.java | 21 +-- .../com/querydsl/jpa/ConstructorsTest.java | 9 +- .../test/java/com/querydsl/jpa/TupleTest.java | 19 +-- .../main/java/com/querydsl/sql/QBeans.java | 2 +- .../com/querydsl/sql/RelationalPathUtils.java | 2 +- .../com/querydsl/sql/ExtendedSQLQuery.java | 4 +- .../java/com/querydsl/sql/QBean2Test.java | 3 +- .../test/java/com/querydsl/sql/QBeanTest.java | 12 +- .../java/com/querydsl/sql/QPersonTest.java | 3 +- .../com/querydsl/sql/RelationalPathTest.java | 11 +- .../java/com/querydsl/sql/SelectBase.java | 10 +- 33 files changed, 251 insertions(+), 117 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java index 7d248f3542..ffd05e1581 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java @@ -13,13 +13,16 @@ */ package com.querydsl.codegen; -import javax.annotation.Generated; -import javax.inject.Inject; -import javax.inject.Named; +import static com.mysema.codegen.Symbols.*; + import java.io.IOException; import java.lang.annotation.Annotation; import java.util.*; +import javax.annotation.Generated; +import javax.inject.Inject; +import javax.inject.Named; + import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Lists; @@ -30,7 +33,6 @@ import com.querydsl.core.types.expr.ComparableExpression; import com.querydsl.core.types.expr.SimpleExpression; import com.querydsl.core.types.path.*; -import static com.mysema.codegen.Symbols.*; /** * EntitySerializer is a {@link Serializer} implementation for entity types @@ -356,10 +358,10 @@ public Parameter apply(Parameter p) { // body // TODO : replace with class reference - writer.beginLine("return new ConstructorExpression<" + genericName + ">("); - if (!localName.equals(genericName)) { - writer.append("(Class)"); - } + writer.beginLine("return Projections.constructor("); +// if (!localName.equals(genericName)) { +// writer.append("(Class)"); +// } writer.append(writer.getClassConstant(localName)); writer.append(", new Class[]{"); boolean first = true; @@ -425,6 +427,7 @@ protected void introImports(CodeWriter writer, SerializerConfig config, } if (!model.getConstructors().isEmpty()) { classes.add(ConstructorExpression.class); + classes.add(Projections.class); classes.add(Expression.class); } boolean inits = false; diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java index 5c1bdd9430..78bcfa3eda 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java @@ -86,7 +86,7 @@ public void test() { @Test public void TupleProjection() { List tuples = CollQueryFactory.from(cat, data) - .list(new QTuple(cat.name, cat.birthdate)); + .list(cat.name, cat.birthdate); for (Tuple tuple : tuples) { assertNotNull(tuple.get(cat.name)); assertNotNull(tuple.get(cat.birthdate)); @@ -97,7 +97,7 @@ public void TupleProjection() { public void Nested_TupleProjection() { Concatenation concat = new Concatenation(cat.name, cat.name); List tuples = CollQueryFactory.from(cat, data) - .list(new QTuple(concat, cat.name, cat.birthdate)); + .list(concat, cat.name, cat.birthdate); for (Tuple tuple : tuples) { assertNotNull(tuple.get(cat.name)); assertNotNull(tuple.get(cat.birthdate)); diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/GroupBy3Test.java b/querydsl-collections/src/test/java/com/querydsl/collections/GroupBy3Test.java index 476aa5ad49..d1c1d0f408 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/GroupBy3Test.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/GroupBy3Test.java @@ -2,10 +2,7 @@ import static com.querydsl.core.group.GroupBy.groupBy; import static com.querydsl.core.group.GroupBy.set; -import static org.easymock.EasyMock.createMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; +import static org.easymock.EasyMock.*; import java.util.Map; import java.util.Set; @@ -18,7 +15,6 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.group.Group; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.QTuple; public class GroupBy3Test { @@ -55,7 +51,7 @@ public void Nested_Expressions() { .as("assetThreats"))); Projectable projectable = createMock(Projectable.class); - expect(projectable.iterate(new QTuple( + expect(projectable.iterate(Projections.tuple( riskAnalysis.id, riskAnalysis.id, assetThreat.id, @@ -82,7 +78,7 @@ public void Alias_Usage() { .as("assetThreats"))); Projectable projectable = createMock(Projectable.class); - expect(projectable.iterate(new QTuple( + expect(projectable.iterate(Projections.tuple( riskAnalysis.id, riskAnalysis.id, assetThreat.id, diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/SerializationTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/SerializationTest.java index 23f9635142..64b1633f21 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/SerializationTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/SerializationTest.java @@ -20,6 +20,7 @@ import org.junit.Test; import com.querydsl.core.Tuple; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.QTuple; public class SerializationTest extends AbstractQueryTest{ @@ -28,7 +29,7 @@ public class SerializationTest extends AbstractQueryTest{ // TODO : subqueries - private QTuple tuple = new QTuple(cat, otherCat); + private QTuple tuple = Projections.tuple(cat, otherCat); @Test public void OneSource_list() { @@ -138,7 +139,7 @@ public List pairs(List cat_, List otherCat_) { } public List pairsAsTuple(List cat_, List otherCat_) { - query().from(cat, cats).from(otherCat, cats).where(cat.name.eq(otherCat.name)).list(new QTuple(cat, otherCat)); + query().from(cat, cats).from(otherCat, cats).where(cat.name.eq(otherCat.name)).list(Projections.tuple(cat, otherCat)); List rv = new ArrayList(); for (Cat cat : cat_) { // from diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 32062297b3..2171f6b44f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -20,7 +20,7 @@ import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.commons.lang.Pair; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.QList; +import com.querydsl.core.types.Projections; /** * Groups results by the first expression. @@ -48,7 +48,7 @@ public static GroupByBuilder groupBy(Expression key) { * @return */ public static GroupByBuilder> groupBy(Expression... keys) { - return new GroupByBuilder>(new QList(keys)); + return new GroupByBuilder>(Projections.list(keys)); } /** diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupByIterate.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupByIterate.java index 0d373d8407..739fd7fe10 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupByIterate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupByIterate.java @@ -22,7 +22,7 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.FactoryExpression; import com.querydsl.core.types.FactoryExpressionUtils; -import com.querydsl.core.types.QTuple; +import com.querydsl.core.types.Projections; /** * Provides aggregated results as an iterator @@ -41,7 +41,7 @@ public class GroupByIterate extends AbstractGroupByTransformer transform(Projectable projectable) { // create groups - FactoryExpression expr = FactoryExpressionUtils.wrap(new QTuple(expressions)); + FactoryExpression expr = FactoryExpressionUtils.wrap(Projections.tuple(expressions)); boolean hasGroups = false; for (Expression e : expr.getArgs()) { hasGroups |= e instanceof GroupExpression; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupByList.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupByList.java index a4c7b1ce85..011af5b99f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupByList.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupByList.java @@ -23,7 +23,7 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.FactoryExpression; import com.querydsl.core.types.FactoryExpressionUtils; -import com.querydsl.core.types.QTuple; +import com.querydsl.core.types.Projections; /** * Provides aggregated results as a list @@ -42,7 +42,7 @@ public class GroupByList extends AbstractGroupByTransformer> { @Override public List transform(Projectable projectable) { // create groups - FactoryExpression expr = FactoryExpressionUtils.wrap(new QTuple(expressions)); + FactoryExpression expr = FactoryExpressionUtils.wrap(Projections.tuple(expressions)); boolean hasGroups = false; for (Expression e : expr.getArgs()) { hasGroups |= e instanceof GroupExpression; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupByMap.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupByMap.java index 376b86e2dd..adeb4e6b18 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupByMap.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupByMap.java @@ -22,7 +22,7 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.FactoryExpression; import com.querydsl.core.types.FactoryExpressionUtils; -import com.querydsl.core.types.QTuple; +import com.querydsl.core.types.Projections; /** * Provides aggregated results as a map @@ -43,7 +43,7 @@ public Map transform(Projectable projectable) { Map groups = new LinkedHashMap(); // create groups - FactoryExpression expr = FactoryExpressionUtils.wrap(new QTuple(expressions)); + FactoryExpression expr = FactoryExpressionUtils.wrap(Projections.tuple(expressions)); boolean hasGroups = false; for (Expression e : expr.getArgs()) { hasGroups |= e instanceof GroupExpression; diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java index 7ecff70d6f..f91fd159fa 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java @@ -156,7 +156,7 @@ public Expression visit(Path expr, @Nullable Void context) { } public Expression createProjection(Expression[] args) { - return new QTuple(args); + return Projections.tuple(args); } protected Expression createAlias(Expression expr, Path alias) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java index 33711fef50..9743371230 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java @@ -25,7 +25,7 @@ public class AppendingFactoryExpression extends FactoryExpressionBase { private final List> args; - public AppendingFactoryExpression(Expression base, Expression... rest) { + protected AppendingFactoryExpression(Expression base, Expression... rest) { super(base.getType()); this.base = base; ImmutableList.Builder> builder = ImmutableList.builder(); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ConstructorExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/ConstructorExpression.java index f5e6d50a27..2fccb29667 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ConstructorExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ConstructorExpression.java @@ -13,16 +13,18 @@ */ package com.querydsl.core.types; -import javax.annotation.Nullable; -import javax.annotation.concurrent.Immutable; +import static com.querydsl.core.util.ConstructorUtils.*; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; +import javax.annotation.Nullable; +import javax.annotation.concurrent.Immutable; + import com.google.common.base.Function; import com.google.common.collect.ImmutableList; -import static com.querydsl.core.util.ConstructorUtils.*; /** * ConstructorExpression represents a constructor invocation @@ -64,11 +66,11 @@ public static ConstructorExpression create(Class type, Expression.. private transient Iterable> transformers; - public ConstructorExpression(Class type, Class[] paramTypes, Expression... args) { + protected ConstructorExpression(Class type, Class[] paramTypes, Expression... args) { this(type, paramTypes, ImmutableList.copyOf(args)); } - public ConstructorExpression(Class type, Class[] paramTypes, ImmutableList> args) { + protected ConstructorExpression(Class type, Class[] paramTypes, ImmutableList> args) { super(type); this.parameterTypes = getConstructorParameters(type, paramTypes).clone(); this.args = args; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java b/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java index d8d0538c8d..70e3f8e609 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Projections.java @@ -13,6 +13,10 @@ */ package com.querydsl.core.types; +import java.util.Map; + +import com.google.common.collect.ImmutableList; + /** * Factory class for FactoryExpression instances * @@ -75,7 +79,28 @@ public static QBean bean(Class type, Expression... exprs) { public static QBean bean(Path type, Expression... exprs) { return new QBean(type, exprs); } - + + /** + * Create a Bean populating projection for the given type and bindings + * + * @param type + * @param bindings + */ + public static QBean bean(Path type, Map> bindings) { + return new QBean(type, bindings); + } + + /** + * Create a Bean populating projection for the given type and bindings + * + * @param type + * @param bindings + */ + public static QBean bean(Class type, Map> bindings) { + return new QBean(type, bindings); + } + + /** * Create a constructor invocation projection for the given type and expressions * @@ -93,7 +118,33 @@ public static QBean bean(Path type, Expression... exprs) { public static ConstructorExpression constructor(Class type, Expression... exprs) { return ConstructorExpression.create(type, exprs); } - + + /** + * Create a constructor invocation projection for given type, parameter types and expressions + * + * @param type + * @param paramTypes + * @param exprs + * @param + * @return + */ + public static ConstructorExpression constructor(Class type, Class[] paramTypes, Expression... exprs) { + return new ConstructorExpression(type, paramTypes, exprs); + } + + /** + * Create a constructor invocation projection for given type, parameter types and expressions + * + * @param type + * @param paramTypes + * @param exprs + * @param + * @return + */ + public static ConstructorExpression constructor(Class type, Class[] paramTypes, ImmutableList> exprs) { + return new ConstructorExpression(type, paramTypes, exprs); + } + /** * Create a field access based Bean populating projection for the given type and expressions * @@ -123,7 +174,57 @@ public static QBean fields(Class type, Expression... exprs) { public static QBean fields(Path type, Expression... exprs) { return new QBean(type, true, exprs); } - + + /** + * Create a field access based Bean populating projection for the given type and bindings + * + * @param type + * @param bindings + */ + public static QBean fields(Path type, Map> bindings) { + return new QBean(type, true, bindings); + } + + /** + * Create a field access based Bean populating projection for the given type and bindings + * + * @param type + * @param bindings + */ + public static QBean fields(Class type, Map> bindings) { + return new QBean(type, true, bindings); + } + + /** + * Create a new List typed projection for the given expressions + * + * @param args + * @return + */ + public static QList list(Expression... args) { + return new QList(args); + } + + /** + * Create a new List typed projection for the given expressions + * + * @param args + * @return + */ + public static QList list(ImmutableList> args) { + return new QList(args); + } + + /** + * Create a new List typed projection for the given expressions + * + * @param args + * @return + */ + public static QList list(Expression[]... args) { + return new QList(args); + } + /** * Create a Map typed projection for the given expressions * @@ -149,6 +250,26 @@ public static QMap map(Expression... exprs) { public static QTuple tuple(Expression... exprs) { return new QTuple(exprs); } + + /** + * Create a Tuple typed projection for the given expressions + * + * @param exprs arguments for the projection + * @return + */ + public static QTuple tuple(ImmutableList> exprs) { + return new QTuple(exprs); + } + + /** + * Create a Tuple typed projection for the given expressions + * + * @param exprs arguments for the projection + * @return + */ + public static QTuple tuple(Expression[]... exprs) { + return new QTuple(exprs); + } private Projections() {} } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java b/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java index 21accd872f..156dd0c4a4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/QBean.java @@ -91,7 +91,7 @@ private static Class normalize(Class cl) { * @param args */ @SuppressWarnings("unchecked") - public QBean(Path type, Expression... args) { + protected QBean(Path type, Expression... args) { this((Class)type.getType(), false, args); } @@ -102,7 +102,7 @@ public QBean(Path type, Expression... args) { * @param bindings */ @SuppressWarnings("unchecked") - public QBean(Path type, Map> bindings) { + protected QBean(Path type, Map> bindings) { this((Class)type.getType(), false, bindings); } @@ -114,7 +114,7 @@ public QBean(Path type, Map> bindings) { * @param args */ @SuppressWarnings("unchecked") - public QBean(Path type, boolean fieldAccess, Expression... args) { + protected QBean(Path type, boolean fieldAccess, Expression... args) { this((Class)type.getType(), fieldAccess, args); } @@ -126,7 +126,7 @@ public QBean(Path type, boolean fieldAccess, Expression... args) { * @param bindings */ @SuppressWarnings("unchecked") - public QBean(Path type, boolean fieldAccess, Map> bindings) { + protected QBean(Path type, boolean fieldAccess, Map> bindings) { this((Class)type.getType(), fieldAccess, bindings); } @@ -136,7 +136,7 @@ public QBean(Path type, boolean fieldAccess, Map type, Map> bindings) { + protected QBean(Class type, Map> bindings) { this(type, false, bindings); } @@ -146,7 +146,7 @@ public QBean(Class type, Map> bindings) { * @param type * @param args */ - public QBean(Class type, Expression... args) { + protected QBean(Class type, Expression... args) { this(type, false, args); } @@ -157,7 +157,7 @@ public QBean(Class type, Expression... args) { * @param fieldAccess * @param args */ - public QBean(Class type, boolean fieldAccess, Expression... args) { + protected QBean(Class type, boolean fieldAccess, Expression... args) { this(type, fieldAccess, createBindings(args)); } @@ -168,7 +168,7 @@ public QBean(Class type, boolean fieldAccess, Expression... args) { * @param fieldAccess * @param bindings */ - public QBean(Class type, boolean fieldAccess, Map> bindings) { + protected QBean(Class type, boolean fieldAccess, Map> bindings) { super(type); this.bindings = ImmutableMap.copyOf(bindings); this.fieldAccess = fieldAccess; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/QList.java b/querydsl-core/src/main/java/com/querydsl/core/types/QList.java index ff29a92af5..b6de950f4a 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/QList.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/QList.java @@ -13,11 +13,12 @@ */ package com.querydsl.core.types; -import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collections; import java.util.List; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; /** @@ -37,7 +38,7 @@ public class QList extends FactoryExpressionBase> { * * @param args */ - public QList(Expression... args) { + protected QList(Expression... args) { super((Class)List.class); this.args = ImmutableList.copyOf(args); } @@ -47,7 +48,7 @@ public QList(Expression... args) { * * @param args */ - public QList(ImmutableList> args) { + protected QList(ImmutableList> args) { super((Class)List.class); this.args = args; } @@ -57,7 +58,7 @@ public QList(ImmutableList> args) { * * @param args */ - public QList(Expression[]... args) { + protected QList(Expression[]... args) { super((Class)List.class); ImmutableList.Builder> builder = ImmutableList.builder(); for (Expression[] exprs: args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/QMap.java b/querydsl-core/src/main/java/com/querydsl/core/types/QMap.java index 2efee9badc..83ccb1e14c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/QMap.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/QMap.java @@ -13,10 +13,11 @@ */ package com.querydsl.core.types; -import javax.annotation.Nullable; import java.util.List; import java.util.Map; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; @@ -48,7 +49,7 @@ public class QMap extends FactoryExpressionBase,?>> { * * @param args */ - public QMap(Expression... args) { + protected QMap(Expression... args) { super((Class)Map.class); this.args = ImmutableList.copyOf(args); } @@ -58,7 +59,7 @@ public QMap(Expression... args) { * * @param args */ - public QMap(ImmutableList> args) { + protected QMap(ImmutableList> args) { super((Class)Map.class); this.args = args; } @@ -68,7 +69,7 @@ public QMap(ImmutableList> args) { * * @param args */ - public QMap(Expression[]... args) { + protected QMap(Expression[]... args) { super((Class)Map.class); ImmutableList.Builder> builder = ImmutableList.builder(); for (Expression[] exprs: args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/QTuple.java b/querydsl-core/src/main/java/com/querydsl/core/types/QTuple.java index ac3ccea46f..b220c28593 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/QTuple.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/QTuple.java @@ -13,12 +13,13 @@ */ package com.querydsl.core.types; -import javax.annotation.concurrent.Immutable; import java.io.Serializable; import java.util.Arrays; import java.util.List; import java.util.Map; +import javax.annotation.concurrent.Immutable; + import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; @@ -134,7 +135,7 @@ public String toString() { * * @param args */ - public QTuple(Expression... args) { + protected QTuple(Expression... args) { super(Tuple.class); this.args = ImmutableList.copyOf(args); this.bindings = createBindings(this.args); @@ -145,7 +146,7 @@ public QTuple(Expression... args) { * * @param args */ - public QTuple(ImmutableList> args) { + protected QTuple(ImmutableList> args) { super(Tuple.class); this.args = args; this.bindings = createBindings(this.args); @@ -156,7 +157,7 @@ public QTuple(ImmutableList> args) { * * @param args */ - public QTuple(Expression[]... args) { + protected QTuple(Expression[]... args) { super(Tuple.class); ImmutableList.Builder> builder = ImmutableList.builder(); for (Expression[] exprs: args) { diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/NumberConversionsTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/NumberConversionsTest.java index 733b3bf0b9..ec94d07e03 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/NumberConversionsTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/NumberConversionsTest.java @@ -6,6 +6,7 @@ import org.junit.Test; import com.querydsl.core.Tuple; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.QTuple; import com.querydsl.core.types.path.EnumPath; import com.querydsl.core.types.path.NumberPath; @@ -19,7 +20,7 @@ public enum Color {GREEN, BLUE, RED, YELLOW, BLACK, WHITE} @Test public void Name() { EnumPath color = new EnumPath(Color.class, "path"); - QTuple qTuple = new QTuple(color); + QTuple qTuple = Projections.tuple(color); NumberConversions conversions = new NumberConversions(qTuple); assertEquals(Color.BLUE, conversions.newInstance("BLUE").get(color)); } @@ -27,7 +28,7 @@ public void Name() { @Test public void Ordinal() { EnumPath color = new EnumPath(Color.class, "path"); - QTuple qTuple = new QTuple(color); + QTuple qTuple = Projections.tuple(color); NumberConversions conversions = new NumberConversions(qTuple); assertEquals(Color.RED, conversions.newInstance(2).get(color)); } @@ -36,7 +37,7 @@ public void Ordinal() { public void Safe_Number_Conversion() { StringPath strPath = new StringPath("strPath"); NumberPath intPath = new NumberPath(Integer.class, "intPath"); - QTuple qTuple = new QTuple(strPath, intPath); + QTuple qTuple = Projections.tuple(strPath, intPath); NumberConversions conversions = new NumberConversions(qTuple); assertNotNull(conversions.newInstance(1, 2)); } @@ -45,7 +46,7 @@ public void Safe_Number_Conversion() { public void Number_Conversion() { StringPath strPath = new StringPath("strPath"); NumberPath intPath = new NumberPath(Integer.class, "intPath"); - QTuple qTuple = new QTuple(strPath, intPath); + QTuple qTuple = Projections.tuple(strPath, intPath); NumberConversions conversions = new NumberConversions(qTuple); Tuple tuple = conversions.newInstance("a", Long.valueOf(3)); assertEquals("a", tuple.get(strPath)); diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java index d7fffbd23d..faf3e51b1c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/ProjectableQueryTest.java @@ -13,12 +13,12 @@ */ package com.querydsl.core.support; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import org.junit.Test; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.QBean; +import com.querydsl.core.types.Projections; @SuppressWarnings("unchecked") public class ProjectableQueryTest { @@ -35,7 +35,7 @@ public void UniqueResult_Of_Array() { public void UniqueResult() { QueryMixin queryMixin = new QueryMixin(); DummyProjectable projectable = new DummyProjectable(queryMixin); - projectable.uniqueResult(new QBean(Object.class)); + projectable.uniqueResult(Projections.bean(Object.class)); assertEquals(Long.valueOf(2), queryMixin.getMetadata().getModifiers().getLimit()); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/expr/QTupleTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/expr/QTupleTest.java index 97be7fa5f5..49fe7d1938 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/expr/QTupleTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/expr/QTupleTest.java @@ -18,6 +18,7 @@ import org.junit.Test; import com.querydsl.core.Tuple; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.QTuple; import com.querydsl.core.types.path.BooleanPath; import com.querydsl.core.types.path.NumberPath; @@ -31,7 +32,7 @@ public class QTupleTest { private BooleanPath third = new BooleanPath("z"); - private QTuple tupleExpression = new QTuple(first, second, third); + private QTuple tupleExpression = Projections.tuple(first, second, third); @Test public void NewInstanceObjectArray() { diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java index 0096d6f5f9..8e0b22dd21 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQueryStandardTest.java @@ -143,7 +143,7 @@ public void StandardTest() { @Test public void TupleProjection() { - List tuples = query().from(product).list(new QTuple(product.name, product.price)); + List tuples = query().from(product).list(product.name, product.price); assertFalse(tuples.isEmpty()); for (Tuple tuple : tuples) { assertNotNull(tuple); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java index cffbc893f9..33397f1fcd 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java @@ -147,7 +147,7 @@ public void serialize(QueryMetadata metadata, boolean forCountRow) { fargs.set(j, ExpressionUtils.as(fargs.get(j), alias)); } } - projection = new QTuple(ImmutableList.copyOf(fargs)); + projection = Projections.tuple(ImmutableList.copyOf(fargs)); modified = true; } else if (isAlias(projection)) { Operation operation = (Operation)projection; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 68aedaf2c8..3fc1201861 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -367,7 +367,7 @@ public void Constant() { //select cat.id, ?1 as const from Cat cat List cats = query().from(cat).list(cat); Path path = new StringPath("const"); - List tuples = query().from(cat).list(new QTuple(cat.id, Expressions.constantAs("abc", path))); + List tuples = query().from(cat).list(cat.id, Expressions.constantAs("abc", path)); for (int i = 0; i < cats.size(); i++) { assertEquals(Integer.valueOf(cats.get(i).getId()), tuples.get(i).get(cat.id)); assertEquals("abc", tuples.get(i).get(path)); @@ -379,7 +379,7 @@ public void Constant() { @NoBatooJPA public void Constant_Hibernate() { //select cat.id, ?1 as const from Cat cat - query().from(cat).list(new QTuple(cat.id, Expressions.constantAs("abc", new StringPath("const")))); + query().from(cat).list(cat.id, Expressions.constantAs("abc", new StringPath("const"))); } @Test @@ -962,7 +962,7 @@ public void Multiply_BigDecimal() { @Test public void NestedProjection() { Concatenation concat = new Concatenation(cat.name, cat.name); - List tuples = query().from(cat).list(new QTuple(cat.name, concat)); + List tuples = query().from(cat).list(cat.name, concat); assertFalse(tuples.isEmpty()); for (Tuple tuple : tuples) { assertEquals( @@ -1464,7 +1464,7 @@ protected Pair[]> createQuery(Predicate filter) { @Test public void TupleProjection() { - List tuples = query().from(cat).list(new QTuple(cat.name, cat)); + List tuples = query().from(cat).list(cat.name, cat); assertFalse(tuples.isEmpty()); for (Tuple tuple : tuples) { assertNotNull(tuple.get(cat.name)); @@ -1475,7 +1475,7 @@ public void TupleProjection() { @Test public void TupleProjection_As_SearchResults() { SearchResults tuples = query().from(cat).limit(1) - .listResults(new QTuple(cat.name, cat)); + .listResults(cat.name, cat); assertEquals(1, tuples.getResults().size()); assertTrue(tuples.getTotal() > 0); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java index 04b07449ba..8a2bbe29bb 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java @@ -1,26 +1,31 @@ package com.querydsl.jpa; +import static org.junit.Assert.*; + import java.sql.SQLException; import java.util.Arrays; import java.util.List; import java.util.UUID; +import org.junit.Ignore; +import org.junit.Test; + import com.querydsl.core.SearchResults; import com.querydsl.core.Target; import com.querydsl.core.Tuple; +import com.querydsl.core.testutil.ExcludeIn; +import com.querydsl.core.types.ConstructorExpression; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.core.types.expr.DateExpression; +import com.querydsl.core.types.expr.Wildcard; import com.querydsl.jpa.domain.Cat; import com.querydsl.jpa.domain.Color; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.domain.QCompany; import com.querydsl.jpa.domain.sql.SAnimal; import com.querydsl.sql.SQLSubQuery; -import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.Wildcard; -import com.querydsl.core.testutil.ExcludeIn; -import org.junit.Ignore; -import org.junit.Test; -import static org.junit.Assert.*; public abstract class AbstractSQLTest { @@ -251,7 +256,7 @@ private void print(Iterable rows) { @Test public void Projections_DuplicateColumns() { SAnimal cat = new SAnimal("cat"); - assertEquals(1, query().from(cat).list(new QList(cat.count(), cat.count())).size()); + assertEquals(1, query().from(cat).list(Projections.list(cat.count(), cat.count())).size()); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/ConstructorsTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/ConstructorsTest.java index ea8f90581f..3d6a4fd317 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/ConstructorsTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/ConstructorsTest.java @@ -18,6 +18,7 @@ import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Projections; public class ConstructorsTest extends AbstractQueryTest{ @@ -38,10 +39,10 @@ public _BookmarkDTO(Expression address) { @Ignore public void Constructors() { ConstructorExpression c = - new ConstructorExpression( - com.querydsl.jpa.domain.Cat.class, - new Class[]{String.class}, - cat.name); + Projections.constructor( + com.querydsl.jpa.domain.Cat.class, + new Class[]{String.class}, + cat.name); assertToString("new " + com.querydsl.jpa.domain.Cat.class.getName()+ "(cat.name)", c); assertToString("new " + getClass().getName() + "$BookmarkDTO(cat.name)",new _BookmarkDTO(cat.name)); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/TupleTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/TupleTest.java index 3088e8557c..6e81a1a55a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/TupleTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/TupleTest.java @@ -13,13 +13,14 @@ */ package com.querydsl.jpa; -import com.querydsl.jpa.domain.QCat; -import com.querydsl.jpa.hibernate.HibernateSubQuery; -import com.querydsl.core.types.QTuple; -import com.querydsl.core.types.SubQueryExpression; import org.junit.Ignore; import org.junit.Test; +import com.querydsl.core.types.Projections; +import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.jpa.domain.QCat; +import com.querydsl.jpa.hibernate.HibernateSubQuery; + public class TupleTest extends AbstractQueryTest { @Test @@ -29,11 +30,11 @@ public void test() { SubQueryExpression subQuery = subQuery().from(cat) .where(subQuery() - .from(cat) - .groupBy(cat.mate) - .list(new QTuple(cat.mate, cat.birthdate.max())) - .contains(new QTuple(cat.mate, cat.birthdate))) - .list(new QTuple(cat.birthdate, cat.name, cat.mate)); + .from(cat) + .groupBy(cat.mate) + .list(cat.mate, cat.birthdate.max()) + .contains(Projections.tuple(cat.mate, cat.birthdate))) + .list(Projections.tuple(cat.birthdate, cat.name, cat.mate)); assertToString( "(select cat.birthdate, cat.name, cat.mate from Cat cat " + diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/QBeans.java b/querydsl-sql/src/main/java/com/querydsl/sql/QBeans.java index 638ab0bd54..449f4febba 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/QBeans.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/QBeans.java @@ -48,7 +48,7 @@ public QBeans(RelationalPath... beanPaths) { bindings.put(column.getMetadata().getName(), column); listBuilder.add(column); } - mapBuilder.put(path, new QBean((Class)path.getType(), bindings)); + mapBuilder.put(path, Projections.bean((Class)path.getType(), bindings)); } expressions = listBuilder.build(); qBeans = mapBuilder.build(); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathUtils.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathUtils.java index 7cc260dc30..2b034298cb 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathUtils.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathUtils.java @@ -54,7 +54,7 @@ private static FactoryExpression createBeanProjection(RelationalPath p if (bindings.isEmpty()) { throw new IllegalArgumentException("No bindings could be derived from " + path); } - return new QBean((Class)path.getType(), true, bindings); + return Projections.fields((Class)path.getType(), bindings); } private RelationalPathUtils() {} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLQuery.java b/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLQuery.java index af32a257ff..9c8fd0c3bb 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLQuery.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLQuery.java @@ -22,7 +22,7 @@ import com.querydsl.core.SearchResults; import com.querydsl.core.types.Expression; import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.QBean; +import com.querydsl.core.types.Projections; /** * @author tiwe @@ -63,7 +63,7 @@ public SearchResults listResults(Class type, Expression... exprs) { } private FactoryExpression createProjection(Class type, Expression... exprs) { - return new QBean(type, exprs); + return Projections.bean(type, exprs); } @Override diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java b/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java index e30528b68a..a902bb62d5 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java @@ -19,6 +19,7 @@ import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.PathMetadataFactory; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.QBean; import com.querydsl.core.types.path.BeanPath; import com.querydsl.core.types.path.NumberPath; @@ -85,7 +86,7 @@ public void setLastName(String lastName) { @Test public void NewInstance() { QPerson p = QPerson.person; - QBean projection = new QBean(Person.class, p.id, p.firstName.as("firstName"), p.lastName.as("lastName")); + QBean projection = Projections.bean(Person.class, p.id, p.firstName.as("firstName"), p.lastName.as("lastName")); Person person = projection.newInstance(3, "John", "Doe"); assertEquals(3, person.getId()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QBeanTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/QBeanTest.java index f44718de1b..bc5bbf7357 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QBeanTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QBeanTest.java @@ -17,10 +17,10 @@ import org.junit.Test; +import com.querydsl.core.types.FactoryExpression; +import com.querydsl.core.types.Projections; import com.querydsl.sql.domain.Employee; import com.querydsl.sql.domain.QEmployee; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.QBean; public class QBeanTest { @@ -28,14 +28,14 @@ public class QBeanTest { @Test public void Direct_to_Managed_type() { - FactoryExpression expr = new QBean(Employee.class, e.superiorId); + FactoryExpression expr = Projections.bean(Employee.class, e.superiorId); Employee e = expr.newInstance(3); assertEquals(Integer.valueOf(3), e.getSuperiorId()); } @Test public void Direct_to_Custom_type() { - FactoryExpression expr = new QBean(Employee.class, e.firstname, e.lastname); + FactoryExpression expr = Projections.bean(Employee.class, e.firstname, e.lastname); Employee e = expr.newInstance("John","Smith"); assertEquals("John", e.getFirstname()); assertEquals("Smith", e.getLastname()); @@ -43,14 +43,14 @@ public void Direct_to_Custom_type() { @Test public void Alias_to_Managed_type() { - FactoryExpression expr = new QBean(Employee.class, e.superiorId.as("id")); + FactoryExpression expr = Projections.bean(Employee.class, e.superiorId.as("id")); Employee e = expr.newInstance(3); assertEquals(3, e.getId().intValue()); } @Test public void Alias_to_Custom_type() { - FactoryExpression expr = new QBean(Employee.class, e.firstname.as("lastname"), e.lastname.as("firstname")); + FactoryExpression expr = Projections.bean(Employee.class, e.firstname.as("lastname"), e.lastname.as("firstname")); Employee e = expr.newInstance("John","Smith"); assertEquals("Smith", e.getFirstname()); assertEquals("John", e.getLastname()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QPersonTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/QPersonTest.java index 0165f471fc..5b2d67d285 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QPersonTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QPersonTest.java @@ -17,6 +17,7 @@ import org.junit.Test; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.QBean; public class QPersonTest { @@ -56,7 +57,7 @@ public void setSecuredid(String securedid) { @Test public void Populate() { QPerson person = QPerson.person; - QBean personProjection = new QBean(Person.class, person.id, person.firstname, person.securedid); + QBean personProjection = Projections.bean(Person.class, person.id, person.firstname, person.securedid); Person p = personProjection.newInstance(3, "X", "Y"); assertEquals(3, p.getId()); assertEquals("X", p.getFirstname()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java index 5dcd36200c..798809df7f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java @@ -2,17 +2,14 @@ import static org.junit.Assert.assertEquals; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import java.io.*; import java.util.Arrays; import org.junit.Test; -import com.querydsl.sql.domain.QSurvey; +import com.querydsl.core.types.Projections; import com.querydsl.core.types.QTuple; +import com.querydsl.sql.domain.QSurvey; public class RelationalPathTest { @@ -29,7 +26,7 @@ public void Path() throws ClassNotFoundException, IOException { public void In_Tuple() throws ClassNotFoundException, IOException { //(survey.id, survey.name) QSurvey survey = QSurvey.survey; - QTuple tuple = new QTuple(survey.id, survey.name); + QTuple tuple = Projections.tuple(survey.id, survey.name); serialize(tuple); serialize(tuple.newInstance(1, "a")); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index dfd1126800..625863d7b5 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -567,7 +567,7 @@ public void GroupBy_Superior() { .from(employee) .innerJoin(employee._superiorIdKey, employee2); - QTuple subordinates = new QTuple(employee2.id, employee2.firstname, employee2.lastname); + QTuple subordinates = Projections.tuple(employee2.id, employee2.firstname, employee2.lastname); Map results = qry.transform( GroupBy.groupBy(employee.id).as(employee.firstname, employee.lastname, @@ -947,7 +947,7 @@ public void Math() { public void Nested_Tuple_Projection() { Concatenation concat = new Concatenation(employee.firstname, employee.lastname); List tuples = query().from(employee) - .list(new QTuple(employee.firstname, employee.lastname, concat)); + .list(employee.firstname, employee.lastname, concat); assertFalse(tuples.isEmpty()); for (Tuple tuple : tuples) { String firstName = tuple.get(employee.firstname); @@ -1159,7 +1159,7 @@ public void QBeanUsage() { List surveys = query().from( sq().from(survey).list(survey.all()).as("sq")) - .list(new QBean(Survey.class, Collections.singletonMap("name", sq.get(survey.name)))); + .list(Projections.bean(Survey.class, Collections.singletonMap("name", sq.get(survey.name)))); assertFalse(surveys.isEmpty()); } @@ -1495,7 +1495,7 @@ public void Transform_GroupBy() { @Test public void Tuple_Projection() { List tuples = query().from(employee) - .list(new QTuple(employee.firstname, employee.lastname)); + .list(employee.firstname, employee.lastname); assertFalse(tuples.isEmpty()); for (Tuple tuple : tuples) { assertNotNull(tuple.get(employee.firstname)); @@ -1671,7 +1671,7 @@ public void Wildcard_All2() { @Test public void Wildcard_and_QTuple() { // wildcard and QTuple - for (Tuple tuple : query().from(survey).list(new QTuple(survey.all()))) { + for (Tuple tuple : query().from(survey).list(survey.all())) { assertNotNull(tuple.get(survey.id)); assertNotNull(tuple.get(survey.name)); } From 1227c60d663500a413f6e2a92eda4d9ca2d5ccf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 28 Jan 2015 22:09:09 +0200 Subject: [PATCH 0698/1968] Move NullExpression creation to Expressions --- .../core/support/DetachableMixin.java | 4 +-- .../querydsl/core/support/Expressions.java | 35 +++++++++++++++++-- .../core/support/DetachableMixinTest.java | 2 +- .../com/querydsl/jdo/dml/JDOUpdateClause.java | 7 ++-- .../jpa/hibernate/HibernateUpdateClause.java | 4 +-- .../querydsl/jpa/impl/JPAUpdateClause.java | 4 +-- 6 files changed, 43 insertions(+), 13 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java index 784023087c..5c4c833cb1 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java @@ -86,7 +86,7 @@ private Expression convert(Object arg) { } else if (arg != null) { return ConstantImpl.create(arg); } else { - return NullExpression.DEFAULT; + return Expressions.nullExpression(); } } @@ -123,7 +123,7 @@ private QueryMetadata projection(Expression projection) { } private Expression nullAsTemplate(@Nullable Expression expr) { - return expr != null ? expr : NullExpression.DEFAULT; + return expr != null ? expr : Expressions.nullExpression(); } @SuppressWarnings("unchecked") diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java index be729ccb83..fc77d23d57 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java @@ -77,7 +77,7 @@ public final class Expressions { @SuppressWarnings("unchecked") public static SimpleExpression as(Expression source, Path alias) { if (source == null) { - return as((Expression)NullExpression.DEFAULT, alias); + return as((Expression)nullExpression(), alias); } else { return SimpleOperation.create((Class)alias.getType(), Ops.ALIAS, source, alias); } @@ -163,7 +163,7 @@ public static Expression constant(T value) { @SuppressWarnings({ "unchecked", "rawtypes" }) public static SimpleExpression constantAs(D source, Path alias) { if (source == null) { - return as((Expression)NullExpression.DEFAULT, alias); + return as((Expression)nullExpression(), alias); } else { return as(ConstantImpl.create(source), alias); } @@ -632,6 +632,37 @@ public static SimpleExpression list(Class clazz, SimpleExpression.. return rv; } + /** + * Get the default null expression + * + * @return + */ + public static NullExpression nullExpression() { + return NullExpression.DEFAULT; + } + + /** + * Get a null expression for the given type + * + * @param type + * @param + * @return + */ + public static NullExpression nullExpression(Class type) { + return new NullExpression(type); + } + + /** + * Get a null expression for the given path + * + * @param path + * @param + * @return + */ + public static NullExpression nullExpression(Path path) { + return new NullExpression(path.getType()); + } + private Expressions() {} } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java index b33a06f1ff..2521164865 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/DetachableMixinTest.java @@ -76,7 +76,7 @@ public void Null_As_Template() { SubQueryExpression subQuery = detachable.unique(new PathImpl(Object.class, "x"), null); List> exprs = ((FactoryExpression)subQuery.getMetadata().getProjection()).getArgs(); assertEquals(new PathImpl(Object.class, "x"), exprs.get(0)); - assertEquals(NullExpression.DEFAULT, exprs.get(1)); + assertEquals(Expressions.nullExpression(), exprs.get(1)); } } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java index 4672611de7..39c1b8c5d0 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/dml/JDOUpdateClause.java @@ -22,7 +22,6 @@ import com.querydsl.core.dml.UpdateClause; import com.querydsl.core.support.Expressions; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.NullExpression; import com.querydsl.core.types.Path; import com.querydsl.core.types.Predicate; @@ -51,7 +50,7 @@ public JDOUpdateClause set(List> paths, List values) { if (values.get(i) != null) { updates.put(paths.get(i), Expressions.constant(values.get(i))); } else { - updates.put(paths.get(i), new NullExpression(paths.get(i).getType())); + updates.put(paths.get(i), Expressions.nullExpression(paths.get(i))); } } return this; @@ -62,7 +61,7 @@ public JDOUpdateClause set(Path path, T value) { if (value != null) { updates.put(path, Expressions.constant(value)); } else { - updates.put(path, new NullExpression(path.getType())); + updates.put(path, Expressions.nullExpression(path)); } return this; } @@ -76,7 +75,7 @@ public JDOUpdateClause set(Path path, Expression expression) @Override public JDOUpdateClause setNull(Path path) { - updates.put(path, new NullExpression(path.getType())); + updates.put(path, Expressions.nullExpression(path)); return this; } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java index 6ccac3e44c..9500529252 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java @@ -107,7 +107,7 @@ public HibernateUpdateClause set(Path path, Expression expre @Override public HibernateUpdateClause setNull(Path path) { - updates.put(path, new NullExpression(path.getType())); + updates.put(path, Expressions.nullExpression(path)); return this; } @@ -118,7 +118,7 @@ public HibernateUpdateClause set(List> paths, List values) if (values.get(i) != null) { updates.put(paths.get(i), Expressions.constant(values.get(i))); } else { - updates.put(paths.get(i), new NullExpression(paths.get(i).getType())); + updates.put(paths.get(i), Expressions.nullExpression(paths.get(i))); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java index 8fe0f2e48f..1a29a90d5f 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java @@ -96,7 +96,7 @@ public JPAUpdateClause set(Path path, Expression expression) @Override public JPAUpdateClause setNull(Path path) { - updates.put(path, new NullExpression(path.getType())); + updates.put(path, Expressions.nullExpression(path)); return this; } @@ -107,7 +107,7 @@ public JPAUpdateClause set(List> paths, List values) { if (values.get(i) != null) { updates.put(paths.get(i), Expressions.constant(values.get(i))); } else { - updates.put(paths.get(i), new NullExpression(paths.get(i).getType())); + updates.put(paths.get(i), Expressions.nullExpression(paths.get(i))); } } return this; From 4ed096c43961e4ef425878fa161fe7a8df3d6607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 28 Jan 2015 22:16:18 +0200 Subject: [PATCH 0699/1968] Remove unused argument --- .../java/com/querydsl/core/alias/AliasFactory.java | 9 ++++----- .../core/alias/PropertyAccessInvocationHandler.java | 10 +++++----- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java b/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java index d3802553d7..55a5d9fed5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java @@ -17,9 +17,6 @@ import javax.annotation.Nullable; -import net.sf.cglib.proxy.Enhancer; -import net.sf.cglib.proxy.MethodInterceptor; - import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; @@ -29,6 +26,9 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.PathMetadataFactory; +import net.sf.cglib.proxy.Enhancer; +import net.sf.cglib.proxy.MethodInterceptor; + /** * AliasFactory is a factory class for alias creation * @@ -90,11 +90,10 @@ public A createAliasForExpr(Class cl, Expression expr) { * * @param * @param cl - * @param parent * @param path * @return */ - public A createAliasForProperty(Class cl, Object parent, Expression path) { + public A createAliasForProperty(Class cl, Expression path) { return createProxy(cl, path); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java b/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java index 549c5ce892..970ddc2b5d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java @@ -210,22 +210,22 @@ protected T newInstance(Class type, Type genericType, Object parent, Obje Class keyType = (Class)ReflectionUtils.getTypeParameter(genericType, 0); Class valueType = (Class)ReflectionUtils.getTypeParameter(genericType, 1); path = pathFactory.createMapPath(keyType, valueType, metadata); - rv = aliasFactory.createAliasForProperty(type, parent, path); + rv = aliasFactory.createAliasForProperty(type, path); } else if (typeSystem.isListType(type)) { Class elementType = (Class)ReflectionUtils.getTypeParameter(genericType, 0); path = pathFactory.createListPath(elementType, metadata); - rv = aliasFactory.createAliasForProperty(type, parent, path); + rv = aliasFactory.createAliasForProperty(type, path); } else if (typeSystem.isSetType(type)) { Class elementType = ReflectionUtils.getTypeParameterAsClass(genericType, 0); path = pathFactory.createSetPath(elementType, metadata); - rv = aliasFactory.createAliasForProperty(type, parent, path); + rv = aliasFactory.createAliasForProperty(type, path); } else if (typeSystem.isCollectionType(type)) { Class elementType = ReflectionUtils.getTypeParameterAsClass(genericType, 0); path = pathFactory.createCollectionPath(elementType, metadata); - rv = aliasFactory.createAliasForProperty(type, parent, path); + rv = aliasFactory.createAliasForProperty(type, path); } else if (Enum.class.isAssignableFrom(type)) { path = pathFactory.createEnumPath((Class)type, metadata); @@ -244,7 +244,7 @@ protected T newInstance(Class type, Type genericType, Object parent, Obje path = pathFactory.createEntityPath(type, metadata); } if (!Modifier.isFinal(type.getModifiers())) { - rv = aliasFactory.createAliasForProperty(type, parent, path); + rv = aliasFactory.createAliasForProperty(type, path); } else { rv = null; } From 762e43f01c0b7371b9cc4c0ca3b5b7405a1d80ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 28 Jan 2015 22:20:06 +0200 Subject: [PATCH 0700/1968] Rename root to rootPath --- .../main/java/com/querydsl/core/types/PathImpl.java | 2 +- .../java/com/querydsl/core/types/PathMetadata.java | 11 ++++++----- .../java/com/querydsl/sql/ProjectableSQLQuery.java | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java index aab2dfc62c..a31ec0ef28 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java @@ -46,7 +46,7 @@ public PathImpl(Class type, String variable) { public PathImpl(Class type, PathMetadata metadata) { super(type); this.metadata = metadata; - this.root = metadata.getRoot() != null ? metadata.getRoot() : this; + this.root = metadata.getRootPath() != null ? metadata.getRootPath() : this; } public PathImpl(Class type, Path parent, String property) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java index d4adc1e6d9..5bbe807209 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java @@ -13,9 +13,10 @@ */ package com.querydsl.core.types; +import java.io.Serializable; + import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; -import java.io.Serializable; import com.google.common.base.Objects; @@ -34,7 +35,7 @@ public final class PathMetadata implements Serializable{ private final int hashCode; @Nullable - private final Path parent, root; + private final Path parent, rootPath; private final PathType pathType; @@ -42,7 +43,7 @@ public PathMetadata(@Nullable Path parent, Object element, PathType type) { this.parent = parent; this.element = element; this.pathType = type; - this.root = parent != null ? parent.getRoot() : null; + this.rootPath = parent != null ? parent.getRoot() : null; this.hashCode = 31 * element.hashCode() + pathType.name().hashCode(); } @@ -84,8 +85,8 @@ public PathType getPathType() { } @Nullable - public Path getRoot() { - return root; + public Path getRootPath() { + return rootPath; } @Override diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java index d7844e3bfa..0a5ec16e38 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java @@ -495,7 +495,7 @@ private Set> getRootPaths(Collection> exprs) { for (Expression e : exprs) { Path path = e.accept(PathExtractor.DEFAULT, null); if (path != null && !path.getMetadata().isRoot()) { - paths.add(path.getMetadata().getRoot()); + paths.add(path.getMetadata().getRootPath()); } } return paths; From 575d7c2e5b6e2f50d921ea211a90f907229852a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 29 Jan 2015 18:59:21 +0200 Subject: [PATCH 0701/1968] Remove deprecated methods Remove bridge methods --- .../querydsl/apt/domain/FileAttachment.java | 3 - .../java/com/querydsl/core/group/GroupBy.java | 2 - .../core/support/CollectionAnyVisitor.java | 6 - .../core/support/ListAccessVisitor.java | 160 ---------------- .../com/querydsl/core/types/Converters.java | 171 ------------------ .../querydsl/core/types/expr/CaseBuilder.java | 44 +---- .../core/support/ListAccessVisitorTest.java | 82 --------- .../querydsl/core/types/ConvertersTest.java | 90 --------- .../querydsl/core/types/StringEscapeTest.java | 28 --- .../docbook/en-US/content/tutorials/jpa.xml | 4 +- .../docbook/en-US/content/tutorials/sql.xml | 2 +- .../docbook/ko-KR/content/tutorials/jpa.xml | 2 +- .../docbook/ko-KR/content/tutorials/sql.xml | 2 +- .../com/querydsl/jpa/AbstractJPASubQuery.java | 38 +--- .../java/com/querydsl/jpa/JPACommonQuery.java | 67 ------- .../java/com/querydsl/jpa/JPAQueryBase.java | 30 --- .../java/com/querydsl/jpa/JPQLQueryTest.java | 11 -- .../test/java/com/querydsl/jpa/JoinTest.java | 17 +- .../java/com/querydsl/jpa/SubQueryTest.java | 8 +- .../maven/AbstractMetaDataExportMojo.java | 4 +- .../com/querydsl/maven/NumericMapping.java | 3 - .../maven/MetadataExportMojoTest.java | 4 +- .../sql/codegen/MetaDataSerializer.java | 20 +- .../querydsl/sql/AbstractSQLQueryFactory.java | 3 - .../java/com/querydsl/sql/Configuration.java | 38 ---- .../com/querydsl/sql/DetachableSQLQuery.java | 49 +---- .../com/querydsl/sql/ProjectableSQLQuery.java | 40 ---- .../java/com/querydsl/sql/SQLBindings.java | 5 - .../com/querydsl/sql/SQLQueryFactoryImpl.java | 67 ------- .../java/com/querydsl/sql/SQLTemplates.java | 10 - .../querydsl/sql/mssql/SQLServerGrammar.java | 9 - .../com/querydsl/sql/SQLQueryFactoryTest.java | 4 +- 32 files changed, 22 insertions(+), 1001 deletions(-) delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/Converters.java delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/support/ListAccessVisitorTest.java delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/ConvertersTest.java delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/StringEscapeTest.java delete mode 100644 querydsl-sql/src/main/java/com/querydsl/sql/SQLQueryFactoryImpl.java diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/FileAttachment.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/FileAttachment.java index 4f774e7c27..a06bb6e9ce 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/FileAttachment.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/FileAttachment.java @@ -6,7 +6,6 @@ import javax.persistence.Transient; @Embeddable -@Deprecated public class FileAttachment { @Transient @@ -41,12 +40,10 @@ public static File getStore() { return null; } - @Deprecated public boolean exists() { return isSet(); } - @Deprecated public long length() { return get().length(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 32062297b3..68418622bc 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -17,7 +17,6 @@ import java.util.Map; import java.util.Set; -import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.commons.lang.Pair; import com.querydsl.core.types.Expression; import com.querydsl.core.types.QList; @@ -126,7 +125,6 @@ public static GroupExpression> set(GroupExpression groupE * @param value * @return */ - @WithBridgeMethods(value=Expression.class,castRequired=true) public static AbstractGroupExpression,Map> map(Expression key, Expression value) { return new GMap(QPair.create(key, value)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java index ffb583c20f..acfb874f7d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java @@ -31,12 +31,6 @@ @SuppressWarnings("unchecked") public class CollectionAnyVisitor implements Visitor,Context> { - @Deprecated - public static final Templates TEMPLATES = new Templates() {{ - add(PathType.PROPERTY, "{0}_{1}"); - add(PathType.COLLECTION_ANY, "{0}"); - }}; - public static final CollectionAnyVisitor DEFAULT = new CollectionAnyVisitor(); @SuppressWarnings("rawtypes") diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java deleted file mode 100644 index d4b2761580..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.support; - - -import com.google.common.collect.ImmutableList; -import com.querydsl.core.types.Constant; -import com.querydsl.core.types.EntityPath; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.Operation; -import com.querydsl.core.types.OperationImpl; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.ParamExpression; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathType; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.PredicateOperation; -import com.querydsl.core.types.PredicateTemplate; -import com.querydsl.core.types.SubQueryExpression; -import com.querydsl.core.types.TemplateExpression; -import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.core.types.Templates; -import com.querydsl.core.types.ToStringVisitor; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.path.EntityPathBase; - -/** - * ListAccessVisitor is expression visitor implementation - * - * @author tiwe - * - */ -@Deprecated -public class ListAccessVisitor implements Visitor,Context> { - - private static final class UnderscoreTemplates extends Templates { - { - add(PathType.PROPERTY, "{0}_{1}"); - add(PathType.LISTVALUE, "{0}_{1}"); - add(PathType.LISTVALUE_CONSTANT, "{0}_{1}"); - } - } - - public static final ListAccessVisitor DEFAULT = new ListAccessVisitor(); - - public static final Templates TEMPLATE = new UnderscoreTemplates(); - - @SuppressWarnings("unchecked") - private static Path replaceParent(Path path, Path parent) { - PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), - path.getMetadata().getPathType()); - return new PathImpl(path.getType(), metadata); - } - - @Override - public Expression visit(Constant expr, Context context) { - return expr; - } - - @SuppressWarnings("unchecked") - @Override - public Expression visit(TemplateExpression expr, Context context) { - final Object[] args = new Object[expr.getArgs().size()]; - for (int i = 0; i < args.length; i++) { - Context c = new Context(); - if (expr.getArg(i) instanceof Expression) { - args[i] = ((Expression)expr.getArg(i)).accept(this, c); - } else { - args[i] = expr.getArg(i); - } - context.add(c); - } - if (context.replace) { - if (expr.getType().equals(Boolean.class)) { - Predicate predicate = new PredicateTemplate(expr.getTemplate(), args); - return !context.paths.isEmpty() ? exists(context, predicate) : predicate; - } else { - return new TemplateExpressionImpl(expr.getType(), expr.getTemplate(), ImmutableList.copyOf(args)); - } - } else { - return expr; - } - } - - @Override - public Expression visit(FactoryExpression expr, Context context) { - return expr; - } - - @SuppressWarnings("unchecked") - @Override - public Expression visit(Operation expr, Context context) { - final Expression[] args = new Expression[expr.getArgs().size()]; - for (int i = 0; i < args.length; i++) { - Context c = new Context(); - args[i] = expr.getArg(i).accept(this, c); - context.add(c); - } - if (context.replace) { - if (expr.getType().equals(Boolean.class)) { - Predicate predicate = new PredicateOperation((Operator)expr.getOperator(), ImmutableList.copyOf(args)); - return !context.paths.isEmpty() ? exists(context, predicate) : predicate; - } else { - return new OperationImpl(expr.getType(), expr.getOperator(), ImmutableList.copyOf(args)); - } - } else { - return expr; - } - } - - protected Predicate exists(Context c, Predicate condition) { - return condition; - } - - @SuppressWarnings("unchecked") - @Override - public Expression visit(Path expr, Context context) { - final PathType pathType = expr.getMetadata().getPathType(); - if (pathType == PathType.LISTVALUE_CONSTANT || pathType == PathType.LISTVALUE) { - final String variable = expr.accept(ToStringVisitor.DEFAULT, TEMPLATE).replace('.', '_'); - final EntityPath replacement = new EntityPathBase(expr.getType(), variable); - context.add(expr, replacement); - return replacement; - - } else if (expr.getMetadata().getParent() != null) { - Context c = new Context(); - final Path parent = (Path) expr.getMetadata().getParent().accept(this, c); - if (c.replace) { - context.add(c); - return replaceParent(expr, parent); - } - } - return expr; - } - - @Override - public Expression visit(SubQueryExpression expr, Context context) { - return expr; - } - - @Override - public Expression visit(ParamExpression expr, Context context) { - return expr; - } - -} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Converters.java b/querydsl-core/src/main/java/com/querydsl/core/types/Converters.java deleted file mode 100644 index a64fcc2487..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Converters.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.types; - -import java.util.Locale; - -import com.google.common.base.Function; - -/** - * Converters provides expression converters for lower case, upper case and prefix/suffix conversions - * - * @author tiwe - * - */ -@Deprecated -public final class Converters { - - private static final Constant PERCENT = ConstantImpl.create("%"); - - private final char escape; - - /** - * Create a new Converters instance - * - * @param escape escape character to be used - */ - public Converters(char escape) { - this.escape = escape; - } - - public final Function toLowerCase = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - return OperationImpl.create(String.class, Ops.LOWER, (Expression)arg); - } else { - return arg.toString().toLowerCase(Locale.ENGLISH); - } - } - }; - - public final Function toUpperCase = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - return OperationImpl.create(String.class, Ops.UPPER, (Expression)arg); - } else { - return arg.toString().toUpperCase(Locale.ENGLISH); - } - } - }; - - public final Function toStartsWithViaLike = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - return OperationImpl.create(String.class, Ops.CONCAT, (Expression)arg, PERCENT); - } else { - return escapeForLike(arg.toString()) + "%"; - } - } - }; - - public final Function toStartsWithViaLikeLower = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - Expression concated = OperationImpl.create(String.class, Ops.CONCAT, (Expression)arg, PERCENT); - return OperationImpl.create(String.class, Ops.LOWER, concated); - } else { - return escapeForLike(arg.toString().toLowerCase(Locale.ENGLISH)) + "%"; - } - } - }; - - public final Function toEndsWithViaLike = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - return OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); - } else { - return "%" + escapeForLike(arg.toString()); - } - } - }; - - public final Function toEndsWithViaLikeLower = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - Expression concated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); - return OperationImpl.create(String.class, Ops.LOWER, concated); - } else { - return "%" + escapeForLike(arg.toString().toLowerCase(Locale.ENGLISH)); - } - } - }; - - public final Function toContainsViaLike = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - Expression concated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); - return OperationImpl.create(String.class, Ops.CONCAT, concated, PERCENT); - } else { - return "%" + escapeForLike(arg.toString()) + "%"; - } - } - }; - - public final Function toContainsViaLikeLower = - new Function() { - @Override - public Object apply(Object arg) { - if (arg instanceof Constant) { - return ConstantImpl.create(apply(arg.toString()).toString()); - } else if (arg instanceof Expression) { - Expression concated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); - concated = OperationImpl.create(String.class, Ops.CONCAT, concated, PERCENT); - return OperationImpl.create(String.class, Ops.LOWER, concated); - } else { - return "%" + escapeForLike(arg.toString().toLowerCase(Locale.ENGLISH)) + "%"; - } - } - }; - - public String escapeForLike(String str) { - final StringBuilder rv = new StringBuilder(str.length() + 3); - for (int i = 0; i < str.length(); i++) { - final char ch = str.charAt(i); - if (ch == escape || ch == '%' || ch == '_') { - rv.append(escape); - } - rv.append(ch); - } - return rv.toString(); - } - -} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java index e90f823dd9..c54b29462f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java @@ -13,12 +13,13 @@ */ package com.querydsl.core.types.expr; -import javax.annotation.Nullable; import java.sql.Time; import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; +import javax.annotation.Nullable; + import com.querydsl.core.types.*; /** @@ -117,11 +118,6 @@ public CaseWhen when(Predicate b) { return new CaseWhen(this, b); } - // TODO remove in 4.0.0 - public CaseWhen when(BooleanExpression b) { - return new CaseWhen(this, b); - } - } /** @@ -142,12 +138,6 @@ public CaseWhen(Cases cases, Predicate b) { this.b = b; } - // TODO remove in 4.0.0 - public CaseWhen(Cases cases, BooleanExpression b) { - this.cases = cases; - this.b = b; - } - public Cases then(A constant) { return then(ConstantImpl.create(constant)); } @@ -171,11 +161,6 @@ public Initial(Predicate b) { this.when = b; } - // TODO remove in 4.0.0 - public Initial(BooleanExpression b) { - this.when = b; - } - public Cases> then(Expression expr) { if (expr instanceof Predicate) { return (Cases) then((Predicate) expr); @@ -217,12 +202,6 @@ public Cases then(Predicate expr) { return thenBoolean(expr); } - // TODO remove in 4.0.0 - public Cases then(BooleanExpression expr) { - return thenBoolean(expr); - } - - private Cases thenBoolean(Expression expr) { return new Cases(Boolean.class) { @SuppressWarnings("unchecked") @@ -278,11 +257,6 @@ public Cases> then(java.sql.Date da return thenDate(ConstantImpl.create(date)); } - @Deprecated - public Cases> thenDate(java.sql.Date date) { - return then(date); - } - // DateTime public Cases> then(DateTimeExpression expr) { @@ -303,20 +277,10 @@ public Cases> then(Timestamp ts) { return thenDateTime(ConstantImpl.create(ts)); } - @Deprecated - public Cases> thenDateTime(Timestamp ts) { - return then(ts); - } - public Cases> then(java.util.Date date) { return thenDateTime(ConstantImpl.create(date)); } - @Deprecated - public Cases> thenDateTime(java.util.Date date) { - return then(date); - } - // Enum public > Cases> then(EnumExpression expr) { @@ -405,8 +369,4 @@ public Initial when(Predicate b) { return new Initial(b); } - // TODO remove in 4.0.0 - public Initial when(BooleanExpression b) { - return new Initial(b); - } } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/ListAccessVisitorTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/ListAccessVisitorTest.java deleted file mode 100644 index 0ea6be2548..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/support/ListAccessVisitorTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.support; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.querydsl.core.domain.QCat; -import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.TemplateExpressionImpl; - - -public class ListAccessVisitorTest { - - private final QCat cat = QCat.cat; - - @Test - public void Path() { - assertEquals("cat_kittens_0", serialize(cat.kittens.get(0))); - } - - @Test - public void Longer_Path() { - assertEquals("cat_kittens_0.name", serialize(cat.kittens.get(0).name)); - } - - @Test - public void Very_Long_Path() { - assertEquals("cat_kittens_0_kittens_1.name", serialize(cat.kittens.get(0).kittens.get(1).name)); - } - - @Test - public void Simple_BooleanOperation() { - Predicate predicate = cat.kittens.get(0).name.eq("Ruth123"); - assertEquals("cat_kittens_0.name = Ruth123", serialize(predicate)); - } - - @Test - public void Simple_StringOperation() { - Predicate predicate = cat.kittens.get(0).name.substring(1).eq("uth123"); - assertEquals("substring(cat_kittens_0.name,1) = uth123", serialize(predicate)); - } - - @Test - public void And_Operation() { - Predicate predicate = cat.kittens.get(0).name.eq("Ruth123").and(cat.kittens.get(1).bodyWeight.gt(10.0)); - assertEquals("cat_kittens_0.name = Ruth123 && cat_kittens_1.bodyWeight > 10.0", serialize(predicate)); - } - - @Test - public void Template() { - Expression templateExpr = TemplateExpressionImpl.create(Boolean.class, "{0} = {1}", - cat.kittens.get(0).name, ConstantImpl.create("Ruth123")); - assertEquals("cat_kittens_0.name = Ruth123", serialize(templateExpr)); - } - - private String serialize(Expression expression) { - ListAccessVisitor visitor = new ListAccessVisitor() { - @Override - protected Predicate exists(Context c, Predicate condition) { - return condition; - } - }; - Expression transformed = expression.accept(visitor, new Context()); - return transformed.toString(); - } - -} diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/ConvertersTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/ConvertersTest.java deleted file mode 100644 index faf7b867ef..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/types/ConvertersTest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.types; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import com.querydsl.core.types.path.StringPath; - - -public class ConvertersTest { - - private static final Converters converters = new Converters('\\'); - - private static String constant = "abcDEF"; - - private static StringPath path = new StringPath("string"); - - @Test - public void EscapeForLikeSpeed() { - final int iterations = 1000000; - long start = System.currentTimeMillis(); - for (int i = 0; i < iterations; i++) { - converters.escapeForLike("ab%cd_"); - } - long duration = System.currentTimeMillis() - start; - System.err.println(duration); - } - - @Test - public void ToLowerCase() { - assertEquals("abcdef", converters.toLowerCase.apply(constant).toString()); - assertEquals("lower(string)", converters.toLowerCase.apply(path).toString()); - } - - @Test - public void ToUpperCase() { - assertEquals("ABCDEF", converters.toUpperCase.apply(constant).toString()); - assertEquals("upper(string)", converters.toUpperCase.apply(path).toString()); - } - - @Test - public void ToStartsWithViaLike() { - assertEquals("abcDEF%", converters.toStartsWithViaLike.apply(constant).toString()); - assertEquals("string + %", converters.toStartsWithViaLike.apply(path).toString()); - } - - @Test - public void ToStartsWithViaLikeLower() { - assertEquals("abcdef%", converters.toStartsWithViaLikeLower.apply(constant).toString()); - assertEquals("lower(string + %)", converters.toStartsWithViaLikeLower.apply(path).toString()); - } - - @Test - public void ToEndsWithViaLike() { - assertEquals("%abcDEF", converters.toEndsWithViaLike.apply(constant).toString()); - assertEquals("% + string", converters.toEndsWithViaLike.apply(path).toString()); - } - - @Test - public void ToEndsWithViaLikeLower() { - assertEquals("%abcdef", converters.toEndsWithViaLikeLower.apply(constant).toString()); - assertEquals("lower(% + string)", converters.toEndsWithViaLikeLower.apply(path).toString()); - } - - @Test - public void ToContainsViaLike() { - assertEquals("%abcDEF%", converters.toContainsViaLike.apply(constant).toString()); - assertEquals("% + string + %", converters.toContainsViaLike.apply(path).toString()); - } - - @Test - public void ToContainsViaLikeLower() { - assertEquals("%abcdef%", converters.toContainsViaLikeLower.apply(constant).toString()); - assertEquals("lower(% + string + %)", converters.toContainsViaLikeLower.apply(path).toString()); - } -} - diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/StringEscapeTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/StringEscapeTest.java deleted file mode 100644 index bacd9cb398..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/types/StringEscapeTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.types; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -public class StringEscapeTest { - - @Test - public void EscapeForLike() { - Converters converters = new Converters('\\'); - assertEquals("a\\%b\\_c", converters.escapeForLike("a%b_c")); - } - -} diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml index 77e895db85..3271a0a731 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/jpa.xml @@ -354,7 +354,7 @@ query.from(customer) Using joins Querydsl supports the following join variants in JPQL: inner join, join, left - join and full join. Join usage is typesafe, and follows the following pattern: + join and right join. Join usage is typesafe, and follows the following pattern: - innerJoin, join, leftJoin, fullJoin, on: + innerJoin, join, leftJoin, rightJoin, on: Add join elements using these constructs. For the join methods the first argument is the join source and the second the target (alias). diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index a63e93c216..5cc8490dbd 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -519,7 +519,7 @@ WHERE c.first_name = 'Bob' - innerJoin, join, leftJoin, fullJoin, on: + innerJoin, join, leftJoin, rightJoin, fullJoin, on: Add join elements using these constructs. For the join methods the first argument is the join source and the second the target (alias). diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml index 6f85f51792..9d3c48e1c9 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/jpa.xml @@ -389,7 +389,7 @@ from Cat as cat - innerJoin, join, leftJoin, fullJoin, on: + innerJoin, join, leftJoin, rightJoin, on: 조인 부분을 추가한다. 조인 메서드에서 첫 번째 인자는 조인 소스이고, 두 번재 인자는 대상(별칭)이다. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index 367b2cc7e8..e4991f2fcd 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -504,7 +504,7 @@ WHERE c.first_name = 'Bob' - innerJoin, join, leftJoin, fullJoin, on: + innerJoin, join, leftJoin, rightJoin, fullJoin, on: 조인 부분을 추가한다. 조인 메서드에서 첫 번째 인자는 조인 소스이고, 두 번재 인자는 대상(별칭)이다. diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java index 6291e858ae..6040932194 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java @@ -69,43 +69,7 @@ public Q from(EntityPath... o) { @Override public

Q from(CollectionExpression target, Path

alias) { - return queryMixin.fullJoin(Expressions.as((Path)target, alias)); - } - - @Override - @Deprecated - public

Q fullJoin(CollectionExpression target) { - return queryMixin.fullJoin(target); - } - - @Override - @Deprecated - public

Q fullJoin(CollectionExpression target, Path

alias) { - return queryMixin.fullJoin(target, alias); - } - - @Override - @Deprecated - public

Q fullJoin(EntityPath

target) { - return queryMixin.fullJoin(target); - } - - @Override - @Deprecated - public

Q fullJoin(EntityPath

target, Path

alias) { - return queryMixin.fullJoin(target, alias); - } - - @Override - @Deprecated - public

Q fullJoin(MapExpression target) { - return queryMixin.fullJoin(target); - } - - @Override - @Deprecated - public

Q fullJoin(MapExpression target, Path

alias) { - return queryMixin.fullJoin(target, alias); + return queryMixin.from(Expressions.as((Path)target, alias)); } @Override diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACommonQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACommonQuery.java index 78398189ab..596734c351 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACommonQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACommonQuery.java @@ -276,73 +276,6 @@ public interface JPACommonQuery> extends Query { */

Q rightJoin(MapExpression target, Path

alias); - - /** - * Create a full join with the given target. - * Use fetch() to add the fetch parameter to this join. - * - * @param

- * @param target - * @return - */ - @Deprecated -

Q fullJoin(EntityPath

target); - - /** - * Create a full join with the given target and alias. - * - * @param

- * @param target - * @param alias - * @return - */ - @Deprecated -

Q fullJoin(EntityPath

target, Path

alias); - - /** - * Create a full join with the given target. - * Use fetch() to add the fetch parameter to this join. - * - * @param

- * @param target - * @return - */ - @Deprecated -

Q fullJoin(CollectionExpression target); - - /** - * Create a full join with the given target and alias. - * - * @param

- * @param target - * @param alias - * @return - */ - @Deprecated -

Q fullJoin(CollectionExpression target, Path

alias); - - /** - * Create a full join with the given target. - * Use fetch() to add the fetch parameter to this join. - * - * @param

- * @param target - * @return - */ - @Deprecated -

Q fullJoin(MapExpression target); - - /** - * Create a full join with the given target and alias. - * - * @param

- * @param target - * @param alias - * @return - */ - @Deprecated -

Q fullJoin(MapExpression target, Path

alias); - /** * Add join conditions to the last added join * diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java index 5dd1024e20..f51c60e6f4 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java @@ -88,36 +88,6 @@ public Q from(EntityPath... args) { return queryMixin.from(args); } - @Deprecated - public

Q fullJoin(CollectionExpression target) { - return queryMixin.fullJoin(target); - } - - @Deprecated - public

Q fullJoin(CollectionExpression target, Path

alias) { - return queryMixin.fullJoin(target, alias); - } - - @Deprecated - public

Q fullJoin(EntityPath

target) { - return queryMixin.fullJoin(target); - } - - @Deprecated - public

Q fullJoin(EntityPath

target, Path

alias) { - return queryMixin.fullJoin(target, alias); - } - - @Deprecated - public

Q fullJoin(MapExpression target) { - return queryMixin.fullJoin(target); - } - - @Deprecated - public

Q fullJoin(MapExpression target, Path

alias) { - return queryMixin.fullJoin(target, alias); - } - public

Q innerJoin(CollectionExpression target) { return queryMixin.innerJoin(target); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLQueryTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLQueryTest.java index 0f585bbed6..c6ca50ba0b 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLQueryTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLQueryTest.java @@ -60,15 +60,4 @@ public void LeftJoinPathOfQextendsCollectionOfPPathOfP() { query.leftJoin(cat.kittens, cat.mate); } - @Test(expected=IllegalArgumentException.class) - public void FullJoinPEntityOfPPEntityOfP() { - query.fullJoin(cat.mate, cat.mate); - } - - @Test(expected=IllegalArgumentException.class) - public void FullJoinPathOfQextendsCollectionOfPPathOfP() { - query.fullJoin(cat.kittens, cat.mate); - } - - } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JoinTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JoinTest.java index 95064cbf9b..fcad51d34d 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JoinTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JoinTest.java @@ -36,14 +36,6 @@ public interface Entity{ private final JPASubQuery subQuery = new JPASubQuery(); private final HibernateQuery query = new HibernateQuery(new DummySessionHolder(), HQLTemplates.DEFAULT); - - @Test - public void SubQuery_FullJoin() { - subQuery.from($(alias)); - subQuery.fullJoin($(alias.getNames()), path); - // TODO : assertions - } - @Test public void SubQuery_InnerJoin() { subQuery.from($(alias)); @@ -64,14 +56,7 @@ public void SubQuery_LeftJoin() { subQuery.leftJoin($(alias.getNames()), path); // TODO : assertions } - - @Test - public void Query_FullJoin() { - query.from($(alias)); - query.fullJoin($(alias.getNames()), path); - // TODO : assertions - } - + @Test public void Query_InnerJoin() { query.from($(alias)); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java index e0ca69c77a..e62b548555 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java @@ -69,13 +69,7 @@ public void LeftJoin() { assertEquals("select cat\nfrom Cat cat\n left join cat.mate", sub().from(cat).leftJoin(cat.mate).toString()); } - - @Test - public void FullJoin() { - assertEquals("select cat\nfrom Cat cat\n full join cat.mate", - sub().from(cat).fullJoin(cat.mate).toString()); - } - + @Test public void Join() { assertEquals("select cat\nfrom Cat cat\n inner join cat.mate", diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java index 0e2d5ac5c0..675b6e3838 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java @@ -403,8 +403,8 @@ public void execute() throws MojoExecutionException, MojoFailureException { } if (numericMappings != null) { for (NumericMapping mapping : numericMappings) { - int total = Math.max(mapping.size, mapping.total); - int decimal = Math.max(mapping.digits, mapping.decimal); + int total = mapping.total; + int decimal = mapping.decimal; configuration.registerNumeric(total, decimal, Class.forName(mapping.javaType)); } } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java index b68fbc60de..487962506f 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java @@ -19,9 +19,6 @@ */ public class NumericMapping { - @Deprecated - public int size, digits; - public int total, decimal; public String javaType; diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java index 7cb3c3b388..4a4fa68f1c 100644 --- a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java @@ -99,8 +99,8 @@ public void Execute_With_TypeMappings() throws Exception { public void ExecuteWithNumericMappings() throws Exception { mojo.setTargetFolder("target/export5"); NumericMapping mapping = new NumericMapping(); - mapping.size = 1; - mapping.digits = 1; + mapping.total = 1; + mapping.decimal = 1; mapping.javaType = Number.class.getName(); mojo.setNumericMappings(new NumericMapping[]{mapping}); diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataSerializer.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataSerializer.java index 81afb437fa..dd71cf8021 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataSerializer.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataSerializer.java @@ -13,13 +13,16 @@ */ package com.querydsl.sql.codegen; -import javax.inject.Inject; -import javax.inject.Named; +import static com.mysema.codegen.Symbols.*; + import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.*; +import javax.inject.Inject; +import javax.inject.Named; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mysema.codegen.CodeWriter; @@ -28,12 +31,10 @@ import com.querydsl.sql.ColumnMetadata; import com.querydsl.sql.ForeignKey; import com.querydsl.sql.PrimaryKey; -import com.querydsl.sql.RelationalPathBase; import com.querydsl.sql.codegen.support.ForeignKeyData; import com.querydsl.sql.codegen.support.InverseForeignKeyData; import com.querydsl.sql.codegen.support.KeyData; import com.querydsl.sql.codegen.support.PrimaryKeyData; -import static com.mysema.codegen.Symbols.*; /** * MetaDataSerializer defines the Query type serialization logic for MetaDataExporter. @@ -92,17 +93,6 @@ public MetaDataSerializer( this.entityPathType = entityPathType; } - @Deprecated - public MetaDataSerializer( - TypeMappings typeMappings, - NamingStrategy namingStrategy, - boolean innerClassesForKeys, - Set imports, - Comparator columnComparator) { - this(typeMappings, namingStrategy, innerClassesForKeys, - imports, columnComparator, RelationalPathBase.class); - } - @Override protected void constructorsForVariables(CodeWriter writer, EntityType model) throws IOException { super.constructorsForVariables(writer, model); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQueryFactory.java b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQueryFactory.java index fb23efde81..56c14913c9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQueryFactory.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQueryFactory.java @@ -17,7 +17,6 @@ import javax.inject.Provider; -import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.querydsl.sql.dml.SQLDeleteClause; import com.querydsl.sql.dml.SQLInsertClause; import com.querydsl.sql.dml.SQLMergeClause; @@ -79,13 +78,11 @@ public final SQLUpdateClause update(RelationalPath path) { @SuppressWarnings("unchecked") @Override - @WithBridgeMethods(value=SQLSubQuery.class, castRequired=true) public SQ subQuery() { return (SQ) new SQLSubQuery(); } @Override - @WithBridgeMethods(value=SQLSubQuery.class, castRequired=true) public final SQ subQuery(Expression from) { return subQuery().from(from); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java b/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java index f834ba788b..99e855ac8b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java @@ -130,21 +130,6 @@ public SQLTemplates getTemplates() { return templates; } - /** - * Use the other getJavaType method instead - * - * @param sqlType - * @param size - * @param digits - * @param tableName - * @param columnName - * @return - */ - @Deprecated - public Class getJavaType(int sqlType, int size, int digits, String tableName, String columnName) { - return getJavaType(sqlType, null, size, digits, tableName, columnName); - } - /** * Get the java type for the given jdbc type, table name and column name * @@ -208,29 +193,6 @@ public T get(ResultSet rs, @Nullable Path path, int i, Class clazz) th return getType(path, clazz).getValue(rs, i); } - /** - * Use getOverride instead - * - * @param schema - * @return - */ - @Deprecated - public String getSchema(String schema) { - return schemas.get(schema); - } - - /** - * Use getOverride instead - * - * @param schema - * @param table - * @return - */ - @Deprecated - public String getTable(String schema, String table) { - return getOverride(new SchemaAndTable(schema, table)).getTable(); - } - /** * Get the schema/table override * diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java index e329f79891..85d4621ee7 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java @@ -18,7 +18,6 @@ import java.util.Map; import com.google.common.collect.ImmutableList; -import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.JoinFlag; import com.querydsl.core.QueryFlag; @@ -27,18 +26,7 @@ import com.querydsl.core.support.DetachableQuery; import com.querydsl.core.support.Expressions; import com.querydsl.core.support.QueryMixin; -import com.querydsl.core.types.CollectionExpression; -import com.querydsl.core.types.EntityPath; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.OperationImpl; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.ParamExpression; -import com.querydsl.core.types.ParamNotSetException; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.SubQueryExpression; -import com.querydsl.core.types.TemplateExpressionImpl; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.BooleanExpression; import com.querydsl.core.types.expr.CollectionExpressionBase; import com.querydsl.core.types.expr.CollectionOperation; @@ -79,7 +67,6 @@ public DetachableSQLQuery(Configuration configuration, QueryMetadata metadata) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addFlag(Position position, String prefix, Expression expr) { Expression flag = TemplateExpressionImpl.create(expr.getType(), prefix + "{0}", expr); return queryMixin.addFlag(new QueryFlag(position, flag)); @@ -93,7 +80,6 @@ public Q addFlag(Position position, String prefix, Expression expr) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addFlag(Position position, String flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -106,7 +92,6 @@ public Q addFlag(Position position, String flag) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addFlag(Position position, Expression flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -119,7 +104,6 @@ public Q addFlag(Position position, Expression flag) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q addJoinFlag(String flag) { return addJoinFlag(flag, JoinFlag.Position.BEFORE_TARGET); } @@ -132,7 +116,6 @@ public Q addJoinFlag(String flag) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) @SuppressWarnings("unchecked") public Q addJoinFlag(String flag, JoinFlag.Position position) { queryMixin.addJoinFlag(new JoinFlag(flag, position)); @@ -149,151 +132,126 @@ public BooleanExpression notExists() { return exists().not(); } - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q from(Expression arg) { return queryMixin.from(arg); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q from(Expression... args) { return queryMixin.from(args); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) @SuppressWarnings({ "unchecked", "rawtypes" }) public Q from(SubQueryExpression subQuery, Path alias) { return queryMixin.from(ExpressionUtils.as((Expression)subQuery, alias)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(EntityPath target) { return queryMixin.fullJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(RelationalFunctionCall target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(ForeignKey key, RelationalPath entity) { return queryMixin.fullJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q fullJoin(SubQueryExpression target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(EntityPath target) { return queryMixin.innerJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(RelationalFunctionCall target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(ForeignKey key, RelationalPath entity) { return queryMixin.innerJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q innerJoin(SubQueryExpression target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(EntityPath target) { return queryMixin.join(target); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(RelationalFunctionCall target, Path alias) { return queryMixin.join(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(ForeignKey key, RelationalPath entity) { return queryMixin.join(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q join(SubQueryExpression target, Path alias) { return queryMixin.join(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(EntityPath target) { return queryMixin.leftJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(RelationalFunctionCall target, Path alias) { return queryMixin.leftJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(ForeignKey key, RelationalPath entity) { return queryMixin.leftJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q leftJoin(SubQueryExpression target, Path alias) { return queryMixin.leftJoin(target, alias); } - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q on(Predicate condition) { return queryMixin.on(condition); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q on(Predicate... conditions) { return queryMixin.on(conditions); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(EntityPath target) { return queryMixin.rightJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(RelationalFunctionCall target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(ForeignKey key, RelationalPath entity) { return queryMixin.rightJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q rightJoin(SubQueryExpression target, Path alias) { return queryMixin.rightJoin(target, alias); } @@ -340,35 +298,30 @@ public CollectionExpressionBase unionAll(SubQueryExpression... sq) { } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q withRecursive(Path alias, SubQueryExpression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q withRecursive(Path alias, Expression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public WithBuilder withRecursive(Path alias, Path... columns) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, columns); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q with(Path alias, SubQueryExpression target) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, target); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); } @Override - @WithBridgeMethods(value=AbstractSQLSubQuery.class, castRequired=true) public Q with(Path alias, Expression query) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java index d7844e3bfa..ab5958f78c 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java @@ -22,7 +22,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; -import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.*; import com.querydsl.core.QueryFlag.Position; @@ -68,7 +67,6 @@ public ProjectableSQLQuery(QueryMixin queryMixin, Configuration configuration * @return */ @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addJoinFlag(String flag) { return addJoinFlag(flag, JoinFlag.Position.BEFORE_TARGET); } @@ -81,7 +79,6 @@ public Q addJoinFlag(String flag) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) @SuppressWarnings("unchecked") public Q addJoinFlag(String flag, JoinFlag.Position position) { queryMixin.addJoinFlag(new JoinFlag(flag, position)); @@ -97,7 +94,6 @@ public Q addJoinFlag(String flag, JoinFlag.Position position) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(Position position, String prefix, Expression expr) { Expression flag = SimpleTemplate.create(expr.getType(), prefix + "{0}", expr); return queryMixin.addFlag(new QueryFlag(position, flag)); @@ -109,7 +105,6 @@ public Q addFlag(Position position, String prefix, Expression expr) { * @param flag * @return */ - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(QueryFlag flag) { return queryMixin.addFlag(flag); } @@ -122,7 +117,6 @@ public Q addFlag(QueryFlag flag) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(Position position, String flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -135,7 +129,6 @@ public Q addFlag(Position position, String flag) { * @return */ @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q addFlag(Position position, Expression flag) { return queryMixin.addFlag(new QueryFlag(position, flag)); } @@ -151,140 +144,117 @@ public boolean exists() { return singleResult(NumberTemplate.ONE) != null; } - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q from(Expression arg) { return queryMixin.from(arg); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q from(Expression... args) { return queryMixin.from(args); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) @SuppressWarnings({ "unchecked", "rawtypes" }) public Q from(SubQueryExpression subQuery, Path alias) { return queryMixin.from(ExpressionUtils.as((Expression) subQuery, alias)); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(EntityPath target) { return queryMixin.fullJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(RelationalFunctionCall target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(SubQueryExpression target, Path alias) { return queryMixin.fullJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q fullJoin(ForeignKey key, RelationalPath entity) { return queryMixin.fullJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(EntityPath target) { return queryMixin.innerJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(RelationalFunctionCall target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(SubQueryExpression target, Path alias) { return queryMixin.innerJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q innerJoin(ForeignKey key, RelationalPath entity) { return queryMixin.innerJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(EntityPath target) { return queryMixin.join(target); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(RelationalFunctionCall target, Path alias) { return queryMixin.join(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(SubQueryExpression target, Path alias) { return queryMixin.join(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q join(ForeignKey key, RelationalPath entity) { return queryMixin.join(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(EntityPath target) { return queryMixin.leftJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(RelationalFunctionCall target, Path alias) { return queryMixin.leftJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(SubQueryExpression target, Path alias) { return queryMixin.leftJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q leftJoin(ForeignKey key, RelationalPath entity) { return queryMixin.leftJoin(entity).on(key.on(entity)); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(EntityPath target) { return queryMixin.rightJoin(target); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(RelationalFunctionCall target, Path alias) { return queryMixin.rightJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(SubQueryExpression target, Path alias) { return queryMixin.rightJoin(target, alias); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q rightJoin(ForeignKey key, RelationalPath entity) { return queryMixin.rightJoin(entity).on(key.on(entity)); } @@ -319,13 +289,11 @@ public SearchResults listResults(Expression... args) { return listResults(queryMixin.createProjection(args)); } - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q on(Predicate condition) { return queryMixin.on(condition); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q on(Predicate... conditions) { return queryMixin.on(conditions); } @@ -348,7 +316,6 @@ public Union union(ListSubQuery... sq) { * @param sq * @return */ - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q union(Path alias, ListSubQuery... sq) { return from(UnionUtils.union(sq, alias, false)); } @@ -371,7 +338,6 @@ public Union union(SubQueryExpression... sq) { * @param sq * @return */ - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q union(Path alias, SubQueryExpression... sq) { return from(UnionUtils.union(sq, alias, false)); } @@ -395,7 +361,6 @@ public Union unionAll(ListSubQuery... sq) { * @param sq * @return */ - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q unionAll(Path alias, ListSubQuery... sq) { return from(UnionUtils.union(sq, alias, true)); } @@ -419,7 +384,6 @@ public Union unionAll(SubQueryExpression... sq) { * @param sq * @return */ - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q unionAll(Path alias, SubQueryExpression... sq) { return from(UnionUtils.union(sq, alias, true)); } @@ -439,14 +403,12 @@ public RT uniqueResult(Expression expr) { } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q withRecursive(Path alias, SubQueryExpression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q withRecursive(Path alias, Expression query) { queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, SQLTemplates.RECURSIVE)); return with(alias, query); @@ -459,14 +421,12 @@ public WithBuilder withRecursive(Path alias, Path... columns) { } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q with(Path alias, SubQueryExpression query) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); } @Override - @WithBridgeMethods(value=AbstractSQLQuery.class, castRequired=true) public Q with(Path alias, Expression query) { Expression expr = OperationImpl.create(alias.getType(), SQLOps.WITH_ALIAS, alias, query); return queryMixin.addFlag(new QueryFlag(QueryFlag.Position.WITH, expr)); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLBindings.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLBindings.java index 5085450694..8ebc9d2f69 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLBindings.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLBindings.java @@ -32,11 +32,6 @@ public SQLBindings(String sql, ImmutableList bindings) { this.bindings = bindings; } - @Deprecated - public String getSql() { - return sql; - } - public String getSQL() { return sql; } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLQueryFactoryImpl.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLQueryFactoryImpl.java deleted file mode 100644 index a5a8e7bfdb..0000000000 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLQueryFactoryImpl.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.sql; - -import java.sql.Connection; -import java.sql.SQLException; - -import javax.inject.Provider; -import javax.sql.DataSource; - -/** - * Use SQLQueryFactory instead - * - * @author tiwe - * - */ -@Deprecated -public class SQLQueryFactoryImpl extends AbstractSQLQueryFactory { - - static class DataSourceProvider implements Provider { - - private final DataSource ds; - - public DataSourceProvider(DataSource ds) { - this.ds = ds; - } - - @Override - public Connection get() { - try { - return ds.getConnection(); - } catch (SQLException e) { - throw new RuntimeException(e.getMessage(), e); - } - } - - } - - public SQLQueryFactoryImpl(SQLTemplates templates, Provider connection) { - this(new Configuration(templates), connection); - } - - public SQLQueryFactoryImpl(Configuration configuration, Provider connection) { - super(configuration, connection); - } - - public SQLQueryFactoryImpl(Configuration configuration, DataSource dataSource) { - super(configuration, new DataSourceProvider(dataSource)); - } - - @Override - public SQLQuery query() { - return new SQLQuery(connection.get(), configuration); - } - -} diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index f131955254..b9db19968b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -685,16 +685,6 @@ public final Map getTableOverrides() { return tableOverrides; } - @Deprecated - public String getTypeForCast(Class cl) { - return getTypeForClass(cl); - } - - @Deprecated - public String getTypeForClass(Class cl) { - throw new UnsupportedOperationException(); - } - public String getTypeNameForCode(int code) { return codeToTypeName.get(code); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/mssql/SQLServerGrammar.java b/querydsl-sql/src/main/java/com/querydsl/sql/mssql/SQLServerGrammar.java index ddb0b7ff12..fec47dec12 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/mssql/SQLServerGrammar.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/mssql/SQLServerGrammar.java @@ -14,9 +14,6 @@ package com.querydsl.sql.mssql; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.template.NumberTemplate; - /** * Convenience functions and constants for SQL Server usage * @@ -27,12 +24,6 @@ public final class SQLServerGrammar { private SQLServerGrammar() {} - @Deprecated - public static final NumberExpression rowNumber = NumberTemplate.create(Long.class, "row_number"); - - @Deprecated - public static final NumberExpression rn = NumberTemplate.create(Long.class, "rn"); - static String tableHints(SQLServerTableHints... tableHints) { StringBuilder hints = new StringBuilder(" with ").append("("); for (int i = 0; i < tableHints.length; i++) { diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLQueryFactoryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLQueryFactoryTest.java index 556e31e8bf..f4d3bd6e0a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLQueryFactoryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLQueryFactoryTest.java @@ -27,7 +27,7 @@ public class SQLQueryFactoryTest { - private SQLQueryFactoryImpl queryFactory; + private SQLQueryFactory queryFactory; @Before public void setUp() { @@ -37,7 +37,7 @@ public Connection get() { return EasyMock.createNiceMock(Connection.class); } }; - queryFactory = new SQLQueryFactoryImpl(SQLTemplates.DEFAULT, provider); + queryFactory = new SQLQueryFactory(SQLTemplates.DEFAULT, provider); } @Test From cfd73c9738eaba90e2e7fcccbd86e84fc4754b0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 30 Jan 2015 18:44:16 +0200 Subject: [PATCH 0702/1968] Remove type parameter --- .../querydsl/codegen/EntitySerializer.java | 12 +-- .../test/java/com/querydsl/codegen/Point.java | 2 +- .../java/com/querydsl/collections/QCar.java | 2 +- .../com/querydsl/collections/QPerson.java | 2 +- .../core/alias/DefaultPathFactory.java | 30 ++++---- .../com/querydsl/core/alias/PathFactory.java | 30 ++++---- .../PropertyAccessInvocationHandler.java | 16 ++-- .../core/support/CollectionAnyVisitor.java | 2 +- .../core/support/ListAccessVisitor.java | 2 +- .../java/com/querydsl/core/types/Path.java | 2 +- .../com/querydsl/core/types/PathImpl.java | 6 +- .../com/querydsl/core/types/PathMetadata.java | 6 +- .../core/types/PathMetadataFactory.java | 40 +++++----- .../querydsl/core/types/path/ArrayPath.java | 8 +- .../querydsl/core/types/path/BeanPath.java | 10 +-- .../querydsl/core/types/path/BooleanPath.java | 4 +- .../core/types/path/CollectionPath.java | 6 +- .../core/types/path/CollectionPathBase.java | 2 +- .../core/types/path/ComparableEntityPath.java | 2 +- .../core/types/path/ComparablePath.java | 4 +- .../querydsl/core/types/path/DatePath.java | 4 +- .../core/types/path/DateTimePath.java | 4 +- .../com/querydsl/core/types/path/DslPath.java | 4 +- .../core/types/path/EntityPathBase.java | 4 +- .../querydsl/core/types/path/EnumPath.java | 4 +- .../querydsl/core/types/path/ListPath.java | 14 ++-- .../com/querydsl/core/types/path/MapPath.java | 14 ++-- .../querydsl/core/types/path/NumberPath.java | 4 +- .../querydsl/core/types/path/PathBuilder.java | 4 +- .../com/querydsl/core/types/path/SetPath.java | 6 +- .../querydsl/core/types/path/SimplePath.java | 4 +- .../querydsl/core/types/path/StringPath.java | 4 +- .../querydsl/core/types/path/TimePath.java | 4 +- .../querydsl/core/QDefaultQueryMetadata.java | 2 +- .../querydsl/core/alias/PathFactoryTest.java | 2 +- .../querydsl/core/domain/QAbstractEntity.java | 2 +- .../com/querydsl/core/domain/QAnimal.java | 2 +- .../java/com/querydsl/core/domain/QCat.java | 6 +- .../core/domain/QCommonIdentifiable.java | 2 +- .../core/domain/QCommonPersistence.java | 2 +- .../com/querydsl/core/domain/QCompany.java | 6 +- .../querydsl/core/domain/QCompanyGroup.java | 6 +- .../querydsl/core/domain/QCompanyGroupPK.java | 2 +- .../com/querydsl/core/domain/QCompanyPK.java | 2 +- .../com/querydsl/core/domain/QIdNamePair.java | 2 +- .../querydsl/core/domain/QMyEmbeddable.java | 2 +- .../querydsl/core/domain/QSuperSupertype.java | 2 +- .../com/querydsl/core/domain/QSuperclass.java | 2 +- .../core/domain/query/QAbstractEntity.java | 2 +- .../querydsl/core/domain/query/QAnimal.java | 2 +- .../com/querydsl/core/domain/query/QCat.java | 6 +- .../domain/query/QCommonIdentifiable.java | 2 +- .../core/domain/query/QCommonPersistence.java | 2 +- .../querydsl/core/domain/query/QCompany.java | 6 +- .../core/domain/query/QCompanyGroup.java | 6 +- .../core/domain/query/QCompanyGroupPK.java | 2 +- .../core/domain/query/QCompanyPK.java | 2 +- .../core/domain/query/QIdNamePair.java | 2 +- .../core/domain/query/QMyEmbeddable.java | 2 +- .../core/domain/query/QSuperSupertype.java | 2 +- .../core/domain/query/QSuperclass.java | 2 +- .../domain/query2/QAbstractEntityType.java | 2 +- .../core/domain/query2/QAnimalType.java | 2 +- .../querydsl/core/domain/query2/QCatType.java | 6 +- .../query2/QCommonIdentifiableType.java | 2 +- .../domain/query2/QCommonPersistenceType.java | 2 +- .../domain/query2/QCompanyGroupPKType.java | 2 +- .../core/domain/query2/QCompanyGroupType.java | 6 +- .../core/domain/query2/QCompanyPKType.java | 2 +- .../core/domain/query2/QCompanyType.java | 6 +- .../core/domain/query2/QIdNamePairType.java | 2 +- .../core/domain/query2/QMyEmbeddableType.java | 2 +- .../domain/query2/QSuperSupertypeType.java | 2 +- .../core/domain/query2/QSuperclassType.java | 2 +- .../core/domain/query3/QTAbstractEntity.java | 2 +- .../querydsl/core/domain/query3/QTAnimal.java | 2 +- .../querydsl/core/domain/query3/QTCat.java | 6 +- .../domain/query3/QTCommonIdentifiable.java | 2 +- .../domain/query3/QTCommonPersistence.java | 2 +- .../core/domain/query3/QTCompany.java | 6 +- .../core/domain/query3/QTCompanyGroup.java | 6 +- .../core/domain/query3/QTCompanyGroupPK.java | 2 +- .../core/domain/query3/QTCompanyPK.java | 2 +- .../core/domain/query3/QTIdNamePair.java | 2 +- .../core/domain/query3/QTMyEmbeddable.java | 2 +- .../core/domain/query3/QTSuperSupertype.java | 2 +- .../core/domain/query3/QTSuperclass.java | 2 +- .../com/querydsl/core/domain2/QABase.java | 6 +- .../com/querydsl/core/domain2/QAImpl.java | 6 +- .../querydsl/core/domain2/QTenantImpl.java | 2 +- .../core/types/path/BeanPathTest.java | 4 +- .../com/querydsl/jdo/test/domain/QBook.java | 2 +- .../querydsl/jdo/test/domain/QProduct.java | 2 +- .../com/querydsl/jdo/test/domain/QStore.java | 2 +- .../querydsl/jdo/test/domain/sql/SBook.java | 2 +- .../jdo/test/domain/sql/SProduct.java | 2 +- .../querydsl/jdo/test/domain/sql/SStore.java | 2 +- .../jdo/test/domain/sql/SStoreProducts.java | 2 +- .../test/domain/sql/SStoreProductsbyname.java | 2 +- .../java/com/querydsl/jpa/JPAQueryMixin.java | 4 +- .../test/java/com/querydsl/jpa/QArticle.java | 6 +- .../test/java/com/querydsl/jpa/QContent.java | 6 +- .../test/java/com/querydsl/jpa/QPerson.java | 2 +- .../com/querydsl/jpa/domain/sql/SAccount.java | 2 +- .../com/querydsl/jpa/domain/sql/SAnimal.java | 2 +- .../querydsl/jpa/domain/sql/SAuditlog.java | 2 +- .../com/querydsl/jpa/domain/sql/SAuthor.java | 2 +- .../com/querydsl/jpa/domain/sql/SBar.java | 2 +- .../com/querydsl/jpa/domain/sql/SBook.java | 2 +- .../jpa/domain/sql/SBookBookmarks.java | 2 +- .../com/querydsl/jpa/domain/sql/SBookid.java | 2 +- .../querydsl/jpa/domain/sql/SBookversion.java | 2 +- .../querydsl/jpa/domain/sql/SCalendar.java | 2 +- .../jpa/domain/sql/SCalendarHolidays.java | 2 +- .../com/querydsl/jpa/domain/sql/SCatalog.java | 2 +- .../jpa/domain/sql/SCatalog_price.java | 2 +- .../querydsl/jpa/domain/sql/SCategory.java | 2 +- .../jpa/domain/sql/SCategory_category.java | 2 +- .../domain/sql/SCategory_categoryprop.java | 2 +- .../jpa/domain/sql/SCategoryprop.java | 2 +- .../com/querydsl/jpa/domain/sql/SChild2.java | 2 +- .../com/querydsl/jpa/domain/sql/SCompany.java | 2 +- .../jpa/domain/sql/SCompany_department.java | 2 +- .../querydsl/jpa/domain/sql/SCustomer.java | 2 +- .../querydsl/jpa/domain/sql/SDateTest.java | 2 +- .../querydsl/jpa/domain/sql/SDepartment.java | 2 +- .../jpa/domain/sql/SDepartment_employee.java | 2 +- .../querydsl/jpa/domain/sql/SDocument.java | 2 +- .../querydsl/jpa/domain/sql/SDocument2.java | 2 +- .../jpa/domain/sql/SDocumentprop.java | 2 +- .../querydsl/jpa/domain/sql/SEmployee.java | 2 +- .../jpa/domain/sql/SEmployeeJobFunctions.java | 2 +- .../com/querydsl/jpa/domain/sql/SEntity1.java | 2 +- .../querydsl/jpa/domain/sql/SEviltype.java | 2 +- .../com/querydsl/jpa/domain/sql/SFoo.java | 2 +- .../querydsl/jpa/domain/sql/SFooNames.java | 2 +- .../com/querydsl/jpa/domain/sql/SFormula.java | 2 +- .../jpa/domain/sql/SGeneratedKeys.java | 2 +- .../querydsl/jpa/domain/sql/SHumanHairs.java | 2 +- .../jpa/domain/sql/SInheritedproperties.java | 2 +- .../com/querydsl/jpa/domain/sql/SItem.java | 2 +- .../jpa/domain/sql/SItem_statuschange.java | 2 +- .../com/querydsl/jpa/domain/sql/SKittens.java | 2 +- .../querydsl/jpa/domain/sql/SKittensSet.java | 2 +- .../com/querydsl/jpa/domain/sql/SLibrary.java | 2 +- .../querydsl/jpa/domain/sql/SLineItems.java | 2 +- .../querydsl/jpa/domain/sql/SLocation.java | 2 +- .../com/querydsl/jpa/domain/sql/SMammal.java | 2 +- .../com/querydsl/jpa/domain/sql/SName.java | 2 +- .../jpa/domain/sql/SNameListNames.java | 2 +- .../com/querydsl/jpa/domain/sql/SNamed.java | 2 +- .../querydsl/jpa/domain/sql/SNamelist.java | 2 +- .../querydsl/jpa/domain/sql/SNationality.java | 2 +- .../com/querydsl/jpa/domain/sql/SNumeric.java | 2 +- .../com/querydsl/jpa/domain/sql/SOrder.java | 2 +- .../sql/SOrderDeliveredItemIndices.java | 2 +- .../querydsl/jpa/domain/sql/SOrder_item.java | 2 +- .../querydsl/jpa/domain/sql/SParameter.java | 2 +- .../com/querydsl/jpa/domain/sql/SParent.java | 2 +- .../com/querydsl/jpa/domain/sql/SParent2.java | 2 +- .../com/querydsl/jpa/domain/sql/SPerson.java | 2 +- .../querydsl/jpa/domain/sql/SPersonid.java | 2 +- .../com/querydsl/jpa/domain/sql/SPlayer.java | 2 +- .../jpa/domain/sql/SPlayerScores.java | 2 +- .../com/querydsl/jpa/domain/sql/SPrice.java | 2 +- .../com/querydsl/jpa/domain/sql/SShapes.java | 2 +- .../com/querydsl/jpa/domain/sql/SShow.java | 2 +- .../querydsl/jpa/domain/sql/SShowActs.java | 2 +- .../querydsl/jpa/domain/sql/SSimpletypes.java | 2 +- .../com/querydsl/jpa/domain/sql/SStatus.java | 2 +- .../jpa/domain/sql/SStatuschange.java | 2 +- .../com/querydsl/jpa/domain/sql/SStore.java | 2 +- .../jpa/domain/sql/SStore_customer.java | 2 +- .../com/querydsl/jpa/domain/sql/SSurvey.java | 2 +- .../com/querydsl/jpa/domain/sql/STest.java | 2 +- .../querydsl/jpa/domain/sql/STimeTest.java | 2 +- .../com/querydsl/jpa/domain/sql/SUser.java | 2 +- .../com/querydsl/jpa/domain/sql/SUser2.java | 2 +- .../jpa/domain/sql/SUser2_userprop.java | 2 +- .../querydsl/jpa/domain/sql/SUserprop.java | 2 +- .../jpa/domain/sql/SUserprop_category.java | 2 +- .../domain/sql/SUserprop_categoryprop.java | 2 +- .../com/querydsl/jpa/domain/sql/SWorld.java | 2 +- .../querydsl/jpa/domain/sql/SWorldMammal.java | 2 +- .../querydsl/mongodb/MongodbSerializer.java | 4 +- .../main/java/com/querydsl/mongodb/Point.java | 2 +- .../mongodb/morphia/MorphiaSerializer.java | 2 +- .../com/querydsl/scala/EntitySerializer.scala | 2 +- .../main/scala/com/querydsl/scala/Paths.scala | 74 +++++++++---------- .../scala/com/querydsl/scala/sql/Paths.scala | 2 +- .../com/querydsl/scala/sql/Serializers.scala | 2 +- .../querydsl/scala/EntitySerializerTest.scala | 2 +- .../scala/com/querydsl/scala/QPerson.scala | 2 +- .../src/test/scala/test/QEmployee.scala | 2 +- .../src/test/scala/test/QSurvey.scala | 2 +- .../jts/path/JTSGeometryCollectionPath.java | 6 +- .../spatial/jts/path/JTSGeometryPath.java | 6 +- .../spatial/jts/path/JTSLineStringPath.java | 6 +- .../spatial/jts/path/JTSLinearRingPath.java | 6 +- .../jts/path/JTSMultiLineStringPath.java | 6 +- .../spatial/jts/path/JTSMultiPointPath.java | 6 +- .../spatial/jts/path/JTSMultiPolygonPath.java | 6 +- .../spatial/jts/path/JTSPointPath.java | 6 +- .../spatial/jts/path/JTSPolygonPath.java | 6 +- .../spatial/path/GeometryCollectionPath.java | 6 +- .../querydsl/spatial/path/GeometryPath.java | 6 +- .../querydsl/spatial/path/LineStringPath.java | 6 +- .../querydsl/spatial/path/LinearRingPath.java | 6 +- .../spatial/path/MultiLineStringPath.java | 6 +- .../querydsl/spatial/path/MultiPointPath.java | 6 +- .../spatial/path/MultiPolygonPath.java | 6 +- .../com/querydsl/spatial/path/PointPath.java | 6 +- .../querydsl/spatial/path/PolygonPath.java | 6 +- .../spatial/path/PolyhedralSurfacePath.java | 6 +- .../querydsl/sql/spatial/QSpatialRefSys.java | 2 +- .../sql/spatial/RelationalPathSpatial.java | 2 +- .../com/querydsl/sql/spatial/QShapes.java | 2 +- .../com/querydsl/sql/RelationalPathBase.java | 2 +- .../java/com/querydsl/sql/SQLSerializer.java | 2 +- .../com/querydsl/sql/KeywordQuotingBase.java | 2 +- .../java/com/querydsl/sql/QBean2Test.java | 2 +- .../java/com/querydsl/sql/QCompanies.java | 2 +- .../test/java/com/querydsl/sql/QPerson.java | 2 +- .../com/querydsl/sql/domain/QDateTest.java | 2 +- .../com/querydsl/sql/domain/QEmployee.java | 2 +- .../querydsl/sql/domain/QEmployeeNoPK.java | 2 +- .../com/querydsl/sql/domain/QNumberTest.java | 2 +- .../java/com/querydsl/sql/domain/QSurvey.java | 2 +- .../com/querydsl/sql/domain/QSurveyNoPK.java | 2 +- .../java/com/querydsl/sql/domain/QTest_.java | 2 +- .../java/com/querydsl/sql/domain/QUuids.java | 2 +- .../com/querydsl/sql/domain/QXmlTest.java | 2 +- 232 files changed, 440 insertions(+), 438 deletions(-) diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java index 7d248f3542..c5a228e73e 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java @@ -13,13 +13,16 @@ */ package com.querydsl.codegen; -import javax.annotation.Generated; -import javax.inject.Inject; -import javax.inject.Named; +import static com.mysema.codegen.Symbols.*; + import java.io.IOException; import java.lang.annotation.Annotation; import java.util.*; +import javax.annotation.Generated; +import javax.inject.Inject; +import javax.inject.Named; + import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Lists; @@ -30,7 +33,6 @@ import com.querydsl.core.types.expr.ComparableExpression; import com.querydsl.core.types.expr.SimpleExpression; import com.querydsl.core.types.path.*; -import static com.mysema.codegen.Symbols.*; /** * EntitySerializer is a {@link Serializer} implementation for entity types @@ -42,7 +44,7 @@ public class EntitySerializer implements Serializer { private static final Joiner JOINER = Joiner.on("\", \""); - private static final Parameter PATH_METADATA = new Parameter("metadata", new ClassType(PathMetadata.class, (Type)null)); + private static final Parameter PATH_METADATA = new Parameter("metadata", new ClassType(PathMetadata.class)); private static final Parameter PATH_INITS = new Parameter("inits", new ClassType(PathInits.class)); diff --git a/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java b/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java index 5d61696325..4e52751292 100644 --- a/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java +++ b/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java @@ -30,7 +30,7 @@ public Point(Path parent, String property) { super(Double[].class, parent, property); } - public Point(PathMetadata metadata) { + public Point(PathMetadata metadata) { super(Double[].class, metadata); } diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java b/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java index ad30812fb6..347c9d10e7 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java @@ -19,7 +19,7 @@ public QCar(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QCar(PathMetadata metadata) { + public QCar(PathMetadata metadata) { super(Car.class, metadata); } diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java b/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java index ff55adbfa6..b32b38d4e0 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java @@ -14,7 +14,7 @@ public QPerson(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QPerson(PathMetadata metadata) { + public QPerson(PathMetadata metadata) { super(Person.class, metadata); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java b/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java index f17207c8a1..dd8ad43205 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java @@ -46,37 +46,37 @@ public class DefaultPathFactory implements PathFactory { @Override - public Path createArrayPath(Class arrayType, PathMetadata metadata) { + public Path createArrayPath(Class arrayType, PathMetadata metadata) { return new ArrayPath(arrayType, metadata); } @Override - public Path createBooleanPath(PathMetadata metadata) { + public Path createBooleanPath(PathMetadata metadata) { return new BooleanPath(metadata); } @Override - public Path> createCollectionPath(Class elementType, PathMetadata metadata) { + public Path> createCollectionPath(Class elementType, PathMetadata metadata) { return new CollectionPath>(elementType, (Class)EntityPathBase.class, metadata); } @Override - public > Path createComparablePath( Class type, PathMetadata metadata) { + public > Path createComparablePath( Class type, PathMetadata metadata) { return new ComparablePath(type, metadata); } @Override - public > Path createDatePath(Class type, PathMetadata metadata) { + public > Path createDatePath(Class type, PathMetadata metadata) { return new DatePath(type, metadata); } @Override - public > Path createDateTimePath(Class type, PathMetadata metadata) { + public > Path createDateTimePath(Class type, PathMetadata metadata) { return new DateTimePath(type, metadata); } @Override - public Path createEntityPath(Class type, PathMetadata metadata) { + public Path createEntityPath(Class type, PathMetadata metadata) { if (Comparable.class.isAssignableFrom(type)) { return new ComparableEntityPath(type, metadata); } else { @@ -85,41 +85,41 @@ public Path createEntityPath(Class type, PathMetadata metadata) { } @Override - public > Path createEnumPath( Class type, PathMetadata metadata) { + public > Path createEnumPath( Class type, PathMetadata metadata) { return new EnumPath(type, metadata); } @Override - public Path> createListPath(Class elementType, PathMetadata metadata) { + public Path> createListPath(Class elementType, PathMetadata metadata) { return new ListPath>(elementType, (Class)EntityPathBase.class, metadata); } @Override - public Path> createMapPath(Class keyType, Class valueType, PathMetadata metadata) { + public Path> createMapPath(Class keyType, Class valueType, PathMetadata metadata) { return new MapPath>(keyType, valueType, (Class)EntityPathBase.class, metadata); } @Override - public > Path createNumberPath(Class type, PathMetadata metadata) { + public > Path createNumberPath(Class type, PathMetadata metadata) { return new NumberPath(type, metadata); } @Override - public Path> createSetPath(Class elementType, PathMetadata metadata) { + public Path> createSetPath(Class elementType, PathMetadata metadata) { return new SetPath>(elementType, (Class)EntityPathBase.class, metadata); } @Override - public Path createSimplePath(Class type, PathMetadata metadata) { + public Path createSimplePath(Class type, PathMetadata metadata) { return new SimplePath(type, metadata); } @Override - public Path createStringPath(PathMetadata metadata) { + public Path createStringPath(PathMetadata metadata) { return new StringPath(metadata); } @Override - public > Path createTimePath(Class type, PathMetadata metadata) { + public > Path createTimePath(Class type, PathMetadata metadata) { return new TimePath(type, metadata); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/PathFactory.java b/querydsl-core/src/main/java/com/querydsl/core/alias/PathFactory.java index 647cb99d8b..726198b90b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/PathFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/PathFactory.java @@ -34,96 +34,96 @@ public interface PathFactory { * @param metadata * @return */ - Path createArrayPath(Class type, PathMetadata metadata); + Path createArrayPath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - Path createEntityPath(Class type, PathMetadata metadata); + Path createEntityPath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - Path createSimplePath(Class type, PathMetadata metadata); + Path createSimplePath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - > Path createComparablePath(Class type, PathMetadata metadata); + > Path createComparablePath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - > Path createEnumPath(Class type, PathMetadata metadata); + > Path createEnumPath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - > Path createDatePath(Class type, PathMetadata metadata); + > Path createDatePath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - > Path createTimePath(Class type, PathMetadata metadata); + > Path createTimePath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - > Path createDateTimePath(Class type, PathMetadata metadata); + > Path createDateTimePath(Class type, PathMetadata metadata); /** * @param type * @param metadata * @return */ - > Path createNumberPath(Class type, PathMetadata metadata); + > Path createNumberPath(Class type, PathMetadata metadata); /** * @param metadata * @return */ - Path createBooleanPath(PathMetadata metadata); + Path createBooleanPath(PathMetadata metadata); /** * @param metadata * @return */ - Path createStringPath(PathMetadata metadata); + Path createStringPath(PathMetadata metadata); /** * @param elementType * @param metadata * @return */ - Path> createListPath(Class elementType, PathMetadata metadata); + Path> createListPath(Class elementType, PathMetadata metadata); /** * @param elementType * @param metadata * @return */ - Path> createSetPath(Class elementType, PathMetadata metadata); + Path> createSetPath(Class elementType, PathMetadata metadata); /** * @param elementType * @param metadata * @return */ - Path> createCollectionPath(Class elementType, PathMetadata metadata); + Path> createCollectionPath(Class elementType, PathMetadata metadata); /** * @param keyType @@ -131,5 +131,5 @@ public interface PathFactory { * @param metadata * @return */ - Path> createMapPath(Class keyType, Class valueType, PathMetadata metadata); + Path> createMapPath(Class keyType, Class valueType, PathMetadata metadata); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java b/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java index 549c5ce892..583e924f89 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java @@ -84,7 +84,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy if (propToObj.containsKey(ptyName)) { rv = propToObj.get(ptyName); } else { - PathMetadata pm = createPropertyPath((Path) hostExpression, ptyName); + PathMetadata pm = createPropertyPath((Path) hostExpression, ptyName); rv = newInstance(ptyClass, genericType, proxy, ptyName, pm); } aliasFactory.setCurrent(propToExpr.get(ptyName)); @@ -97,7 +97,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy if (propToObj.containsKey(ptyName)) { rv = propToObj.get(ptyName); } else { - PathMetadata pm = createPropertyPath((Path) hostExpression, ptyName); + PathMetadata pm = createPropertyPath((Path) hostExpression, ptyName); rv = newInstance(ptyClass, genericType, proxy, ptyName, pm); } aliasFactory.setCurrent(propToExpr.get(ptyName)); @@ -108,7 +108,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy if (propToObj.containsKey(propKey)) { rv = propToObj.get(propKey); } else { - PathMetadata pm = createListAccessPath((Path) hostExpression, (Integer) args[0]); + PathMetadata pm = createListAccessPath((Path) hostExpression, (Integer) args[0]); Class elementType = ((ParametrizedExpression) hostExpression).getParameter(0); rv = newInstance(elementType, elementType, proxy, propKey, pm); } @@ -119,7 +119,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy if (propToObj.containsKey(propKey)) { rv = propToObj.get(propKey); } else { - PathMetadata pm = createMapAccessPath((Path)hostExpression, args[0]); + PathMetadata pm = createMapAccessPath((Path)hostExpression, args[0]); Class valueType = ((ParametrizedExpression) hostExpression).getParameter(1); rv = newInstance(valueType, valueType, proxy, propKey, pm); } @@ -145,7 +145,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy @SuppressWarnings({ "unchecked"}) @Nullable protected T newInstance(Class type, Type genericType, Object parent, Object propKey, - PathMetadata metadata) { + PathMetadata metadata) { Expression path; Object rv; @@ -260,15 +260,15 @@ protected String propertyNameForGetter(Method method) { return BeanUtils.uncapitalize(name); } - protected PathMetadata createPropertyPath(Path path, String propertyName) { + protected PathMetadata createPropertyPath(Path path, String propertyName) { return PathMetadataFactory.forProperty(path, propertyName); } - protected PathMetadata createListAccessPath(Path path, Integer index) { + protected PathMetadata createListAccessPath(Path path, Integer index) { return PathMetadataFactory.forListAccess(path, index); } - protected PathMetadata createMapAccessPath(Path path, Object key) { + protected PathMetadata createMapAccessPath(Path path, Object key) { return PathMetadataFactory.forMapAccess(path, key); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java index ffb583c20f..5436162a21 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java @@ -41,7 +41,7 @@ public class CollectionAnyVisitor implements Visitor,Context> { @SuppressWarnings("rawtypes") private static Path replaceParent(Path path, Path parent) { - PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), + PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), path.getMetadata().getPathType()); if (path instanceof CollectionExpression) { CollectionExpression col = (CollectionExpression)path; diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java index d4b2761580..dc80b91107 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ListAccessVisitor.java @@ -61,7 +61,7 @@ private static final class UnderscoreTemplates extends Templates { @SuppressWarnings("unchecked") private static Path replaceParent(Path path, Path parent) { - PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), + PathMetadata metadata = new PathMetadata(parent, path.getMetadata().getElement(), path.getMetadata().getPathType()); return new PathImpl(path.getType(), metadata); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Path.java b/querydsl-core/src/main/java/com/querydsl/core/types/Path.java index 03b43d6249..96a3744b70 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Path.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Path.java @@ -27,7 +27,7 @@ public interface Path extends Expression { * * @return */ - PathMetadata getMetadata(); + PathMetadata getMetadata(); /** * Get the root for this path diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java index a31ec0ef28..f28abb875b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathImpl.java @@ -32,7 +32,7 @@ public class PathImpl extends ExpressionBase implements Path { private static final long serialVersionUID = -2498447742798348162L; - private final PathMetadata metadata; + private final PathMetadata metadata; private final Path root; @@ -43,7 +43,7 @@ public PathImpl(Class type, String variable) { this(type, PathMetadataFactory.forVariable(variable)); } - public PathImpl(Class type, PathMetadata metadata) { + public PathImpl(Class type, PathMetadata metadata) { super(type); this.metadata = metadata; this.root = metadata.getRootPath() != null ? metadata.getRootPath() : this; @@ -65,7 +65,7 @@ public final boolean equals(Object o) { } @Override - public final PathMetadata getMetadata() { + public final PathMetadata getMetadata() { return metadata; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java index 5bbe807209..aad7fc8159 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadata.java @@ -26,7 +26,7 @@ * @author tiwe */ @Immutable -public final class PathMetadata implements Serializable{ +public final class PathMetadata implements Serializable{ private static final long serialVersionUID = -1055994185028970065L; @@ -51,8 +51,8 @@ public PathMetadata(@Nullable Path parent, Object element, PathType type) { public boolean equals(Object obj) { if (obj == this) { return true; - } else if (obj instanceof PathMetadata) { - PathMetadata p = (PathMetadata) obj; + } else if (obj instanceof PathMetadata) { + PathMetadata p = (PathMetadata) obj; return element.equals(p.element) && pathType == p.pathType && Objects.equal(parent, p.parent); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadataFactory.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadataFactory.java index f0352df4ff..5d2c14fc87 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadataFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathMetadataFactory.java @@ -30,8 +30,8 @@ public final class PathMetadataFactory { * @param index * @return */ - public static PathMetadata forArrayAccess(Path parent, Expression index) { - return new PathMetadata(parent, index, PathType.ARRAYVALUE); + public static PathMetadata forArrayAccess(Path parent, Expression index) { + return new PathMetadata(parent, index, PathType.ARRAYVALUE); } /** @@ -41,8 +41,8 @@ public static PathMetadata forArrayAccess(Path parent, Expression forArrayAccess(Path parent, @Nonnegative int index) { - return new PathMetadata(parent, index, PathType.ARRAYVALUE_CONSTANT); + public static PathMetadata forArrayAccess(Path parent, @Nonnegative int index) { + return new PathMetadata(parent, index, PathType.ARRAYVALUE_CONSTANT); } /** @@ -51,8 +51,8 @@ public static PathMetadata forArrayAccess(Path parent, @Nonnegative * @param parent * @return */ - public static PathMetadata forCollectionAny(Path parent) { - return new PathMetadata(parent, "", PathType.COLLECTION_ANY); + public static PathMetadata forCollectionAny(Path parent) { + return new PathMetadata(parent, "", PathType.COLLECTION_ANY); } /** @@ -61,8 +61,8 @@ public static PathMetadata forCollectionAny(Path parent) { * @param delegate * @return */ - public static PathMetadata forDelegate(Path delegate) { - return new PathMetadata(delegate, delegate, PathType.DELEGATE); + public static PathMetadata forDelegate(Path delegate) { + return new PathMetadata(delegate, delegate, PathType.DELEGATE); } /** @@ -72,8 +72,8 @@ public static PathMetadata forDelegate(Path delegate) { * @param index * @return */ - public static PathMetadata forListAccess(Path parent, Expression index) { - return new PathMetadata(parent, index, PathType.LISTVALUE); + public static PathMetadata forListAccess(Path parent, Expression index) { + return new PathMetadata(parent, index, PathType.LISTVALUE); } /** @@ -83,8 +83,8 @@ public static PathMetadata forListAccess(Path parent, Expression forListAccess(Path parent, @Nonnegative int index) { - return new PathMetadata(parent, index, PathType.LISTVALUE_CONSTANT); + public static PathMetadata forListAccess(Path parent, @Nonnegative int index) { + return new PathMetadata(parent, index, PathType.LISTVALUE_CONSTANT); } /** @@ -94,8 +94,8 @@ public static PathMetadata forListAccess(Path parent, @Nonnegative i * @param key * @return */ - public static PathMetadata forMapAccess(Path parent, Expression key) { - return new PathMetadata(parent, key, PathType.MAPVALUE); + public static PathMetadata forMapAccess(Path parent, Expression key) { + return new PathMetadata(parent, key, PathType.MAPVALUE); } /** @@ -105,8 +105,8 @@ public static PathMetadata forMapAccess(Path parent, Expression * @param key * @return */ - public static PathMetadata forMapAccess(Path parent, KT key) { - return new PathMetadata(parent, key, PathType.MAPVALUE_CONSTANT); + public static PathMetadata forMapAccess(Path parent, KT key) { + return new PathMetadata(parent, key, PathType.MAPVALUE_CONSTANT); } /** @@ -116,8 +116,8 @@ public static PathMetadata forMapAccess(Path parent, KT key) { * @param property * @return */ - public static PathMetadata forProperty(Path parent, String property) { - return new PathMetadata(parent, property, PathType.PROPERTY); + public static PathMetadata forProperty(Path parent, String property) { + return new PathMetadata(parent, property, PathType.PROPERTY); } /** @@ -126,8 +126,8 @@ public static PathMetadata forProperty(Path parent, String property) * @param variable * @return */ - public static PathMetadata forVariable(String variable) { - return new PathMetadata(null, variable, PathType.VARIABLE); + public static PathMetadata forVariable(String variable) { + return new PathMetadata(null, variable, PathType.VARIABLE); } private PathMetadataFactory() {} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java index e8968ab708..4d03489ef3 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java @@ -59,7 +59,7 @@ public ArrayPath(Class type, Path parent, String property) { } @SuppressWarnings("unchecked") - public ArrayPath(Class type, PathMetadata metadata) { + public ArrayPath(Class type, PathMetadata metadata) { super(new PathImpl((Class)type, metadata)); this.pathMixin = (PathImpl)mixin; this.componentType = Primitives.wrap((Class)type.getComponentType()); @@ -77,7 +77,7 @@ public final R accept(Visitor v, C context) { * @return */ public SimplePath get(Expression index) { - PathMetadata md = PathMetadataFactory.forArrayAccess(pathMixin, index); + PathMetadata md = PathMetadataFactory.forArrayAccess(pathMixin, index); return new SimplePath(componentType, md); } @@ -88,7 +88,7 @@ public SimplePath get(Expression index) { * @return */ public SimplePath get(@Nonnegative int index) { - PathMetadata md = PathMetadataFactory.forArrayAccess(pathMixin, index); + PathMetadata md = PathMetadataFactory.forArrayAccess(pathMixin, index); return new SimplePath(componentType, md); } @@ -97,7 +97,7 @@ public Class getElementType() { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java index 9c73c3a914..e7ff5a8d5a 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java @@ -59,11 +59,11 @@ public BeanPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property), null); } - public BeanPath(Class type, PathMetadata metadata) { + public BeanPath(Class type, PathMetadata metadata) { this(type, metadata, null); } - public BeanPath(Class type, PathMetadata metadata, @Nullable PathInits inits) { + public BeanPath(Class type, PathMetadata metadata, @Nullable PathInits inits) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; this.inits = inits; @@ -86,7 +86,7 @@ public final R accept(Visitor v, C context) { public > U as(Class clazz) { try { if (!casts.containsKey(clazz)) { - PathMetadata metadata; + PathMetadata metadata; if (pathMixin.getMetadata().getPathType() != PathType.COLLECTION_ANY) { metadata = PathMetadataFactory.forDelegate(pathMixin); } else { @@ -306,12 +306,12 @@ protected TimePath createTime(String property, Class((Class) type, forProperty(property))); } - protected PathMetadata forProperty(String property) { + protected PathMetadata forProperty(String property) { return PathMetadataFactory.forProperty(this, property); } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java index abbedb1164..981c52853a 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java @@ -39,7 +39,7 @@ public BooleanPath(Path parent, String property) { this(PathMetadataFactory.forProperty(parent, property)); } - public BooleanPath(PathMetadata metadata) { + public BooleanPath(PathMetadata metadata) { super(new PathImpl(Boolean.class, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java index 2d3fe9d63e..296e7b7394 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java @@ -54,12 +54,12 @@ public CollectionPath(Class type, Class queryType, Path parent, this(type, queryType, PathMetadataFactory.forProperty(parent, property)); } - public CollectionPath(Class type, Class queryType, PathMetadata metadata) { + public CollectionPath(Class type, Class queryType, PathMetadata metadata) { this(type, queryType, metadata, PathInits.DIRECT); } @SuppressWarnings("unchecked") - public CollectionPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { + public CollectionPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { super(new PathImpl>((Class)Collection.class, metadata), inits); this.elementType = (Class)type; this.queryType = queryType; @@ -84,7 +84,7 @@ public Class getElementType() { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java index cc1710e762..bfa1577aa8 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java @@ -54,7 +54,7 @@ public CollectionPathBase(PathImpl mixin, PathInits inits) { public abstract Q any(); @SuppressWarnings("unchecked") - protected Q newInstance(Class queryType, PathMetadata pm) { + protected Q newInstance(Class queryType, PathMetadata pm) { try{ if (constructor == null) { if (Constants.isTyped(queryType)) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java index 3dcee13a11..1d484916fd 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java @@ -33,7 +33,7 @@ public ComparableEntityPath(Class type, Path parent, String prop super(type, parent, property); } - public ComparableEntityPath(Class type, PathMetadata metadata) { + public ComparableEntityPath(Class type, PathMetadata metadata) { super(type, metadata); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java index fb7254b5ca..d2a4dd72a6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java @@ -41,7 +41,7 @@ public ComparablePath(Class type, Path parent, String property) this(type, PathMetadataFactory.forProperty(parent, property)); } - public ComparablePath(Class type, PathMetadata metadata) { + public ComparablePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -56,7 +56,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java index cd37f4cabc..73cb48fb95 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java @@ -40,7 +40,7 @@ public DatePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public DatePath(Class type, PathMetadata metadata) { + public DatePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -55,7 +55,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java index e6e0063199..909effb30c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java @@ -39,7 +39,7 @@ public DateTimePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public DateTimePath(Class type, PathMetadata metadata) { + public DateTimePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java index 45052408c8..91d2a06269 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java @@ -39,7 +39,7 @@ public DslPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public DslPath(Class type, PathMetadata metadata) { + public DslPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java index 598160af8f..9d0911bfaa 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java @@ -34,11 +34,11 @@ public EntityPathBase(Class type, String variable) { super(type, variable); } - public EntityPathBase(Class type, PathMetadata metadata) { + public EntityPathBase(Class type, PathMetadata metadata) { super(type, metadata); } - public EntityPathBase(Class type, PathMetadata metadata, @Nullable PathInits inits) { + public EntityPathBase(Class type, PathMetadata metadata, @Nullable PathInits inits) { super(type, metadata, inits); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java index bce1741995..65123d6ed1 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java @@ -39,7 +39,7 @@ public EnumPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public EnumPath(Class type, PathMetadata metadata) { + public EnumPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java index a1aba9f3e7..e8215a3032 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java @@ -60,12 +60,12 @@ public ListPath(Class elementType, Class queryType, Path parent this(elementType, queryType, PathMetadataFactory.forProperty(parent, property)); } - public ListPath(Class elementType, Class queryType, PathMetadata metadata) { + public ListPath(Class elementType, Class queryType, PathMetadata metadata) { this(elementType, queryType, metadata, PathInits.DIRECT); } @SuppressWarnings("unchecked") - public ListPath(Class elementType, Class queryType, PathMetadata metadata, PathInits inits) { + public ListPath(Class elementType, Class queryType, PathMetadata metadata, PathInits inits) { super(new PathImpl>((Class)List.class, metadata), inits); this.elementType = (Class)elementType; this.queryType = queryType; @@ -85,22 +85,22 @@ public Q any() { return any; } - protected PathMetadata forListAccess(int index) { + protected PathMetadata forListAccess(int index) { return PathMetadataFactory.forListAccess(this, index); } - protected PathMetadata forListAccess(Expression index) { + protected PathMetadata forListAccess(Expression index) { return PathMetadataFactory.forListAccess(this, index); } private Q create(int index) { - PathMetadata md = forListAccess(index); + PathMetadata md = forListAccess(index); return newInstance(queryType, md); } @Override public Q get(Expression index) { - PathMetadata md = forListAccess(index); + PathMetadata md = forListAccess(index); return newInstance(queryType, md); } @@ -121,7 +121,7 @@ public Class getElementType() { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java index 2f323258b7..f0475cdff8 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java @@ -62,7 +62,7 @@ public MapPath(Class keyType, Class valueType, Class qu } @SuppressWarnings("unchecked") - public MapPath(Class keyType, Class valueType, Class queryType, PathMetadata metadata) { + public MapPath(Class keyType, Class valueType, Class queryType, PathMetadata metadata) { super(new PathImpl>((Class)Map.class, metadata)); this.keyType = (Class) keyType; this.valueType = (Class) valueType; @@ -75,18 +75,18 @@ public final R accept(Visitor v, C context) { return v.visit(pathMixin, context); } - protected PathMetadata forMapAccess(K key) { + protected PathMetadata forMapAccess(K key) { return PathMetadataFactory.forMapAccess(this, key); } - protected PathMetadata forMapAccess(Expression key) { + protected PathMetadata forMapAccess(Expression key) { return PathMetadataFactory.forMapAccess(this, key); } @Override public E get(Expression key) { try { - PathMetadata md = forMapAccess(key); + PathMetadata md = forMapAccess(key); return newInstance(md); } catch (NoSuchMethodException e) { throw new ExpressionException(e); @@ -102,7 +102,7 @@ public E get(Expression key) { @Override public E get(K key) { try { - PathMetadata md = forMapAccess(key); + PathMetadata md = forMapAccess(key); return newInstance(md); } catch (NoSuchMethodException e) { throw new ExpressionException(e); @@ -120,7 +120,7 @@ public Class getKeyType() { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } @@ -138,7 +138,7 @@ public AnnotatedElement getAnnotatedElement() { return pathMixin.getAnnotatedElement(); } - private E newInstance(PathMetadata pm) throws NoSuchMethodException, + private E newInstance(PathMetadata pm) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException { if (constructor == null) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java index 14b31ede08..ff70cd0083 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java @@ -39,7 +39,7 @@ public NumberPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public NumberPath(Class type, PathMetadata metadata) { + public NumberPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java index 2e71840185..45ba007437 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java @@ -57,7 +57,7 @@ public class PathBuilder extends EntityPathBase { * @param pathMetadata * @param validator */ - public PathBuilder(Class type, PathMetadata pathMetadata, PathBuilderValidator validator) { + public PathBuilder(Class type, PathMetadata pathMetadata, PathBuilderValidator validator) { super(type, pathMetadata); this.validator = validator; } @@ -68,7 +68,7 @@ public PathBuilder(Class type, PathMetadata pathMetadata, PathBu * @param type * @param pathMetadata */ - public PathBuilder(Class type, PathMetadata pathMetadata) { + public PathBuilder(Class type, PathMetadata pathMetadata) { this(type, pathMetadata, PathBuilderValidator.DEFAULT); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java index 597f502d1a..888ba5404c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java @@ -54,12 +54,12 @@ public SetPath(Class type, Class queryType, Path parent, String this(type, queryType, PathMetadataFactory.forProperty(parent, property)); } - public SetPath(Class type, Class queryType, PathMetadata metadata) { + public SetPath(Class type, Class queryType, PathMetadata metadata) { this(type, queryType, metadata, PathInits.DIRECT); } @SuppressWarnings("unchecked") - public SetPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { + public SetPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { super(new PathImpl>((Class)Set.class, metadata), inits); this.elementType = (Class)type; this.queryType = queryType; @@ -84,7 +84,7 @@ public Class getElementType() { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java index f59b67c007..c03fa19fe3 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java @@ -39,7 +39,7 @@ public SimplePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public SimplePath(Class type, PathMetadata metadata) { + public SimplePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public SimplePath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java index bf00711478..b30f0b3ae6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java @@ -38,7 +38,7 @@ public StringPath(Path parent, String property) { this(PathMetadataFactory.forProperty(parent, property)); } - public StringPath(PathMetadata metadata) { + public StringPath(PathMetadata metadata) { super(new PathImpl(String.class, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -53,7 +53,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java index f1c7816c7e..1f84c536b2 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java @@ -39,7 +39,7 @@ public TimePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public TimePath(Class type, PathMetadata metadata) { + public TimePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -54,7 +54,7 @@ public final R accept(Visitor v, C context) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java b/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java index 621158bc23..5829816022 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java @@ -76,7 +76,7 @@ public QDefaultQueryMetadata(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QDefaultQueryMetadata(PathMetadata metadata) { + public QDefaultQueryMetadata(PathMetadata metadata) { super(DefaultQueryMetadata.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/alias/PathFactoryTest.java b/querydsl-core/src/test/java/com/querydsl/core/alias/PathFactoryTest.java index 1aae90763e..0506c8dc3a 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/alias/PathFactoryTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/alias/PathFactoryTest.java @@ -34,7 +34,7 @@ public class PathFactoryTest { private PathFactory pathFactory = new DefaultPathFactory(); - private PathMetadata metadata = PathMetadataFactory.forVariable("var"); + private PathMetadata metadata = PathMetadataFactory.forVariable("var"); @Test public void CreateArrayPath() { diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java index 2c1add4fcc..24f657a3c2 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java @@ -41,7 +41,7 @@ public QAbstractEntity(BeanPath> entity) { super(entity.getType(), entity.getMetadata()); } - public QAbstractEntity(PathMetadata metadata) { + public QAbstractEntity(PathMetadata metadata) { super(AbstractEntity.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java index 569cba9b93..889908eef3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java @@ -54,7 +54,7 @@ public QAnimal(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QAnimal(PathMetadata metadata) { + public QAnimal(PathMetadata metadata) { super(Animal.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java index d8e0c93f60..bc92576f68 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java @@ -71,15 +71,15 @@ public QCat(String variable) { this(Cat.class, forVariable(variable), INITS); } - public QCat(PathMetadata metadata) { + public QCat(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCat(PathMetadata metadata, PathInits inits) { + public QCat(PathMetadata metadata, PathInits inits) { this(Cat.class, metadata, inits); } - public QCat(Class type, PathMetadata metadata, PathInits inits) { + public QCat(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.mate = inits.isInitialized("mate") ? new QCat(forProperty("mate"), inits.get("mate")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java index dc7e939963..928d607788 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java @@ -45,7 +45,7 @@ public QCommonIdentifiable(BeanPath metadata) { + public QCommonIdentifiable(PathMetadata metadata) { super((Class)CommonIdentifiable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java index 735ba0e2ad..060a2d07ba 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java @@ -32,7 +32,7 @@ public QCommonPersistence(BeanPath entity) { super(entity.getType(),entity.getMetadata()); } - public QCommonPersistence(PathMetadata metadata) { + public QCommonPersistence(PathMetadata metadata) { super(CommonPersistence.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java index 5e23223bbb..40d43129cc 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java @@ -26,15 +26,15 @@ public QCompany(String variable) { this(Company.class, forVariable(variable), INITS); } - public QCompany(PathMetadata metadata) { + public QCompany(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCompany(PathMetadata metadata, PathInits inits) { + public QCompany(PathMetadata metadata, PathInits inits) { this(Company.class, metadata, inits); } - public QCompany(Class type, PathMetadata metadata, PathInits inits) { + public QCompany(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QCompanyPK(forProperty("key")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java index 70ff1fccd3..94365dd764 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java @@ -28,15 +28,15 @@ public QCompanyGroup(String variable) { this(CompanyGroup.class, forVariable(variable), INITS); } - public QCompanyGroup(PathMetadata metadata) { + public QCompanyGroup(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCompanyGroup(PathMetadata metadata, PathInits inits) { + public QCompanyGroup(PathMetadata metadata, PathInits inits) { this(CompanyGroup.class, metadata, inits); } - public QCompanyGroup(Class type, PathMetadata metadata, PathInits inits) { + public QCompanyGroup(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QCompanyGroupPK(forProperty("key")) : null; this.mainCompany = inits.isInitialized("mainCompany") ? new QCompany(forProperty("mainCompany"), inits.get("mainCompany")) : null; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java index f6ca288e5b..91c068f769 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java @@ -30,7 +30,7 @@ public QCompanyGroupPK(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QCompanyGroupPK(PathMetadata metadata) { + public QCompanyGroupPK(PathMetadata metadata) { super(CompanyGroupPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java index 1b60d9f534..bbf6734c51 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java @@ -28,7 +28,7 @@ public QCompanyPK(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QCompanyPK(PathMetadata metadata) { + public QCompanyPK(PathMetadata metadata) { super(CompanyPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java index c0dec6c535..578b42a02b 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java @@ -32,7 +32,7 @@ public QIdNamePair(Path> entity) { } @SuppressWarnings("unchecked") - public QIdNamePair(PathMetadata metadata) { + public QIdNamePair(PathMetadata metadata) { super((Class)IdNamePair.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java index 2f0a6f40f1..f47993ee74 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java @@ -41,7 +41,7 @@ public QMyEmbeddable(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QMyEmbeddable(PathMetadata metadata) { + public QMyEmbeddable(PathMetadata metadata) { super(MyEmbeddable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java index eb20eb5ec9..628ed9255d 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java @@ -40,7 +40,7 @@ public QSuperSupertype(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QSuperSupertype(PathMetadata metadata) { + public QSuperSupertype(PathMetadata metadata) { super(SuperSupertype.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java index a820b9a7be..6e1da41da9 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java @@ -28,7 +28,7 @@ public QSuperclass(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QSuperclass(PathMetadata metadata) { + public QSuperclass(PathMetadata metadata) { super(Superclass.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java index c4bd673e51..639e6265e4 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java @@ -42,7 +42,7 @@ public QAbstractEntity(BeanPath> entity) { super(entity.getType(), entity.getMetadata()); } - public QAbstractEntity(PathMetadata metadata) { + public QAbstractEntity(PathMetadata metadata) { super(AbstractEntity.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java index 4b969c92f9..e5d9040a16 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java @@ -55,7 +55,7 @@ public QAnimal(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QAnimal(PathMetadata metadata) { + public QAnimal(PathMetadata metadata) { super(Animal.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCat.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCat.java index 6739ffd3c7..cb994b4ff3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCat.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCat.java @@ -72,15 +72,15 @@ public QCat(String variable) { this(Cat.class, forVariable(variable), INITS); } - public QCat(PathMetadata metadata) { + public QCat(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCat(PathMetadata metadata, PathInits inits) { + public QCat(PathMetadata metadata, PathInits inits) { this(Cat.class, metadata, inits); } - public QCat(Class type, PathMetadata metadata, PathInits inits) { + public QCat(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.mate = inits.isInitialized("mate") ? new QCat(forProperty("mate"), inits.get("mate")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonIdentifiable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonIdentifiable.java index c9206f90fc..5dd3cdcf46 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonIdentifiable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonIdentifiable.java @@ -48,7 +48,7 @@ public QCommonIdentifiable(BeanPath metadata) { + public QCommonIdentifiable(PathMetadata metadata) { super((Class)CommonIdentifiable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonPersistence.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonPersistence.java index 1a29d96ca2..8c92c57fa2 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonPersistence.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCommonPersistence.java @@ -33,7 +33,7 @@ public QCommonPersistence(BeanPath entity) { super(entity.getType(),entity.getMetadata()); } - public QCommonPersistence(PathMetadata metadata) { + public QCommonPersistence(PathMetadata metadata) { super(CommonPersistence.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompany.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompany.java index a712b0651d..f0f17798aa 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompany.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompany.java @@ -27,15 +27,15 @@ public QCompany(String variable) { this(Company.class, forVariable(variable), INITS); } - public QCompany(PathMetadata metadata) { + public QCompany(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCompany(PathMetadata metadata, PathInits inits) { + public QCompany(PathMetadata metadata, PathInits inits) { this(Company.class, metadata, inits); } - public QCompany(Class type, PathMetadata metadata, PathInits inits) { + public QCompany(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QCompanyPK(forProperty("key")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroup.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroup.java index 66d8e07391..7d97131941 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroup.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroup.java @@ -29,15 +29,15 @@ public QCompanyGroup(String variable) { this(CompanyGroup.class, forVariable(variable), INITS); } - public QCompanyGroup(PathMetadata metadata) { + public QCompanyGroup(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCompanyGroup(PathMetadata metadata, PathInits inits) { + public QCompanyGroup(PathMetadata metadata, PathInits inits) { this(CompanyGroup.class, metadata, inits); } - public QCompanyGroup(Class type, PathMetadata metadata, PathInits inits) { + public QCompanyGroup(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QCompanyGroupPK(forProperty("key")) : null; this.mainCompany = inits.isInitialized("mainCompany") ? new QCompany(forProperty("mainCompany"), inits.get("mainCompany")) : null; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroupPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroupPK.java index 800bb0a07d..8936f3f63f 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroupPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyGroupPK.java @@ -31,7 +31,7 @@ public QCompanyGroupPK(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QCompanyGroupPK(PathMetadata metadata) { + public QCompanyGroupPK(PathMetadata metadata) { super(CompanyGroupPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyPK.java index c0bfa6ff21..b27544937e 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QCompanyPK.java @@ -29,7 +29,7 @@ public QCompanyPK(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QCompanyPK(PathMetadata metadata) { + public QCompanyPK(PathMetadata metadata) { super(CompanyPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QIdNamePair.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QIdNamePair.java index 3e03d6ea4d..2a9a2a91d0 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QIdNamePair.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QIdNamePair.java @@ -36,7 +36,7 @@ public QIdNamePair(Path> entity) { } @SuppressWarnings("unchecked") - public QIdNamePair(PathMetadata metadata) { + public QIdNamePair(PathMetadata metadata) { super((Class)IdNamePair.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QMyEmbeddable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QMyEmbeddable.java index bb3251553f..83b51fa5ad 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QMyEmbeddable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QMyEmbeddable.java @@ -43,7 +43,7 @@ public QMyEmbeddable(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QMyEmbeddable(PathMetadata metadata) { + public QMyEmbeddable(PathMetadata metadata) { super(MyEmbeddable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperSupertype.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperSupertype.java index b6404abdfa..eb16afd183 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperSupertype.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperSupertype.java @@ -41,7 +41,7 @@ public QSuperSupertype(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QSuperSupertype(PathMetadata metadata) { + public QSuperSupertype(PathMetadata metadata) { super(SuperSupertype.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperclass.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperclass.java index 9bae9c8f92..bc502bfc5c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperclass.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QSuperclass.java @@ -30,7 +30,7 @@ public QSuperclass(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QSuperclass(PathMetadata metadata) { + public QSuperclass(PathMetadata metadata) { super(Superclass.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAbstractEntityType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAbstractEntityType.java index 0c2f0065c6..aa3703fab5 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAbstractEntityType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAbstractEntityType.java @@ -42,7 +42,7 @@ public QAbstractEntityType(BeanPath> entity) { super(entity.getType(), entity.getMetadata()); } - public QAbstractEntityType(PathMetadata metadata) { + public QAbstractEntityType(PathMetadata metadata) { super(AbstractEntity.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAnimalType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAnimalType.java index d732682294..797524ac54 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAnimalType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QAnimalType.java @@ -55,7 +55,7 @@ public QAnimalType(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QAnimalType(PathMetadata metadata) { + public QAnimalType(PathMetadata metadata) { super(Animal.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCatType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCatType.java index 520fad9fa5..c7749178b2 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCatType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCatType.java @@ -74,15 +74,15 @@ public QCatType(String variable) { this(Cat.class, forVariable(variable), INITS); } - public QCatType(PathMetadata metadata) { + public QCatType(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCatType(PathMetadata metadata, PathInits inits) { + public QCatType(PathMetadata metadata, PathInits inits) { this(Cat.class, metadata, inits); } - public QCatType(Class type, PathMetadata metadata, PathInits inits) { + public QCatType(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.mate = inits.isInitialized("mate") ? new QCatType(forProperty("mate"), inits.get("mate")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonIdentifiableType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonIdentifiableType.java index 66f8d2f107..e03df82cc1 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonIdentifiableType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonIdentifiableType.java @@ -51,7 +51,7 @@ public QCommonIdentifiableType(BeanPath metadata) { + public QCommonIdentifiableType(PathMetadata metadata) { super((Class)CommonIdentifiable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonPersistenceType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonPersistenceType.java index c747c7af5b..92277f17fe 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonPersistenceType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCommonPersistenceType.java @@ -33,7 +33,7 @@ public QCommonPersistenceType(BeanPath entity) { super(entity.getType(),entity.getMetadata()); } - public QCommonPersistenceType(PathMetadata metadata) { + public QCommonPersistenceType(PathMetadata metadata) { super(CommonPersistence.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupPKType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupPKType.java index 88d3789778..29c2252ed3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupPKType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupPKType.java @@ -34,7 +34,7 @@ public QCompanyGroupPKType(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QCompanyGroupPKType(PathMetadata metadata) { + public QCompanyGroupPKType(PathMetadata metadata) { super(CompanyGroupPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupType.java index 18c19e0d90..6860a81f9c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyGroupType.java @@ -32,15 +32,15 @@ public QCompanyGroupType(String variable) { this(CompanyGroup.class, forVariable(variable), INITS); } - public QCompanyGroupType(PathMetadata metadata) { + public QCompanyGroupType(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCompanyGroupType(PathMetadata metadata, PathInits inits) { + public QCompanyGroupType(PathMetadata metadata, PathInits inits) { this(CompanyGroup.class, metadata, inits); } - public QCompanyGroupType(Class type, PathMetadata metadata, PathInits inits) { + public QCompanyGroupType(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QCompanyGroupPK(forProperty("key")) : null; this.mainCompany = inits.isInitialized("mainCompany") ? new QCompany(forProperty("mainCompany"), inits.get("mainCompany")) : null; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyPKType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyPKType.java index 245cb5c48f..eab3155daa 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyPKType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyPKType.java @@ -31,7 +31,7 @@ public QCompanyPKType(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QCompanyPKType(PathMetadata metadata) { + public QCompanyPKType(PathMetadata metadata) { super(CompanyPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyType.java index 5b2315f7e3..5f2ca5e472 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QCompanyType.java @@ -29,15 +29,15 @@ public QCompanyType(String variable) { this(Company.class, forVariable(variable), INITS); } - public QCompanyType(PathMetadata metadata) { + public QCompanyType(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QCompanyType(PathMetadata metadata, PathInits inits) { + public QCompanyType(PathMetadata metadata, PathInits inits) { this(Company.class, metadata, inits); } - public QCompanyType(Class type, PathMetadata metadata, PathInits inits) { + public QCompanyType(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QCompanyPK(forProperty("key")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QIdNamePairType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QIdNamePairType.java index 9b60ee242d..e9dc98773f 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QIdNamePairType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QIdNamePairType.java @@ -36,7 +36,7 @@ public QIdNamePairType(Path> entity) { } @SuppressWarnings("unchecked") - public QIdNamePairType(PathMetadata metadata) { + public QIdNamePairType(PathMetadata metadata) { super((Class)IdNamePair.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QMyEmbeddableType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QMyEmbeddableType.java index 703b8e7a79..0a7bf815f5 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QMyEmbeddableType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QMyEmbeddableType.java @@ -43,7 +43,7 @@ public QMyEmbeddableType(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QMyEmbeddableType(PathMetadata metadata) { + public QMyEmbeddableType(PathMetadata metadata) { super(MyEmbeddable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperSupertypeType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperSupertypeType.java index d011eb07f0..acd49777a2 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperSupertypeType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperSupertypeType.java @@ -43,7 +43,7 @@ public QSuperSupertypeType(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QSuperSupertypeType(PathMetadata metadata) { + public QSuperSupertypeType(PathMetadata metadata) { super(SuperSupertype.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperclassType.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperclassType.java index de35135dee..b765eb5be5 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperclassType.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query2/QSuperclassType.java @@ -34,7 +34,7 @@ public QSuperclassType(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QSuperclassType(PathMetadata metadata) { + public QSuperclassType(PathMetadata metadata) { super(Superclass.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAbstractEntity.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAbstractEntity.java index d4a393925a..5d8aed902c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAbstractEntity.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAbstractEntity.java @@ -42,7 +42,7 @@ public QTAbstractEntity(BeanPath> entity) { super(entity.getType(), entity.getMetadata()); } - public QTAbstractEntity(PathMetadata metadata) { + public QTAbstractEntity(PathMetadata metadata) { super(AbstractEntity.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAnimal.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAnimal.java index 9176b529c1..75563c0eef 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAnimal.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTAnimal.java @@ -55,7 +55,7 @@ public QTAnimal(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QTAnimal(PathMetadata metadata) { + public QTAnimal(PathMetadata metadata) { super(Animal.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCat.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCat.java index f9a916a83a..8d08372484 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCat.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCat.java @@ -73,15 +73,15 @@ public QTCat(String variable) { this(Cat.class, forVariable(variable), INITS); } - public QTCat(PathMetadata metadata) { + public QTCat(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QTCat(PathMetadata metadata, PathInits inits) { + public QTCat(PathMetadata metadata, PathInits inits) { this(Cat.class, metadata, inits); } - public QTCat(Class type, PathMetadata metadata, PathInits inits) { + public QTCat(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.mate = inits.isInitialized("mate") ? new QTCat(forProperty("mate"), inits.get("mate")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonIdentifiable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonIdentifiable.java index 29b620d526..be92b0956e 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonIdentifiable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonIdentifiable.java @@ -51,7 +51,7 @@ public QTCommonIdentifiable(BeanPath metadata) { + public QTCommonIdentifiable(PathMetadata metadata) { super((Class)CommonIdentifiable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonPersistence.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonPersistence.java index 7636220e9e..2dd7fef2cc 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonPersistence.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCommonPersistence.java @@ -33,7 +33,7 @@ public QTCommonPersistence(BeanPath entity) { super(entity.getType(),entity.getMetadata()); } - public QTCommonPersistence(PathMetadata metadata) { + public QTCommonPersistence(PathMetadata metadata) { super(CommonPersistence.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompany.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompany.java index a178446e49..fa016ff1ed 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompany.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompany.java @@ -28,15 +28,15 @@ public QTCompany(String variable) { this(Company.class, forVariable(variable), INITS); } - public QTCompany(PathMetadata metadata) { + public QTCompany(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QTCompany(PathMetadata metadata, PathInits inits) { + public QTCompany(PathMetadata metadata, PathInits inits) { this(Company.class, metadata, inits); } - public QTCompany(Class type, PathMetadata metadata, PathInits inits) { + public QTCompany(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QTCompanyPK(forProperty("key")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroup.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroup.java index 2e271bb544..92870c3b88 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroup.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroup.java @@ -30,15 +30,15 @@ public QTCompanyGroup(String variable) { this(CompanyGroup.class, forVariable(variable), INITS); } - public QTCompanyGroup(PathMetadata metadata) { + public QTCompanyGroup(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QTCompanyGroup(PathMetadata metadata, PathInits inits) { + public QTCompanyGroup(PathMetadata metadata, PathInits inits) { this(CompanyGroup.class, metadata, inits); } - public QTCompanyGroup(Class type, PathMetadata metadata, PathInits inits) { + public QTCompanyGroup(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.key = inits.isInitialized("key") ? new QTCompanyGroupPK(forProperty("key")) : null; this.mainCompany = inits.isInitialized("mainCompany") ? new QTCompany(forProperty("mainCompany"), inits.get("mainCompany")) : null; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroupPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroupPK.java index ea58a7f753..6e09a0a8d7 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroupPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyGroupPK.java @@ -34,7 +34,7 @@ public QTCompanyGroupPK(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QTCompanyGroupPK(PathMetadata metadata) { + public QTCompanyGroupPK(PathMetadata metadata) { super(CompanyGroupPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyPK.java index 0237b0c8cf..1c881676a1 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTCompanyPK.java @@ -31,7 +31,7 @@ public QTCompanyPK(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QTCompanyPK(PathMetadata metadata) { + public QTCompanyPK(PathMetadata metadata) { super(CompanyPK.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTIdNamePair.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTIdNamePair.java index 84387430e6..992b50fda8 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTIdNamePair.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTIdNamePair.java @@ -36,7 +36,7 @@ public QTIdNamePair(Path> entity) { } @SuppressWarnings("unchecked") - public QTIdNamePair(PathMetadata metadata) { + public QTIdNamePair(PathMetadata metadata) { super((Class)IdNamePair.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTMyEmbeddable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTMyEmbeddable.java index 98c14b22b7..c652faf4a5 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTMyEmbeddable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTMyEmbeddable.java @@ -43,7 +43,7 @@ public QTMyEmbeddable(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QTMyEmbeddable(PathMetadata metadata) { + public QTMyEmbeddable(PathMetadata metadata) { super(MyEmbeddable.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperSupertype.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperSupertype.java index 947fe62380..8ef5342b0c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperSupertype.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperSupertype.java @@ -43,7 +43,7 @@ public QTSuperSupertype(BeanPath entity) { super(entity.getType(), entity.getMetadata()); } - public QTSuperSupertype(PathMetadata metadata) { + public QTSuperSupertype(PathMetadata metadata) { super(SuperSupertype.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperclass.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperclass.java index b17a45df7a..168d081786 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperclass.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query3/QTSuperclass.java @@ -33,7 +33,7 @@ public QTSuperclass(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QTSuperclass(PathMetadata metadata) { + public QTSuperclass(PathMetadata metadata) { super(Superclass.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain2/QABase.java b/querydsl-core/src/test/java/com/querydsl/core/domain2/QABase.java index 5753922dce..5685ac89ab 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain2/QABase.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain2/QABase.java @@ -28,15 +28,15 @@ public QABase(String variable) { this(ABase.class, forVariable(variable), INITS); } - public QABase(PathMetadata metadata) { + public QABase(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QABase(PathMetadata metadata, PathInits inits) { + public QABase(PathMetadata metadata, PathInits inits) { this(ABase.class, metadata, inits); } - public QABase(Class type, PathMetadata metadata, PathInits inits) { + public QABase(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.tenant = inits.isInitialized("tenant") ? new QTenantImpl(forProperty("tenant")) : null; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain2/QAImpl.java b/querydsl-core/src/test/java/com/querydsl/core/domain2/QAImpl.java index b3f8154cec..a0b7d9bd15 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain2/QAImpl.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain2/QAImpl.java @@ -36,15 +36,15 @@ public QAImpl(Path entity) { this(entity.getType(), entity.getMetadata(), INITS); } - public QAImpl(PathMetadata metadata) { + public QAImpl(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QAImpl(PathMetadata metadata, PathInits inits) { + public QAImpl(PathMetadata metadata, PathInits inits) { this(AImpl.class, metadata, inits); } - public QAImpl(Class type, PathMetadata metadata, PathInits inits) { + public QAImpl(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this._super = new QABase(type, metadata, inits); this.id = _super.id; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain2/QTenantImpl.java b/querydsl-core/src/test/java/com/querydsl/core/domain2/QTenantImpl.java index 01de8c6f3f..bbf6469a98 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain2/QTenantImpl.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain2/QTenantImpl.java @@ -26,7 +26,7 @@ public QTenantImpl(Path entity) { super(entity.getType(), entity.getMetadata()); } - public QTenantImpl(PathMetadata metadata) { + public QTenantImpl(PathMetadata metadata) { super(TenantImpl.class, metadata); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java index 3e56ff52af..fbb0bcbe76 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java @@ -37,11 +37,11 @@ public static class MyBeanPath extends BeanPath{ private static final long serialVersionUID = 6225684967115368814L; - public MyBeanPath(PathMetadata metadata) { + public MyBeanPath(PathMetadata metadata) { super(BeanPathTest.class, metadata); } - public MyBeanPath(PathMetadata metadata, @Nullable PathInits inits) { + public MyBeanPath(PathMetadata metadata, @Nullable PathInits inits) { super(BeanPathTest.class, metadata); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java index 0b5ad1e236..0c1211de83 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QBook.java @@ -53,7 +53,7 @@ public QBook(Class cl, String path) super(cl, PathMetadataFactory.forVariable(path)); } - public QBook(PathMetadata metadata) { + public QBook(PathMetadata metadata) { super(com.querydsl.jdo.test.domain.Book.class, metadata); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java index 96c65f164c..fb2f1bcebe 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QProduct.java @@ -53,7 +53,7 @@ public QProduct(Class cl, String super(cl, PathMetadataFactory.forVariable(path)); } - public QProduct(PathMetadata metadata) { + public QProduct(PathMetadata metadata) { super(com.querydsl.jdo.test.domain.Product.class, metadata); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java index b8d4cf2723..8c1c596e93 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/QStore.java @@ -52,7 +52,7 @@ public QStore(Class cl, String path) { super(cl, PathMetadataFactory.forVariable(path)); } - public QStore(PathMetadata metadata) { + public QStore(PathMetadata metadata) { super(Store.class, metadata); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java index c635b39282..cb8fdd7fd5 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SBook.java @@ -53,7 +53,7 @@ public SBook(BeanPath entity) { super(entity.getType(),entity.getMetadata(), "", "BOOK"); } - public SBook(PathMetadata metadata) { + public SBook(PathMetadata metadata) { super(SBook.class, metadata, "", "BOOK"); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java index 3ace67d68b..ebb1e7afe9 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SProduct.java @@ -66,7 +66,7 @@ public SProduct(BeanPath entity) { addMetadata(); } - public SProduct(PathMetadata metadata) { + public SProduct(PathMetadata metadata) { super(SProduct.class, metadata, "", "PRODUCT"); addMetadata(); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java index 046c0c7025..a6dfc6746a 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStore.java @@ -51,7 +51,7 @@ public SStore(BeanPath entity) { super(entity.getType(),entity.getMetadata(), "", "STORE"); } - public SStore(PathMetadata metadata) { + public SStore(PathMetadata metadata) { super(SStore.class, metadata, "", "STORE"); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java index ea2792ff3b..a6f082bbf4 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProducts.java @@ -52,7 +52,7 @@ public SStoreProducts(BeanPath entity) { super(entity.getType(),entity.getMetadata(), "", "STORE_PRODUCTS"); } - public SStoreProducts(PathMetadata metadata) { + public SStoreProducts(PathMetadata metadata) { super(SStoreProducts.class, metadata, "", "STORE_PRODUCTS"); } diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java index 81689a5fb3..9be2b9236f 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/test/domain/sql/SStoreProductsbyname.java @@ -53,7 +53,7 @@ public SStoreProductsbyname(BeanPath entity) { super(entity.getType(),entity.getMetadata(), "", "STORE_PRODUCTSBYNAME"); } - public SStoreProductsbyname(PathMetadata metadata) { + public SStoreProductsbyname(PathMetadata metadata) { super(SStoreProductsbyname.class, metadata, "", "STORE_PRODUCTSBYNAME"); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index f915876af5..17ae00d240 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -106,7 +106,7 @@ private Class getElementTypeOrType(Path path) { } private Path shorten(Path path, List> paths) { - PathMetadata metadata = path.getMetadata(); + PathMetadata metadata = path.getMetadata(); if (metadata.isRoot() || paths.contains(path)) { return path; } else if (aliases.containsKey(path)) { @@ -138,7 +138,7 @@ private Path shorten(Path path, List> paths) { } private Path convertPathForOrder(Path path) { - PathMetadata metadata = path.getMetadata(); + PathMetadata metadata = path.getMetadata(); // at least three levels if (metadata.getParent() != null && !metadata.getParent().getMetadata().isRoot()) { Set> exprs = Sets.newHashSet(); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/QArticle.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/QArticle.java index 30c9f82d8c..e078737dc3 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/QArticle.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/QArticle.java @@ -36,15 +36,15 @@ public QArticle(Path path) { this(path.getType(), path.getMetadata(), path.getMetadata().isRoot() ? INITS : PathInits.DEFAULT); } - public QArticle(PathMetadata metadata) { + public QArticle(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QArticle(PathMetadata metadata, PathInits inits) { + public QArticle(PathMetadata metadata, PathInits inits) { this(Article.class, metadata, inits); } - public QArticle(Class type, PathMetadata metadata, PathInits inits) { + public QArticle(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.author = inits.isInitialized("author") ? new QPerson(forProperty("author")) : null; this.content = inits.isInitialized("content") ? new QContent(forProperty("content"), inits.get("content")) : null; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/QContent.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/QContent.java index 82ee50eae3..3f61eaf1e2 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/QContent.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/QContent.java @@ -32,15 +32,15 @@ public QContent(Path path) { this(path.getType(), path.getMetadata(), path.getMetadata().isRoot() ? INITS : PathInits.DEFAULT); } - public QContent(PathMetadata metadata) { + public QContent(PathMetadata metadata) { this(metadata, metadata.isRoot() ? INITS : PathInits.DEFAULT); } - public QContent(PathMetadata metadata, PathInits inits) { + public QContent(PathMetadata metadata, PathInits inits) { this(Content.class, metadata, inits); } - public QContent(Class type, PathMetadata metadata, PathInits inits) { + public QContent(Class type, PathMetadata metadata, PathInits inits) { super(type, metadata, inits); this.article = inits.isInitialized("article") ? new QArticle(forProperty("article"), inits.get("article")) : null; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/QPerson.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/QPerson.java index ca20569dd2..7950b8f4a4 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/QPerson.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/QPerson.java @@ -31,7 +31,7 @@ public QPerson(Path path) { super(path.getType(), path.getMetadata()); } - public QPerson(PathMetadata metadata) { + public QPerson(PathMetadata metadata) { super(Person.class, metadata); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAccount.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAccount.java index c891a1d0a3..d6337c14b9 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAccount.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAccount.java @@ -45,7 +45,7 @@ public SAccount(Path path) { addMetadata(); } - public SAccount(PathMetadata metadata) { + public SAccount(PathMetadata metadata) { super(SAccount.class, metadata, "", "account_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAnimal.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAnimal.java index 87811592dc..73eebe1195 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAnimal.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAnimal.java @@ -78,7 +78,7 @@ public SAnimal(Path path) { addMetadata(); } - public SAnimal(PathMetadata metadata) { + public SAnimal(PathMetadata metadata) { super(SAnimal.class, metadata, "", "animal_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuditlog.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuditlog.java index dc08ecc5bb..4004e2a922 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuditlog.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuditlog.java @@ -42,7 +42,7 @@ public SAuditlog(Path path) { addMetadata(); } - public SAuditlog(PathMetadata metadata) { + public SAuditlog(PathMetadata metadata) { super(SAuditlog.class, metadata, "", "auditlog_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuthor.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuthor.java index 7f9db252f7..2f74f37425 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuthor.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SAuthor.java @@ -43,7 +43,7 @@ public SAuthor(Path path) { addMetadata(); } - public SAuthor(PathMetadata metadata) { + public SAuthor(PathMetadata metadata) { super(SAuthor.class, metadata, "", "author_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBar.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBar.java index db338b0f20..361b85fd5f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBar.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBar.java @@ -41,7 +41,7 @@ public SBar(Path path) { addMetadata(); } - public SBar(PathMetadata metadata) { + public SBar(PathMetadata metadata) { super(SBar.class, metadata, "", "bar_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBook.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBook.java index a1c21e15bb..7bca90fe53 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBook.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBook.java @@ -47,7 +47,7 @@ public SBook(Path path) { addMetadata(); } - public SBook(PathMetadata metadata) { + public SBook(PathMetadata metadata) { super(SBook.class, metadata, "", "book_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookBookmarks.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookBookmarks.java index 74bec0320f..c7f11f6726 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookBookmarks.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookBookmarks.java @@ -50,7 +50,7 @@ public SBookBookmarks(Path path) { addMetadata(); } - public SBookBookmarks(PathMetadata metadata) { + public SBookBookmarks(PathMetadata metadata) { super(SBookBookmarks.class, metadata, "", "book_bookmarks"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookid.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookid.java index 983a0fab35..45e44a312f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookid.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookid.java @@ -40,7 +40,7 @@ public SBookid(Path path) { addMetadata(); } - public SBookid(PathMetadata metadata) { + public SBookid(PathMetadata metadata) { super(SBookid.class, metadata, "", "bookid_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookversion.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookversion.java index 41c48d5ca6..31204c05a8 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookversion.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SBookversion.java @@ -52,7 +52,7 @@ public SBookversion(Path path) { addMetadata(); } - public SBookversion(PathMetadata metadata) { + public SBookversion(PathMetadata metadata) { super(SBookversion.class, metadata, "", "bookversion_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendar.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendar.java index 91bc34f34c..f033d3eb98 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendar.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendar.java @@ -42,7 +42,7 @@ public SCalendar(Path path) { addMetadata(); } - public SCalendar(PathMetadata metadata) { + public SCalendar(PathMetadata metadata) { super(SCalendar.class, metadata, "", "calendar_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendarHolidays.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendarHolidays.java index c4dd9f8701..c3052ed586 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendarHolidays.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCalendarHolidays.java @@ -46,7 +46,7 @@ public SCalendarHolidays(Path path) { addMetadata(); } - public SCalendarHolidays(PathMetadata metadata) { + public SCalendarHolidays(PathMetadata metadata) { super(SCalendarHolidays.class, metadata, "", "Calendar_holidays"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog.java index e163d6d214..d697a41308 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog.java @@ -43,7 +43,7 @@ public SCatalog(Path path) { addMetadata(); } - public SCatalog(PathMetadata metadata) { + public SCatalog(PathMetadata metadata) { super(SCatalog.class, metadata, "", "catalog_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog_price.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog_price.java index 3963308281..ef1d490056 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog_price.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCatalog_price.java @@ -44,7 +44,7 @@ public SCatalog_price(Path path) { addMetadata(); } - public SCatalog_price(PathMetadata metadata) { + public SCatalog_price(PathMetadata metadata) { super(SCatalog_price.class, metadata, "", "catalog__price_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory.java index 51a4a6a99a..30600d2d6e 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory.java @@ -64,7 +64,7 @@ public SCategory(Path path) { addMetadata(); } - public SCategory(PathMetadata metadata) { + public SCategory(PathMetadata metadata) { super(SCategory.class, metadata, "", "category_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_category.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_category.java index 5d2274ff81..9f3a705720 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_category.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_category.java @@ -44,7 +44,7 @@ public SCategory_category(Path path) { addMetadata(); } - public SCategory_category(PathMetadata metadata) { + public SCategory_category(PathMetadata metadata) { super(SCategory_category.class, metadata, "", "category__category_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_categoryprop.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_categoryprop.java index 773ff75f5b..8d0f916a07 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_categoryprop.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategory_categoryprop.java @@ -44,7 +44,7 @@ public SCategory_categoryprop(Path path) { addMetadata(); } - public SCategory_categoryprop(PathMetadata metadata) { + public SCategory_categoryprop(PathMetadata metadata) { super(SCategory_categoryprop.class, metadata, "", "category__categoryprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategoryprop.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategoryprop.java index 14fba33f12..e9033be60f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategoryprop.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCategoryprop.java @@ -49,7 +49,7 @@ public SCategoryprop(Path path) { addMetadata(); } - public SCategoryprop(PathMetadata metadata) { + public SCategoryprop(PathMetadata metadata) { super(SCategoryprop.class, metadata, "", "categoryprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SChild2.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SChild2.java index e5c3617b4e..bed1b9b306 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SChild2.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SChild2.java @@ -42,7 +42,7 @@ public SChild2(Path path) { addMetadata(); } - public SChild2(PathMetadata metadata) { + public SChild2(PathMetadata metadata) { super(SChild2.class, metadata, "", "Child2"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany.java index 628e98b69b..187604dc22 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany.java @@ -57,7 +57,7 @@ public SCompany(Path path) { addMetadata(); } - public SCompany(PathMetadata metadata) { + public SCompany(PathMetadata metadata) { super(SCompany.class, metadata, "", "company_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany_department.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany_department.java index e9aa36981e..65d76df88e 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany_department.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCompany_department.java @@ -42,7 +42,7 @@ public SCompany_department(Path path) { addMetadata(); } - public SCompany_department(PathMetadata metadata) { + public SCompany_department(PathMetadata metadata) { super(SCompany_department.class, metadata, "", "company__department_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCustomer.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCustomer.java index ccaf0dd314..83a83084e4 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCustomer.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SCustomer.java @@ -50,7 +50,7 @@ public SCustomer(Path path) { addMetadata(); } - public SCustomer(PathMetadata metadata) { + public SCustomer(PathMetadata metadata) { super(SCustomer.class, metadata, "", "customer_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDateTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDateTest.java index 8272573d31..23e406ed77 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDateTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDateTest.java @@ -36,7 +36,7 @@ public SDateTest(Path path) { addMetadata(); } - public SDateTest(PathMetadata metadata) { + public SDateTest(PathMetadata metadata) { super(SDateTest.class, metadata, "", "DATE_TEST"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment.java index 7898ffd25f..d1e7f172a6 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment.java @@ -49,7 +49,7 @@ public SDepartment(Path path) { addMetadata(); } - public SDepartment(PathMetadata metadata) { + public SDepartment(PathMetadata metadata) { super(SDepartment.class, metadata, "", "department_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment_employee.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment_employee.java index 475fd0f268..b7042b7ffe 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment_employee.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDepartment_employee.java @@ -42,7 +42,7 @@ public SDepartment_employee(Path path) { addMetadata(); } - public SDepartment_employee(PathMetadata metadata) { + public SDepartment_employee(PathMetadata metadata) { super(SDepartment_employee.class, metadata, "", "department__employee_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument.java index 53231b4ade..76fbff39aa 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument.java @@ -44,7 +44,7 @@ public SDocument(Path path) { addMetadata(); } - public SDocument(PathMetadata metadata) { + public SDocument(PathMetadata metadata) { super(SDocument.class, metadata, "", "document_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument2.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument2.java index 755043a16b..662e22e1b5 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument2.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocument2.java @@ -64,7 +64,7 @@ public SDocument2(Path path) { addMetadata(); } - public SDocument2(PathMetadata metadata) { + public SDocument2(PathMetadata metadata) { super(SDocument2.class, metadata, "", "document2_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocumentprop.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocumentprop.java index 5da744a301..772eb15fc5 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocumentprop.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SDocumentprop.java @@ -47,7 +47,7 @@ public SDocumentprop(Path path) { addMetadata(); } - public SDocumentprop(PathMetadata metadata) { + public SDocumentprop(PathMetadata metadata) { super(SDocumentprop.class, metadata, "", "documentprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployee.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployee.java index 232440f0eb..242cb07086 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployee.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployee.java @@ -57,7 +57,7 @@ public SEmployee(Path path) { addMetadata(); } - public SEmployee(PathMetadata metadata) { + public SEmployee(PathMetadata metadata) { super(SEmployee.class, metadata, "", "employee_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployeeJobFunctions.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployeeJobFunctions.java index 4e9efbb60c..7abd4140fc 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployeeJobFunctions.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEmployeeJobFunctions.java @@ -41,7 +41,7 @@ public SEmployeeJobFunctions(Path path) { addMetadata(); } - public SEmployeeJobFunctions(PathMetadata metadata) { + public SEmployeeJobFunctions(PathMetadata metadata) { super(SEmployeeJobFunctions.class, metadata, "", "Employee_jobFunctions"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEntity1.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEntity1.java index e249bcbd64..dd4b9953ef 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEntity1.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEntity1.java @@ -45,7 +45,7 @@ public SEntity1(Path path) { addMetadata(); } - public SEntity1(PathMetadata metadata) { + public SEntity1(PathMetadata metadata) { super(SEntity1.class, metadata, "", "Entity1"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEviltype.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEviltype.java index a6ffc7d11b..3f1dc0a844 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEviltype.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SEviltype.java @@ -116,7 +116,7 @@ public SEviltype(Path path) { addMetadata(); } - public SEviltype(PathMetadata metadata) { + public SEviltype(PathMetadata metadata) { super(SEviltype.class, metadata, "", "eviltype_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFoo.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFoo.java index 4d485725a4..9659abe295 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFoo.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFoo.java @@ -46,7 +46,7 @@ public SFoo(Path path) { addMetadata(); } - public SFoo(PathMetadata metadata) { + public SFoo(PathMetadata metadata) { super(SFoo.class, metadata, "", "foo_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFooNames.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFooNames.java index e89912f246..987b853abe 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFooNames.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFooNames.java @@ -41,7 +41,7 @@ public SFooNames(Path path) { addMetadata(); } - public SFooNames(PathMetadata metadata) { + public SFooNames(PathMetadata metadata) { super(SFooNames.class, metadata, "", "foo_names"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFormula.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFormula.java index a2fd3824e8..e2910c4e03 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFormula.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SFormula.java @@ -42,7 +42,7 @@ public SFormula(Path path) { addMetadata(); } - public SFormula(PathMetadata metadata) { + public SFormula(PathMetadata metadata) { super(SFormula.class, metadata, "", "formula_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SGeneratedKeys.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SGeneratedKeys.java index 17deccce01..ac9070085a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SGeneratedKeys.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SGeneratedKeys.java @@ -41,7 +41,7 @@ public SGeneratedKeys(Path path) { addMetadata(); } - public SGeneratedKeys(PathMetadata metadata) { + public SGeneratedKeys(PathMetadata metadata) { super(SGeneratedKeys.class, metadata, "", "GENERATED_KEYS"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SHumanHairs.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SHumanHairs.java index 8978f70280..8ee05d4c98 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SHumanHairs.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SHumanHairs.java @@ -40,7 +40,7 @@ public SHumanHairs(Path path) { addMetadata(); } - public SHumanHairs(PathMetadata metadata) { + public SHumanHairs(PathMetadata metadata) { super(SHumanHairs.class, metadata, "", "Human_hairs"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SInheritedproperties.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SInheritedproperties.java index 86a4e0bf28..9db029beb0 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SInheritedproperties.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SInheritedproperties.java @@ -45,7 +45,7 @@ public SInheritedproperties(Path path) { addMetadata(); } - public SInheritedproperties(PathMetadata metadata) { + public SInheritedproperties(PathMetadata metadata) { super(SInheritedproperties.class, metadata, "", "inheritedproperties_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem.java index 20f08a79fd..1b945618be 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem.java @@ -69,7 +69,7 @@ public SItem(Path path) { addMetadata(); } - public SItem(PathMetadata metadata) { + public SItem(PathMetadata metadata) { super(SItem.class, metadata, "", "item_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem_statuschange.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem_statuschange.java index b72c7deb7e..31826b8781 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem_statuschange.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SItem_statuschange.java @@ -42,7 +42,7 @@ public SItem_statuschange(Path path) { addMetadata(); } - public SItem_statuschange(PathMetadata metadata) { + public SItem_statuschange(PathMetadata metadata) { super(SItem_statuschange.class, metadata, "", "item__statuschange_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittens.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittens.java index b40e1b35bd..a44f76bcb6 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittens.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittens.java @@ -46,7 +46,7 @@ public SKittens(Path path) { addMetadata(); } - public SKittens(PathMetadata metadata) { + public SKittens(PathMetadata metadata) { super(SKittens.class, metadata, "", "kittens"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittensSet.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittensSet.java index 23ad8912b0..dcf0c34206 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittensSet.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SKittensSet.java @@ -44,7 +44,7 @@ public SKittensSet(Path path) { addMetadata(); } - public SKittensSet(PathMetadata metadata) { + public SKittensSet(PathMetadata metadata) { super(SKittensSet.class, metadata, "", "kittens_set"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLibrary.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLibrary.java index 5ac9526b21..5b77fb1bb0 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLibrary.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLibrary.java @@ -40,7 +40,7 @@ public SLibrary(Path path) { addMetadata(); } - public SLibrary(PathMetadata metadata) { + public SLibrary(PathMetadata metadata) { super(SLibrary.class, metadata, "", "library_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLineItems.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLineItems.java index 8fab219b93..6a21fd4264 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLineItems.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLineItems.java @@ -46,7 +46,7 @@ public SLineItems(Path path) { addMetadata(); } - public SLineItems(PathMetadata metadata) { + public SLineItems(PathMetadata metadata) { super(SLineItems.class, metadata, "", "LineItems"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLocation.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLocation.java index 2f3676e204..ca824c6ff5 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLocation.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SLocation.java @@ -43,7 +43,7 @@ public SLocation(Path path) { addMetadata(); } - public SLocation(PathMetadata metadata) { + public SLocation(PathMetadata metadata) { super(SLocation.class, metadata, "", "location_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SMammal.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SMammal.java index a1fb6e4255..39cbfd2440 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SMammal.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SMammal.java @@ -45,7 +45,7 @@ public SMammal(Path path) { addMetadata(); } - public SMammal(PathMetadata metadata) { + public SMammal(PathMetadata metadata) { super(SMammal.class, metadata, "", "Mammal"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SName.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SName.java index 6864817b25..25bffe7ef7 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SName.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SName.java @@ -47,7 +47,7 @@ public SName(Path path) { addMetadata(); } - public SName(PathMetadata metadata) { + public SName(PathMetadata metadata) { super(SName.class, metadata, "", "name_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNameListNames.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNameListNames.java index 68fd756d0c..0d59fdcc57 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNameListNames.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNameListNames.java @@ -41,7 +41,7 @@ public SNameListNames(Path path) { addMetadata(); } - public SNameListNames(PathMetadata metadata) { + public SNameListNames(PathMetadata metadata) { super(SNameListNames.class, metadata, "", "NameList_names"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamed.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamed.java index 8c30a008de..fb13520636 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamed.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamed.java @@ -41,7 +41,7 @@ public SNamed(Path path) { addMetadata(); } - public SNamed(PathMetadata metadata) { + public SNamed(PathMetadata metadata) { super(SNamed.class, metadata, "", "named_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamelist.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamelist.java index c9ec2b87e5..206afd199b 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamelist.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNamelist.java @@ -40,7 +40,7 @@ public SNamelist(Path path) { addMetadata(); } - public SNamelist(PathMetadata metadata) { + public SNamelist(PathMetadata metadata) { super(SNamelist.class, metadata, "", "namelist_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNationality.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNationality.java index d936b21864..d23717d1fc 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNationality.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNationality.java @@ -44,7 +44,7 @@ public SNationality(Path path) { addMetadata(); } - public SNationality(PathMetadata metadata) { + public SNationality(PathMetadata metadata) { super(SNationality.class, metadata, "", "nationality_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNumeric.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNumeric.java index 03c5c172c7..d614f52505 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNumeric.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SNumeric.java @@ -42,7 +42,7 @@ public SNumeric(Path path) { addMetadata(); } - public SNumeric(PathMetadata metadata) { + public SNumeric(PathMetadata metadata) { super(SNumeric.class, metadata, "", "numeric_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder.java index 86883bf82e..3d3e0ee331 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder.java @@ -53,7 +53,7 @@ public SOrder(Path path) { addMetadata(); } - public SOrder(PathMetadata metadata) { + public SOrder(PathMetadata metadata) { super(SOrder.class, metadata, "", "order_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrderDeliveredItemIndices.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrderDeliveredItemIndices.java index dbf7a0edb5..7cd320bf93 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrderDeliveredItemIndices.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrderDeliveredItemIndices.java @@ -44,7 +44,7 @@ public SOrderDeliveredItemIndices(Path pat addMetadata(); } - public SOrderDeliveredItemIndices(PathMetadata metadata) { + public SOrderDeliveredItemIndices(PathMetadata metadata) { super(SOrderDeliveredItemIndices.class, metadata, "", "Order_deliveredItemIndices"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder_item.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder_item.java index 3840c51772..5083b1fa8f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder_item.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SOrder_item.java @@ -46,7 +46,7 @@ public SOrder_item(Path path) { addMetadata(); } - public SOrder_item(PathMetadata metadata) { + public SOrder_item(PathMetadata metadata) { super(SOrder_item.class, metadata, "", "order__item_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParameter.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParameter.java index ee01a91d82..a650a61bac 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParameter.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParameter.java @@ -40,7 +40,7 @@ public SParameter(Path path) { addMetadata(); } - public SParameter(PathMetadata metadata) { + public SParameter(PathMetadata metadata) { super(SParameter.class, metadata, "", "parameter_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent.java index 69a3182c1b..2be6b2bd92 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent.java @@ -43,7 +43,7 @@ public SParent(Path path) { addMetadata(); } - public SParent(PathMetadata metadata) { + public SParent(PathMetadata metadata) { super(SParent.class, metadata, "", "parent_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent2.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent2.java index ab2b622c49..a487c9f033 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent2.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SParent2.java @@ -40,7 +40,7 @@ public SParent2(Path path) { addMetadata(); } - public SParent2(PathMetadata metadata) { + public SParent2(PathMetadata metadata) { super(SParent2.class, metadata, "", "Parent2"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPerson.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPerson.java index fa6d8124fa..dd5faade4d 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPerson.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPerson.java @@ -54,7 +54,7 @@ public SPerson(Path path) { addMetadata(); } - public SPerson(PathMetadata metadata) { + public SPerson(PathMetadata metadata) { super(SPerson.class, metadata, "", "person_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPersonid.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPersonid.java index af42a0b0ec..227cb6a79a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPersonid.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPersonid.java @@ -45,7 +45,7 @@ public SPersonid(Path path) { addMetadata(); } - public SPersonid(PathMetadata metadata) { + public SPersonid(PathMetadata metadata) { super(SPersonid.class, metadata, "", "personid_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayer.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayer.java index d90e51529a..a347032075 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayer.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayer.java @@ -40,7 +40,7 @@ public SPlayer(Path path) { addMetadata(); } - public SPlayer(PathMetadata metadata) { + public SPlayer(PathMetadata metadata) { super(SPlayer.class, metadata, "", "player_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayerScores.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayerScores.java index 1ed57eef37..f33b3265f3 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayerScores.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPlayerScores.java @@ -40,7 +40,7 @@ public SPlayerScores(Path path) { addMetadata(); } - public SPlayerScores(PathMetadata metadata) { + public SPlayerScores(PathMetadata metadata) { super(SPlayerScores.class, metadata, "", "Player_scores"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPrice.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPrice.java index 28cc145695..4b029b49c9 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPrice.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SPrice.java @@ -46,7 +46,7 @@ public SPrice(Path path) { addMetadata(); } - public SPrice(PathMetadata metadata) { + public SPrice(PathMetadata metadata) { super(SPrice.class, metadata, "", "price_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShapes.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShapes.java index eacf279a55..1474ca0304 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShapes.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShapes.java @@ -41,7 +41,7 @@ public SShapes(Path path) { addMetadata(); } - public SShapes(PathMetadata metadata) { + public SShapes(PathMetadata metadata) { super(SShapes.class, metadata, "", "SHAPES"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShow.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShow.java index 0d71bce783..5ec624a687 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShow.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShow.java @@ -40,7 +40,7 @@ public SShow(Path path) { addMetadata(); } - public SShow(PathMetadata metadata) { + public SShow(PathMetadata metadata) { super(SShow.class, metadata, "", "show_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShowActs.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShowActs.java index c277c27a37..4e0e8e9e89 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShowActs.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SShowActs.java @@ -45,7 +45,7 @@ public SShowActs(Path path) { addMetadata(); } - public SShowActs(PathMetadata metadata) { + public SShowActs(PathMetadata metadata) { super(SShowActs.class, metadata, "", "Show_acts"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSimpletypes.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSimpletypes.java index dc573e8d88..a2eca23a3f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSimpletypes.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSimpletypes.java @@ -74,7 +74,7 @@ public SSimpletypes(Path path) { addMetadata(); } - public SSimpletypes(PathMetadata metadata) { + public SSimpletypes(PathMetadata metadata) { super(SSimpletypes.class, metadata, "", "simpletypes_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatus.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatus.java index 09958d6e7e..60991d8fd6 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatus.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatus.java @@ -45,7 +45,7 @@ public SStatus(Path path) { addMetadata(); } - public SStatus(PathMetadata metadata) { + public SStatus(PathMetadata metadata) { super(SStatus.class, metadata, "", "status_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatuschange.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatuschange.java index e38f5683c5..9a170f0343 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatuschange.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStatuschange.java @@ -43,7 +43,7 @@ public SStatuschange(Path path) { addMetadata(); } - public SStatuschange(PathMetadata metadata) { + public SStatuschange(PathMetadata metadata) { super(SStatuschange.class, metadata, "", "statuschange_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore.java index 982dab2eb2..57364d0a96 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore.java @@ -44,7 +44,7 @@ public SStore(Path path) { addMetadata(); } - public SStore(PathMetadata metadata) { + public SStore(PathMetadata metadata) { super(SStore.class, metadata, "", "store_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore_customer.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore_customer.java index 27e932acf1..006343d6e8 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore_customer.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SStore_customer.java @@ -42,7 +42,7 @@ public SStore_customer(Path path) { addMetadata(); } - public SStore_customer(PathMetadata metadata) { + public SStore_customer(PathMetadata metadata) { super(SStore_customer.class, metadata, "", "store__customer_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSurvey.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSurvey.java index 40f861b079..cf4be83335 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSurvey.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SSurvey.java @@ -43,7 +43,7 @@ public SSurvey(Path path) { addMetadata(); } - public SSurvey(PathMetadata metadata) { + public SSurvey(PathMetadata metadata) { super(SSurvey.class, metadata, "", "SURVEY"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STest.java index 5a64ed3534..8c71bfc4cb 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STest.java @@ -36,7 +36,7 @@ public STest(Path path) { addMetadata(); } - public STest(PathMetadata metadata) { + public STest(PathMetadata metadata) { super(STest.class, metadata, "", "TEST"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STimeTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STimeTest.java index a8390cea51..946ea14a89 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STimeTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/STimeTest.java @@ -36,7 +36,7 @@ public STimeTest(Path path) { addMetadata(); } - public STimeTest(PathMetadata metadata) { + public STimeTest(PathMetadata metadata) { super(STimeTest.class, metadata, "", "TIME_TEST"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser.java index bc73e44a45..94c96f0f50 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser.java @@ -51,7 +51,7 @@ public SUser(Path path) { addMetadata(); } - public SUser(PathMetadata metadata) { + public SUser(PathMetadata metadata) { super(SUser.class, metadata, "", "user_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2.java index 03fd77130a..e8f45b745c 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2.java @@ -64,7 +64,7 @@ public SUser2(Path path) { addMetadata(); } - public SUser2(PathMetadata metadata) { + public SUser2(PathMetadata metadata) { super(SUser2.class, metadata, "", "user2_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2_userprop.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2_userprop.java index c67e44bbe1..cac500aa48 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2_userprop.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUser2_userprop.java @@ -44,7 +44,7 @@ public SUser2_userprop(Path path) { addMetadata(); } - public SUser2_userprop(PathMetadata metadata) { + public SUser2_userprop(PathMetadata metadata) { super(SUser2_userprop.class, metadata, "", "user2__userprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop.java index b83abec21f..f50ea0160f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop.java @@ -62,7 +62,7 @@ public SUserprop(Path path) { addMetadata(); } - public SUserprop(PathMetadata metadata) { + public SUserprop(PathMetadata metadata) { super(SUserprop.class, metadata, "", "userprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_category.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_category.java index a6851b7a2a..3930c6700f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_category.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_category.java @@ -44,7 +44,7 @@ public SUserprop_category(Path path) { addMetadata(); } - public SUserprop_category(PathMetadata metadata) { + public SUserprop_category(PathMetadata metadata) { super(SUserprop_category.class, metadata, "", "userprop__category_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_categoryprop.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_categoryprop.java index 2bdb501842..0aa437f961 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_categoryprop.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SUserprop_categoryprop.java @@ -44,7 +44,7 @@ public SUserprop_categoryprop(Path path) { addMetadata(); } - public SUserprop_categoryprop(PathMetadata metadata) { + public SUserprop_categoryprop(PathMetadata metadata) { super(SUserprop_categoryprop.class, metadata, "", "userprop__categoryprop_"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorld.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorld.java index cd22203298..cfa46a7675 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorld.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorld.java @@ -40,7 +40,7 @@ public SWorld(Path path) { addMetadata(); } - public SWorld(PathMetadata metadata) { + public SWorld(PathMetadata metadata) { super(SWorld.class, metadata, "", "World"); addMetadata(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorldMammal.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorldMammal.java index b8944258e3..b111e015de 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorldMammal.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/domain/sql/SWorldMammal.java @@ -44,7 +44,7 @@ public SWorldMammal(Path path) { addMetadata(); } - public SWorldMammal(PathMetadata metadata) { + public SWorldMammal(PathMetadata metadata) { super(SWorldMammal.class, metadata, "", "World_Mammal"); addMetadata(); } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 9d4a18b51f..455f3ab2c7 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -307,7 +307,7 @@ protected boolean isReference(Path arg) { @Override public String visit(Path expr, Void context) { - PathMetadata metadata = expr.getMetadata(); + PathMetadata metadata = expr.getMetadata(); if (metadata.getParent() != null) { if (metadata.getPathType() == PathType.COLLECTION_ANY) { return visit(metadata.getParent(), context); @@ -319,7 +319,7 @@ public String visit(Path expr, Void context) { return getKeyForPath(expr, metadata); } - protected String getKeyForPath(Path expr, PathMetadata metadata) { + protected String getKeyForPath(Path expr, PathMetadata metadata) { if (expr.getType().equals(ObjectId.class)) { return "_id"; } else { diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java index 1fb6a7e605..b6055fd901 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java @@ -36,7 +36,7 @@ public Point(Path parent, String property) { super(Double[].class, parent, property); } - public Point(PathMetadata metadata) { + public Point(PathMetadata metadata) { super(Double[].class, metadata); } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java index d8c5df3e69..37577b0801 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java @@ -39,7 +39,7 @@ public MorphiaSerializer(Morphia morphia) { } @Override - protected String getKeyForPath(Path expr, PathMetadata metadata) { + protected String getKeyForPath(Path expr, PathMetadata metadata) { if (metadata.getPathType() == PathType.PROPERTY && expr.getAnnotatedElement().isAnnotationPresent(Property.class)) { return expr.getAnnotatedElement().getAnnotation(Property.class).value(); } else { diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala index 57fb6939ed..5ec2b9e7a8 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala @@ -45,7 +45,7 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se LIST->"List", MAP->"Map", NUMERIC->"Number", SET->"Set", SIMPLE->"Simple", STRING->"String", TIME->"Time") - val classHeaderFormat = "%1$s(cl: Class[_ <: %2$s], md: PathMetadata[_]) extends EntityPathImpl[%2$s](cl, md)" + val classHeaderFormat = "%1$s(cl: Class[_ <: %2$s], md: PathMetadata) extends EntityPathImpl[%2$s](cl, md)" var primitives = true diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/Paths.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/Paths.scala index 738cd69448..e041aba73b 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/Paths.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/Paths.scala @@ -31,77 +31,77 @@ import ManifestUtils._ */ object Paths { - type Metadata[X] = PathMetadata[X] + type Metadata = PathMetadata - def array[T <: Array[_]](t: Class[T], md: Metadata[_]) = new ArrayPath[T](t, md) + def array[T <: Array[_]](t: Class[T], md: Metadata) = new ArrayPath[T](t, md) - def dsl[T](t: Class[_ <: T], md: Metadata[_]) = new DslPath[T](t, md) + def dsl[T](t: Class[_ <: T], md: Metadata) = new DslPath[T](t, md) - def simple[T](t: Class[_ <: T], md: Metadata[_]) = new SimplePath[T](t, md) + def simple[T](t: Class[_ <: T], md: Metadata) = new SimplePath[T](t, md) - def entity[T](t: Class[_ <: T], md: Metadata[_]) = new EntityPathImpl[T](t, md) + def entity[T](t: Class[_ <: T], md: Metadata) = new EntityPathImpl[T](t, md) - def collection[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: Metadata[_]) = { + def collection[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: Metadata) = { new CollectionPath[T,Q](t, q, md) } - def set[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: Metadata[_]) = new SetPath[T,Q](t, q, md) + def set[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: Metadata) = new SetPath[T,Q](t, q, md) - def list[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: Metadata[_]) = new ListPath[T,Q](t, q, md) + def list[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: Metadata) = new ListPath[T,Q](t, q, md) - def map[K, V, Q <: Ex[_ >: V]](k: Class[K], v: Class[V], q: Class[Q], md: Metadata[_]) = { + def map[K, V, Q <: Ex[_ >: V]](k: Class[K], v: Class[V], q: Class[Q], md: Metadata) = { new MapPath[K, V, Q](k, v, q, md) } - def comparable[T <: Comparable[_]](t: Class[_ <: T], md: Metadata[_]) = new ComparablePath[T](t, md) + def comparable[T <: Comparable[_]](t: Class[_ <: T], md: Metadata) = new ComparablePath[T](t, md) - def date[T <: Comparable[_]](t: Class[_ <: T], md: Metadata[_]) = new DatePath[T](t, md) + def date[T <: Comparable[_]](t: Class[_ <: T], md: Metadata) = new DatePath[T](t, md) - def dateTime[T <: Comparable[_]](t: Class[_ <: T], md: Metadata[_]) = new DateTimePath[T](t, md) + def dateTime[T <: Comparable[_]](t: Class[_ <: T], md: Metadata) = new DateTimePath[T](t, md) - def time[T <: Comparable[_]](t: Class[_ <: T], md: Metadata[_]) = new TimePath[T](t, md) + def time[T <: Comparable[_]](t: Class[_ <: T], md: Metadata) = new TimePath[T](t, md) - def number[T : Numeric](t: Class[T], md: Metadata[_]) = new NumberPath[T](t, md) + def number[T : Numeric](t: Class[T], md: Metadata) = new NumberPath[T](t, md) - def boolean(md: Metadata[_]) = new BooleanPath(md) + def boolean(md: Metadata) = new BooleanPath(md) - def string(md: Metadata[_]) = new StringPath(md) + def string(md: Metadata) = new StringPath(md) - def enum[T <: Enum[T]](t: Class[T], md: Metadata[_]) = new EnumPath[T](t, md) + def enum[T <: Enum[T]](t: Class[T], md: Metadata) = new EnumPath[T](t, md) def any[T, Q <: Ex[_ >: T]](parent: Path[_], t: Class[T], q: Class[Q]): Q = create(t, q, forCollectionAny(parent)) - def create[T, Q <: Ex[_ >: T]](t :Class[T], q: Class[Q], md: Metadata[_]): Q = q match { + def create[T, Q <: Ex[_ >: T]](t :Class[T], q: Class[Q], md: Metadata): Q = q match { case _ if q == classOf[StringPath] | q == classOf[BooleanPath] => { - q.getConstructor(classOf[PathMetadata[_]]).newInstance(md) + q.getConstructor(classOf[PathMetadata]).newInstance(md) } - case _ => q.getConstructor(classOf[Class[_]], classOf[PathMetadata[_]]).newInstance(t, md) + case _ => q.getConstructor(classOf[Class[_]], classOf[PathMetadata]).newInstance(t, md) } } -class DslPath[T](t: Class[_ <: T], md: PathMetadata[_]) +class DslPath[T](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with DslExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) } -class SimplePath[T](t: Class[_ <: T], md: PathMetadata[_]) +class SimplePath[T](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with SimpleExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) } -class ArrayPath[T <: Array[_]](t: Class[T], md: PathMetadata[_]) +class ArrayPath[T <: Array[_]](t: Class[T], md: PathMetadata) extends PathImpl[T](t, md) with ArrayExpression[T] { def this(t: Class[T], variable: String) = this(t, forVariable(variable)) } -class BeanPath[T](t: Class[_ <: T], md: PathMetadata[_]) +class BeanPath[T](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with SimpleExpression[T] { import Paths._ @@ -144,7 +144,7 @@ class BeanPath[T](t: Class[_ <: T], md: PathMetadata[_]) } -class EntityPathImpl[T](t: Class[_ <: T], md: PathMetadata[_]) +class EntityPathImpl[T](t: Class[_ <: T], md: PathMetadata) extends BeanPath[T](t, md) with EntityPath[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) @@ -153,7 +153,7 @@ class EntityPathImpl[T](t: Class[_ <: T], md: PathMetadata[_]) } -class CollectionPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata[_]) +class CollectionPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata) extends PathImpl[java.util.Collection[T]](classOf[java.util.Collection[T]], md) with CollectionExpression[T,Q] { def this(t: Class[T], q: Class[Q], variable: String) = this(t, q, forVariable(variable)) @@ -164,7 +164,7 @@ class CollectionPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetad } -class SetPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata[_]) +class SetPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata) extends PathImpl[java.util.Set[T]](classOf[java.util.Set[T]], md) with SetExpression[T,Q] { def this(t: Class[T], q: Class[Q], variable: String) = this(t, q, forVariable(variable)) @@ -175,7 +175,7 @@ class SetPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata[_] } -class ListPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata[_]) +class ListPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata) extends PathImpl[java.util.List[T]](classOf[java.util.List[T]], md) with ListExpression[T,Q] { def this(t: Class[T], q: Class[Q], variable: String) = this(t, q, forVariable(variable)) @@ -190,7 +190,7 @@ class ListPath[T, Q <: Ex[_ >: T]](t: Class[T], q: Class[Q], md: PathMetadata[_ } -class MapPath[K, V, Q <: Ex[_ >: V]](k: Class[K], v: Class[V], q: Class[Q], md: PathMetadata[_]) +class MapPath[K, V, Q <: Ex[_ >: V]](k: Class[K], v: Class[V], q: Class[Q], md: PathMetadata) extends PathImpl[java.util.Map[K, V]](classOf[java.util.Map[K, V]], md) with MapExpression[K, V, Q] { def this(k: Class[K], v: Class[V], q: Class[Q], variable: String) = this(k, v, q, forVariable(variable)) @@ -203,14 +203,14 @@ class MapPath[K, V, Q <: Ex[_ >: V]](k: Class[K], v: Class[V], q: Class[Q], md: } -class ComparablePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata[_]) +class ComparablePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with ComparableExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) } -class NumberPath[T : Numeric](t: Class[T], md: PathMetadata[_]) +class NumberPath[T : Numeric](t: Class[T], md: PathMetadata) extends PathImpl[T](t, md) with NumberExpression[T] { def this(t: Class[T], variable: String) = this(t, forVariable(variable)) @@ -218,42 +218,42 @@ class NumberPath[T : Numeric](t: Class[T], md: PathMetadata[_]) } -class BooleanPath(md: PathMetadata[_]) +class BooleanPath(md: PathMetadata) extends PathImpl[java.lang.Boolean](classOf[java.lang.Boolean], md) with BooleanExpression { def this(variable: String) = this(forVariable(variable)) } -class StringPath(md: PathMetadata[_]) +class StringPath(md: PathMetadata) extends PathImpl[String](classOf[String], md) with StringExpression { def this(variable: String) = this(forVariable(variable)) } -class DatePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata[_]) +class DatePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with DateExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) } -class DateTimePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata[_]) +class DateTimePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with DateTimeExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) } -class TimePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata[_]) +class TimePath[T <: Comparable[_]](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with TimeExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) } -class EnumPath[T <: Enum[T]](t: Class[_ <: T], md: PathMetadata[_]) +class EnumPath[T <: Enum[T]](t: Class[_ <: T], md: PathMetadata) extends PathImpl[T](t, md) with EnumExpression[T] { def this(t: Class[_ <: T], variable: String) = this(t, forVariable(variable)) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala index 5fd0fee579..3404ad6cfa 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala @@ -32,7 +32,7 @@ import scala.reflect.BeanProperty * @author tiwe * */ -class RelationalPathImpl[T](md: PathMetadata[_], schema: String, table: String)(implicit val mf: Manifest[T]) +class RelationalPathImpl[T](md: PathMetadata, schema: String, table: String)(implicit val mf: Manifest[T]) extends BeanPath[T](mf.runtimeClass.asInstanceOf[Class[T]], md) with RelationalPath[T] { import scala.collection.JavaConversions._ diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Serializers.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Serializers.scala index c9cd17109e..b441d1a06a 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Serializers.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Serializers.scala @@ -36,7 +36,7 @@ import javax.inject.Inject class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingStrategy: NamingStrategy) extends ScalaEntitySerializer(typeMappings) { - override val classHeaderFormat = "%s(md: PathMetadata[_]) extends RelationalPathImpl[%s](md, %s, %s)" + override val classHeaderFormat = "%s(md: PathMetadata) extends RelationalPathImpl[%s](md, %s, %s)" override def writeHeader(model: EntityType, writer: ScalaWriter) { writer.imports(classOf[RelationalPathImpl[_]]) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/EntitySerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/EntitySerializerTest.scala index e477a1d7ca..4def5d2d02 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/EntitySerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/EntitySerializerTest.scala @@ -53,7 +53,7 @@ class ScalaEntitySerializerTest extends CompileTestUtils { serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) val str = writer.toString() //System.err.println(str) - assertTrue(str.contains("class QPerson(cl: Class[_ <: Person], md: PathMetadata[_]) " + + assertTrue(str.contains("class QPerson(cl: Class[_ <: Person], md: PathMetadata) " + "extends EntityPathImpl[Person](cl, md) {")) assertTrue(str.contains("def this(variable: String) = " + "this(classOf[Person], forVariable(variable))")) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala index 830fd00346..f9a2d04ef9 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala @@ -12,7 +12,7 @@ object QPerson extends QPerson("person"){ } -class QPerson(cl: Class[_ <: Person], md: PathMetadata[_]) extends EntityPathImpl[Person](cl, md) { +class QPerson(cl: Class[_ <: Person], md: PathMetadata) extends EntityPathImpl[Person](cl, md) { def this(variable: String) = this(classOf[Person], forVariable(variable)) def this(parent: Path[_], variable: String) = this(classOf[Person], forProperty(parent, variable)) diff --git a/querydsl-scala/src/test/scala/test/QEmployee.scala b/querydsl-scala/src/test/scala/test/QEmployee.scala index ed0ba173b9..7194fb6ea2 100644 --- a/querydsl-scala/src/test/scala/test/QEmployee.scala +++ b/querydsl-scala/src/test/scala/test/QEmployee.scala @@ -14,7 +14,7 @@ object QEmployee extends QEmployee("employee"){ } -class QEmployee(md: PathMetadata[_]) extends RelationalPathImpl[Employee](md, "PUBLIC", "EMPLOYEE") { +class QEmployee(md: PathMetadata) extends RelationalPathImpl[Employee](md, "PUBLIC", "EMPLOYEE") { def this(variable: String) = this(forVariable(variable)) def this(parent: Path[_], variable: String) = this(forProperty(parent, variable)) diff --git a/querydsl-scala/src/test/scala/test/QSurvey.scala b/querydsl-scala/src/test/scala/test/QSurvey.scala index 0022ef416b..c042b77c78 100644 --- a/querydsl-scala/src/test/scala/test/QSurvey.scala +++ b/querydsl-scala/src/test/scala/test/QSurvey.scala @@ -13,7 +13,7 @@ object QSurvey extends QSurvey("survey"){ } -class QSurvey(md: PathMetadata[_]) extends RelationalPathImpl[Survey](md, "PUBLIC", "SURVEY") { +class QSurvey(md: PathMetadata) extends RelationalPathImpl[Survey](md, "PUBLIC", "SURVEY") { def this(variable: String) = this(forVariable(variable)) def this(parent: Path[_], variable: String) = this(forProperty(parent, variable)) diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryCollectionPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryCollectionPath.java index c8c8df97b3..fa90be8c60 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryCollectionPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryCollectionPath.java @@ -43,11 +43,11 @@ public JTSGeometryCollectionPath(Class type, Path parent, String this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSGeometryCollectionPath(PathMetadata metadata) { + public JTSGeometryCollectionPath(PathMetadata metadata) { this((Class) GeometryCollection.class, metadata); } - public JTSGeometryCollectionPath(Class type, PathMetadata metadata) { + public JTSGeometryCollectionPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSGeometryCollectionPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryPath.java index 20c05cd675..f82db2b2d8 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSGeometryPath.java @@ -67,11 +67,11 @@ public JTSGeometryPath(Class type, Path parent, String property) this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSGeometryPath(PathMetadata metadata) { + public JTSGeometryPath(PathMetadata metadata) { this((Class) Geometry.class, metadata); } - public JTSGeometryPath(Class type, PathMetadata metadata) { + public JTSGeometryPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -146,7 +146,7 @@ public JTSGeometryPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLineStringPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLineStringPath.java index 5be6c56b17..51247c5757 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLineStringPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLineStringPath.java @@ -43,11 +43,11 @@ public JTSLineStringPath(Class type, Path parent, String propert this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSLineStringPath(PathMetadata metadata) { + public JTSLineStringPath(PathMetadata metadata) { this((Class) LineString.class, metadata); } - public JTSLineStringPath(Class type, PathMetadata metadata) { + public JTSLineStringPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSLineStringPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLinearRingPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLinearRingPath.java index 8d7910ac84..45bce18f9e 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLinearRingPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSLinearRingPath.java @@ -43,11 +43,11 @@ public JTSLinearRingPath(Class type, Path parent, String propert this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSLinearRingPath(PathMetadata metadata) { + public JTSLinearRingPath(PathMetadata metadata) { this((Class) LinearRing.class, metadata); } - public JTSLinearRingPath(Class type, PathMetadata metadata) { + public JTSLinearRingPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSLinearRingPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiLineStringPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiLineStringPath.java index 837a95146b..d34a4774f3 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiLineStringPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiLineStringPath.java @@ -43,11 +43,11 @@ public JTSMultiLineStringPath(Class type, Path parent, String pr this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSMultiLineStringPath(PathMetadata metadata) { + public JTSMultiLineStringPath(PathMetadata metadata) { this((Class) MultiLineString.class, metadata); } - public JTSMultiLineStringPath(Class type, PathMetadata metadata) { + public JTSMultiLineStringPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSMultiLineStringPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPointPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPointPath.java index 21684ae639..ef67c52fc0 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPointPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPointPath.java @@ -43,11 +43,11 @@ public JTSMultiPointPath(Class type, Path parent, String propert this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSMultiPointPath(PathMetadata metadata) { + public JTSMultiPointPath(PathMetadata metadata) { this((Class) MultiPoint.class, metadata); } - public JTSMultiPointPath(Class type, PathMetadata metadata) { + public JTSMultiPointPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSMultiPointPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPolygonPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPolygonPath.java index 5667534b5e..be56deeaed 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPolygonPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSMultiPolygonPath.java @@ -43,11 +43,11 @@ public JTSMultiPolygonPath(Class type, Path parent, String prope this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSMultiPolygonPath(PathMetadata metadata) { + public JTSMultiPolygonPath(PathMetadata metadata) { this((Class) MultiPolygon.class, metadata); } - public JTSMultiPolygonPath(Class type, PathMetadata metadata) { + public JTSMultiPolygonPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSMultiPolygonPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPointPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPointPath.java index dc6e228c80..2775f8148f 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPointPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPointPath.java @@ -43,11 +43,11 @@ public JTSPointPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSPointPath(PathMetadata metadata) { + public JTSPointPath(PathMetadata metadata) { this((Class) Point.class, metadata); } - public JTSPointPath(Class type, PathMetadata metadata) { + public JTSPointPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSPointPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPolygonPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPolygonPath.java index 2da493c4f8..50dee88c1d 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPolygonPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/path/JTSPolygonPath.java @@ -43,11 +43,11 @@ public JTSPolygonPath(Class type, Path parent, String property) this(type, PathMetadataFactory.forProperty(parent, property)); } - public JTSPolygonPath(PathMetadata metadata) { + public JTSPolygonPath(PathMetadata metadata) { this((Class) Polygon.class, metadata); } - public JTSPolygonPath(Class type, PathMetadata metadata) { + public JTSPolygonPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public JTSPolygonPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryCollectionPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryCollectionPath.java index f16c3ffcac..1e473a7cbd 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryCollectionPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryCollectionPath.java @@ -43,11 +43,11 @@ public GeometryCollectionPath(Class type, Path parent, String pr this(type, PathMetadataFactory.forProperty(parent, property)); } - public GeometryCollectionPath(PathMetadata metadata) { + public GeometryCollectionPath(PathMetadata metadata) { this((Class) GeometryCollection.class, metadata); } - public GeometryCollectionPath(Class type, PathMetadata metadata) { + public GeometryCollectionPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public GeometryCollectionPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java index e5cb211a3c..aa4d6ed8bc 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java @@ -70,11 +70,11 @@ public GeometryPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public GeometryPath(PathMetadata metadata) { + public GeometryPath(PathMetadata metadata) { this((Class) Geometry.class, metadata); } - public GeometryPath(Class type, PathMetadata metadata) { + public GeometryPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -156,7 +156,7 @@ public GeometryPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LineStringPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LineStringPath.java index 03c0febf55..ab109ba54b 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LineStringPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LineStringPath.java @@ -43,11 +43,11 @@ public LineStringPath(Class type, Path parent, String property) this(type, PathMetadataFactory.forProperty(parent, property)); } - public LineStringPath(PathMetadata metadata) { + public LineStringPath(PathMetadata metadata) { this((Class) LineString.class, metadata); } - public LineStringPath(Class type, PathMetadata metadata) { + public LineStringPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public LineStringPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LinearRingPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LinearRingPath.java index 810036e742..b57f54bc2d 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LinearRingPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/LinearRingPath.java @@ -43,11 +43,11 @@ public LinearRingPath(Class type, Path parent, String property) this(type, PathMetadataFactory.forProperty(parent, property)); } - public LinearRingPath(PathMetadata metadata) { + public LinearRingPath(PathMetadata metadata) { this((Class) LinearRing.class, metadata); } - public LinearRingPath(Class type, PathMetadata metadata) { + public LinearRingPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public LinearRingPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiLineStringPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiLineStringPath.java index a958927739..fed2611b22 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiLineStringPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiLineStringPath.java @@ -43,11 +43,11 @@ public MultiLineStringPath(Class type, Path parent, String prope this(type, PathMetadataFactory.forProperty(parent, property)); } - public MultiLineStringPath(PathMetadata metadata) { + public MultiLineStringPath(PathMetadata metadata) { this((Class) MultiLineString.class, metadata); } - public MultiLineStringPath(Class type, PathMetadata metadata) { + public MultiLineStringPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public MultiLineStringPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPointPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPointPath.java index 48bb1a08c1..10fdc5be63 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPointPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPointPath.java @@ -43,11 +43,11 @@ public MultiPointPath(Class type, Path parent, String property) this(type, PathMetadataFactory.forProperty(parent, property)); } - public MultiPointPath(PathMetadata metadata) { + public MultiPointPath(PathMetadata metadata) { this((Class) MultiPoint.class, metadata); } - public MultiPointPath(Class type, PathMetadata metadata) { + public MultiPointPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public MultiPointPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPolygonPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPolygonPath.java index d53ad42ff0..0af1641ca9 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPolygonPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/MultiPolygonPath.java @@ -43,11 +43,11 @@ public MultiPolygonPath(Class type, Path parent, String property this(type, PathMetadataFactory.forProperty(parent, property)); } - public MultiPolygonPath(PathMetadata metadata) { + public MultiPolygonPath(PathMetadata metadata) { this((Class) MultiPolygon.class, metadata); } - public MultiPolygonPath(Class type, PathMetadata metadata) { + public MultiPolygonPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public MultiPolygonPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PointPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PointPath.java index 2eb69f3cc5..51e8a31874 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PointPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PointPath.java @@ -43,11 +43,11 @@ public PointPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public PointPath(PathMetadata metadata) { + public PointPath(PathMetadata metadata) { this((Class) Point.class, metadata); } - public PointPath(Class type, PathMetadata metadata) { + public PointPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public PointPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolygonPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolygonPath.java index 81da399e0e..9668f8da14 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolygonPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolygonPath.java @@ -43,11 +43,11 @@ public PolygonPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public PolygonPath(PathMetadata metadata) { + public PolygonPath(PathMetadata metadata) { this((Class) Polygon.class, metadata); } - public PolygonPath(Class type, PathMetadata metadata) { + public PolygonPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public PolygonPath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolyhedralSurfacePath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolyhedralSurfacePath.java index 68b513d42e..aa23844382 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolyhedralSurfacePath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/PolyhedralSurfacePath.java @@ -43,11 +43,11 @@ public PolyhedralSurfacePath(Class type, Path parent, String pro this(type, PathMetadataFactory.forProperty(parent, property)); } - public PolyhedralSurfacePath(PathMetadata metadata) { + public PolyhedralSurfacePath(PathMetadata metadata) { this((Class) PolyHedralSurface.class, metadata); } - public PolyhedralSurfacePath(Class type, PathMetadata metadata) { + public PolyhedralSurfacePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } @@ -66,7 +66,7 @@ public PolyhedralSurfacePath(Class type, String var) { } @Override - public PathMetadata getMetadata() { + public PathMetadata getMetadata() { return pathMixin.getMetadata(); } diff --git a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java index 42cb71e5a1..d531b58963 100644 --- a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java +++ b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/QSpatialRefSys.java @@ -60,7 +60,7 @@ public QSpatialRefSys(Path path) { addMetadata(); } - public QSpatialRefSys(PathMetadata metadata) { + public QSpatialRefSys(PathMetadata metadata) { super(SpatialRefSys.class, metadata, "public", "spatial_ref_sys"); addMetadata(); } diff --git a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java index 3d5e2af6bb..84b1483f30 100644 --- a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java +++ b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/RelationalPathSpatial.java @@ -52,7 +52,7 @@ public RelationalPathSpatial(Class type, String variable, String sc this(type, PathMetadataFactory.forVariable(variable), schema, table); } - public RelationalPathSpatial(Class type, PathMetadata metadata, String schema, String table) { + public RelationalPathSpatial(Class type, PathMetadata metadata, String schema, String table) { super(type, metadata, schema, table); } diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/QShapes.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/QShapes.java index 36f4dcc7e9..7d4a433df5 100644 --- a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/QShapes.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/QShapes.java @@ -43,7 +43,7 @@ public QShapes(Path path) { addMetadata(); } - public QShapes(PathMetadata metadata) { + public QShapes(PathMetadata metadata) { super(Shapes.class, metadata, "PUBLIC", "SHAPES"); addMetadata(); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java index fa0df3dab3..7bbf41681b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java @@ -61,7 +61,7 @@ public RelationalPathBase(Class type, String variable, String schem this(type, PathMetadataFactory.forVariable(variable), schema, table); } - public RelationalPathBase(Class type, PathMetadata metadata, String schema, + public RelationalPathBase(Class type, PathMetadata metadata, String schema, String table) { super(type, metadata); this.schema = schema; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java index afecaa2fa1..8208ad9b11 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java @@ -808,7 +808,7 @@ public Void visit(Path path, Void context) { return null; } } - final PathMetadata metadata = path.getMetadata(); + final PathMetadata metadata = path.getMetadata(); boolean precededByDot; if (metadata.getParent() != null && (!skipParent || dml)) { visit(metadata.getParent(), context); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/KeywordQuotingBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/KeywordQuotingBase.java index 810dc563f5..27105c833d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/KeywordQuotingBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/KeywordQuotingBase.java @@ -41,7 +41,7 @@ private Quoting(String path) { addMetadata(); } - public Quoting(PathMetadata metadata) { + public Quoting(PathMetadata metadata) { super(Quoting.class, metadata, "PUBLIC", "quoting"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java b/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java index e30528b68a..18d3ffbd14 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QBean2Test.java @@ -44,7 +44,7 @@ public QPerson(BeanPath entity) { addMetadata(); } - public QPerson(PathMetadata metadata) { + public QPerson(PathMetadata metadata) { super(QPerson.class, metadata, "", "PERSON"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QCompanies.java b/querydsl-sql/src/test/java/com/querydsl/sql/QCompanies.java index f738079c13..283c2665de 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QCompanies.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QCompanies.java @@ -36,7 +36,7 @@ public QCompanies(Path path) { addMetadata(); } - public QCompanies(PathMetadata metadata) { + public QCompanies(PathMetadata metadata) { super(QCompanies.class, metadata, "PUBLIC", "COMPANIES"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/QPerson.java b/querydsl-sql/src/test/java/com/querydsl/sql/QPerson.java index 155ebe307c..a90157e4ad 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/QPerson.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/QPerson.java @@ -47,7 +47,7 @@ public QPerson(BeanPath entity) { addMetadata(); } - public QPerson(PathMetadata metadata) { + public QPerson(PathMetadata metadata) { super(QPerson.class, metadata, "", "PERSON"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QDateTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QDateTest.java index 371488f019..7a1c3806c1 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QDateTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QDateTest.java @@ -21,7 +21,7 @@ public QDateTest(String path) { addMetadata(); } - public QDateTest(PathMetadata metadata) { + public QDateTest(PathMetadata metadata) { super(QDateTest.class, metadata, "PUBLIC", "DATE_TEST"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployee.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployee.java index 61e76368fa..0c2baea468 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployee.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployee.java @@ -60,7 +60,7 @@ public QEmployee(String path) { addMetadata(); } - public QEmployee(PathMetadata metadata) { + public QEmployee(PathMetadata metadata) { super(Employee.class, metadata, "PUBLIC", "EMPLOYEE"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployeeNoPK.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployeeNoPK.java index 64872cd48d..8388d6561b 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployeeNoPK.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QEmployeeNoPK.java @@ -56,7 +56,7 @@ public QEmployeeNoPK(String path) { addMetadata(); } - public QEmployeeNoPK(PathMetadata metadata) { + public QEmployeeNoPK(PathMetadata metadata) { super(Employee.class, metadata, "PUBLIC", "EMPLOYEE"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java index edd7a14c68..6aa0167d1d 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QNumberTest.java @@ -44,7 +44,7 @@ public QNumberTest(Path path) { addMetadata(); } - public QNumberTest(PathMetadata metadata) { + public QNumberTest(PathMetadata metadata) { super(QNumberTest.class, metadata, "PUBLIC", "NUMBER_TEST"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurvey.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurvey.java index 5a4f825e02..9c884825a0 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurvey.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurvey.java @@ -44,7 +44,7 @@ public QSurvey(String path) { addMetadata(); } - public QSurvey(PathMetadata metadata) { + public QSurvey(PathMetadata metadata) { super(QSurvey.class, metadata, "PUBLIC", "SURVEY"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurveyNoPK.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurveyNoPK.java index 207e75f794..2354218ece 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurveyNoPK.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QSurveyNoPK.java @@ -39,7 +39,7 @@ public QSurveyNoPK(String path) { addMetadata(); } - public QSurveyNoPK(PathMetadata metadata) { + public QSurveyNoPK(PathMetadata metadata) { super(QSurveyNoPK.class, metadata, "PUBLIC", "SURVEY"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QTest_.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QTest_.java index b0b18de28b..30674c3304 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QTest_.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QTest_.java @@ -29,7 +29,7 @@ public QTest_(String path) { super(Object.class, PathMetadataFactory.forVariable(path)); } - public QTest_(PathMetadata metadata) { + public QTest_(PathMetadata metadata) { super(Object.class, metadata); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java index 34abad8ac1..acf0036ed8 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QUuids.java @@ -42,7 +42,7 @@ public QUuids(Path path) { addMetadata(); } - public QUuids(PathMetadata metadata) { + public QUuids(PathMetadata metadata) { super(QUuids.class, metadata, "public", "UUIDS"); addMetadata(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java index 528bb4f27c..679b000606 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/domain/QXmlTest.java @@ -41,7 +41,7 @@ public QXmlTest(Path path) { addMetadata(); } - public QXmlTest(PathMetadata metadata) { + public QXmlTest(PathMetadata metadata) { super(QXmlTest.class, metadata, "PUBLIC", "XML_TEST"); addMetadata(); } From 232b8b8d37ecf073e582f36e30843844bd087f9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Feb 2015 18:38:59 +0200 Subject: [PATCH 0703/1968] Use singleton --- .../querydsl/core/support/Expressions.java | 9 ++++--- .../querydsl/core/types/NullExpression.java | 2 +- .../core/types/NullExpressionTest.java | 27 ------------------- 3 files changed, 6 insertions(+), 32 deletions(-) delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/NullExpressionTest.java diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java index fc77d23d57..eabca4a81e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java @@ -637,8 +637,9 @@ public static SimpleExpression list(Class clazz, SimpleExpression.. * * @return */ - public static NullExpression nullExpression() { - return NullExpression.DEFAULT; + @SuppressWarnings("unchecked")//does not produce non-null instances of T + public static NullExpression nullExpression() { + return (NullExpression) NullExpression.DEFAULT; } /** @@ -649,7 +650,7 @@ public static NullExpression nullExpression() { * @return */ public static NullExpression nullExpression(Class type) { - return new NullExpression(type); + return nullExpression(); } /** @@ -660,7 +661,7 @@ public static NullExpression nullExpression(Class type) { * @return */ public static NullExpression nullExpression(Path path) { - return new NullExpression(path.getType()); + return nullExpression(); } private Expressions() {} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/NullExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/NullExpression.java index 76412207b3..3e8ed039dc 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/NullExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/NullExpression.java @@ -33,7 +33,7 @@ public class NullExpression extends TemplateExpressionImpl { */ public static final NullExpression DEFAULT = new NullExpression(Object.class); - public NullExpression(Class type) { + private NullExpression(Class type) { super(type, NULL_TEMPLATE, Collections.>emptyList()); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/NullExpressionTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/NullExpressionTest.java deleted file mode 100644 index 647b4adc9c..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/types/NullExpressionTest.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.types; - -import static org.junit.Assert.*; - -import org.junit.Test; - -public class NullExpressionTest { - - @Test - public void test() { - assertNotNull(new NullExpression(Object.class)); - } - -} From 1c5cb4fe0ab0e203d455d8e24a9b9b70dd9c4b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Feb 2015 18:43:21 +0200 Subject: [PATCH 0704/1968] Add serialVersionUID --- .../com/querydsl/core/types/AppendingFactoryExpression.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java index 9743371230..c665c5a7c4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/AppendingFactoryExpression.java @@ -21,6 +21,8 @@ public class AppendingFactoryExpression extends FactoryExpressionBase { + private static final long serialVersionUID = -1337452521648394353L; + private final Expression base; private final List> args; From e18a586065baf98ddce6db7ef25c170e5b4d7194 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 2 Feb 2015 20:01:42 +0200 Subject: [PATCH 0705/1968] Fix Column handling --- .../com/querydsl/jpa/NativeSQLSerializer.java | 6 +++- .../querydsl/jpa/NativeSQLSerializerTest.java | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java index cffbc893f9..7cb0472859 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java @@ -57,7 +57,11 @@ protected void appendAsColumnName(Path path, boolean precededByDot) { if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { SQLTemplates templates = getTemplates(); Column column = path.getAnnotatedElement().getAnnotation(Column.class); - append(templates.quoteIdentifier(column.name(), precededByDot)); + if (!column.name().isEmpty()) { + append(templates.quoteIdentifier(column.name(), precededByDot)); + } else { + super.appendAsColumnName(path, precededByDot); + } } else { super.appendAsColumnName(path, precededByDot); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java index a03349dc26..10b9f64d83 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/NativeSQLSerializerTest.java @@ -15,10 +15,13 @@ import static org.junit.Assert.assertEquals; +import javax.persistence.Column; + import org.junit.Test; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.JoinType; +import com.querydsl.core.types.path.PathBuilder; import com.querydsl.jpa.domain.sql.SAnimal; import com.querydsl.sql.Configuration; import com.querydsl.sql.MySQLTemplates; @@ -26,6 +29,14 @@ public class NativeSQLSerializerTest { + public static class Entity { + @Column + private String name; + + @Column(name="first_name") + private String firstName; + } + @Test public void In() { Configuration conf = new Configuration(new MySQLTemplates()); @@ -41,4 +52,22 @@ public void In() { "where animal_.name in (?1, ?2)", serializer.toString()); } + @Test + public void Path_Column() { + PathBuilder entity = new PathBuilder(Entity.class,"entity"); + Configuration conf = new Configuration(new MySQLTemplates()); + NativeSQLSerializer serializer = new NativeSQLSerializer(conf, true); + serializer.handle(entity.get("name")); + assertEquals("entity.name", serializer.toString()); + } + + @Test + public void Path_Column2() { + PathBuilder entity = new PathBuilder(Entity.class,"entity"); + Configuration conf = new Configuration(new MySQLTemplates()); + NativeSQLSerializer serializer = new NativeSQLSerializer(conf, true); + serializer.handle(entity.get("firstName")); + assertEquals("entity.first_name", serializer.toString()); + } + } From 645e03f45aae2956807809afd00bca030b97cfdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 27 Jan 2015 22:12:41 +0200 Subject: [PATCH 0706/1968] Add type parameter for context --- .../com/querydsl/core/support/QueryMixin.java | 13 ++--- .../querydsl/core/support/ReplaceVisitor.java | 52 +++++++++---------- .../core/support/ReplaceVisitorTest.java | 14 +++-- .../querydsl/jpa/JPAListAccessVisitor.java | 2 +- .../com/querydsl/jpa/JPAMapAccessVisitor.java | 2 +- .../java/com/querydsl/jpa/JPAQueryMixin.java | 22 ++++---- 6 files changed, 51 insertions(+), 54 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java index 7ecff70d6f..576368d896 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java @@ -38,7 +38,11 @@ public class QueryMixin { private final boolean expandAnyPaths; - private ReplaceVisitor replaceVisitor; + private final ReplaceVisitor replaceVisitor = new ReplaceVisitor() { + public Expression visit(Path expr, @Nullable Void context) { + return normalizePath(expr); + } + }; private T self; @@ -136,13 +140,6 @@ public Expression convert(Expression expr, boolean forOrder) { if (expr instanceof Path) { expr = (Expression)normalizePath((Path)expr); } else if (expr != null) { - if (replaceVisitor == null) { - replaceVisitor = new ReplaceVisitor() { - public Expression visit(Path expr, @Nullable Void context) { - return normalizePath(expr); - } - }; - } expr = (Expression)expr.accept(replaceVisitor, null); } } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java index 77798dc498..c7fdfc402e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java @@ -17,8 +17,6 @@ import java.util.Map; import java.util.Objects; -import javax.annotation.Nullable; - import com.google.common.collect.ImmutableList; import com.querydsl.core.*; import com.querydsl.core.types.*; @@ -28,16 +26,16 @@ * ReplaceVisitor is a deep visitor that can be customized to replace segments of * expression trees */ -public class ReplaceVisitor implements Visitor, Void> { +public class ReplaceVisitor implements Visitor, C> { @Override - public Expression visit(Constant expr, @Nullable Void context) { + public Expression visit(Constant expr, C context) { return expr; } @Override - public Expression visit(FactoryExpression expr, @Nullable Void context) { - List> args = visit(expr.getArgs()); + public Expression visit(FactoryExpression expr, C context) { + List> args = visit(expr.getArgs(), context); if (args.equals(expr.getArgs())) { return expr; } else { @@ -46,8 +44,8 @@ public Expression visit(FactoryExpression expr, @Nullable Void context) { } @Override - public Expression visit(Operation expr, @Nullable Void context) { - ImmutableList> args = visit(expr.getArgs()); + public Expression visit(Operation expr, C context) { + ImmutableList> args = visit(expr.getArgs(), context); if (args.equals(expr.getArgs())) { return expr; } else if (expr instanceof Predicate) { @@ -58,20 +56,20 @@ public Expression visit(Operation expr, @Nullable Void context) { } @Override - public Expression visit(ParamExpression expr, @Nullable Void context) { + public Expression visit(ParamExpression expr, C context) { return expr; } @Override - public Expression visit(Path expr, @Nullable Void context) { + public Expression visit(Path expr, C context) { if (expr.getMetadata().isRoot()) { return expr; } else { PathMetadata metadata = expr.getMetadata(); - Path parent = (Path)metadata.getParent().accept(this, null); + Path parent = (Path)metadata.getParent().accept(this, context); Object element = metadata.getElement(); if (element instanceof Expression) { - element = ((Expression) element).accept(this, null); + element = ((Expression) element).accept(this, context); } if (parent.equals(metadata.getParent()) && Objects.equals(element, metadata.getElement())) { return expr; @@ -83,34 +81,34 @@ public Expression visit(Path expr, @Nullable Void context) { } @Override - public Expression visit(SubQueryExpression expr, @Nullable Void context) { + public Expression visit(SubQueryExpression expr, C context) { QueryMetadata md = new DefaultQueryMetadata(); md.setValidate(false); md.setDistinct(expr.getMetadata().isDistinct()); md.setModifiers(expr.getMetadata().getModifiers()); md.setUnique(expr.getMetadata().isUnique()); for (QueryFlag flag : expr.getMetadata().getFlags()) { - md.addFlag(new QueryFlag(flag.getPosition(), flag.getFlag().accept(this, null))); + md.addFlag(new QueryFlag(flag.getPosition(), flag.getFlag().accept(this, context))); } for (Expression e : expr.getMetadata().getGroupBy()) { - md.addGroupBy(e.accept(this, null)); + md.addGroupBy(e.accept(this, context)); } Predicate having = expr.getMetadata().getHaving(); if (having != null) { - md.addHaving((Predicate)having.accept(this, null)); + md.addHaving((Predicate)having.accept(this, context)); } for (JoinExpression je : expr.getMetadata().getJoins()) { - md.addJoin(je.getType(), je.getTarget().accept(this, null)); + md.addJoin(je.getType(), je.getTarget().accept(this, context)); if (je.getCondition() != null) { - md.addJoinCondition((Predicate)je.getCondition().accept(this, null)); + md.addJoinCondition((Predicate)je.getCondition().accept(this, context)); } for (JoinFlag jf : je.getFlags()) { - md.addJoinFlag(new JoinFlag(jf.getFlag().accept(this, null), jf.getPosition())); + md.addJoinFlag(new JoinFlag(jf.getFlag().accept(this, context), jf.getPosition())); } } for (OrderSpecifier os : expr.getMetadata().getOrderBy()) { OrderSpecifier os2 = new OrderSpecifier(os.getOrder(), os.getTarget().accept(this, - null)); + context)); switch (os.getNullHandling()) { case NullsFirst: os2 = os2.nullsFirst(); break; case NullsLast: os2 = os2.nullsLast(); break; @@ -119,14 +117,14 @@ public Expression visit(SubQueryExpression expr, @Nullable Void context) { } for (Map.Entry, Object> entry : expr.getMetadata().getParams() .entrySet()) { - md.setParam((ParamExpression)entry.getKey().accept(this, null), entry.getValue()); + md.setParam((ParamExpression)entry.getKey().accept(this, context), entry.getValue()); } if (expr.getMetadata().getProjection() != null) { - md.setProjection(expr.getMetadata().getProjection().accept(this, null)); + md.setProjection(expr.getMetadata().getProjection().accept(this, context)); } Predicate where = expr.getMetadata().getWhere(); if (where != null) { - md.addWhere((Predicate)where.accept(this, null)); + md.addWhere((Predicate)where.accept(this, context)); } if (expr.getMetadata().equals(md)) { return expr; @@ -136,11 +134,11 @@ public Expression visit(SubQueryExpression expr, @Nullable Void context) { } @Override - public Expression visit(TemplateExpression expr, @Nullable Void context) { + public Expression visit(TemplateExpression expr, C context) { ImmutableList.Builder builder = ImmutableList.builder(); for (Object arg : expr.getArgs()) { if (arg instanceof Expression) { - builder.add(((Expression)arg).accept(this, null)); + builder.add(((Expression)arg).accept(this, context)); } else { builder.add(arg); } @@ -157,10 +155,10 @@ public Expression visit(TemplateExpression expr, @Nullable Void context) { } } - private ImmutableList> visit(List> args) { + private ImmutableList> visit(List> args, C context) { ImmutableList.Builder> builder = ImmutableList.builder(); for (Expression arg : args) { - builder.add(arg.accept(this, null)); + builder.add(arg.accept(this, context)); } return builder.build(); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/ReplaceVisitorTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/ReplaceVisitorTest.java index 26ef570853..7d3e40805f 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/ReplaceVisitorTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/ReplaceVisitorTest.java @@ -1,16 +1,20 @@ package com.querydsl.core.support; -import com.querydsl.core.types.*; -import com.querydsl.core.types.path.StringPath; -import org.junit.Test; +import static org.junit.Assert.assertEquals; import javax.annotation.Nullable; -import static org.junit.Assert.assertEquals; +import org.junit.Test; + +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Ops; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.PathImpl; +import com.querydsl.core.types.path.StringPath; public class ReplaceVisitorTest { - private static final ReplaceVisitor visitor = new ReplaceVisitor() { + private static final ReplaceVisitor visitor = new ReplaceVisitor() { public Expression visit(Path expr, @Nullable Void context) { if (expr.getMetadata().isRoot()) { return new PathImpl(expr.getType(), expr.getMetadata().getName() + "_"); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java index eb2404bf3c..6c1837d55f 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java @@ -11,7 +11,7 @@ import com.querydsl.core.support.ReplaceVisitor; import com.querydsl.core.types.*; -class JPAListAccessVisitor extends ReplaceVisitor { +class JPAListAccessVisitor extends ReplaceVisitor { private final QueryMetadata metadata; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java index ec83973b45..a44dce05eb 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java @@ -11,7 +11,7 @@ import com.querydsl.core.support.ReplaceVisitor; import com.querydsl.core.types.*; -class JPAMapAccessVisitor extends ReplaceVisitor { +class JPAMapAccessVisitor extends ReplaceVisitor { private final QueryMetadata metadata; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index f915876af5..511a29a17f 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -49,7 +49,16 @@ public class JPAQueryMixin extends QueryMixin { private final JPAListAccessVisitor listAccessVisitor; - private ReplaceVisitor replaceVisitor; + private final ReplaceVisitor replaceVisitor = new ReplaceVisitor() { + public Expression visit(Path expr, Void context) { + return convertPathForOrder(expr); + } + public Expression visit(SubQueryExpression expr, @Nullable Void context) { + // don't shorten paths inside subquery expressions + return expr; + } + }; + public static final JoinFlag FETCH = new JoinFlag("fetch "); @@ -170,17 +179,6 @@ public Expression convert(Expression expr, boolean forOrder) { if (expr instanceof Path) { expr = convertPathForOrder((Path)expr); } else { - if (replaceVisitor == null) { - replaceVisitor = new ReplaceVisitor() { - public Expression visit(Path expr, Void context) { - return convertPathForOrder(expr); - } - public Expression visit(SubQueryExpression expr, @Nullable Void context) { - // don't shorten paths inside subquery expressions - return expr; - } - }; - } expr = (Expression)expr.accept(replaceVisitor, null); } } From 93674b9051dee02bed1d1e415c3be4e23234f7ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 5 Feb 2015 20:18:25 +0200 Subject: [PATCH 0707/1968] Update javadocs [ci skip] --- .../main/java/com/querydsl/core/support/Expressions.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java index eabca4a81e..3f8617c175 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java @@ -633,7 +633,7 @@ public static SimpleExpression list(Class clazz, SimpleExpression.. } /** - * Get the default null expression + * Get a null expression for the specified type * * @return */ @@ -643,7 +643,7 @@ public static NullExpression nullExpression() { } /** - * Get a null expression for the given type + * Get a null expression for the specified type * * @param type * @param @@ -654,7 +654,7 @@ public static NullExpression nullExpression(Class type) { } /** - * Get a null expression for the given path + * Get a null expression for the specified path * * @param path * @param From 82c97d948b6580366ed5bcf442394e717c8f8480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 5 Feb 2015 23:24:04 +0200 Subject: [PATCH 0708/1968] Add GroupBy.sortedSet and sortedMap --- .../java/com/querydsl/core/group/GMap.java | 25 +++++++++- .../java/com/querydsl/core/group/GSet.java | 25 +++++++++- .../java/com/querydsl/core/group/GroupBy.java | 50 ++++++++++++++++--- 3 files changed, 90 insertions(+), 10 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java index 5a2233a0ff..d8faf7f9e4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java @@ -16,6 +16,7 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; +import java.util.TreeMap; import com.mysema.commons.lang.Pair; @@ -23,7 +24,7 @@ * @param * @param */ -class GMap extends AbstractGroupExpression, Map> { +abstract class GMap extends AbstractGroupExpression, Map> { private static final long serialVersionUID = 7106389414200843920L; @@ -31,11 +32,31 @@ public GMap(QPair qpair) { super(Map.class, qpair); } + protected abstract Map createMap(); + + public static GMap createLinked(QPair expr) { + return new GMap(expr) { + @Override + protected Map createMap() { + return new LinkedHashMap(); + } + }; + } + + public static GMap createSorted(QPair expr) { + return new GMap(expr) { + @Override + protected Map createMap() { + return new TreeMap(); + } + }; + } + @Override public GroupCollector, Map> createGroupCollector() { return new GroupCollector, Map>() { - private final Map map = new LinkedHashMap(); + private final Map map = createMap(); @Override public void add(Pair pair) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java index 3888c1f1db..4db50221a7 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java @@ -15,6 +15,7 @@ import java.util.LinkedHashSet; import java.util.Set; +import java.util.TreeSet; import com.querydsl.core.types.Expression; @@ -23,19 +24,39 @@ * * @param */ -class GSet extends AbstractGroupExpression> { +abstract class GSet extends AbstractGroupExpression> { private static final long serialVersionUID = -1575808026237160843L; + public static GSet createLinked(Expression expr) { + return new GSet(expr) { + @Override + protected Set createSet() { + return new LinkedHashSet(); + } + }; + } + + public static GSet createSorted(Expression expr) { + return new GSet(expr) { + @Override + protected Set createSet() { + return new TreeSet(); + } + }; + } + public GSet(Expression expr) { super(Set.class, expr); } + protected abstract Set createSet(); + @Override public GroupCollector> createGroupCollector() { return new GroupCollector>() { - private final Set set = new LinkedHashSet(); + private final Set set = createSet(); @Override public void add(T o) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 113de25444..988345ebdb 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -106,21 +106,35 @@ public static AbstractGroupExpression> list(GroupExpression AbstractGroupExpression> set(Expression expression) { - return new GSet(expression); + return GSet.createLinked(expression); } public static GroupExpression> set(GroupExpression groupExpression) { - return new MixinGroupExpression>(groupExpression, new GSet(groupExpression)); + return new MixinGroupExpression>(groupExpression, GSet.createLinked(groupExpression)); } /** - * Create a new aggregating map expression + * Create a new aggregating set expression using a backing TreeSet + * + * @param expression + * @return + */ + public static AbstractGroupExpression> sortedSet(Expression expression) { + return GSet.createSorted(expression); + } + + public static GroupExpression> sortedSet(GroupExpression groupExpression) { + return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression)); + } + + /** + * Create a new aggregating map expression using a backing LinkedHashMap * * @param key * @param value @@ -128,7 +142,7 @@ public static GroupExpression> set(GroupExpression groupE */ @WithBridgeMethods(value=Expression.class,castRequired=true) public static AbstractGroupExpression,Map> map(Expression key, Expression value) { - return new GMap(QPair.create(key, value)); + return GMap.createLinked(QPair.create(key, value)); } public static AbstractGroupExpression, Map> map(GroupExpression key, Expression value) { @@ -140,7 +154,31 @@ public static AbstractGroupExpression, Map> map(Expre } public static AbstractGroupExpression, Map> map(GroupExpression key, GroupExpression value) { - return new GMap.Mixin>(key, value, new GMap(QPair.create(key, value))); + return new GMap.Mixin>(key, value, GMap.createLinked(QPair.create(key, value))); + } + + /** + * Create a new aggregating map expression using a backing TreeMap + * + * @param key + * @param value + * @return + */ + @WithBridgeMethods(value=Expression.class,castRequired=true) + public static AbstractGroupExpression,Map> sortedMap(Expression key, Expression value) { + return GMap.createSorted(QPair.create(key, value)); + } + + public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { + return sortedMap(key, new GOne(value)); + } + + public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { + return sortedMap(new GOne(key), value); + } + + public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { + return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value))); } private GroupBy() {} From b1e74b92a1faa21f12122fdecf9a5fc8aba68584 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 5 Feb 2015 22:54:59 +0100 Subject: [PATCH 0709/1968] Replace occurence of com.mysema to com.querydsl --- querydsl-root/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 6e202e69b6..262c5ad5d4 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -195,7 +195,7 @@ ${osgi.import.package} - com.mysema.* + com.querydsl.* From 156cb0c426073330203c829a2776af6e48a9555e Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 6 Feb 2015 17:20:36 +0100 Subject: [PATCH 0710/1968] Replace occurrence of java.util.Objects with com.google.common.base.Objects The former is not available on JDK6. fixes #1162 --- .../main/java/com/querydsl/core/support/ReplaceVisitor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java index c7fdfc402e..bce2283d72 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java @@ -15,8 +15,8 @@ import java.util.List; import java.util.Map; -import java.util.Objects; +import com.google.common.base.Objects; import com.google.common.collect.ImmutableList; import com.querydsl.core.*; import com.querydsl.core.types.*; @@ -71,7 +71,7 @@ public Expression visit(Path expr, C context) { if (element instanceof Expression) { element = ((Expression) element).accept(this, context); } - if (parent.equals(metadata.getParent()) && Objects.equals(element, metadata.getElement())) { + if (parent.equals(metadata.getParent()) && Objects.equal(element, metadata.getElement())) { return expr; } else { metadata = new PathMetadata(parent, element, metadata.getPathType()); From 7263600604be52a1ee14a6303f4d050ca999d70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 6 Feb 2015 18:24:47 +0200 Subject: [PATCH 0711/1968] Move getTemplates() usage --- .../src/main/java/com/querydsl/jpa/NativeSQLSerializer.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java index 7cb0472859..e6c02f7275 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java @@ -55,10 +55,9 @@ public NativeSQLSerializer(Configuration configuration, boolean wrapEntityProjec @Override protected void appendAsColumnName(Path path, boolean precededByDot) { if (path.getAnnotatedElement().isAnnotationPresent(Column.class)) { - SQLTemplates templates = getTemplates(); Column column = path.getAnnotatedElement().getAnnotation(Column.class); if (!column.name().isEmpty()) { - append(templates.quoteIdentifier(column.name(), precededByDot)); + append(getTemplates().quoteIdentifier(column.name(), precededByDot)); } else { super.appendAsColumnName(path, precededByDot); } From 9a6fd4e75a8262ece2810e27fc47acb7787efa7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 6 Feb 2015 18:46:34 +0200 Subject: [PATCH 0712/1968] Improve generic type constraints Add sorted* variants with comparators Remove brdige annotations --- .../java/com/querydsl/core/group/GMap.java | 16 +++++--- .../java/com/querydsl/core/group/GSet.java | 12 +++++- .../java/com/querydsl/core/group/GroupBy.java | 40 +++++++++++++++---- 3 files changed, 55 insertions(+), 13 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java index d8faf7f9e4..787d31e4b4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java @@ -13,10 +13,7 @@ */ package com.querydsl.core.group; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.TreeMap; +import java.util.*; import com.mysema.commons.lang.Pair; @@ -43,7 +40,7 @@ protected Map createMap() { }; } - public static GMap createSorted(QPair expr) { + public static , U> GMap createSorted(QPair expr) { return new GMap(expr) { @Override protected Map createMap() { @@ -52,6 +49,15 @@ protected Map createMap() { }; } + public static GMap createSorted(QPair expr, final Comparator comparator) { + return new GMap(expr) { + @Override + protected Map createMap() { + return new TreeMap(comparator); + } + }; + } + @Override public GroupCollector, Map> createGroupCollector() { return new GroupCollector, Map>() { diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java index 4db50221a7..57035dafd5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java @@ -13,6 +13,7 @@ */ package com.querydsl.core.group; +import java.util.Comparator; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; @@ -37,7 +38,7 @@ protected Set createSet() { }; } - public static GSet createSorted(Expression expr) { + public static > GSet createSorted(Expression expr) { return new GSet(expr) { @Override protected Set createSet() { @@ -46,6 +47,15 @@ protected Set createSet() { }; } + public static GSet createSorted(Expression expr, final Comparator comparator) { + return new GSet(expr) { + @Override + protected Set createSet() { + return new TreeSet(comparator); + } + }; + } + public GSet(Expression expr) { super(Set.class, expr); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 988345ebdb..523efb13bd 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -13,6 +13,7 @@ */ package com.querydsl.core.group; +import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; @@ -125,14 +126,23 @@ public static GroupExpression> set(GroupExpression groupE * @param expression * @return */ - public static AbstractGroupExpression> sortedSet(Expression expression) { + public static > AbstractGroupExpression> sortedSet(Expression expression) { return GSet.createSorted(expression); } - public static GroupExpression> sortedSet(GroupExpression groupExpression) { + public static > GroupExpression> sortedSet(GroupExpression groupExpression) { return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression)); } + public static AbstractGroupExpression> sortedSet(Expression expression, Comparator comparator) { + return GSet.createSorted(expression, comparator); + } + + public static GroupExpression> sortedSet(GroupExpression groupExpression, Comparator comparator) { + return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression, comparator)); + } + + /** * Create a new aggregating map expression using a backing LinkedHashMap * @@ -164,23 +174,39 @@ public static AbstractGroupExpression, Map> map(Gr * @param value * @return */ - @WithBridgeMethods(value=Expression.class,castRequired=true) - public static AbstractGroupExpression,Map> sortedMap(Expression key, Expression value) { + public static , V> AbstractGroupExpression,Map> sortedMap(Expression key, Expression value) { return GMap.createSorted(QPair.create(key, value)); } - public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { + public static , V, T extends Comparable> AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { return sortedMap(key, new GOne(value)); } - public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { + public static , V, U> AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { return sortedMap(new GOne(key), value); } - public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { + public static , V, T extends Comparable, U> AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value))); } + public static AbstractGroupExpression,Map> sortedMap(Expression key, Expression value, Comparator comparator) { + return GMap.createSorted(QPair.create(key, value), comparator); + } + + public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value, Comparator comparator) { + return sortedMap(key, new GOne(value), comparator); + } + + public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value, Comparator comparator) { + return sortedMap(new GOne(key), value, comparator); + } + + public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value, Comparator comparator) { + return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value), comparator)); + } + + private GroupBy() {} } From e1d9c9b86fd3f35473a1c8b88b410518eda50f8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 12:42:05 +0200 Subject: [PATCH 0713/1968] Verify jdk6 compatibility in test phase --- querydsl-root/pom.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 262c5ad5d4..88e53b5fa0 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -366,6 +366,27 @@ + + org.codehaus.mojo + animal-sniffer-maven-plugin + 1.13 + + + org.codehaus.mojo.signature + java16 + 1.1 + + + + + ensure-java-1.6-class-library + test + + check + + + + From f1fef3be302300dc3ef701d3b8aa3eae776a0533 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 14:39:37 +0200 Subject: [PATCH 0714/1968] Rename class --- ...SQLExceptionWrapper.java => JavaSE7SQLExceptionWrapper.java} | 2 +- .../main/java/com/querydsl/sql/support/SQLExceptionWrapper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename querydsl-sql/src/main/java/com/querydsl/sql/support/{JaveSE7SQLExceptionWrapper.java => JavaSE7SQLExceptionWrapper.java} (96%) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/support/JaveSE7SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/querydsl/sql/support/JavaSE7SQLExceptionWrapper.java similarity index 96% rename from querydsl-sql/src/main/java/com/querydsl/sql/support/JaveSE7SQLExceptionWrapper.java rename to querydsl-sql/src/main/java/com/querydsl/sql/support/JavaSE7SQLExceptionWrapper.java index 79a55f2a3b..c1e2de1754 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/support/JaveSE7SQLExceptionWrapper.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/support/JavaSE7SQLExceptionWrapper.java @@ -23,7 +23,7 @@ * * @author Shredder121 */ -class JaveSE7SQLExceptionWrapper extends SQLExceptionWrapper { +class JavaSE7SQLExceptionWrapper extends SQLExceptionWrapper { @Override public RuntimeException wrap(SQLException exception) { diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/support/SQLExceptionWrapper.java b/querydsl-sql/src/main/java/com/querydsl/sql/support/SQLExceptionWrapper.java index 219f45c349..86b57aa4e9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/support/SQLExceptionWrapper.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/support/SQLExceptionWrapper.java @@ -35,7 +35,7 @@ public abstract class SQLExceptionWrapper { double javaVersion = Double.parseDouble(JAVA_SPECIFICATION_VERSION.value()); if (javaVersion > 1.6) { - INSTANCE = new JaveSE7SQLExceptionWrapper(); + INSTANCE = new JavaSE7SQLExceptionWrapper(); } else { INSTANCE = new JavaSE6SQLExceptionWrapper(); } From 8f42654c84bd1b351e8898a9caf62fbd90c0c5bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 16:19:19 +0200 Subject: [PATCH 0715/1968] Extract NameMapping out of Configuration --- .../java/com/querydsl/sql/Configuration.java | 69 +++---------- .../com/querydsl/sql/DetachableSQLQuery.java | 4 +- .../com/querydsl/sql/JDBCTypeMapping.java | 5 +- .../com/querydsl/sql/JavaTypeMapping.java | 7 +- .../java/com/querydsl/sql/NameMapping.java | 98 +++++++++++++++++++ .../sql/mssql/WindowFunctionTest.java | 5 +- .../sql/postgres/PostgresTypesTest.java | 81 --------------- 7 files changed, 122 insertions(+), 147 deletions(-) create mode 100644 querydsl-sql/src/main/java/com/querydsl/sql/NameMapping.java delete mode 100644 querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresTypesTest.java diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java b/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java index 99e855ac8b..a02fe1ef6e 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java @@ -18,7 +18,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,10 +29,10 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import com.google.common.primitives.Primitives; +import com.querydsl.core.types.Path; import com.querydsl.sql.types.ArrayType; import com.querydsl.sql.types.Null; import com.querydsl.sql.types.Type; -import com.querydsl.core.types.Path; /** * Configuration for SQLQuery instances @@ -45,21 +44,13 @@ public final class Configuration { private static final Logger logger = LoggerFactory.getLogger(Configuration.class); - public static final Configuration DEFAULT = new Configuration(SQLTemplates.DEFAULT); + static final Configuration DEFAULT = new Configuration(SQLTemplates.DEFAULT); private final JDBCTypeMapping jdbcTypeMapping = new JDBCTypeMapping(); private final JavaTypeMapping javaTypeMapping = new JavaTypeMapping(); - private final Map schemaTables = Maps.newHashMap(); - - private final Map schemas = Maps.newHashMap(); - - private final Map tables = Maps.newHashMap(); - - private final Map> schemaTableColumns = Maps.newHashMap(); - - private final Map> tableColumns = Maps.newHashMap(); + private final NameMapping nameMapping = new NameMapping(); private final Map> typeToName = Maps.newHashMap(); @@ -84,7 +75,7 @@ public Configuration(SQLTemplates templates) { javaTypeMapping.register(customType); } for (Map.Entry entry : templates.getTableOverrides().entrySet()) { - schemaTables.put(entry.getKey(), entry.getValue()); + nameMapping.registerTableOverride(entry.getKey(), entry.getValue()); } if (templates.isArraysSupported()) { @@ -201,23 +192,7 @@ public T get(ResultSet rs, @Nullable Path path, int i, Class clazz) th */ @Nullable public SchemaAndTable getOverride(SchemaAndTable key) { - if (!schemaTables.isEmpty() && key.getSchema() != null) { - if (schemaTables.containsKey(key)) { - return schemaTables.get(key); - } - } - String schema = key.getSchema(), table = key.getTable(); - boolean changed = false; - if (schemas.containsKey(key.getSchema())) { - schema = schemas.get(key.getSchema()); - changed = true; - } - - if (tables.containsKey(key.getTable())) { - table = tables.get(key.getTable()); - changed = true; - } - return changed ? new SchemaAndTable(schema, table) : key; + return nameMapping.getOverride(key); } /** @@ -228,18 +203,7 @@ public SchemaAndTable getOverride(SchemaAndTable key) { * @return */ public String getColumnOverride(SchemaAndTable key, String column) { - Map columnOverrides; - String newColumn = null; - columnOverrides = schemaTableColumns.get(key); - if (columnOverrides != null && (newColumn = columnOverrides.get(column)) != null) { - return newColumn; - } - columnOverrides = tableColumns.get(key.getTable()); - if (columnOverrides != null && (newColumn = columnOverrides.get(column)) != null) { - return newColumn; - } - return column; - + return nameMapping.getColumnOverride(key, column); } /** @@ -313,7 +277,7 @@ public String getTypeNameForCast(Class type) { * @return */ public String registerSchemaOverride(String oldSchema, String newSchema) { - return schemas.put(oldSchema, newSchema); + return nameMapping.registerSchemaOverride(oldSchema, newSchema); } /** @@ -324,7 +288,7 @@ public String registerSchemaOverride(String oldSchema, String newSchema) { * @return */ public String registerTableOverride(String oldTable, String newTable) { - return tables.put(oldTable, newTable); + return nameMapping.registerTableOverride(oldTable, newTable); } /** @@ -361,7 +325,7 @@ public SchemaAndTable registerTableOverride(String schema, String oldTable, Stri * @return */ public SchemaAndTable registerTableOverride(SchemaAndTable from, SchemaAndTable to) { - return schemaTables.put(from, to); + return nameMapping.registerTableOverride(from, to); } /** @@ -374,13 +338,7 @@ public SchemaAndTable registerTableOverride(SchemaAndTable from, SchemaAndTable * @return */ public String registerColumnOverride(String schema, String table, String oldColumn, String newColumn) { - SchemaAndTable key = new SchemaAndTable(schema, table); - Map columnOverrides = schemaTableColumns.get(key); - if (columnOverrides == null) { - columnOverrides = new HashMap(); - schemaTableColumns.put(key, columnOverrides); - } - return columnOverrides.put(oldColumn, newColumn); + return nameMapping.registerColumnOverride(schema, table, oldColumn, newColumn); } /** @@ -392,12 +350,7 @@ public String registerColumnOverride(String schema, String table, String oldColu * @return */ public String registerColumnOverride(String table, String oldColumn, String newColumn) { - Map columnOverrides = tableColumns.get(table); - if (columnOverrides == null) { - columnOverrides = new HashMap(); - tableColumns.put(table, columnOverrides); - } - return columnOverrides.put(oldColumn, newColumn); + return nameMapping.registerColumnOverride(table, oldColumn, newColumn); } /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java index 85d4621ee7..51fa571f71 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java @@ -42,11 +42,11 @@ public abstract class DetachableSQLQuery> extends DetachableQuery implements SQLCommonQuery { protected final Configuration configuration; - + public DetachableSQLQuery() { this(new DefaultQueryMetadata().noValidate()); } - + public DetachableSQLQuery(QueryMetadata metadata) { this(Configuration.DEFAULT, metadata); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java b/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java index 7e64a2497a..ba2b729ce5 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java @@ -13,7 +13,6 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Blob; @@ -23,6 +22,8 @@ import java.util.HashMap; import java.util.Map; +import javax.annotation.Nullable; + import com.mysema.commons.lang.Pair; import com.querydsl.sql.types.Null; @@ -32,7 +33,7 @@ * @author tiwe * */ -public final class JDBCTypeMapping { +final class JDBCTypeMapping { private static final Map> defaultTypes = new HashMap>(); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java b/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java index 18763e908b..2b21ed74ed 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java @@ -13,14 +13,15 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; import java.util.HashMap; import java.util.Map; import java.util.Set; +import javax.annotation.Nullable; + import com.google.common.primitives.Primitives; -import com.querydsl.sql.types.*; import com.querydsl.core.util.ReflectionUtils; +import com.querydsl.sql.types.*; /** * JavaTypeMapping provides a mapping from Class to Type instances @@ -28,7 +29,7 @@ * @author tiwe * */ -public class JavaTypeMapping { +class JavaTypeMapping { private static final Type DEFAULT = new ObjectType(); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/NameMapping.java b/querydsl-sql/src/main/java/com/querydsl/sql/NameMapping.java new file mode 100644 index 0000000000..6dd9f0afbb --- /dev/null +++ b/querydsl-sql/src/main/java/com/querydsl/sql/NameMapping.java @@ -0,0 +1,98 @@ +/* + * Copyright 2015, Timo Westkämper + * + * 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 com.querydsl.sql; + +import java.util.HashMap; +import java.util.Map; + +import com.google.common.collect.Maps; + +final class NameMapping { + + private final Map schemaTables = Maps.newHashMap(); + + private final Map schemas = Maps.newHashMap(); + + private final Map tables = Maps.newHashMap(); + + private final Map> schemaTableColumns = Maps.newHashMap(); + + private final Map> tableColumns = Maps.newHashMap(); + + public SchemaAndTable getOverride(SchemaAndTable key) { + if (!schemaTables.isEmpty() && key.getSchema() != null) { + if (schemaTables.containsKey(key)) { + return schemaTables.get(key); + } + } + String schema = key.getSchema(), table = key.getTable(); + boolean changed = false; + if (schemas.containsKey(key.getSchema())) { + schema = schemas.get(key.getSchema()); + changed = true; + } + + if (tables.containsKey(key.getTable())) { + table = tables.get(key.getTable()); + changed = true; + } + return changed ? new SchemaAndTable(schema, table) : key; + } + + public String getColumnOverride(SchemaAndTable key, String column) { + Map columnOverrides; + String newColumn = null; + columnOverrides = schemaTableColumns.get(key); + if (columnOverrides != null && (newColumn = columnOverrides.get(column)) != null) { + return newColumn; + } + columnOverrides = tableColumns.get(key.getTable()); + if (columnOverrides != null && (newColumn = columnOverrides.get(column)) != null) { + return newColumn; + } + return column; + } + + public String registerSchemaOverride(String oldSchema, String newSchema) { + return schemas.put(oldSchema, newSchema); + } + + public String registerTableOverride(String oldTable, String newTable) { + return tables.put(oldTable, newTable); + } + + public SchemaAndTable registerTableOverride(SchemaAndTable from, SchemaAndTable to) { + return schemaTables.put(from, to); + } + + public String registerColumnOverride(String schema, String table, String oldColumn, String newColumn) { + SchemaAndTable key = new SchemaAndTable(schema, table); + Map columnOverrides = schemaTableColumns.get(key); + if (columnOverrides == null) { + columnOverrides = new HashMap(); + schemaTableColumns.put(key, columnOverrides); + } + return columnOverrides.put(oldColumn, newColumn); + } + + public String registerColumnOverride(String table, String oldColumn, String newColumn) { + Map columnOverrides = tableColumns.get(table); + if (columnOverrides == null) { + columnOverrides = new HashMap(); + tableColumns.put(table, columnOverrides); + } + return columnOverrides.put(oldColumn, newColumn); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/mssql/WindowFunctionTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/mssql/WindowFunctionTest.java index 61e6793a3d..50bb9ce525 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/mssql/WindowFunctionTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/mssql/WindowFunctionTest.java @@ -21,13 +21,16 @@ import com.querydsl.sql.Configuration; import com.querydsl.sql.SQLSerializer; +import com.querydsl.sql.SQLTemplates; import com.querydsl.sql.WindowFunction; import com.querydsl.core.types.Expression; public class WindowFunctionTest { + private static final Configuration configuration = new Configuration(SQLTemplates.DEFAULT); + private static String toString(Expression e) { - return new SQLSerializer(Configuration.DEFAULT).handle(e).toString(); + return new SQLSerializer(configuration).handle(e).toString(); } // ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresTypesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresTypesTest.java deleted file mode 100644 index 46c94187d5..0000000000 --- a/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresTypesTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.querydsl.sql.postgres; - -import java.lang.reflect.Field; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.HashMap; -import java.util.Map; - -import com.querydsl.core.testutil.ExternalDB; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; - -import com.querydsl.sql.Connections; -import com.querydsl.sql.JDBCTypeMapping; -import com.querydsl.sql.PostgresTemplates; -import com.querydsl.sql.SQLTemplates; -import org.junit.experimental.categories.Category; - -@Category(ExternalDB.class) -public class PostgresTypesTest { - - @Before - public void setUp() throws SQLException, ClassNotFoundException { - Connections.initPostgres(); - } - - @After - public void tearDown() throws SQLException { - Connections.close(); - } - - @Test - public void test() throws SQLException, IllegalArgumentException, IllegalAccessException { - SQLTemplates templates = new PostgresTemplates(); - Connections.dropTable(templates, "type_tests"); - Statement stmt = Connections.getStatement(); - stmt.execute("create table type_tests (" + - "_numeric_1 numeric(1), " + - "_numeric_2 numeric(2), " + - "_numeric_3 numeric(3), " + - "_numeric_4 numeric(3), " + - "_smallint smallint, " + - "_integer integer, " + - "_bigint bigint, " + - "_decimal decimal, " + - "_numeric numeric, " + - "_real real, " + - "_double_precision double precision, " + - "_serial serial, " + - "_bigserial bigserial)"); - - Map types = new HashMap(); - for (Field field : java.sql.Types.class.getFields()) { - types.put((Integer)field.get(null), field.getName()); - } - - JDBCTypeMapping jdbcTypeMapping = new JDBCTypeMapping(); - - DatabaseMetaData metadata = Connections.getConnection().getMetaData(); - ResultSet rs = metadata.getColumns(null, null, "type_tests", null); - try { - while (rs.next()) { - System.out.println(rs.getString("COLUMN_NAME")); - System.out.println(types.get(rs.getInt("DATA_TYPE"))); - System.out.println(rs.getInt("COLUMN_SIZE")); - System.out.println(rs.getInt("DECIMAL_DIGITS")); - System.out.println(jdbcTypeMapping.get( - rs.getInt("DATA_TYPE"), - rs.getInt("COLUMN_SIZE"), - rs.getInt("DECIMAL_DIGITS"))); - System.out.println(); - } - } finally { - rs.close(); - } - } - -} From e71eeaa524f09f30e397e94ddf2714d2118b92d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 16:56:52 +0200 Subject: [PATCH 0716/1968] Combine QueryMixin.convert and normalize --- .../querydsl/collections/CollQueryMixin.java | 2 +- .../core/support/DetachableMixin.java | 4 +-- .../com/querydsl/core/support/QueryMixin.java | 33 ++++++++++--------- .../core/types/expr/StringExpression.java | 4 +-- .../java/com/querydsl/jdo/JDOQueryMixin.java | 8 ++--- .../com/querydsl/jpa/AbstractSQLQuery.java | 12 +++---- .../java/com/querydsl/jpa/JPAQueryMixin.java | 8 ++--- 7 files changed, 37 insertions(+), 34 deletions(-) diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java index 2ccf7b0b1a..eb2e65ec4d 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java @@ -44,7 +44,7 @@ public CollQueryMixin(T self, QueryMetadata metadata) { } @Override - protected Predicate normalize(Predicate predicate, boolean where) { + protected Predicate convert(Predicate predicate, Role role) { predicate = (Predicate)ExpressionUtils.extract(predicate); if (predicate != null) { Context context = new Context(); diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java index 5c4c833cb1..857388001b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java @@ -107,7 +107,7 @@ private QueryMetadata projection(Expression... projection) { QueryMetadata metadata = queryMixin.getMetadata().clone(); Expression[] copy = new Expression[projection.length]; for (int i = 0; i < copy.length; i++) { - Expression expr = queryMixin.convert(projection[i], false); + Expression expr = queryMixin.convert(projection[i], QueryMixin.Role.SELECT); copy[i] = nullAsTemplate(expr); } metadata.setProjection(Projections.tuple(copy)); @@ -116,7 +116,7 @@ private QueryMetadata projection(Expression... projection) { private QueryMetadata projection(Expression projection) { QueryMetadata metadata = queryMixin.getMetadata().clone(); - Expression expr = queryMixin.convert(projection, false); + Expression expr = queryMixin.convert(projection, QueryMixin.Role.SELECT); expr = nullAsTemplate(expr); metadata.setProjection(expr); return metadata; diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java index 16bd44fa00..e9442392c6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java @@ -34,6 +34,8 @@ */ public class QueryMixin { + public enum Role { SELECT, FROM, WHERE, GROUP_BY, HAVING, ORDER_BY } + private final QueryMetadata metadata; private final boolean expandAnyPaths; @@ -98,7 +100,7 @@ public T removeFlag(QueryFlag queryFlag) { } public Expression setProjection(Expression e) { - e = convert(e, false); + e = convert(e, Role.SELECT); metadata.setProjection(e); return e; } @@ -106,7 +108,7 @@ public Expression setProjection(Expression e) { public T setProjection(Expression... o) { Expression[] copy = new Expression[o.length]; for (int i = 0; i < copy.length; i++) { - copy[i] = convert(o[i], false); + copy[i] = convert(o[i], Role.SELECT); } metadata.setProjection(Projections.tuple(copy)); return self; @@ -135,7 +137,7 @@ private Path normalizePath(Path expr) { } @SuppressWarnings("rawtypes") - public Expression convert(Expression expr, boolean forOrder) { + public Expression convert(Expression expr, Role role) { if (expandAnyPaths) { if (expr instanceof Path) { expr = (Expression)normalizePath((Path)expr); @@ -144,7 +146,7 @@ public Expression convert(Expression expr, boolean forOrder) { } } if (expr instanceof ProjectionRole) { - return convert(((ProjectionRole) expr).getProjection(), forOrder); + return convert(((ProjectionRole) expr).getProjection(), role); } else if (expr instanceof FactoryExpression && !(expr instanceof FactoryExpressionAdapter)) { return FactoryExpressionUtils.wrap((FactoryExpression)expr); } else { @@ -152,6 +154,11 @@ public Expression convert(Expression expr, boolean forOrder) { } } + protected Predicate convert(Predicate condition, Role role) { + return condition; + } + + public Expression createProjection(Expression[] args) { return Projections.tuple(args); } @@ -223,13 +230,13 @@ public final T groupBy(Expression... o) { } public final T having(Predicate e) { - metadata.addHaving(normalize(e, false)); + metadata.addHaving(convert(e, Role.HAVING)); return self; } public final T having(Predicate... o) { for (Predicate e : o) { - metadata.addHaving(normalize(e, false)); + metadata.addHaving(convert(e, Role.HAVING)); } return self; } @@ -328,19 +335,19 @@ public final T offset(long offset) { } public final T on(Predicate condition) { - metadata.addJoinCondition(normalize(condition, false)); + metadata.addJoinCondition(convert(condition, Role.FROM)); return self; } public final T on(Predicate... conditions) { for (Predicate condition : conditions) { - metadata.addJoinCondition(normalize(condition, false)); + metadata.addJoinCondition(convert(condition, Role.FROM)); } return self; } public final T orderBy(OrderSpecifier spec) { - Expression e = convert(spec.getTarget(), true); + Expression e = convert(spec.getTarget(), Role.ORDER_BY); if (!spec.getTarget().equals(e)) { metadata.addOrderBy(new OrderSpecifier(spec.getOrder(), e)); } else { @@ -404,21 +411,17 @@ public final void setUnique(boolean unique) { } public final T where(Predicate e) { - metadata.addWhere(normalize(e, true)); + metadata.addWhere(convert(e, Role.WHERE)); return self; } public final T where(Predicate... o) { for (Predicate e : o) { - metadata.addWhere(normalize(e, true)); + metadata.addWhere(convert(e, Role.WHERE)); } return self; } - protected Predicate normalize(Predicate condition, boolean where) { - return condition; - } - @Override public final boolean equals(Object o) { if (o == this) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java index 6aaf00140f..39c948266b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java @@ -396,7 +396,7 @@ public StringExpression lower() { /** * Return true if this String matches the given regular expression * - *

Some implementations such as Querydsl JPA will try to convert a regex expression into like + *

Some implementations such as Querydsl JPA will try to convert a regex expression into like * form and will throw an Exception when this fails

* * @param regex @@ -410,7 +410,7 @@ public BooleanExpression matches(Expression regex) { /** * Return true if this String matches the given regular expression * - *

Some implementations such as Querydsl JPA will try to convert a regex expression into like + *

Some implementations such as Querydsl JPA will try to convert a regex expression into like * form and will throw an Exception when this fails

* * @param regex diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java index e3957343e3..0163ed41f1 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java @@ -44,14 +44,14 @@ public JDOQueryMixin(T self, QueryMetadata metadata) { } @Override - protected Predicate normalize(Predicate predicate, boolean where) { + protected Predicate convert(Predicate predicate, Role role) { predicate = (Predicate)ExpressionUtils.extract(predicate); if (predicate != null) { Context context = new Context(); Predicate transformed = (Predicate) predicate.accept(CollectionAnyVisitor.DEFAULT, context); for (int i = 0; i < context.paths.size(); i++) { Path path = context.paths.get(i); - addCondition(context, i, path, where); + addCondition(context, i, path, role); } return transformed; } else { @@ -60,11 +60,11 @@ protected Predicate normalize(Predicate predicate, boolean where) { } @SuppressWarnings("unchecked") - private void addCondition(Context context, int i, Path path, boolean where) { + private void addCondition(Context context, int i, Path path, Role role) { EntityPath alias = context.replacements.get(i); from(alias); Predicate condition = PredicateOperation.create(Ops.IN, alias, path.getMetadata().getParent()); - if (where) { + if (role == Role.WHERE) { super.where(condition); } else { super.having(condition); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractSQLQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractSQLQuery.java index acbfae3443..5aa74543ac 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractSQLQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractSQLQuery.java @@ -13,16 +13,16 @@ */ package com.querydsl.jpa; +import javax.persistence.Entity; + import com.querydsl.core.QueryMetadata; -import com.querydsl.sql.Configuration; -import com.querydsl.sql.ProjectableSQLQuery; import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Operation; import com.querydsl.core.types.TemplateExpression; - -import javax.persistence.Entity; +import com.querydsl.sql.Configuration; +import com.querydsl.sql.ProjectableSQLQuery; /** * Abstract super class for SQLQuery implementation for JPA and Hibernate @@ -39,8 +39,8 @@ private NativeQueryMixin(QueryMetadata metadata) { } @Override - public Expression convert(Expression expr, boolean forOrder) { - return Conversions.convertForNativeQuery(super.convert(expr, forOrder)); + public Expression convert(Expression expr, Role role) { + return Conversions.convertForNativeQuery(super.convert(expr, role)); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index f7def8baf2..38483ced98 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -172,21 +172,21 @@ private Path convertPathForOrder(Path path) { } @Override - public Expression convert(Expression expr, boolean forOrder) { + public Expression convert(Expression expr, Role role) { expr = (Expression) expr.accept(mapAccessVisitor, null); expr = (Expression) expr.accept(listAccessVisitor, null); - if (forOrder) { + if (role == Role.ORDER_BY) { if (expr instanceof Path) { expr = convertPathForOrder((Path)expr); } else { expr = (Expression)expr.accept(replaceVisitor, null); } } - return Conversions.convert(super.convert(expr, forOrder)); + return Conversions.convert(super.convert(expr, role)); } @Override - protected Predicate normalize(Predicate predicate, boolean where) { + protected Predicate convert(Predicate predicate, Role role) { if (predicate != null) { predicate = (Predicate) ExpressionUtils.extract(predicate); } From 737155e0f7f3bfb4a724ed0311135e76e4d91011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 18:54:59 +0200 Subject: [PATCH 0717/1968] Fix date trunc mappings --- querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java | 2 +- .../src/main/java/com/querydsl/sql/OracleTemplates.java | 2 +- .../src/main/java/com/querydsl/sql/TeradataTemplates.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java index 4034ab7353..74902f978c 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java @@ -184,7 +184,7 @@ public DB2Templates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_YEAR, "trunc_timestamp({0}, 'year')"); add(Ops.DateTimeOps.TRUNC_MONTH, "trunc_timestamp({0}, 'month')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc_timestamp({0}, 'week')"); - add(Ops.DateTimeOps.TRUNC_DAY, "trunc_timestamp({0}, 'day')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc_timestamp({0}, 'dd')"); add(Ops.DateTimeOps.TRUNC_HOUR, "trunc_timestamp({0}, 'hour')"); add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc_timestamp({0}, 'minute')"); add(Ops.DateTimeOps.TRUNC_SECOND, "trunc_timestamp({0}, 'second')"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index 85082bc5f6..8322a937a5 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -121,7 +121,7 @@ public OracleTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_YEAR, "trunc({0}, 'year')"); add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0}, 'month')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0}, 'w')"); - add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0}, 'day')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0}, 'dd')"); add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh')"); add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0}, 'mi')"); add(Ops.DateTimeOps.TRUNC_SECOND, "{0}"); // not truncated diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java index 0b6c9a5d7d..33bb31a6ec 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java @@ -102,7 +102,7 @@ public TeradataTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_YEAR, "trunc({0}, 'year')"); add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0}, 'month')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0}, 'w')"); - add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0}, 'day')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0}, 'dd')"); add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh')"); add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0}, 'mi')"); add(Ops.DateTimeOps.TRUNC_SECOND, "{0}"); // not truncated From 61303ec4d0053b9d2674ab022dd6aaf0bacda5f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 20:41:20 +0200 Subject: [PATCH 0718/1968] Better handling for unmapped types --- .../com/querydsl/sql/codegen/MetaDataExporter.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java index 7df5c7c74f..ba4c7f4e7b 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java @@ -13,7 +13,6 @@ */ package com.querydsl.sql.codegen; -import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.io.StringWriter; @@ -23,6 +22,11 @@ import java.sql.SQLException; import java.util.*; +import javax.annotation.Nullable; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import com.google.common.io.Files; import com.mysema.codegen.CodeWriter; import com.mysema.codegen.JavaWriter; @@ -34,8 +38,6 @@ import com.querydsl.codegen.*; import com.querydsl.sql.*; import com.querydsl.sql.codegen.support.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * MetadataExporter exports JDBC metadata to Querydsl query types @@ -266,7 +268,7 @@ private void handleColumn(EntityType classModel, String tableName, ResultSet col columnDigits != null ? columnDigits.intValue() : 0, tableName, columnName); if (clazz == null) { - throw new IllegalStateException("Found no mapping for " + columnType + " (" + tableName + "." + columnName + " " + typeName + ")"); + clazz = Object.class; } TypeCategory fieldType = TypeCategory.get(clazz.getName()); if (Number.class.isAssignableFrom(clazz)) { From 8f66371bb4f08ba9a5ed666f3fa3225675a2aef3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 21:50:21 +0200 Subject: [PATCH 0719/1968] Fix querydsl-docs dependencies --- querydsl-docs/pom.xml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/querydsl-docs/pom.xml b/querydsl-docs/pom.xml index a56858b75a..2bf62d7661 100644 --- a/querydsl-docs/pom.xml +++ b/querydsl-docs/pom.xml @@ -91,4 +91,27 @@ + + + jboss + https://repository.jboss.org/nexus/content/repositories/releases + + true + + + false + + + + jboss-thirdparty + https://repository.jboss.org/nexus/content/repositories/thirdparty-releases/ + + true + + + false + + + + From 15e4f796252526b5bc730bd9393b6d5f139615da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 17:57:44 +0200 Subject: [PATCH 0720/1968] Simplify Operator usage --- .../collections/CollQueryFunctions.java | 2 +- .../collections/CollQuerySerializer.java | 6 +- .../collections/DefaultQueryEngine.java | 2 +- .../core/support/CollectionAnyVisitor.java | 2 +- .../querydsl/core/support/Expressions.java | 20 +- .../querydsl/core/support/SerializerBase.java | 4 +- .../querydsl/core/types/HashCodeVisitor.java | 2 +- .../querydsl/core/types/JavaTemplates.java | 2 +- .../com/querydsl/core/types/Operation.java | 2 +- .../querydsl/core/types/OperationImpl.java | 39 +- .../com/querydsl/core/types/Operator.java | 6 +- .../com/querydsl/core/types/OperatorImpl.java | 84 --- .../java/com/querydsl/core/types/Ops.java | 510 ++++++------------ .../com/querydsl/core/types/PathType.java | 7 +- .../core/types/PredicateOperation.java | 6 +- .../com/querydsl/core/types/Templates.java | 16 +- .../querydsl/core/types/ToStringVisitor.java | 2 +- .../core/types/expr/BooleanOperation.java | 12 +- .../core/types/expr/CollectionOperation.java | 10 +- .../core/types/expr/ComparableExpression.java | 11 +- .../core/types/expr/ComparableOperation.java | 8 +- .../core/types/expr/DateOperation.java | 12 +- .../core/types/expr/DateTimeOperation.java | 12 +- .../core/types/expr/DslOperation.java | 12 +- .../core/types/expr/EnumOperation.java | 12 +- .../core/types/expr/NumberOperation.java | 12 +- .../core/types/expr/SimpleOperation.java | 12 +- .../core/types/expr/StringOperation.java | 12 +- .../core/types/expr/TimeOperation.java | 12 +- .../core/types/query/ListSubQuery.java | 2 +- .../java/com/querydsl/core/CoverageTest.java | 8 +- .../core/serialization/JavaTemplatesTest.java | 2 +- .../querydsl/core/types/OperatorImplTest.java | 25 - .../com/querydsl/jdo/JDOQLSerializer.java | 2 +- .../java/com/querydsl/jpa/HQLTemplates.java | 4 +- .../main/java/com/querydsl/jpa/JPQLOps.java | 31 +- .../java/com/querydsl/jpa/JPQLSerializer.java | 8 +- .../java/com/querydsl/jpa/JPQLTemplates.java | 2 +- .../com/querydsl/jpa/NativeSQLSerializer.java | 2 +- .../querydsl/jpa/JPAQueryMutability2Test.java | 7 +- .../java/com/querydsl/lucene3/LuceneOps.java | 17 +- .../querydsl/lucene3/LuceneSerializer.java | 2 +- .../lucene3/LuceneSerializerTest.java | 2 +- .../java/com/querydsl/lucene4/LuceneOps.java | 17 +- .../querydsl/lucene4/LuceneSerializer.java | 2 +- .../lucene4/LuceneSerializerTest.java | 2 +- .../java/com/querydsl/mongodb/MongodbOps.java | 14 +- .../querydsl/mongodb/MongodbSerializer.java | 4 +- .../com/querydsl/scala/Expressions.scala | 20 +- .../scala/com/querydsl/scala/Operations.scala | 24 +- .../querydsl/spatial/GeometryOperation.java | 12 +- .../querydsl/spatial/LineStringOperation.java | 12 +- .../com/querydsl/spatial/PointOperation.java | 12 +- .../querydsl/spatial/PolygonOperation.java | 12 +- .../java/com/querydsl/spatial/SpatialOps.java | 182 +++---- .../hibernate/HibernateSpatialSupport.java | 4 +- .../spatial/jts/JTSGeometryOperation.java | 12 +- .../spatial/jts/JTSLineStringOperation.java | 12 +- .../spatial/jts/JTSPointOperation.java | 12 +- .../spatial/jts/JTSPolygonOperation.java | 12 +- .../sql/spatial/SpatialTemplatesSupport.java | 6 +- .../com/querydsl/sql/DetachableSQLQuery.java | 2 +- .../com/querydsl/sql/RelationalPathBase.java | 2 +- .../java/com/querydsl/sql/SQLExpressions.java | 4 +- .../main/java/com/querydsl/sql/SQLOps.java | 154 ++---- .../java/com/querydsl/sql/SQLSerializer.java | 2 +- .../java/com/querydsl/sql/UnionUtils.java | 2 +- .../java/com/querydsl/sql/WindowOver.java | 6 +- .../java/com/querydsl/sql/WithinGroup.java | 8 +- .../com/querydsl/sql/SQLSubQueryTest.java | 7 +- 70 files changed, 556 insertions(+), 965 deletions(-) delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/OperatorImpl.java delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/OperatorImplTest.java diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryFunctions.java b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryFunctions.java index c6d25995a3..dd6f27b371 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryFunctions.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryFunctions.java @@ -204,7 +204,7 @@ private static Number reduce(Iterable source, BinaryFunction f) { return result; } - public static Number aggregate(Collection source, Expression expr, Operator aggregator) { + public static Number aggregate(Collection source, Expression expr, Operator aggregator) { if (aggregator == Ops.AggOps.AVG_AGG) { Number sum = reduce(source, SUM); return sum.doubleValue() / source.size(); diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java b/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java index d1af853e74..af85a58ec2 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/CollQuerySerializer.java @@ -50,7 +50,7 @@ public final class CollQuerySerializer extends SerializerBase> WRAPPER_TYPES = ImmutableSet.copyOf(Primitives.allWrapperTypes()); - private static final Map, String> OPERATOR_SYMBOLS = Maps.newIdentityHashMap(); + private static final Map OPERATOR_SYMBOLS = Maps.newIdentityHashMap(); private static final Map, String> CAST_SUFFIXES = Maps.newHashMap(); @@ -169,7 +169,7 @@ public Void visit(SubQueryExpression expr, Void context) { throw new IllegalArgumentException("Not supported"); } - private void visitCast(Operator operator, Expression source, Class targetType) { + private void visitCast(Operator operator, Expression source, Class targetType) { if (Number.class.isAssignableFrom(source.getType()) && !Constant.class.isInstance(source)) { append("new ").append(source.getType().getSimpleName()).append("("); handle(source); @@ -186,7 +186,7 @@ private void visitCast(Operator operator, Expression source, Class targ } @Override - protected void visitOperation(Class type, Operator operator, List> args) { + protected void visitOperation(Class type, Operator operator, List> args) { if (Ops.aggOps.contains(operator)) { throw new UnsupportedOperationException("Aggregation operators are only supported as single expressions"); } diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java b/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java index 3c5fedb740..7683694e04 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/DefaultQueryEngine.java @@ -225,7 +225,7 @@ private void order(QueryMetadata metadata, List> sources, List private List project(QueryMetadata metadata, List> sources, List list) { Expression projection = metadata.getProjection(); - Operator aggregator = null; + Operator aggregator = null; if (projection instanceof Operation && Ops.aggOps.contains(((Operation)projection).getOperator())) { Operation aggregation = (Operation)projection; aggregator = aggregation.getOperator(); diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java index 7209456f97..441a1b96ba 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java @@ -90,7 +90,7 @@ public Expression visit(Operation expr, Context context) { } if (context.replace) { if (expr.getType().equals(Boolean.class)) { - Predicate predicate = new PredicateOperation((Operator)expr.getOperator(), ImmutableList.copyOf(args)); + Predicate predicate = new PredicateOperation(expr.getOperator(), ImmutableList.copyOf(args)); return !context.paths.isEmpty() ? exists(context, predicate) : predicate; } else { return new OperationImpl(expr.getType(), expr.getOperator(), ImmutableList.copyOf(args)); diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java index 3f8617c175..e16407dad0 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java @@ -271,7 +271,7 @@ public static ExtendedSubQueryExpression subQuery(Class type, QueryMet * @param args * @return */ - public static BooleanExpression predicate(Operator operation, Expression... args) { + public static BooleanExpression predicate(Operator operation, Expression... args) { return BooleanOperation.create(operation, args); } @@ -283,7 +283,7 @@ public static BooleanExpression predicate(Operator operation, Expressio * @param args * @return */ - public static SimpleExpression operation(Class type, Operator operator, + public static SimpleExpression operation(Class type, Operator operator, Expression... args) { return SimpleOperation.create(type, operator, args); } @@ -296,7 +296,7 @@ public static SimpleExpression operation(Class type, Operator DslExpression dslOperation(Class type, Operator operator, + public static DslExpression dslOperation(Class type, Operator operator, Expression... args) { return DslOperation.create(type, operator, args); } @@ -308,7 +308,7 @@ public static DslExpression dslOperation(Class type, Operator operation, Expression... args) { + public static BooleanExpression booleanOperation(Operator operation, Expression... args) { return predicate(operation, args); } @@ -321,7 +321,7 @@ public static BooleanExpression booleanOperation(Operator operation, Ex * @return */ public static > ComparableExpression comparableOperation(Class type, - Operator operator, Expression... args) { + Operator operator, Expression... args) { return ComparableOperation.create(type, operator, args); } @@ -334,7 +334,7 @@ public static > ComparableExpression comparableOperat * @return */ public static > DateExpression dateOperation(Class type, - Operator operator, Expression... args) { + Operator operator, Expression... args) { return DateOperation.create(type, operator, args); } @@ -347,7 +347,7 @@ public static > DateExpression dateOperation(Class * @return */ public static > DateTimeExpression dateTimeOperation(Class type, - Operator operator, Expression... args) { + Operator operator, Expression... args) { return DateTimeOperation.create(type, operator, args); } @@ -360,7 +360,7 @@ public static > DateTimeExpression dateTimeOperation( * @return */ public static > TimeExpression timeOperation(Class type, - Operator operator, Expression... args) { + Operator operator, Expression... args) { return TimeOperation.create(type, operator, args); } @@ -373,7 +373,7 @@ public static > TimeExpression timeOperation(Class * @return */ public static > NumberExpression numberOperation(Class type, - Operator operator, Expression... args) { + Operator operator, Expression... args) { return NumberOperation.create(type, operator, args); } @@ -384,7 +384,7 @@ public static > NumberExpression numberOpera * @param args * @return */ - public static StringExpression stringOperation(Operator operator, Expression... args) { + public static StringExpression stringOperation(Operator operator, Expression... args) { return StringOperation.create(operator, args); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java index a4e852c81a..775da6da15 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java @@ -97,7 +97,7 @@ public int getLength() { return builder.length(); } - protected final Template getTemplate(Operator op) { + protected final Template getTemplate(Operator op) { return templates.getTemplate(op); } @@ -265,7 +265,7 @@ public Void visit(Path path, Void context) { return null; } - protected void visitOperation(Class type, Operator operator, final List> args) { + protected void visitOperation(Class type, Operator operator, final List> args) { final Template template = templates.getTemplate(operator); if (template != null) { final int precedence = templates.getPrecedence(operator); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/HashCodeVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/types/HashCodeVisitor.java index 48e41abc9d..21fa78dd0b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/HashCodeVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/HashCodeVisitor.java @@ -25,7 +25,7 @@ public Integer visit(FactoryExpression expr, Void context) { @Override public Integer visit(Operation expr, Void context) { - int result = expr.getOperator().hashCode(); + int result = expr.getOperator().name().hashCode(); return 31 * result + expr.getArgs().hashCode(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java index 3d20f93208..ecfd05683b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java @@ -103,7 +103,7 @@ public JavaTemplates() { // Math try { for (Field f : Ops.MathOps.class.getFields()) { - Operator op = (Operator) f.get(null); + Operator op = (Operator) f.get(null); add(op, "Math." + getTemplate(op)); } } catch (IllegalAccessException e) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Operation.java b/querydsl-core/src/main/java/com/querydsl/core/types/Operation.java index c4b97b965f..f92ad0d768 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Operation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Operation.java @@ -42,6 +42,6 @@ public interface Operation extends Expression { * * @return */ - Operator getOperator(); + Operator getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java index 14da18db93..abf2e5dccb 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java @@ -13,12 +13,10 @@ */ package com.querydsl.core.types; -import javax.annotation.concurrent.Immutable; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.lang.reflect.Field; import java.util.List; +import javax.annotation.concurrent.Immutable; + import com.google.common.collect.ImmutableList; @@ -36,21 +34,21 @@ public class OperationImpl extends ExpressionBase implements Operation private final ImmutableList> args; - private final Operator operator; + private final Operator operator; - public static Operation create(Class type, Operator operator, Expression one) { + public static Operation create(Class type, Operator operator, Expression one) { return new OperationImpl(type, operator, ImmutableList.>of(one)); } - public static Operation create(Class type, Operator operator, Expression one, Expression two) { + public static Operation create(Class type, Operator operator, Expression one, Expression two) { return new OperationImpl(type, operator, ImmutableList.of(one, two)); } - protected OperationImpl(Class type, Operator operator, Expression... args) { + protected OperationImpl(Class type, Operator operator, Expression... args) { this(type, operator, ImmutableList.copyOf(args)); } - public OperationImpl(Class type, Operator operator, ImmutableList> args) { + public OperationImpl(Class type, Operator operator, ImmutableList> args) { super(type); this.operator = operator; this.args = args; @@ -67,7 +65,7 @@ public final List> getArgs() { } @Override - public final Operator getOperator() { + public final Operator getOperator() { return operator; } @@ -90,25 +88,4 @@ public final R accept(Visitor v, C context) { return v.visit(this, context); } - /** - * Resets operator field to singleton version - * - * @param ois - * @throws ClassNotFoundException - * @throws IOException - */ - private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { - try { - ois.defaultReadObject(); - Field field = OperationImpl.class.getDeclaredField("operator"); - field.setAccessible(true); - field.set(this, OperatorImpl.OPS.get(operator.getId())); - } catch (NoSuchFieldException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - - } - } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java index 8dae456926..5c3674c34d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java @@ -19,16 +19,14 @@ * Operator represents operator symbols * * @author tiwe - * - * @param related expression type */ -public interface Operator extends Serializable{ +public interface Operator extends Serializable{ /** * Get the unique id for this Operator * * @return */ - String getId(); + String name(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/OperatorImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/OperatorImpl.java deleted file mode 100644 index b30ff7c6ad..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/types/OperatorImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.types; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.concurrent.Immutable; - -/** - * OperatorImpl is the default implementation of the {@link Operator} interface - */ -@Immutable -public final class OperatorImpl implements Operator { - - static final Map> OPS = new HashMap>(150); - - static { - try { - // initialize all fields of Ops - List fields = new ArrayList(); - fields.addAll(Arrays.asList(Ops.class.getFields())); - for (Class cl : Ops.class.getClasses()) { - fields.addAll(Arrays.asList(cl.getFields())); - } - for (Field field : fields) { - field.get(null); - } - } catch (Exception e) { - throw new RuntimeException(e.getMessage(), e); - } - } - - private static final long serialVersionUID = -2435035383548549877L; - - private final String id; - - private final int hashCode; - - public OperatorImpl(String ns, String local) { - this(ns + "#" + local); - } - - private OperatorImpl(String id) { - this.id = id; - this.hashCode = id.hashCode(); - OPS.put(id, this); - } - - /** - * Get the unique id for this Operator - * - * @return - */ - @Override - public String getId() { - return id; - } - - @Override - public String toString() { - return id; - } - - @Override - public int hashCode() { - return hashCode; - } -} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java b/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java index 598f7b08ce..2b6d8348bf 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java @@ -22,167 +22,107 @@ * * @author tiwe */ -public final class Ops { - - private static final String NS = Ops.class.getName(); +public enum Ops implements Operator { // general - public static final Operator EQ = new OperatorImpl(NS, "EQ"); - - public static final Operator NE = new OperatorImpl(NS, "NE"); - - public static final Operator IS_NULL = new OperatorImpl(NS, "IS_NULL"); - - public static final Operator IS_NOT_NULL = new OperatorImpl(NS, "IS_NOT_NULL"); - - public static final Operator INSTANCE_OF = new OperatorImpl(NS, "INSTANCE_OF"); - - public static final Operator NUMCAST = new OperatorImpl(NS, "NUMCAST"); - - public static final Operator STRING_CAST = new OperatorImpl(NS, "STRING_CAST"); - - public static final Operator ALIAS = new OperatorImpl(NS, "ALIAS"); - - public static final Operator LIST = new OperatorImpl(NS, "LIST"); - - public static final Operator SINGLETON = new OperatorImpl(NS, "SINGLETON"); - - public static final Operator ORDINAL = new OperatorImpl(NS, "ORDINAL"); - - public static final Operator WRAPPED = new OperatorImpl(NS, "WRAPPED"); - + EQ, + NE, + IS_NULL, + IS_NOT_NULL, + INSTANCE_OF, + NUMCAST, + STRING_CAST, + ALIAS, + LIST, + SINGLETON, + ORDINAL, + WRAPPED, // collection - public static final Operator IN = new OperatorImpl(NS, "IN"); // cmp. contains - - public static final Operator NOT_IN = new OperatorImpl(NS, "NOT_IN"); - - public static final Operator COL_IS_EMPTY = new OperatorImpl(NS, "COL_IS_EMPTY"); - - public static final Operator COL_SIZE = new OperatorImpl(NS, "COL_SIZE"); - + IN, // cmp. contains + NOT_IN, + COL_IS_EMPTY, + COL_SIZE, // array - public static final Operator ARRAY_SIZE = new OperatorImpl(NS, "ARRAY_SIZE"); + ARRAY_SIZE, // map - public static final Operator CONTAINS_KEY = new OperatorImpl(NS, "CONTAINS_KEY"); - - public static final Operator CONTAINS_VALUE = new OperatorImpl(NS, "CONTAINS_VALUE"); - - public static final Operator MAP_SIZE = new OperatorImpl(NS, "MAP_SIZE"); - - public static final Operator MAP_IS_EMPTY = new OperatorImpl(NS, "MAP_IS_EMPTY"); + CONTAINS_KEY, + CONTAINS_VALUE, + MAP_SIZE, + MAP_IS_EMPTY, // Boolean - public static final Operator AND = new OperatorImpl(NS, "AND"); - - public static final Operator NOT = new OperatorImpl(NS, "NOT"); - - public static final Operator OR = new OperatorImpl(NS, "OR"); - - public static final Operator XNOR = new OperatorImpl(NS, "XNOR"); - - public static final Operator XOR = new OperatorImpl(NS, "XOR"); + AND, + NOT, + OR, + XNOR, + XOR, // Comparable - public static final Operator BETWEEN = new OperatorImpl(NS, "BETWEEN"); - - public static final Operator GOE = new OperatorImpl(NS, "GOE"); - - public static final Operator GT = new OperatorImpl(NS, "GT"); - - public static final Operator LOE = new OperatorImpl(NS, "LOE"); - - public static final Operator LT = new OperatorImpl(NS, "LT"); + BETWEEN, + GOE, + GT, + LOE, + LT, // Number - public static final Operator NEGATE = new OperatorImpl(NS, "NEGATE"); - - public static final Operator ADD = new OperatorImpl(NS, "ADD"); - - public static final Operator DIV = new OperatorImpl(NS, "DIV"); - - public static final Operator MULT = new OperatorImpl(NS, "MULT"); - - public static final Operator SUB = new OperatorImpl(NS, "SUB"); - - public static final Operator MOD = new OperatorImpl(NS, "MOD"); + NEGATE, + ADD, + DIV, + MULT, + SUB, + MOD, // String - public static final Operator CHAR_AT = new OperatorImpl(NS, "CHAR_AT"); - - public static final Operator CONCAT = new OperatorImpl(NS, "CONCAT"); - - public static final Operator LOWER = new OperatorImpl(NS, "LOWER"); - - public static final Operator SUBSTR_1ARG = new OperatorImpl(NS, "SUBSTR"); - - public static final Operator SUBSTR_2ARGS = new OperatorImpl(NS, "SUBSTR2"); - - public static final Operator TRIM = new OperatorImpl(NS, "TRIM"); - - public static final Operator UPPER = new OperatorImpl(NS, "UPPER"); - - public static final Operator MATCHES = new OperatorImpl(NS, "MATCHES"); - - public static final Operator MATCHES_IC = new OperatorImpl(NS, "MATCHES_IC"); - - public static final Operator STRING_LENGTH = new OperatorImpl(NS, "STRING_LENGTH"); - - public static final Operator STRING_IS_EMPTY = new OperatorImpl(NS, "STRING_IS_EMPTY"); - - public static final Operator STARTS_WITH = new OperatorImpl(NS, "STARTS_WITH"); - - public static final Operator STARTS_WITH_IC = new OperatorImpl(NS, "STATS_WITH_IC"); - - public static final Operator INDEX_OF_2ARGS = new OperatorImpl(NS, "INDEX_OF2"); - - public static final Operator INDEX_OF = new OperatorImpl(NS, "INDEX_OF"); - - public static final Operator EQ_IGNORE_CASE = new OperatorImpl(NS, "EQ_IGNORE_CASE"); - - public static final Operator ENDS_WITH = new OperatorImpl(NS, "ENDS_WITH"); - - public static final Operator ENDS_WITH_IC = new OperatorImpl(NS, "ENDS_WITH_IC"); - - public static final Operator STRING_CONTAINS = new OperatorImpl(NS, "STRING_CONTAINS"); - - public static final Operator STRING_CONTAINS_IC = new OperatorImpl(NS, "STRING_CONTAINS_IC"); - - public static final Operator LIKE = new OperatorImpl(NS, "LIKE"); - - public static final Operator LIKE_ESCAPE = new OperatorImpl(NS, "LIKE_ESCAPE"); + CHAR_AT, + CONCAT, + LOWER, + SUBSTR_1ARG, + SUBSTR_2ARGS, + TRIM, + UPPER, + MATCHES, + MATCHES_IC, + STRING_LENGTH, + STRING_IS_EMPTY, + STARTS_WITH, + STARTS_WITH_IC, + INDEX_OF_2ARGS, + INDEX_OF, + EQ_IGNORE_CASE, + ENDS_WITH, + ENDS_WITH_IC, + STRING_CONTAINS, + STRING_CONTAINS_IC, + LIKE, + LIKE_ESCAPE, // case - public static final Operator CASE = new OperatorImpl(NS, "CASE"); - - public static final Operator CASE_WHEN = new OperatorImpl(NS, "CASE_WHEN"); - - public static final Operator CASE_ELSE = new OperatorImpl(NS, "CASE_ELSE"); + CASE, + CASE_WHEN, + CASE_ELSE, // case for eq - public static final Operator CASE_EQ = new OperatorImpl(NS, "CASE_EQ"); - - public static final Operator CASE_EQ_WHEN = new OperatorImpl(NS, "CASE_EQ_WHEN"); - - public static final Operator CASE_EQ_ELSE = new OperatorImpl(NS, "CASE_EQ_ELSE"); + CASE_EQ, + CASE_EQ_WHEN, + CASE_EQ_ELSE, // coalesce - public static final Operator COALESCE = new OperatorImpl(NS, "COALESCE"); - - public static final Operator NULLIF = new OperatorImpl(NS, "NULLIF"); + COALESCE, + NULLIF, // subquery operations - public static final Operator EXISTS = new OperatorImpl(NS, "EXISTS"); + EXISTS; - public static final Set> equalsOps = ImmutableSet.>of(EQ); + public static final Set equalsOps = ImmutableSet.of(EQ); - public static final Set> notEqualsOps = ImmutableSet.>of(NE); + public static final Set notEqualsOps = ImmutableSet.of(NE); - public static final Set> compareOps = ImmutableSet.>of(EQ, NE, LT, GT, GOE, LOE); + public static final Set compareOps = ImmutableSet.of(EQ, NE, LT, GT, GOE, LOE); - public static final Set> aggOps = ImmutableSet.of( + public static final Set aggOps = ImmutableSet.of( Ops.AggOps.AVG_AGG, Ops.AggOps.COUNT_AGG, Ops.AggOps.COUNT_DISTINCT_AGG, @@ -194,237 +134,125 @@ public final class Ops { * Aggregation operators */ @SuppressWarnings("unchecked") - public static final class AggOps{ - - private static final String NS = AggOps.class.getName(); - - public static final Operator BOOLEAN_ALL = new OperatorImpl(NS, "BOOLEAN_ALL"); - - public static final Operator BOOLEAN_ANY = new OperatorImpl(NS, "BOOLEAN_ANY"); - - public static final Operator MAX_AGG = new OperatorImpl(NS, "MAX_AGG"); - - public static final Operator MIN_AGG = new OperatorImpl(NS, "MIN_AGG"); - - public static final Operator AVG_AGG = new OperatorImpl(NS, "AVG_AGG"); - - public static final Operator SUM_AGG = new OperatorImpl(NS, "SUM_AGG"); - - public static final Operator COUNT_AGG = new OperatorImpl(NS, "COUNT_AGG"); - - public static final Operator COUNT_DISTINCT_AGG = new OperatorImpl(NS, "COUNT_DISTINCT_AGG"); - - public static final Operator COUNT_DISTINCT_ALL_AGG = new OperatorImpl(NS, "COUNT_DISTINCT_ALL_AGG"); - - public static final Operator COUNT_ALL_AGG = new OperatorImpl(NS, "COUNT_ALL_AGG"); - - private AggOps() {} + public enum AggOps implements Operator { + BOOLEAN_ALL, + BOOLEAN_ANY, + MAX_AGG, + MIN_AGG, + AVG_AGG, + SUM_AGG, + COUNT_AGG, + COUNT_DISTINCT_AGG, + COUNT_DISTINCT_ALL_AGG, + COUNT_ALL_AGG } /** * Quantification operators */ @SuppressWarnings("unchecked") - public static final class QuantOps { - - private static final String NS = QuantOps.class.getName(); - - public static final Operator AVG_IN_COL = new OperatorImpl(NS, "AVG_IN_COL"); - - public static final Operator MAX_IN_COL = new OperatorImpl(NS, "MAX_IN_COL"); - - public static final Operator MIN_IN_COL = new OperatorImpl(NS, "MIN_IN_COL"); - - public static final Operator ANY = new OperatorImpl(NS, "ANY"); - - public static final Operator ALL = new OperatorImpl(NS, "ALL"); - - private QuantOps() {} + public enum QuantOps implements Operator { + AVG_IN_COL, + MAX_IN_COL, + MIN_IN_COL, + ANY, + ALL } /** * Date and time operators */ @SuppressWarnings("unchecked") - public static final class DateTimeOps { - - private static final String NS = DateTimeOps.class.getName(); - - public static final Operator DATE = new OperatorImpl(NS, "DATE"); - - public static final Operator CURRENT_DATE = new OperatorImpl(NS, "CURRENT_DATE"); - - public static final Operator CURRENT_TIME = new OperatorImpl(NS, "CURRENT_TIME"); - - public static final Operator CURRENT_TIMESTAMP = new OperatorImpl(NS, "CURRENT_TIMESTAMP"); - - public static final Operator ADD_YEARS = new OperatorImpl(NS, "ADD_YEARS"); - - public static final Operator ADD_MONTHS = new OperatorImpl(NS, "ADD_MONTHS"); - - public static final Operator ADD_WEEKS = new OperatorImpl(NS, "ADD_WEEKS"); - - public static final Operator ADD_DAYS = new OperatorImpl(NS, "ADD_DAYS"); - - public static final Operator ADD_HOURS = new OperatorImpl(NS, "ADD_HOURS"); - - public static final Operator ADD_MINUTES = new OperatorImpl(NS, "ADD_MINUTES"); - - public static final Operator ADD_SECONDS = new OperatorImpl(NS, "ADD_SECONDS"); - - public static final Operator DIFF_YEARS = new OperatorImpl(NS, "DIFF_YEARS"); - - public static final Operator DIFF_MONTHS = new OperatorImpl(NS, "DIFF_MONTHS"); - - public static final Operator DIFF_WEEKS = new OperatorImpl(NS, "DIFF_WEEKS"); - - public static final Operator DIFF_DAYS = new OperatorImpl(NS, "DIFF_DAYS"); - - public static final Operator DIFF_HOURS = new OperatorImpl(NS, "DIFF_HOURS"); - - public static final Operator DIFF_MINUTES = new OperatorImpl(NS, "DIFF_MINUTES"); - - public static final Operator DIFF_SECONDS = new OperatorImpl(NS, "DIFF_SECONDS"); - - public static final Operator TRUNC_YEAR = new OperatorImpl(NS, "TRUNC_YEAR"); - - public static final Operator TRUNC_MONTH = new OperatorImpl(NS, "TRUNC_MONTH"); - - public static final Operator TRUNC_WEEK = new OperatorImpl(NS, "TRUNC_WEEK"); - - public static final Operator TRUNC_DAY = new OperatorImpl(NS, "TRUNC_DAY"); - - public static final Operator TRUNC_HOUR = new OperatorImpl(NS, "TRUNC_HOUR"); - - public static final Operator TRUNC_MINUTE = new OperatorImpl(NS, "TRUNC_MINUTE"); - - public static final Operator TRUNC_SECOND = new OperatorImpl(NS, "TRUNC_SECOND"); - - public static final Operator HOUR = new OperatorImpl(NS, "HOUR"); - - public static final Operator MINUTE = new OperatorImpl(NS, "MINUTE"); - - public static final Operator MONTH = new OperatorImpl(NS, "MONTH"); - - public static final Operator SECOND = new OperatorImpl(NS, "SECOND"); - - public static final Operator MILLISECOND = new OperatorImpl(NS, "MILLISECOND"); - - public static final Operator SYSDATE = new OperatorImpl(NS, "SYSDATE"); - - public static final Operator YEAR = new OperatorImpl(NS, "YEAR"); - - public static final Operator WEEK = new OperatorImpl(NS, "WEEK"); - - public static final Operator YEAR_MONTH = new OperatorImpl(NS, "YEAR_MONTH"); - - public static final Operator YEAR_WEEK = new OperatorImpl(NS, "YEAR_WEEK"); - - public static final Operator DAY_OF_WEEK = new OperatorImpl(NS, "DAY_OF_WEEK"); - - public static final Operator DAY_OF_MONTH = new OperatorImpl(NS, "DAY_OF_MONTH"); - - public static final Operator DAY_OF_YEAR = new OperatorImpl(NS, "DAY_OF_YEAR"); - - private DateTimeOps() {} + public enum DateTimeOps implements Operator { + DATE, + CURRENT_DATE, + CURRENT_TIME, + CURRENT_TIMESTAMP, + ADD_YEARS, + ADD_MONTHS, + ADD_WEEKS, + ADD_DAYS, + ADD_HOURS, + ADD_MINUTES, + ADD_SECONDS, + DIFF_YEARS, + DIFF_MONTHS, + DIFF_WEEKS, + DIFF_DAYS, + DIFF_HOURS, + DIFF_MINUTES, + DIFF_SECONDS, + TRUNC_YEAR, + TRUNC_MONTH, + TRUNC_WEEK, + TRUNC_DAY, + TRUNC_HOUR, + TRUNC_MINUTE, + TRUNC_SECOND, + HOUR, + MINUTE, + MONTH, + SECOND, + MILLISECOND, + SYSDATE, + YEAR, + WEEK, + YEAR_MONTH, + YEAR_WEEK, + DAY_OF_WEEK, + DAY_OF_MONTH, + DAY_OF_YEAR } /** * Math operators * */ - public static final class MathOps { - - private static final String NS = MathOps.class.getName(); - - public static final Operator ABS = new OperatorImpl(NS, "ABS"); - - public static final Operator ACOS = new OperatorImpl(NS, "ACOS"); - - public static final Operator ASIN = new OperatorImpl(NS, "ASIN"); - - public static final Operator ATAN = new OperatorImpl(NS, "ATAN"); - - public static final Operator CEIL = new OperatorImpl(NS, "CEIL"); - - public static final Operator COS = new OperatorImpl(NS, "COS"); - - public static final Operator TAN = new OperatorImpl(NS, "TAN"); - - public static final Operator SQRT = new OperatorImpl(NS, "SQRT"); - - public static final Operator SIN = new OperatorImpl(NS, "SIN"); - - public static final Operator ROUND = new OperatorImpl(NS, "ROUND"); - - public static final Operator ROUND2 = new OperatorImpl(NS, "ROUND"); - - public static final Operator RANDOM = new OperatorImpl(NS, "RANDOM"); - - public static final Operator RANDOM2 = new OperatorImpl(NS, "RANDOM2"); - - public static final Operator POWER = new OperatorImpl(NS, "POWER"); - - public static final Operator MIN = new OperatorImpl(NS, "MIN"); - - public static final Operator MAX = new OperatorImpl(NS, "MAX"); - - public static final Operator LOG = new OperatorImpl(NS, "LOG"); - - public static final Operator FLOOR = new OperatorImpl(NS, "FLOOR"); - - public static final Operator EXP = new OperatorImpl(NS, "EXP"); - - public static final Operator COSH = new OperatorImpl(NS, "COSH"); - - public static final Operator COT = new OperatorImpl(NS, "COT"); - - public static final Operator COTH = new OperatorImpl(NS, "COTH"); - - public static final Operator DEG = new OperatorImpl(NS, "DEG"); - - public static final Operator LN = new OperatorImpl(NS, "LN"); - - public static final Operator RAD = new OperatorImpl(NS, "RAD"); - - public static final Operator SIGN = new OperatorImpl(NS, "SIGN"); - - public static final Operator SINH = new OperatorImpl(NS, "SINH"); - - public static final Operator TANH = new OperatorImpl(NS, "TANH"); - - private MathOps() {} + public enum MathOps implements Operator { + ABS, + ACOS, + ASIN, + ATAN, + CEIL, + COS, + TAN, + SQRT, + SIN, + ROUND, + ROUND2, + RANDOM, + RANDOM2, + POWER, + MIN, + MAX, + LOG, + FLOOR, + EXP, + COSH, + COT, + COTH, + DEG, + LN, + RAD, + SIGN, + SINH, + TANH } /** * String operators */ - public static final class StringOps { - - private static final String NS = StringOps.class.getName(); - - public static final Operator LEFT = new OperatorImpl(NS, "LEFT"); - - public static final Operator RIGHT = new OperatorImpl(NS, "RIGHT"); - - public static final Operator LTRIM = new OperatorImpl(NS, "LTRIM"); - - public static final Operator RTRIM = new OperatorImpl(NS, "RTRIM"); - - public static final Operator LPAD = new OperatorImpl(NS, "LPAD"); - - public static final Operator RPAD = new OperatorImpl(NS, "RPAD"); - - public static final Operator LPAD2 = new OperatorImpl(NS, "LPAD2"); - - public static final Operator RPAD2 = new OperatorImpl(NS, "RPAD2"); - - public static final Operator LOCATE = new OperatorImpl(NS, "LOCATE"); - - public static final Operator LOCATE2 = new OperatorImpl(NS, "LOCATE2"); - - private StringOps() {} + public enum StringOps implements Operator { + LEFT, + RIGHT, + LTRIM, + RTRIM, + LPAD, + RPAD, + LPAD2, + RPAD2, + LOCATE, + LOCATE2 } - private Ops() {} } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java index 2dc4790fcb..b67d313f6e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java @@ -16,7 +16,7 @@ /** * PathType represents the relation of a {@link Path} to its parent */ -public enum PathType implements Operator { +public enum PathType implements Operator { /** * Indexed array access (array[i]) */ @@ -67,9 +67,4 @@ public enum PathType implements Operator { */ VARIABLE; - @Override - public String getId() { - return name(); - } - } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PredicateOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/PredicateOperation.java index 303ee59e94..8c01be12ab 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PredicateOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PredicateOperation.java @@ -32,15 +32,15 @@ public final class PredicateOperation extends OperationImpl implements @Nullable private volatile Predicate not; - public static PredicateOperation create(Operator operator, Expression one) { + public static PredicateOperation create(Operator operator, Expression one) { return new PredicateOperation(operator, ImmutableList.>of(one)); } - public static PredicateOperation create(Operator operator, Expression one, Expression two) { + public static PredicateOperation create(Operator operator, Expression one, Expression two) { return new PredicateOperation(operator, ImmutableList.of(one, two)); } - public PredicateOperation(Operator operator, ImmutableList> args) { + public PredicateOperation(Operator operator, ImmutableList> args) { super(Boolean.class, operator, args); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java index 2e170dbce3..00a9645279 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java @@ -26,9 +26,9 @@ public class Templates { public static final Templates DEFAULT = new Templates(); - private final Map, Template> templates = new IdentityHashMap, Template>(150); + private final Map templates = new IdentityHashMap(150); - private final Map, Integer> precedence = new IdentityHashMap, Integer>(150); + private final Map precedence = new IdentityHashMap(150); private final TemplateFactory templateFactory; @@ -268,20 +268,20 @@ public String escapeForLike(String str) { //CHECKSTYLE:ON } - protected final void add(Operator op, String pattern) { + protected final void add(Operator op, String pattern) { templates.put(op, templateFactory.create(pattern)); if (!precedence.containsKey(op)) { precedence.put(op, -1); } } - protected final void add(Operator op, String pattern, int pre) { + protected final void add(Operator op, String pattern, int pre) { templates.put(op, templateFactory.create(pattern)); precedence.put(op, pre); } - protected final void add(Map, String> ops) { - for (Map.Entry, String> entry : ops.entrySet()) { + protected final void add(Map ops) { + for (Map.Entry entry : ops.entrySet()) { add(entry.getKey(), entry.getValue()); } } @@ -302,11 +302,11 @@ protected String escapeForLike(String str) { } @Nullable - public final Template getTemplate(Operator op) { + public final Template getTemplate(Operator op) { return templates.get(op); } - public final int getPrecedence(Operator op) { + public final int getPrecedence(Operator op) { return precedence.get(op).intValue(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java index 075fffbe9f..cdd62b40f5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ToStringVisitor.java @@ -72,7 +72,7 @@ public String visit(Operation o, Templates templates) { } return builder.toString(); } else { - return "unknown operation with operator " + o.getOperator().getId() + " and args " + o.getArgs(); + return "unknown operation with operator " + o.getOperator().name() + " and args " + o.getArgs(); } } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java index db7b55f0f4..d1c00bee4b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java @@ -33,25 +33,25 @@ public class BooleanOperation extends BooleanExpression implements Operation op, Expression one) { + public static BooleanExpression create(Operator op, Expression one) { return new BooleanOperation(op, ImmutableList.>of(one)); } - public static BooleanExpression create(Operator op, Expression one, Expression two) { + public static BooleanExpression create(Operator op, Expression one, Expression two) { return new BooleanOperation(op, ImmutableList.of(one, two)); } - public static BooleanExpression create(Operator op, Expression... args) { + public static BooleanExpression create(Operator op, Expression... args) { return new BooleanOperation(op, args); } private final PredicateOperation opMixin; - protected BooleanOperation(Operator op, Expression... args) { + protected BooleanOperation(Operator op, Expression... args) { this(op, ImmutableList.copyOf(args)); } - protected BooleanOperation(Operator op, ImmutableList> args) { + protected BooleanOperation(Operator op, ImmutableList> args) { super(new PredicateOperation((Operator)op, args)); opMixin = (PredicateOperation)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java index 5bf1096380..d9f23bddde 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java @@ -35,23 +35,23 @@ public class CollectionOperation extends CollectionExpressionBase> opMixin; - public static CollectionOperation create(Operator op, Class type, Expression one) { + public static CollectionOperation create(Operator op, Class type, Expression one) { return new CollectionOperation(op, type, ImmutableList.>of(one)); } - public static CollectionOperation create(Operator op, Class type, Expression one, Expression two) { + public static CollectionOperation create(Operator op, Class type, Expression one, Expression two) { return new CollectionOperation(op, type, ImmutableList.of(one, two)); } - public static CollectionOperation create(Operator op, Class type, Expression... args) { + public static CollectionOperation create(Operator op, Class type, Expression... args) { return new CollectionOperation(op, type, args); } - public CollectionOperation(Operator op, Class type, Expression... args) { + public CollectionOperation(Operator op, Class type, Expression... args) { this(op, type, ImmutableList.copyOf(args)); } - public CollectionOperation(Operator op, Class type, ImmutableList> args) { + public CollectionOperation(Operator op, Class type, ImmutableList> args) { super(new OperationImpl(Collection.class, op, args)); this.opMixin = (OperationImpl)super.mixin; this.elementType = (Class)type; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java index d154c18400..ebad158e73 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java @@ -15,14 +15,7 @@ import javax.annotation.Nullable; -import com.querydsl.core.types.CollectionExpression; -import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; +import com.querydsl.core.types.*; /** * ComparableExpression extends {@link ComparableExpressionBase} to provide comparison methods. @@ -42,7 +35,7 @@ public ComparableExpression(Expression mixin) { @Override public ComparableExpression as(Path alias) { - return ComparableOperation.create(getType(),(Operator)Ops.ALIAS, mixin, alias); + return ComparableOperation.create((Class)getType(), Ops.ALIAS, mixin, alias); } @Override diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java index 8eaa67fd24..122b0e86ba 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java @@ -34,17 +34,17 @@ public class ComparableOperation> extends private static final long serialVersionUID = 1129243977606098865L; - public static > ComparableExpression create(Class type, Operator op, Expression... args) { + public static > ComparableExpression create(Class type, Operator op, Expression... args) { return new ComparableOperation(type, op, args); } private final OperationImpl opMixin; - protected ComparableOperation(Class type, Operator op, Expression... args) { + protected ComparableOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected ComparableOperation(Class type, Operator op, ImmutableList> args) { + protected ComparableOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -65,7 +65,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java index 2e9dd34127..ccb6f1133c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java @@ -34,25 +34,25 @@ public class DateOperation> extends private static final long serialVersionUID = -7859020164194396995L; - public static > DateExpression create(Class type, Operator op, Expression one) { + public static > DateExpression create(Class type, Operator op, Expression one) { return new DateOperation(type, op, ImmutableList.>of(one)); } - public static > DateExpression create(Class type, Operator op, Expression one, Expression two) { + public static > DateExpression create(Class type, Operator op, Expression one, Expression two) { return new DateOperation(type, op, ImmutableList.of(one, two)); } - public static > DateExpression create(Class type, Operator op, Expression... args) { + public static > DateExpression create(Class type, Operator op, Expression... args) { return new DateOperation(type, op, args); } private final OperationImpl opMixin; - protected DateOperation(Class type, Operator op, Expression... args) { + protected DateOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected DateOperation(Class type, Operator op, ImmutableList> args) { + protected DateOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -73,7 +73,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java index a546a5eb3f..8e7448e295 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java @@ -33,25 +33,25 @@ public class DateTimeOperation> extends DateTimeExpressi private static final long serialVersionUID = 6523293814317168556L; - public static > DateTimeExpression create(Class type, Operator op, Expression one) { + public static > DateTimeExpression create(Class type, Operator op, Expression one) { return new DateTimeOperation(type, op, ImmutableList.>of(one)); } - public static > DateTimeExpression create(Class type, Operator op, Expression one, Expression two) { + public static > DateTimeExpression create(Class type, Operator op, Expression one, Expression two) { return new DateTimeOperation(type, op, ImmutableList.of(one, two)); } - public static > DateTimeExpression create(Class type, Operator op, Expression... args) { + public static > DateTimeExpression create(Class type, Operator op, Expression... args) { return new DateTimeOperation(type, op, args); } private final OperationImpl opMixin; - protected DateTimeOperation(Class type, Operator op, Expression... args) { + protected DateTimeOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected DateTimeOperation(Class type, Operator op, ImmutableList> args) { + protected DateTimeOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java index 626bfabdc1..4469a2ff8f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java @@ -33,25 +33,25 @@ public class DslOperation extends DslExpression implements Operation { private static final long serialVersionUID = -285668548371034230L; - public static DslExpression create(Class type, Operator op, Expression one) { + public static DslExpression create(Class type, Operator op, Expression one) { return new DslOperation(type, op, ImmutableList.>of(one)); } - public static DslExpression create(Class type, Operator op, Expression one, Expression two) { + public static DslExpression create(Class type, Operator op, Expression one, Expression two) { return new DslOperation(type, op, ImmutableList.of(one, two)); } - public static DslExpression create(Class type, Operator op, Expression... args) { + public static DslExpression create(Class type, Operator op, Expression... args) { return new DslOperation(type, op, args); } private final OperationImpl opMixin; - protected DslOperation(Class type, Operator op, Expression... args) { + protected DslOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected DslOperation(Class type, Operator op, ImmutableList> args) { + protected DslOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java index 3e7a32204b..067c606afb 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java @@ -33,25 +33,25 @@ public class EnumOperation> extends EnumExpression implemen private static final long serialVersionUID = -3593040852095778453L; - public static > EnumExpression create(Class type, Operator op, Expression one) { + public static > EnumExpression create(Class type, Operator op, Expression one) { return new EnumOperation(type, op, ImmutableList.>of(one)); } - public static > EnumExpression create(Class type, Operator op, Expression one, Expression two) { + public static > EnumExpression create(Class type, Operator op, Expression one, Expression two) { return new EnumOperation(type, op, ImmutableList.>of(one, two)); } - public static > EnumExpression create(Class type, Operator op, Expression... args) { + public static > EnumExpression create(Class type, Operator op, Expression... args) { return new EnumOperation(type, op, args); } private final OperationImpl opMixin; - protected EnumOperation(Class type, Operator op, Expression... args) { + protected EnumOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected EnumOperation(Class type, Operator op, ImmutableList> args) { + protected EnumOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java index e29cee7d3d..b8bc82de00 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java @@ -35,25 +35,25 @@ public class NumberOperation> private static final long serialVersionUID = -3593040852095778453L; - public static > NumberExpression create(Class type, Operator op, Expression one) { + public static > NumberExpression create(Class type, Operator op, Expression one) { return new NumberOperation(type, op, ImmutableList.>of(one)); } - public static > NumberExpression create(Class type, Operator op, Expression one, Expression two) { + public static > NumberExpression create(Class type, Operator op, Expression one, Expression two) { return new NumberOperation(type, op, ImmutableList.of(one, two)); } - public static > NumberExpression create(Class type, Operator op, Expression... args) { + public static > NumberExpression create(Class type, Operator op, Expression... args) { return new NumberOperation(type, op, args); } private final OperationImpl opMixin; - protected NumberOperation(Class type, Operator op, Expression... args) { + protected NumberOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected NumberOperation(Class type, Operator op, ImmutableList> args) { + protected NumberOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -84,7 +84,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java index e5f1dfee00..8873ab30c7 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java @@ -33,25 +33,25 @@ public class SimpleOperation extends SimpleExpression implements Operation private static final long serialVersionUID = -285668548371034230L; - public static SimpleExpression create(Class type, Operator op, Expression one) { + public static SimpleExpression create(Class type, Operator op, Expression one) { return new SimpleOperation(type, op, ImmutableList.>of(one)); } - public static SimpleExpression create(Class type, Operator op, Expression one, Expression two) { + public static SimpleExpression create(Class type, Operator op, Expression one, Expression two) { return new SimpleOperation(type, op, ImmutableList.of(one, two)); } - public static SimpleExpression create(Class type, Operator op, Expression... args) { + public static SimpleExpression create(Class type, Operator op, Expression... args) { return new SimpleOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected SimpleOperation(Class type, Operator op, Expression... args) { + protected SimpleOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected SimpleOperation(Class type, Operator op, ImmutableList> args) { + protected SimpleOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java index 33fbd59a1c..456daeba63 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java @@ -32,25 +32,25 @@ public class StringOperation extends StringExpression implements Operation op, Expression one) { + public static StringExpression create(Operator op, Expression one) { return new StringOperation(op, ImmutableList.>of(one)); } - public static StringExpression create(Operator op, Expression one, Expression two) { + public static StringExpression create(Operator op, Expression one, Expression two) { return new StringOperation(op, ImmutableList.of(one, two)); } - public static StringExpression create(Operator op, Expression... args) { + public static StringExpression create(Operator op, Expression... args) { return new StringOperation(op, args); } private final OperationImpl opMixin; - protected StringOperation(Operator op, Expression... args) { + protected StringOperation(Operator op, Expression... args) { this(op, ImmutableList.copyOf(args)); } - protected StringOperation(Operator op, ImmutableList> args) { + protected StringOperation(Operator op, ImmutableList> args) { super(new OperationImpl(String.class, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -71,7 +71,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeOperation.java index ca0e52c0cb..7936f2b259 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeOperation.java @@ -33,25 +33,25 @@ public class TimeOperation> extends TimeExpression im private static final long serialVersionUID = 9051606798649239240L; - public static > TimeExpression create(Class type, Operator op, Expression one) { + public static > TimeExpression create(Class type, Operator op, Expression one) { return new TimeOperation(type, op, ImmutableList.>of(one)); } - public static > TimeExpression create(Class type, Operator op, Expression one, Expression two) { + public static > TimeExpression create(Class type, Operator op, Expression one, Expression two) { return new TimeOperation(type, op, ImmutableList.of(one, two)); } - public static > TimeExpression create(Class type, Operator op, Expression... args) { + public static > TimeExpression create(Class type, Operator op, Expression... args) { return new TimeOperation(type, op, args); } private final OperationImpl opMixin; - protected TimeOperation(Class type, Operator op, Expression... args) { + protected TimeOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected TimeOperation(Class type, Operator op, ImmutableList> args) { + protected TimeOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java index 9855adea28..c054bf06b9 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java @@ -71,7 +71,7 @@ public NumberExpression countDistinct() { return countDistinct; } - private NumberExpression count(Operator operator) { + private NumberExpression count(Operator operator) { QueryMetadata md = subQueryMixin.getMetadata().clone(); Expression e = md.getProjection(); if (e != null) { diff --git a/querydsl-core/src/test/java/com/querydsl/core/CoverageTest.java b/querydsl-core/src/test/java/com/querydsl/core/CoverageTest.java index 6ca35ed585..71c7a2878a 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/CoverageTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/CoverageTest.java @@ -46,7 +46,7 @@ public class CoverageTest { @Test public void test() throws IllegalArgumentException, IllegalAccessException{ // make sure all Operators are covered in expression factory methods - Set> usedOperators = new HashSet>(); + Set usedOperators = new HashSet(); List> exprs = new ArrayList>(); Entity entity = Alias.alias(Entity.class, "entity"); @@ -99,7 +99,7 @@ public void test() throws IllegalArgumentException, IllegalAccessException{ } // missing mappings - usedOperators.addAll(Arrays.>asList( + usedOperators.addAll(Arrays.asList( Ops.INSTANCE_OF, Ops.ALIAS, Ops.ARRAY_SIZE, @@ -133,10 +133,10 @@ public void test() throws IllegalArgumentException, IllegalAccessException{ Ops.EXISTS )); - List> notContained = new ArrayList>(); + List notContained = new ArrayList(); for (Field field : Ops.class.getFields()) { if (Operator.class.isAssignableFrom(field.getType())) { - Operator val = (Operator) field.get(null); + Operator val = (Operator) field.get(null); if (!usedOperators.contains(val)) { System.err.println(field.getName() + " was not contained"); notContained.add(val); diff --git a/querydsl-core/src/test/java/com/querydsl/core/serialization/JavaTemplatesTest.java b/querydsl-core/src/test/java/com/querydsl/core/serialization/JavaTemplatesTest.java index 2bc5b3f6dd..a4ddf9205f 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/serialization/JavaTemplatesTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/serialization/JavaTemplatesTest.java @@ -33,7 +33,7 @@ public void Mappings() throws IllegalArgumentException, IllegalAccessException { for (Field field : Ops.class.getFields()) { if (Operator.class.isAssignableFrom(field.getType())) { matched++; - Operator operator = (Operator) field.get(null); + Operator operator = (Operator) field.get(null); assertNotNull(field.getName() + " missing", templates.getTemplate(operator)); } } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/OperatorImplTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/OperatorImplTest.java deleted file mode 100644 index 3c3599df47..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/types/OperatorImplTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.querydsl.core.types; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - -import java.lang.reflect.Field; -import java.util.Map; - -import org.junit.Test; - -public class OperatorImplTest { - - @Test - public void Cache_Isnt_Empty() throws Exception { - Field field = OperatorImpl.class.getDeclaredField("OPS"); - field.setAccessible(true); - Map map = (Map) field.get(null); - assertFalse(map.isEmpty()); - } - - @Test - public void GetId() { - assertEquals("com.querydsl.core.types.Ops#ALIAS", Ops.ALIAS.getId()); - } -} diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java index 24e2d556af..23e6ba5326 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLSerializer.java @@ -275,7 +275,7 @@ public Void visit(SubQueryExpression query, Void context) { @SuppressWarnings({ "unchecked", "rawtypes" }) @Override - protected void visitOperation(Class type, Operator operator, List> args) { + protected void visitOperation(Class type, Operator operator, List> args) { if (operator == Ops.INSTANCE_OF) { handle(args.get(0)).append(" instanceof "); append(((Constant>) args.get(1)).getConstant().getName()); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java index 0d8984e6db..32ba444c8a 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java @@ -47,7 +47,7 @@ public class HQLTemplates extends JPQLTemplates { QUERY_HANDLER = instance; } - private static final List> wrapElements = Arrays.> asList( + private static final List wrapElements = Arrays. asList( Ops.QuantOps.ALL, Ops.QuantOps.ANY, Ops.QuantOps.AVG_IN_COL, @@ -102,7 +102,7 @@ public HQLTemplates(char escape) { } @Override - public boolean wrapElements(Operator operator) { + public boolean wrapElements(Operator operator) { return wrapElements.contains(operator); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java index 0d9bf36757..2a94c3e6c7 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java @@ -14,31 +14,18 @@ package com.querydsl.jpa; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.OperatorImpl; /** * @author tiwe * */ -public final class JPQLOps { - - private static final String NS = JPQLOps.class.getName(); - - public static final Operator TREAT = new OperatorImpl(NS, "TREAT"); - - public static final Operator INDEX = new OperatorImpl(NS, "INDEX"); - - public static final Operator TYPE = new OperatorImpl(NS, "TYPE"); - - public static final Operator CAST = new OperatorImpl(NS, "CAST"); - - public static final Operator MEMBER_OF = new OperatorImpl(NS, "MEMBER_OF"); - - public static final Operator NOT_MEMBER_OF = new OperatorImpl(NS, "NOT_MEMBER_OF"); - - public static final Operator KEY = new OperatorImpl(NS, "KEY"); - - public static final Operator VALUE = new OperatorImpl(NS, "VALUE"); - - private JPQLOps(){} +public enum JPQLOps implements Operator { + TREAT, + INDEX, + TYPE, + CAST, + MEMBER_OF, + NOT_MEMBER_OF, + KEY, + VALUE } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java index 288f142af0..ee54dfecff 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java @@ -38,7 +38,7 @@ */ public class JPQLSerializer extends SerializerBase { - private static final Set> NUMERIC = ImmutableSet.>of( + private static final Set NUMERIC = ImmutableSet.of( Ops.ADD, Ops.SUB, Ops.MULT, Ops.DIV, Ops.LT, Ops.LOE, Ops.GT, Ops.GOE, Ops.BETWEEN); @@ -401,7 +401,7 @@ public Void visit(Path expr, Void context) { @Override @SuppressWarnings("unchecked") - protected void visitOperation(Class type, Operator operator, List> args) { + protected void visitOperation(Class type, Operator operator, List> args) { boolean oldInCaseOperation = inCaseOperation; inCaseOperation = inCaseOperation || operator.equals(Ops.CASE) || operator.equals(Ops.CASE_EQ); boolean oldWrapElements = wrapElements; @@ -462,7 +462,7 @@ private void visitNumCast(List> args) { visitOperation(targetType, JPQLOps.CAST, ImmutableList.of(args.get(0), ConstantImpl.create(typeName))); } - private void visitPathInCollection(Class type, Operator operator, + private void visitPathInCollection(Class type, Operator operator, List> args) { Path lhs = (Path) args.get(0); @SuppressWarnings("unchecked") @@ -503,7 +503,7 @@ private SingularAttribute getIdProperty(EntityType entity) { } @SuppressWarnings({ "rawtypes", "unchecked" }) - private void visitAnyInPath(Class type, Operator operator, List> args) { + private void visitAnyInPath(Class type, Operator operator, List> args) { if (!templates.isEnumInPathSupported() && args.get(0) instanceof Constant && Enum.class.isAssignableFrom(args.get(0).getType())) { final Enumerated enumerated = ((Path)args.get(1)).getAnnotatedElement().getAnnotation(Enumerated.class); final Enum constant = (Enum)((Constant)args.get(0)).getConstant(); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index 45ff42ad98..c89fa89d6a 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -142,7 +142,7 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { //CHECKSTYLE:ON } - public boolean wrapElements(Operator operator) { + public boolean wrapElements(Operator operator) { return false; } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java index 46f8718eae..8a2b914793 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/NativeSQLSerializer.java @@ -194,7 +194,7 @@ public void visitConstant(Object constant) { } @Override - protected void visitOperation(Class type, Operator operator, List> args) { + protected void visitOperation(Class type, Operator operator, List> args) { if (operator == SQLOps.ALL && !RelationalPath.class.isInstance(args.get(0)) && wrapEntityProjections) { diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java index 853007e425..c19be137c9 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java @@ -21,7 +21,7 @@ import org.junit.Test; import org.junit.runner.RunWith; -import com.querydsl.core.types.OperatorImpl; +import com.querydsl.core.types.Operator; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.testutil.JPATestRunner; @@ -31,7 +31,10 @@ public class JPAQueryMutability2Test implements JPATest { private EntityManager entityManager; - private final OperatorImpl customOperator = new OperatorImpl("CUSTOM", "SIGN"); + private final Operator customOperator = new Operator() { + public String name() { return "custom"; } + public String toString() { return name(); } + }; private final JPQLTemplates customTemplates = new HQLTemplates() {{ add(customOperator, "sign({0})"); diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java index a201f40d17..5e78989831 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java @@ -14,22 +14,13 @@ package com.querydsl.lucene3; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.OperatorImpl; /** * @author tiwe * */ -public final class LuceneOps { - - private static final String NS = LuceneOps.class.getName(); - - static final Operator LUCENE_QUERY = new OperatorImpl(NS, "QUERY"); - - static final Operator PHRASE = new OperatorImpl(NS, "PHRASE"); - - static final Operator TERM = new OperatorImpl(NS, "TERM"); - - private LuceneOps() {} - +public enum LuceneOps implements Operator { + LUCENE_QUERY, + PHRASE, + TERM } diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java index 1d0b7eafd7..61631e1c4a 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneSerializer.java @@ -70,7 +70,7 @@ public LuceneSerializer(boolean lowerCase, boolean splitTerms, Locale sortLocale } private Query toQuery(Operation operation, QueryMetadata metadata) { - Operator op = operation.getOperator(); + Operator op = operation.getOperator(); if (op == Ops.OR) { return toTwoHandSidedQuery(operation, Occur.SHOULD, metadata); } else if (op == Ops.AND) { diff --git a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java index fddecfc889..747092643a 100644 --- a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java +++ b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java @@ -640,7 +640,7 @@ public void PathAny() throws Exception { private boolean unsupportedOperation(Predicate filter) { if (filter instanceof Operation) { - Operator op = ((Operation) filter).getOperator(); + Operator op = ((Operation) filter).getOperator(); if (op == Ops.STARTS_WITH_IC || op == Ops.EQ_IGNORE_CASE || op == Ops.STARTS_WITH_IC || op == Ops.ENDS_WITH_IC || op == Ops.STRING_CONTAINS_IC) { return true; diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java index 248df5972f..8d8bc54c46 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java @@ -14,22 +14,13 @@ package com.querydsl.lucene4; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.OperatorImpl; /** * @author tiwe * */ -public final class LuceneOps { - - private static final String NS = LuceneOps.class.getName(); - - static final Operator LUCENE_QUERY = new OperatorImpl(NS, "QUERY"); - - static final Operator PHRASE = new OperatorImpl(NS, "PHRASE"); - - static final Operator TERM = new OperatorImpl(NS, "TERM"); - - private LuceneOps() {} - +public enum LuceneOps implements Operator { + LUCENE_QUERY, + PHRASE, + TERM } diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java index 0ac1cb85a5..401a0972b2 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneSerializer.java @@ -71,7 +71,7 @@ public LuceneSerializer(boolean lowerCase, boolean splitTerms, Locale sortLocale } private Query toQuery(Operation operation, QueryMetadata metadata) { - Operator op = operation.getOperator(); + Operator op = operation.getOperator(); if (op == Ops.OR) { return toTwoHandSidedQuery(operation, Occur.SHOULD, metadata); } else if (op == Ops.AND) { diff --git a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java index 80ec78e228..0dd1a2f7a3 100644 --- a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java +++ b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java @@ -642,7 +642,7 @@ public void PathAny() throws Exception { private boolean unsupportedOperation(Predicate filter) { if (filter instanceof Operation) { - Operator op = ((Operation) filter).getOperator(); + Operator op = ((Operation) filter).getOperator(); if (op == Ops.STARTS_WITH_IC || op == Ops.EQ_IGNORE_CASE || op == Ops.STARTS_WITH_IC || op == Ops.ENDS_WITH_IC || op == Ops.STRING_CONTAINS_IC) { return true; diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java index 4afc362ede..2ea832a595 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java @@ -14,20 +14,12 @@ package com.querydsl.mongodb; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.OperatorImpl; /** * @author tiwe * */ -public final class MongodbOps { - - private static final String NS = MongodbOps.class.getName(); - - public static final Operator NEAR = new OperatorImpl(NS, "NEAR"); - - public static final Operator ELEM_MATCH = new OperatorImpl(NS, "ELEM_MATCH"); - - private MongodbOps() {} - +public enum MongodbOps implements Operator { + NEAR, + ELEM_MATCH } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 455f3ab2c7..1d3205be1f 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -101,7 +101,7 @@ protected DBObject asDBObject(String key, Object value) { @Override public Object visit(Operation expr, Void context) { - Operator op = expr.getOperator(); + Operator op = expr.getOperator(); if (op == Ops.EQ) { if (expr.getArg(0) instanceof Operation) { Operation lhs = (Operation) expr.getArg(0); @@ -140,7 +140,7 @@ public Object visit(Operation expr, Void context) { //is cases where this will get broken String key = arg.keySet().iterator().next(); Operation subOperation = (Operation) expr.getArg(0); - Operator subOp = subOperation.getOperator(); + Operator subOp = subOperation.getOperator(); if (subOp == Ops.IN) { return visit(OperationImpl.create(Boolean.class, Ops.NOT_IN, subOperation.getArg(0), subOperation.getArg(1)), context); diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala index c29960ea2c..b2c8a0bbb4 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala @@ -39,7 +39,7 @@ object Constants { trait DslExpression[T] extends Expression[T] { - def as(right: Path[T]): DslExpression[T] = dsl(getType, ALIAS.asInstanceOf[Operator[T]], this, right) + def as(right: Path[T]): DslExpression[T] = dsl(getType, ALIAS, this, right) def as(alias: String): DslExpression[T] = as(new PathImpl[T](getType, alias)) @@ -47,7 +47,7 @@ trait DslExpression[T] extends Expression[T] { trait SimpleExpression[T] extends DslExpression[T] { - override def as(right: Path[T]): SimpleExpression[T] = simple(getType, ALIAS.asInstanceOf[Operator[T]], this, right) + override def as(right: Path[T]): SimpleExpression[T] = simple(getType, ALIAS, this, right) override def as(alias: String): SimpleExpression[T] = as(new PathImpl[T](getType, alias)) @@ -89,7 +89,7 @@ trait SimpleExpression[T] extends DslExpression[T] { def nullif(right: T): SimpleExpression[T] = nullif(constant(right)) - def nullif(right: Expression[T]) = simple[T](getType, NULLIF.asInstanceOf[Operator[T]], this, right) + def nullif(right: Expression[T]) = simple[T](getType, NULLIF, this, right) def is[M <: SimpleExpression[T]](f: M => BooleanExpression): BooleanExpression = { if (f == null) isNull else f(this.asInstanceOf[M]) @@ -215,7 +215,7 @@ trait ComparableExpression[T <: Comparable[_]] extends ComparableExpressionBase[ def <=(right: Expression[T]) = loe(right) - override def as(right: Path[T]) = comparable(getType, ALIAS.asInstanceOf[Operator[T]], this, right) + override def as(right: Path[T]) = comparable(getType, ALIAS, this, right) override def as(alias: String): ComparableExpression[T] = as(new PathImpl[T](getType, alias)) @@ -391,7 +391,7 @@ trait BooleanExpression extends ComparableExpression[java.lang.Boolean] with Pre def unary_! = not() - override def as(right: Path[java.lang.Boolean]) = boolean(ALIAS.asInstanceOf[Operator[java.lang.Boolean]], this, right) + override def as(right: Path[java.lang.Boolean]) = boolean(ALIAS, this, right) override def as(alias: String): BooleanExpression = as(new PathImpl[java.lang.Boolean](getType, alias)) @@ -487,7 +487,7 @@ trait StringExpression extends ComparableExpression[String] { def startsWithIgnoreCase(right: String): BooleanExpression = startsWithIgnoreCase(constant(right)) - override def as(right: Path[String]) = string(ALIAS.asInstanceOf[Operator[String]], this, right) + override def as(right: Path[String]) = string(ALIAS, this, right) override def as(alias: String): StringExpression = as(new PathImpl[String](getType, alias)) @@ -515,7 +515,7 @@ trait TimeExpression[T <: Comparable[_]] extends TemporalExpression[T] { lazy val milliSecond = number(classOf[Integer], DateTimeOps.MILLISECOND, this) - override def as(right: Path[T]) = time(getType, ALIAS.asInstanceOf[Operator[T]], this, right) + override def as(right: Path[T]) = time(getType, ALIAS, this, right) override def as(alias: String): TimeExpression[T] = as(new PathImpl[T](getType, alias)) @@ -551,7 +551,7 @@ trait DateTimeExpression[T <: Comparable[_]] extends TemporalExpression[T] { lazy val milliSecond = number(classOf[Integer], DateTimeOps.DAY_OF_YEAR, this) - override def as(right: Path[T]) = dateTime(getType, ALIAS.asInstanceOf[Operator[T]], this, right) + override def as(right: Path[T]) = dateTime(getType, ALIAS, this, right) override def as(alias: String): DateTimeExpression[T] = as(new PathImpl[T](getType, alias)) @@ -579,7 +579,7 @@ trait DateExpression[T <: Comparable[_]] extends TemporalExpression[T] { lazy val yearWeek = year.multiply(100).add(week) - override def as(right: Path[T]) = date(getType, ALIAS.asInstanceOf[Operator[T]], this, right) + override def as(right: Path[T]) = date(getType, ALIAS, this, right) override def as(alias: String): DateExpression[T] = as(new PathImpl[T](getType, alias)) @@ -589,7 +589,7 @@ trait EnumExpression[T <: Enum[T]] extends ComparableExpression[T] { lazy val ordinal = number(classOf[Integer], Ops.ORDINAL, this) - override def as(right: Path[T]) = enum(getType.asInstanceOf[Class[T]], ALIAS.asInstanceOf[Operator[T]], this, right) + override def as(right: Path[T]) = enum(getType.asInstanceOf[Class[T]], ALIAS, this, right) override def as(alias: String): EnumExpression[T] = as(new PathImpl[T](getType, alias)) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/Operations.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/Operations.scala index b83865c167..9d12e8497e 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/Operations.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/Operations.scala @@ -24,47 +24,47 @@ import com.querydsl.core.types._ */ object Operations { - type Op[X] = Operator[X] + type Op = Operator - def dsl[T](t: Class[_ <: T], op: Op[_ >: T], args: Ex[_]*): DslExpression[T] = { + def dsl[T](t: Class[_ <: T], op: Op, args: Ex[_]*): DslExpression[T] = { new OperationImpl[T](t, op, args: _*) with DslExpression[T] } - def simple[T](t: Class[_ <: T], op: Op[_ >: T], args: Ex[_]*): SimpleExpression[T] = { + def simple[T](t: Class[_ <: T], op: Op, args: Ex[_]*): SimpleExpression[T] = { new OperationImpl[T](t, op, args: _*) with SimpleExpression[T] } - def comparable[T <: Comparable[_]](t: Class[_ <: T], op: Op[_ >: T], args: Ex[_]*): ComparableExpression[T] = { + def comparable[T <: Comparable[_]](t: Class[_ <: T], op: Op, args: Ex[_]*): ComparableExpression[T] = { new OperationImpl[T](t, op, args: _*) with ComparableExpression[T] } - def date[T <: Comparable[_]](t: Class[_ <: T], op: Op[_ >: T], args: Ex[_]*): DateExpression[T] = { + def date[T <: Comparable[_]](t: Class[_ <: T], op: Op, args: Ex[_]*): DateExpression[T] = { new OperationImpl[T](t, op, args: _*) with DateExpression[T] } - def dateTime[T <: Comparable[_]](t: Class[_ <: T], op: Op[_ >: T], args: Ex[_]*): DateTimeExpression[T] = { + def dateTime[T <: Comparable[_]](t: Class[_ <: T], op: Op, args: Ex[_]*): DateTimeExpression[T] = { new OperationImpl[T](t, op, args: _*) with DateTimeExpression[T] } - def time[T <: Comparable[_]](t: Class[_ <: T], op: Op[_ >: T], args: Ex[_]*): TimeExpression[T] = { + def time[T <: Comparable[_]](t: Class[_ <: T], op: Op, args: Ex[_]*): TimeExpression[T] = { new OperationImpl[T](t, op, args: _*) with TimeExpression[T] } - def number[T : Numeric](t: Class[_ <: T], op: Op[_], args: Ex[_]*): NumberExpression[T] = - new OperationImpl[T](t, op.asInstanceOf[Operator[T]], args: _*) with NumberExpression[T] { + def number[T : Numeric](t: Class[_ <: T], op: Op, args: Ex[_]*): NumberExpression[T] = + new OperationImpl[T](t, op, args: _*) with NumberExpression[T] { override def negate = if (getOperator == Ops.NEGATE) getArg(0).asInstanceOf[NumberExpression[T]] else super.negate override def numeric = implicitly[Numeric[T]] } - def boolean(op: Op[_ >: java.lang.Boolean], args: Ex[_]*): BooleanExpression = { + def boolean(op: Op, args: Ex[_]*): BooleanExpression = { new OperationImpl[java.lang.Boolean](classOf[java.lang.Boolean], op, args: _*) with BooleanExpression } - def string(op: Op[_ >: String], args: Ex[_]*): StringExpression = { + def string(op: Op, args: Ex[_]*): StringExpression = { new OperationImpl[String](classOf[String], op, args: _*) with StringExpression } - def enum[T <: Enum[T]](t: Class[T], op: Op[_ >: T], args: Ex[_]*): EnumExpression[T] = { + def enum[T <: Enum[T]](t: Class[T], op: Op, args: Ex[_]*): EnumExpression[T] = { new OperationImpl[T](t, op, args: _*) with EnumExpression[T] } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java index 53c8101a58..2878040fe8 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java @@ -33,25 +33,25 @@ public class GeometryOperation extends GeometryExpression private static final long serialVersionUID = 3433471874808633698L; - public static GeometryOperation create(Class type, Operator op, Expression one) { + public static GeometryOperation create(Class type, Operator op, Expression one) { return new GeometryOperation(type, op, ImmutableList.>of(one)); } - public static GeometryOperation create(Class type, Operator op, Expression one, Expression two) { + public static GeometryOperation create(Class type, Operator op, Expression one, Expression two) { return new GeometryOperation(type, op, ImmutableList.of(one, two)); } - public static GeometryOperation create(Class type, Operator op, Expression... args) { + public static GeometryOperation create(Class type, Operator op, Expression... args) { return new GeometryOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected GeometryOperation(Class type, Operator op, Expression... args) { + protected GeometryOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected GeometryOperation(Class type, Operator op, ImmutableList> args) { + protected GeometryOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java index 1084ccbb38..c16a863ca8 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java @@ -33,25 +33,25 @@ public class LineStringOperation extends LineStringExpress private static final long serialVersionUID = 3433471874808633698L; - public static LineStringOperation create(Class type, Operator op, Expression one) { + public static LineStringOperation create(Class type, Operator op, Expression one) { return new LineStringOperation(type, op, ImmutableList.>of(one)); } - public static LineStringOperation create(Class type, Operator op, Expression one, Expression two) { + public static LineStringOperation create(Class type, Operator op, Expression one, Expression two) { return new LineStringOperation(type, op, ImmutableList.of(one, two)); } - public static LineStringOperation create(Class type, Operator op, Expression... args) { + public static LineStringOperation create(Class type, Operator op, Expression... args) { return new LineStringOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected LineStringOperation(Class type, Operator op, Expression... args) { + protected LineStringOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected LineStringOperation(Class type, Operator op, ImmutableList> args) { + protected LineStringOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java index 4a68300e20..55b1b3a4a9 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java @@ -33,25 +33,25 @@ public class PointOperation extends PointExpression implemen private static final long serialVersionUID = 3433471874808633698L; - public static PointOperation create(Class type, Operator op, Expression one) { + public static PointOperation create(Class type, Operator op, Expression one) { return new PointOperation(type, op, ImmutableList.>of(one)); } - public static PointOperation create(Class type, Operator op, Expression one, Expression two) { + public static PointOperation create(Class type, Operator op, Expression one, Expression two) { return new PointOperation(type, op, ImmutableList.of(one, two)); } - public static PointOperation create(Class type, Operator op, Expression... args) { + public static PointOperation create(Class type, Operator op, Expression... args) { return new PointOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected PointOperation(Class type, Operator op, Expression... args) { + protected PointOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected PointOperation(Class type, Operator op, ImmutableList> args) { + protected PointOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java index 810e82e910..ec83364429 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java @@ -33,25 +33,25 @@ public class PolygonOperation extends PolygonExpression im private static final long serialVersionUID = 3433471874808633698L; - public static PolygonOperation create(Class type, Operator op, Expression one) { + public static PolygonOperation create(Class type, Operator op, Expression one) { return new PolygonOperation(type, op, ImmutableList.>of(one)); } - public static PolygonOperation create(Class type, Operator op, Expression one, Expression two) { + public static PolygonOperation create(Class type, Operator op, Expression one, Expression two) { return new PolygonOperation(type, op, ImmutableList.of(one, two)); } - public static PolygonOperation create(Class type, Operator op, Expression... args) { + public static PolygonOperation create(Class type, Operator op, Expression... args) { return new PolygonOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected PolygonOperation(Class type, Operator op, Expression... args) { + protected PolygonOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected PolygonOperation(Class type, Operator op, ImmutableList> args) { + protected PolygonOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java index f8db0a5fb2..f0b9407637 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java @@ -14,111 +14,107 @@ package com.querydsl.spatial; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.OperatorImpl; /** * @author tiwe * */ -public final class SpatialOps { +public enum SpatialOps implements Operator { - private static final String NS = SpatialOps.class.getName(); + // Geometry + DIMENSION, + GEOMETRY_TYPE, + AS_TEXT, + AS_BINARY, + SRID, + SRID2, + IS_EMPTY, + IS_SIMPLE, + BOUNDARY, + ENVELOPE, + WKTTOSQL, + WKBTOSQL, + EQUALS, + DISJOINT, + INTERSECTS, + TOUCHES, + CROSSES, + WITHIN, + CONTAINS, + OVERLAPS, + RELATE, + DISTANCE, + DISTANCE2, + DISTANCE_SPHERE, + DISTANCE_SPHEROID, + INTERSECTION, + DIFFERENCE, + UNION, + SYMDIFFERENCE, + BUFFER, + BUFFER2, + CONVEXHULL, + TRANSFORM, - // Geometry - public static final Operator DIMENSION = new OperatorImpl(NS, "DIMENSION"); - public static final Operator GEOMETRY_TYPE = new OperatorImpl(NS, "GEOMETRY_TYPE"); - public static final Operator AS_TEXT = new OperatorImpl(NS, "AS_TEXT"); - public static final Operator AS_BINARY = new OperatorImpl(NS, "AS_BINARY"); - public static final Operator SRID = new OperatorImpl(NS, "SRID"); - public static final Operator SRID2 = new OperatorImpl(NS, "SRID2"); - public static final Operator IS_EMPTY = new OperatorImpl(NS, "IS_EMPTY"); - public static final Operator IS_SIMPLE = new OperatorImpl(NS, "IS_SIMPLE"); - public static final Operator BOUNDARY = new OperatorImpl(NS, "BOUNDARY"); - public static final Operator ENVELOPE = new OperatorImpl(NS, "ENVELOPE"); - public static final Operator WKTTOSQL = new OperatorImpl(NS, "WKTTOSQL"); - public static final Operator WKBTOSQL = new OperatorImpl(NS, "WKBTOSQL"); - public static final Operator EQUALS = new OperatorImpl(NS, "EQUALS"); - public static final Operator DISJOINT = new OperatorImpl(NS, "DISJOINT"); - public static final Operator INTERSECTS = new OperatorImpl(NS, "INTERSECTS"); - public static final Operator TOUCHES = new OperatorImpl(NS, "TOUCHES"); - public static final Operator CROSSES = new OperatorImpl(NS, "CROSSES"); - public static final Operator WITHIN = new OperatorImpl(NS, "WITHIN"); - public static final Operator CONTAINS = new OperatorImpl(NS, "CONTAINS"); - public static final Operator OVERLAPS = new OperatorImpl(NS, "OVERLAPS"); - public static final Operator RELATE = new OperatorImpl(NS, "RELATE"); - public static final Operator DISTANCE = new OperatorImpl(NS, "DISTANCE"); - public static final Operator DISTANCE2 = new OperatorImpl(NS, "DISTANCE2"); - public static final Operator DISTANCE_SPHERE = new OperatorImpl(NS, "DISTANCE_SPHERE"); - public static final Operator DISTANCE_SPHEROID = new OperatorImpl(NS, "DISTANCE_SPHEROID"); - public static final Operator INTERSECTION = new OperatorImpl(NS, "INTERSECTION"); - public static final Operator DIFFERENCE = new OperatorImpl(NS, "DIFFERENCE"); - public static final Operator UNION = new OperatorImpl(NS, "UNION"); - public static final Operator SYMDIFFERENCE = new OperatorImpl(NS, "SYMDIFFERENCE"); - public static final Operator BUFFER = new OperatorImpl(NS, "BUFFER"); - public static final Operator BUFFER2 = new OperatorImpl(NS, "BUFFER2"); - public static final Operator CONVEXHULL = new OperatorImpl(NS, "CONVEXHULL"); - public static final Operator TRANSFORM = new OperatorImpl(NS, "TRANSFORM"); + // Point + X, + X2, + Y, + Y2, + Z, + Z2, + M, + M2, - // Point - public static final Operator X = new OperatorImpl(NS, "X"); - public static final Operator X2 = new OperatorImpl(NS, "X2"); - public static final Operator Y = new OperatorImpl(NS, "Y"); - public static final Operator Y2 = new OperatorImpl(NS, "Y2"); - public static final Operator Z = new OperatorImpl(NS, "Z"); - public static final Operator Z2 = new OperatorImpl(NS, "Z2"); - public static final Operator M = new OperatorImpl(NS, "M"); - public static final Operator M2 = new OperatorImpl(NS, "M2"); + // Curve + START_POINT, + END_POINT, + IS_RING, + LENGTH, + LENGTH2, - // Curve - public static final Operator START_POINT = new OperatorImpl(NS, "START_POINT"); - public static final Operator END_POINT = new OperatorImpl(NS, "END_POINT"); - public static final Operator IS_RING = new OperatorImpl(NS, "IS_RING"); - public static final Operator LENGTH = new OperatorImpl(NS, "LENGTH"); - public static final Operator LENGTH2 = new OperatorImpl(NS, "LENGTH2"); + // LineString + NUM_POINTS, + POINTN, - //LineString - public static final Operator NUM_POINTS = new OperatorImpl(NS, "NUM_POINTS"); - public static final Operator POINTN = new OperatorImpl(NS, "POINTN"); + // Surface + AREA, + AREA2, + CENTROID, + POINT_ON_SURFACE, - // Surface - public static final Operator AREA = new OperatorImpl(NS, "AREA"); - public static final Operator AREA2 = new OperatorImpl(NS, "AREA2"); - public static final Operator CENTROID = new OperatorImpl(NS, "CENTROID"); - public static final Operator POINT_ON_SURFACE = new OperatorImpl(NS, "POINT_ON_SURFACE"); + // Polygon + EXTERIOR_RING, + EXTERIOR_RING2, + INTERIOR_RINGS, + INTERIOR_RINGS2, + NUM_INTERIOR_RING, + INTERIOR_RINGN, - // Polygon - public static final Operator EXTERIOR_RING = new OperatorImpl(NS, "EXTERIOR_RING"); - public static final Operator EXTERIOR_RING2 = new OperatorImpl(NS, "EXTERIOR_RING2"); - public static final Operator INTERIOR_RINGS = new OperatorImpl(NS, "INTERIOR_RINGS"); - public static final Operator INTERIOR_RINGS2 = new OperatorImpl(NS, "INTERIOR_RINGS2"); - public static final Operator NUM_INTERIOR_RING = new OperatorImpl(NS, "NUM_INTERIOR_RING"); - public static final Operator INTERIOR_RINGN = new OperatorImpl(NS, "INTERIOR_RINGN"); + // Polyhedral Surface + GEOMETRIES, + NUM_SURFACES, + SURFACE, - // Polyhedral Surface - public static final Operator GEOMETRIES = new OperatorImpl(NS, "GEOMETRIES"); - public static final Operator NUM_SURFACES = new OperatorImpl(NS, "NUM_SURFACES"); - public static final Operator SURFACE = new OperatorImpl(NS, "SURFACE"); + // GeometryCollection + NUM_GEOMETRIES, + GEOMETRYN, - // GeometryCollection - public static final Operator NUM_GEOMETRIES = new OperatorImpl(NS, "NUM_GEOMETRIES"); - public static final Operator GEOMETRYN = new OperatorImpl(NS, "GEOMETRYN"); + // MultiCurve + IS_CLOSED, - // MultiCurve - public static final Operator IS_CLOSED = new OperatorImpl(NS, "IS_CLOSED"); - - // Extensions - public static final Operator AS_EWKT = new OperatorImpl(NS, "AS_EWKT"); - public static final Operator GEOM_FROM_TEXT = new OperatorImpl(NS, "GEOM_FROM_TEXT"); - public static final Operator SET_SRID = new OperatorImpl(NS, "SET_SRID"); - public static final Operator XMIN = new OperatorImpl(NS, "XMIN"); - public static final Operator XMAX = new OperatorImpl(NS, "XMAX"); - public static final Operator YMIN = new OperatorImpl(NS, "YMIN"); - public static final Operator YMAX = new OperatorImpl(NS, "YMAX"); - public static final Operator DWITHIN = new OperatorImpl(NS, "DWITHIN"); - public static final Operator EXTENT = new OperatorImpl(NS, "EXTENT"); - public static final Operator COLLECT = new OperatorImpl(NS, "COLLECT"); - public static final Operator COLLECT2 = new OperatorImpl(NS, "COLLECT2"); - public static final Operator TRANSLATE = new OperatorImpl(NS, "TRANSLATE"); - public static final Operator TRANSLATE2 = new OperatorImpl(NS, "TRANSLATE2"); - - } \ No newline at end of file + // Extensions + AS_EWKT, + GEOM_FROM_TEXT, + SET_SRID, + XMIN, + XMAX, + YMIN, + YMAX, + DWITHIN, + EXTENT, + COLLECT, + COLLECT2, + TRANSLATE, + TRANSLATE2; +} \ No newline at end of file diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/hibernate/HibernateSpatialSupport.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/hibernate/HibernateSpatialSupport.java index 7b8cb74d2a..7494c315b6 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/hibernate/HibernateSpatialSupport.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/hibernate/HibernateSpatialSupport.java @@ -21,8 +21,8 @@ public class HibernateSpatialSupport { - public static Map, String> getSpatialOps() { - Map, String> ops = Maps.newHashMap(); + public static Map getSpatialOps() { + Map ops = Maps.newHashMap(); ops.put(SpatialOps.DIMENSION, "dimension({0})"); ops.put(SpatialOps.GEOMETRY_TYPE, "geometrytype({0}, {1})"); ops.put(SpatialOps.SRID, "srid({0})"); diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java index 1ec52e7cb7..2081365898 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java @@ -33,25 +33,25 @@ public class JTSGeometryOperation extends JTSGeometryExpress private static final long serialVersionUID = 3433471874808633698L; - public static JTSGeometryOperation create(Class type, Operator op, Expression one) { + public static JTSGeometryOperation create(Class type, Operator op, Expression one) { return new JTSGeometryOperation(type, op, ImmutableList.>of(one)); } - public static JTSGeometryOperation create(Class type, Operator op, Expression one, Expression two) { + public static JTSGeometryOperation create(Class type, Operator op, Expression one, Expression two) { return new JTSGeometryOperation(type, op, ImmutableList.of(one, two)); } - public static JTSGeometryOperation create(Class type, Operator op, Expression... args) { + public static JTSGeometryOperation create(Class type, Operator op, Expression... args) { return new JTSGeometryOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected JTSGeometryOperation(Class type, Operator op, Expression... args) { + protected JTSGeometryOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected JTSGeometryOperation(Class type, Operator op, ImmutableList> args) { + protected JTSGeometryOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java index 3aa0801f86..4b7138eabd 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java @@ -33,25 +33,25 @@ public class JTSLineStringOperation extends JTSLineStringE private static final long serialVersionUID = 3433471874808633698L; - public static JTSLineStringOperation create(Class type, Operator op, Expression one) { + public static JTSLineStringOperation create(Class type, Operator op, Expression one) { return new JTSLineStringOperation(type, op, ImmutableList.>of(one)); } - public static JTSLineStringOperation create(Class type, Operator op, Expression one, Expression two) { + public static JTSLineStringOperation create(Class type, Operator op, Expression one, Expression two) { return new JTSLineStringOperation(type, op, ImmutableList.of(one, two)); } - public static JTSLineStringOperation create(Class type, Operator op, Expression... args) { + public static JTSLineStringOperation create(Class type, Operator op, Expression... args) { return new JTSLineStringOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected JTSLineStringOperation(Class type, Operator op, Expression... args) { + protected JTSLineStringOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected JTSLineStringOperation(Class type, Operator op, ImmutableList> args) { + protected JTSLineStringOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java index c38da98f30..fbe4271565 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java @@ -33,25 +33,25 @@ public class JTSPointOperation extends JTSPointExpression im private static final long serialVersionUID = 3433471874808633698L; - public static JTSPointOperation create(Class type, Operator op, Expression one) { + public static JTSPointOperation create(Class type, Operator op, Expression one) { return new JTSPointOperation(type, op, ImmutableList.>of(one)); } - public static JTSPointOperation create(Class type, Operator op, Expression one, Expression two) { + public static JTSPointOperation create(Class type, Operator op, Expression one, Expression two) { return new JTSPointOperation(type, op, ImmutableList.of(one, two)); } - public static JTSPointOperation create(Class type, Operator op, Expression... args) { + public static JTSPointOperation create(Class type, Operator op, Expression... args) { return new JTSPointOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected JTSPointOperation(Class type, Operator op, Expression... args) { + protected JTSPointOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected JTSPointOperation(Class type, Operator op, ImmutableList> args) { + protected JTSPointOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java index 9b8fbd27ab..d9849dce0c 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java @@ -33,25 +33,25 @@ public class JTSPolygonOperation extends JTSPolygonExpression private static final long serialVersionUID = 3433471874808633698L; - public static JTSPolygonOperation create(Class type, Operator op, Expression one) { + public static JTSPolygonOperation create(Class type, Operator op, Expression one) { return new JTSPolygonOperation(type, op, ImmutableList.>of(one)); } - public static JTSPolygonOperation create(Class type, Operator op, Expression one, Expression two) { + public static JTSPolygonOperation create(Class type, Operator op, Expression one, Expression two) { return new JTSPolygonOperation(type, op, ImmutableList.of(one, two)); } - public static JTSPolygonOperation create(Class type, Operator op, Expression... args) { + public static JTSPolygonOperation create(Class type, Operator op, Expression... args) { return new JTSPolygonOperation(type, op, args); } private final OperationImpl< T> opMixin; - protected JTSPolygonOperation(Class type, Operator op, Expression... args) { + protected JTSPolygonOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - protected JTSPolygonOperation(Class type, Operator op, ImmutableList> args) { + protected JTSPolygonOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(type, op, args)); this.opMixin = (OperationImpl)mixin; } @@ -72,7 +72,7 @@ public List> getArgs() { } @Override - public Operator getOperator() { + public Operator getOperator() { return opMixin.getOperator(); } } diff --git a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java index abe4615172..690f4fde2a 100644 --- a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java +++ b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/SpatialTemplatesSupport.java @@ -45,12 +45,12 @@ private static String createSpatial(String name, int args, boolean asFunction) { return result.toString(); } - public static Map, String> getSpatialOps(boolean asFunction) { + public static Map getSpatialOps(boolean asFunction) { return getSpatialOps("ST_", asFunction); } - public static Map, String> getSpatialOps(String prefix, boolean asFunction) { - Map, String> ops = Maps.newHashMap(); + public static Map getSpatialOps(String prefix, boolean asFunction) { + Map ops = Maps.newHashMap(); ops.put(SpatialOps.AREA, createSpatial(prefix + "Area", 1, asFunction)); ops.put(SpatialOps.AREA2, createSpatial(prefix + "Area", 2, asFunction)); ops.put(SpatialOps.AS_BINARY, createSpatial(prefix + "AsBinary", 1, asFunction)); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java index 85d4621ee7..4ee16a88d9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java @@ -257,7 +257,7 @@ public Q rightJoin(SubQueryExpression target, Path alias) { } @SuppressWarnings({ "unchecked", "rawtypes" }) - private CollectionExpressionBase union(Operator op, List> sq) { + private CollectionExpressionBase union(Operator op, List> sq) { Expression rv = sq.get(0); if (sq.size() == 1 && !CollectionExpression.class.isInstance(rv)) { return new ListSubQuery(rv.getType(), sq.get(0).getMetadata()); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java index 7bbf41681b..ccab510ca1 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java @@ -191,7 +191,7 @@ public BooleanExpression ne(Expression right) { } } - private BooleanExpression primaryKeyOperation(Operator op, PrimaryKey pk1, PrimaryKey pk2) { + private BooleanExpression primaryKeyOperation(Operator op, PrimaryKey pk1, PrimaryKey pk2) { if (pk1 == null || pk2 == null) { throw new UnsupportedOperationException("No primary keys available"); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java index 2c9ab2d980..a2e2fa3ddd 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java @@ -278,7 +278,7 @@ public static NumberExpression datediff(DatePart * @param expr */ public static DateExpression datetrunc(DatePart unit, DateExpression expr) { - return DateOperation.create(expr.getType(), DATE_TRUNC_OPS.get(unit), expr); + return DateOperation.create((Class)expr.getType(), DATE_TRUNC_OPS.get(unit), expr); } /** @@ -288,7 +288,7 @@ public static DateExpression datetrunc(DatePart unit, * @param expr */ public static DateTimeExpression datetrunc(DatePart unit, DateTimeExpression expr) { - return DateTimeOperation.create(expr.getType(), DATE_TRUNC_OPS.get(unit), expr); + return DateTimeOperation.create((Class)expr.getType(), DATE_TRUNC_OPS.get(unit), expr); } /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java index a61d77a9f7..08a6512ce9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java @@ -19,7 +19,6 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.OperationImpl; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.OperatorImpl; /** * SQLOps provides SQL specific operators @@ -27,107 +26,56 @@ * @author tiwe * */ -public final class SQLOps { - - private static final String NS = SQLOps.class.getName(); - - public static final Operator ALL = new OperatorImpl(NS, "ALL"); - - public static final Operator CAST = new OperatorImpl(NS, "CAST"); - - public static final Operator CORR = new OperatorImpl(NS, "CORR"); - - public static final Operator COVARPOP = new OperatorImpl(NS, "COVARPOP"); - - public static final Operator COVARSAMP = new OperatorImpl(NS, "COVARSAMP"); - - public static final Operator CUMEDIST = new OperatorImpl(NS, "CUMEDIST"); - - public static final Operator CUMEDIST2 = new OperatorImpl(NS, "CUMEDIST2"); - - public static final Operator DENSERANK = new OperatorImpl(NS, "DENSERANK"); - - public static final Operator DENSERANK2 = new OperatorImpl(NS, "DENSERANK2"); - - public static final Operator FIRSTVALUE = new OperatorImpl(NS, "FIRSTVALUE"); - - public static final Operator FOR_SHARE = new OperatorImpl(NS, "FOR_SHARE"); - - public static final Operator FOR_UPDATE = new OperatorImpl(NS, "FOR_UPDATE"); - - public static final Operator LAG = new OperatorImpl(NS, "LAG"); - - public static final Operator LASTVALUE = new OperatorImpl(NS, "LASTVALUE"); - - public static final Operator LEAD = new OperatorImpl(NS, "LEAD"); - - public static final Operator LISTAGG = new OperatorImpl(NS, "LISTAGG"); - - public static final Operator NEXTVAL = new OperatorImpl(NS, "NEXTVAL"); - - public static final Operator NO_WAIT = new OperatorImpl(NS, "NO_WAIT"); - - public static final Operator NTHVALUE = new OperatorImpl(NS, "NTHVALUE"); - - public static final Operator NTILE = new OperatorImpl(NS, "NTILE"); - - public static final Operator PERCENTRANK = new OperatorImpl(NS, "PERCENTRANK"); - - public static final Operator PERCENTRANK2 = new OperatorImpl(NS, "PERCENTRANK2"); - - public static final Operator PERCENTILECONT = new OperatorImpl(NS, "PERCENTILECONT"); - - public static final Operator PERCENTILEDISC = new OperatorImpl(NS, "PERCENTILEDISC"); - - public static final Operator QUALIFY = new OperatorImpl(NS, "QUALIFY"); - - public static final Operator RANK = new OperatorImpl(NS, "RANK"); - - public static final Operator RANK2 = new OperatorImpl(NS, "RANK2"); - - public static final Operator REGR_SLOPE = new OperatorImpl(NS, "REGR_SLOPE"); - - public static final Operator REGR_INTERCEPT = new OperatorImpl(NS, "REGR_INTERCEPT"); - - public static final Operator REGR_COUNT = new OperatorImpl(NS, "REGR_COUNT"); - - public static final Operator REGR_R2 = new OperatorImpl(NS, "REGR_R2"); - - public static final Operator REGR_AVGX = new OperatorImpl(NS, "REGR_AVGX"); - - public static final Operator REGR_AVGY = new OperatorImpl(NS, "REGR_AVGY"); - - public static final Operator REGR_SXX = new OperatorImpl(NS, "REGR_SXX"); - - public static final Operator REGR_SYY = new OperatorImpl(NS, "REGR_SYY"); - - public static final Operator REGR_SXY = new OperatorImpl(NS, "REGR_SXY"); - - public static final Operator RATIOTOREPORT = new OperatorImpl(NS, "RATIOTOREPORT"); - - public static final Operator ROWNUMBER = new OperatorImpl(NS, "ROWNUMBER"); - - public static final Operator STDDEV = new OperatorImpl(NS, "STDDEV"); - - public static final Operator STDDEVPOP = new OperatorImpl(NS, "STDDEVPOP"); - - public static final Operator STDDEVSAMP = new OperatorImpl(NS, "STDDEVSAMP"); - - public static final Operator STDDEV_DISTINCT = new OperatorImpl(NS, "STDDEV_DISTINCT"); - - public static final Operator UNION = new OperatorImpl(NS, "UNION"); - - public static final Operator UNION_ALL = new OperatorImpl(NS, "UNION_ALL"); - - public static final Operator VARIANCE = new OperatorImpl(NS, "VARIANCE"); - - public static final Operator VARPOP = new OperatorImpl(NS, "VARPOP"); - - public static final Operator VARSAMP = new OperatorImpl(NS, "VARSAMP"); - - public static final Operator WITH_ALIAS = new OperatorImpl(NS, "WITH_ALIAS"); - - public static final Operator WITH_COLUMNS = new OperatorImpl(NS, "WITH_COLUMNS"); +public enum SQLOps implements Operator { + ALL, + CAST, + CORR, + COVARPOP, + COVARSAMP, + CUMEDIST, + CUMEDIST2, + DENSERANK, + DENSERANK2, + FIRSTVALUE, + FOR_SHARE, + FOR_UPDATE, + LAG, + LASTVALUE, + LEAD, + LISTAGG, + NEXTVAL, + NO_WAIT, + NTHVALUE, + NTILE, + PERCENTRANK, + PERCENTRANK2, + PERCENTILECONT, + PERCENTILEDISC, + QUALIFY, + RANK, + RANK2, + REGR_SLOPE, + REGR_INTERCEPT, + REGR_COUNT, + REGR_R2, + REGR_AVGX, + REGR_AVGY, + REGR_SXX, + REGR_SYY, + REGR_SXY, + RATIOTOREPORT, + ROWNUMBER, + STDDEV, + STDDEVPOP, + STDDEVSAMP, + STDDEV_DISTINCT, + UNION, + UNION_ALL, + VARIANCE, + VARPOP, + VARSAMP, + WITH_ALIAS, + WITH_COLUMNS; public static final QueryFlag FOR_SHARE_FLAG = new QueryFlag(Position.END, new OperationImpl( Object.class, FOR_SHARE, ImmutableList.>of())); @@ -138,6 +86,4 @@ public final class SQLOps { public static final QueryFlag NO_WAIT_FLAG = new QueryFlag(Position.END, new OperationImpl( Object.class, NO_WAIT, ImmutableList.>of())); - private SQLOps() {} - } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java index 8bcd1fe4d2..08054a7e42 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java @@ -846,7 +846,7 @@ public Void visit(TemplateExpression expr, Void context) { } @Override - protected void visitOperation(Class type, Operator operator, List> args) { + protected void visitOperation(Class type, Operator operator, List> args) { boolean pathAdded = false; if (args.size() == 2 && !useLiterals diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/UnionUtils.java b/querydsl-sql/src/main/java/com/querydsl/sql/UnionUtils.java index 3d210763bc..ebf1052a6b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/UnionUtils.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/UnionUtils.java @@ -29,7 +29,7 @@ public final class UnionUtils { public static Expression union(SubQueryExpression[] union, boolean unionAll) { - final Operator operator = unionAll ? SQLOps.UNION_ALL : SQLOps.UNION; + final Operator operator = unionAll ? SQLOps.UNION_ALL : SQLOps.UNION; Expression rv = union[0]; for (int i = 1; i < union.length; i++) { rv = OperationImpl.create(rv.getType(), operator, rv, union[i]); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java b/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java index ac3e7d17f2..ee8557a7d3 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java @@ -29,15 +29,15 @@ public class WindowOver extends SimpleOperation { private static final long serialVersionUID = 464583892898579544L; - public WindowOver(Class type, Operator op) { + public WindowOver(Class type, Operator op) { super(type, op, ImmutableList.>of()); } - public WindowOver(Class type, Operator op, Expression arg) { + public WindowOver(Class type, Operator op, Expression arg) { super(type, op, ImmutableList.>of(arg)); } - public WindowOver(Class type, Operator op, Expression arg1, Expression arg2) { + public WindowOver(Class type, Operator op, Expression arg1, Expression arg2) { super(type, op, ImmutableList.>of(arg1, arg2)); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java b/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java index 9de013e4c3..ee649628f9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java @@ -113,19 +113,19 @@ public OrderBy orderBy(ComparableExpressionBase... orderBy) { } } - public WithinGroup(Class type, Operator op) { + public WithinGroup(Class type, Operator op) { super(type, op, ImmutableList.>of()); } - public WithinGroup(Class type, Operator op, Expression arg) { + public WithinGroup(Class type, Operator op, Expression arg) { super(type, op, ImmutableList.>of(arg)); } - public WithinGroup(Class type, Operator op, Expression arg1, Expression arg2) { + public WithinGroup(Class type, Operator op, Expression arg1, Expression arg2) { super(type, op, ImmutableList.>of(arg1, arg2)); } - public WithinGroup(Class type, Operator op, Expression... args) { + public WithinGroup(Class type, Operator op, Expression... args) { super(type, op, merge(args)); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java index e668be0f63..6966f955b7 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java @@ -35,12 +35,15 @@ public class SQLSubQueryTest { @Test public void UnknownOperator() { - Operator op = new OperatorImpl(SQLSubQueryTest.class.getName(), "unknownfn"); + Operator op = new Operator() { + public String name() { return "unknownfn"; } + public String toString() { return name(); } + }; SQLSubQuery query = new SQLSubQuery(); query.from(employee) .where(BooleanOperation.create(op, employee.id)); - assertEquals("from EMPLOYEE EMPLOYEE\nwhere com.querydsl.sql.SQLSubQueryTest#unknownfn(EMPLOYEE.ID)", query.toString()); + assertEquals("from EMPLOYEE EMPLOYEE\nwhere unknownfn(EMPLOYEE.ID)", query.toString()); } @Test From a43897fe063eba6e52bae96c9f73d60d5371eae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Feb 2015 13:55:25 +0200 Subject: [PATCH 0721/1968] Hide test summary for travis profile Categorize tests --- .../src/test/java/com/querydsl/collections/LoadTest.java | 3 +++ .../com/querydsl/core/support/NormalizationTest.java | 9 +++++++-- .../java/com/querydsl/core/testutil/Performance.java | 2 +- .../java/com/querydsl/core/testutil/ReportingOnly.java | 7 +++++++ querydsl-root/pom.xml | 6 ++++-- .../test/java/com/querydsl/sql/DateArithmeticTest.java | 3 +++ .../test/java/com/querydsl/sql/JDBCTypeMappingTest.java | 4 ++++ .../src/test/java/com/querydsl/sql/PaginationTest.java | 3 +++ 8 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 querydsl-core/src/test/java/com/querydsl/core/testutil/ReportingOnly.java diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/LoadTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/LoadTest.java index aee684b20c..20e607f78d 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/LoadTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/LoadTest.java @@ -21,10 +21,13 @@ import java.util.List; import org.junit.Test; +import org.junit.experimental.categories.Category; import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.QueryMetadata; +import com.querydsl.core.testutil.Performance; +@Category(Performance.class) public class LoadTest { private QCat cat = QCat.cat; diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java index f4dc743db7..538bc869fe 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java @@ -1,13 +1,18 @@ package com.querydsl.core.support; +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.experimental.categories.Category; + import com.querydsl.core.testutil.Benchmark; +import com.querydsl.core.testutil.Performance; import com.querydsl.core.testutil.Runner; -import org.junit.Test; -import static org.junit.Assert.assertEquals; public class NormalizationTest { @Test + @Category(Performance.class) public void Performance() throws Exception { Runner.run("NormalizationTest Performance", new Benchmark() { diff --git a/querydsl-core/src/test/java/com/querydsl/core/testutil/Performance.java b/querydsl-core/src/test/java/com/querydsl/core/testutil/Performance.java index 253c610d9f..623c76bbf9 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/testutil/Performance.java +++ b/querydsl-core/src/test/java/com/querydsl/core/testutil/Performance.java @@ -1,7 +1,7 @@ package com.querydsl.core.testutil; /** - * Performance is used as a test category + * Performance is used as a test category to make performance tests */ public interface Performance { diff --git a/querydsl-core/src/test/java/com/querydsl/core/testutil/ReportingOnly.java b/querydsl-core/src/test/java/com/querydsl/core/testutil/ReportingOnly.java new file mode 100644 index 0000000000..a375cd251d --- /dev/null +++ b/querydsl-core/src/test/java/com/querydsl/core/testutil/ReportingOnly.java @@ -0,0 +1,7 @@ +package com.querydsl.core.testutil; + +/** + * ReportingOnly is used as a test category to make reporting only tests + */ +public interface ReportingOnly { +} diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 262c5ad5d4..6defaa833b 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -176,7 +176,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.16 + 2.18.1 org.apache.felix @@ -536,7 +536,9 @@ org.apache.maven.plugins maven-surefire-plugin - com.querydsl.core.testutil.Performance + com.querydsl.core.testutil.Performance,com.querydsl.core.testutil.ReportingOnly + true + false **/*$* **/DB2*SuiteTest.java diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java index 2f013715b4..2144aac285 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java @@ -4,11 +4,14 @@ import java.util.List; import org.junit.Test; +import org.junit.experimental.categories.Category; import com.google.common.collect.Lists; +import com.querydsl.core.testutil.ReportingOnly; import com.querydsl.core.types.Expression; import com.querydsl.core.types.path.DateTimePath; +@Category(ReportingOnly.class) public class DateArithmeticTest { private String serialize(Expression expr, SQLTemplates templates) { diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java index 3b831fb12f..2fe5851aa6 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java @@ -21,6 +21,9 @@ import java.sql.Types; import org.junit.Test; +import org.junit.experimental.categories.Category; + +import com.querydsl.core.testutil.ReportingOnly; public class JDBCTypeMappingTest { @@ -84,6 +87,7 @@ public void NumericTypes() { } @Test + @Category(ReportingOnly.class) public void Max() { System.err.println("Byte: " + String.valueOf(Byte.MAX_VALUE).length()); System.err.println("Short: " + String.valueOf(Short.MAX_VALUE).length()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java index 15f282c639..07e45b2d36 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java @@ -3,13 +3,16 @@ import java.util.List; import org.junit.Test; +import org.junit.experimental.categories.Category; import com.google.common.collect.Lists; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; +import com.querydsl.core.testutil.ReportingOnly; import com.querydsl.sql.domain.QEmployee; import com.querydsl.core.support.QueryMixin; +@Category(ReportingOnly.class) public class PaginationTest { private String serialize(QueryMetadata metadata, SQLTemplates templates) { From 6408e9fe426c01fb38b34b105691573be0acf4f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Feb 2015 15:06:29 +0200 Subject: [PATCH 0722/1968] Limit logging of Hibernate and EclipseLink --- querydsl-jpa/pom.xml | 4 ++++ .../src/test/resources/META-INF/persistence.xml | 13 +++++++++---- querydsl-jpa/src/test/resources/log4j.properties | 5 ++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index cf126959b0..94ddc5f509 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -286,6 +286,10 @@ derby.stream.error.file target/derby.log + + org.jboss.logging.provider + slf4j + diff --git a/querydsl-jpa/src/test/resources/META-INF/persistence.xml b/querydsl-jpa/src/test/resources/META-INF/persistence.xml index f59ac82cc9..ac0e520fae 100644 --- a/querydsl-jpa/src/test/resources/META-INF/persistence.xml +++ b/querydsl-jpa/src/test/resources/META-INF/persistence.xml @@ -17,7 +17,7 @@ - + @@ -29,6 +29,7 @@ + @@ -54,7 +55,7 @@ - + @@ -67,6 +68,7 @@ + @@ -82,7 +84,7 @@ - + @@ -96,7 +98,7 @@ - + @@ -109,6 +111,7 @@ + @@ -221,6 +224,7 @@ + @@ -251,6 +255,7 @@ + diff --git a/querydsl-jpa/src/test/resources/log4j.properties b/querydsl-jpa/src/test/resources/log4j.properties index feedb7dbce..b6c5534780 100644 --- a/querydsl-jpa/src/test/resources/log4j.properties +++ b/querydsl-jpa/src/test/resources/log4j.properties @@ -13,4 +13,7 @@ log4j.appender.querydsl.layout=org.apache.log4j.PatternLayout log4j.appender.querydsl.layout.ConversionPattern=Querydsl : %C#%M - %m%n #log4j.logger.com.querydsl.jpa.hibernate=DEBUG, querydsl -#log4j.logger.com.querydsl.jpa.impl=DEBUG, querydsl \ No newline at end of file +#log4j.logger.com.querydsl.jpa.impl=DEBUG, querydsl + +log4j.logger.org.hibernate=ERROR +log4j.logger.org.hibernate.tool.hbm2ddl=FATAL \ No newline at end of file From 08285aa7d7ab8918c8a054b6a2e17094637e12ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Feb 2015 15:40:48 +0200 Subject: [PATCH 0723/1968] Bump dependency versions --- querydsl-root/pom.xml | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 6defaa833b..e0cb154266 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -166,7 +166,12 @@ org.apache.maven.plugins maven-assembly-plugin - 2.4 + 2.5.3 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 com.mysema.maven @@ -208,7 +213,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 1.3.1 + 1.4 check @@ -247,7 +252,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 2.10.1 ${project.build.directory}/dist/apidocs ${project.build.directory}/dist/apidocs @@ -324,7 +329,6 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 1.6 1.6 @@ -333,7 +337,7 @@ org.apache.maven.plugins maven-source-plugin - 2.2.1 + 2.4 package @@ -346,7 +350,7 @@ org.apache.maven.plugins maven-jar-plugin - 2.4 + 2.5 true From 74de6aa71e49764385c01c9076e3d886af5abe61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Feb 2015 17:20:12 +0200 Subject: [PATCH 0724/1968] Fix Id handling --- .../querydsl/mongodb/MongodbSerializer.java | 25 ++----------------- .../mongodb/morphia/MorphiaSerializer.java | 7 ++++-- .../mongodb/MongodbSerializerTest.java | 16 +++++++++--- .../com/querydsl/mongodb/domain/Person.java | 16 ++++++++++++ 4 files changed, 36 insertions(+), 28 deletions(-) create mode 100644 querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 455f3ab2c7..7b93fbb743 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -18,30 +18,13 @@ import java.util.regex.Pattern; import org.bson.BSONObject; -import org.bson.types.ObjectId; import com.google.common.collect.Sets; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.DBRef; -import com.querydsl.core.types.Constant; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.Operation; -import com.querydsl.core.types.OperationImpl; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Order; -import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.ParamExpression; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathType; -import com.querydsl.core.types.SubQueryExpression; -import com.querydsl.core.types.TemplateExpression; -import com.querydsl.core.types.Visitor; +import com.querydsl.core.types.*; /** * Serializes the given Querydsl query to a DBObject query for MongoDB @@ -320,11 +303,7 @@ public String visit(Path expr, Void context) { } protected String getKeyForPath(Path expr, PathMetadata metadata) { - if (expr.getType().equals(ObjectId.class)) { - return "_id"; - } else { - return metadata.getElement().toString(); - } + return metadata.getElement().toString(); } @Override diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java index 37577b0801..19588c9522 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaSerializer.java @@ -15,14 +15,15 @@ import org.mongodb.morphia.Key; import org.mongodb.morphia.Morphia; +import org.mongodb.morphia.annotations.Id; import org.mongodb.morphia.annotations.Property; import org.mongodb.morphia.annotations.Reference; import com.mongodb.DBRef; -import com.querydsl.mongodb.MongodbSerializer; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.PathType; +import com.querydsl.mongodb.MongodbSerializer; /** * MorphiaSerializer extends {@link MongodbSerializer} with Morphia specific annotation handling @@ -40,7 +41,9 @@ public MorphiaSerializer(Morphia morphia) { @Override protected String getKeyForPath(Path expr, PathMetadata metadata) { - if (metadata.getPathType() == PathType.PROPERTY && expr.getAnnotatedElement().isAnnotationPresent(Property.class)) { + if (expr.getAnnotatedElement().isAnnotationPresent(Id.class)) { + return "_id"; + } else if (metadata.getPathType() == PathType.PROPERTY && expr.getAnnotatedElement().isAnnotationPresent(Property.class)) { return expr.getAnnotatedElement().getAnnotation(Property.class).value(); } else { return super.getKeyForPath(expr, metadata); diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 1481f23785..194795a41d 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -20,18 +20,20 @@ import java.util.Date; import java.util.List; +import org.bson.types.ObjectId; import org.junit.Before; import org.junit.Test; import com.mongodb.BasicDBList; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; -import com.querydsl.mongodb.domain.QDummyEntity; -import com.querydsl.mongodb.domain.QUser; -import com.querydsl.mongodb.morphia.MorphiaSerializer; import com.querydsl.core.types.Expression; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.path.*; +import com.querydsl.mongodb.domain.QDummyEntity; +import com.querydsl.mongodb.domain.QPerson; +import com.querydsl.mongodb.domain.QUser; +import com.querydsl.mongodb.morphia.MorphiaSerializer; public class MongodbSerializerTest { @@ -216,6 +218,14 @@ public void Not() { append("year", dbo("$ne", 1800))); } + @Test + public void ObjectId() { + ObjectId id = new ObjectId(); + QPerson person = QPerson.person; + assertQuery(person.id.eq(id), dbo("_id",id)); + assertQuery(person.addressId.eq(id), dbo("addressId",id)); + } + private List> sortList(OrderSpecifier ... order) { return Arrays.asList(order); diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java new file mode 100644 index 0000000000..4e3a637fd4 --- /dev/null +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/domain/Person.java @@ -0,0 +1,16 @@ +package com.querydsl.mongodb.domain; + +import org.bson.types.ObjectId; +import org.mongodb.morphia.annotations.Entity; +import org.mongodb.morphia.annotations.Id; + +@Entity +class Person { + @Id + public ObjectId id; + + public String name; + + // manual reference to an address + public ObjectId addressId; +} \ No newline at end of file From 425db027eb066733464714216bd478a1c195804a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 5 Feb 2015 22:37:09 +0200 Subject: [PATCH 0725/1968] Use AbstractQuery & Query division consistently --- .../hibernate/search/AbstractSearchQuery.java | 185 ++++++++++++++++++ .../hibernate/search/SearchQuery.java | 155 +-------------- .../com/querydsl/jdo/AbstractJDOSubQuery.java | 2 +- .../com/querydsl/jpa/AbstractJPASubQuery.java | 2 +- ...dbQuery.java => AbstractMongodbQuery.java} | 9 +- .../querydsl/mongodb/AnyEmbeddedBuilder.java | 2 +- .../com/querydsl/mongodb/JoinBuilder.java | 2 +- .../mongodb/morphia/MorphiaQuery.java | 6 +- 8 files changed, 199 insertions(+), 164 deletions(-) create mode 100644 querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/AbstractSearchQuery.java rename querydsl-mongodb/src/main/java/com/querydsl/mongodb/{MongodbQuery.java => AbstractMongodbQuery.java} (96%) diff --git a/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/AbstractSearchQuery.java b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/AbstractSearchQuery.java new file mode 100644 index 0000000000..1ebaef6997 --- /dev/null +++ b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/AbstractSearchQuery.java @@ -0,0 +1,185 @@ +/* + * Copyright 2015, Timo Westkämper + * + * 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 com.querydsl.hibernate.search; + +import java.util.List; + +import org.apache.lucene.search.MatchAllDocsQuery; +import org.hibernate.Session; +import org.hibernate.search.FullTextQuery; +import org.hibernate.search.FullTextSession; +import org.hibernate.search.Search; + +import com.mysema.commons.lang.CloseableIterator; +import com.mysema.commons.lang.IteratorAdapter; +import com.querydsl.core.*; +import com.querydsl.core.support.QueryMixin; +import com.querydsl.core.types.EntityPath; +import com.querydsl.core.types.OrderSpecifier; +import com.querydsl.core.types.ParamExpression; +import com.querydsl.core.types.Predicate; +import com.querydsl.lucene3.LuceneSerializer; + +/** + * Abstract base class for Hibernate Search query classes + */ +public abstract class AbstractSearchQuery> implements SimpleQuery, SimpleProjectable { + + private final EntityPath path; + + private final QueryMixin queryMixin; + + private final LuceneSerializer serializer; + + private final FullTextSession session; + + /** + * Create a new SearchQuery instance + * + * @param session + * @param path + */ + public AbstractSearchQuery(FullTextSession session, EntityPath path) { + this.queryMixin = new QueryMixin((Q)this); + this.session = session; + this.path = path; + this.serializer = SearchSerializer.DEFAULT; + queryMixin.from(path); + } + + public AbstractSearchQuery(Session session, EntityPath path) { + this(Search.getFullTextSession(session), path); + } + + + @Override + public boolean exists() { + return createQuery(true).getResultSize() > 0; + } + + @Override + public boolean notExists() { + return createQuery(true).getResultSize() == 0; + } + + @Override + public long count() { + return createQuery(true).getResultSize(); + } + + private FullTextQuery createQuery(boolean forCount) { + QueryMetadata metadata = queryMixin.getMetadata(); + org.apache.lucene.search.Query query; + if (metadata.getWhere() != null) { + query = serializer.toQuery(metadata.getWhere(), metadata); + } else { + query = new MatchAllDocsQuery(); + } + FullTextQuery fullTextQuery = session.createFullTextQuery(query, path.getType()); + + // order + if (!metadata.getOrderBy().isEmpty() && !forCount) { + fullTextQuery.setSort(serializer.toSort(metadata.getOrderBy())); + } + + // paging + QueryModifiers modifiers = metadata.getModifiers(); + if (modifiers.isRestricting() && !forCount) { + Integer limit = modifiers.getLimitAsInteger(); + Integer offset = modifiers.getOffsetAsInteger(); + if (limit != null) { + fullTextQuery.setMaxResults(limit.intValue()); + } + if (offset != null) { + fullTextQuery.setFirstResult(offset.intValue()); + } + } + return fullTextQuery; + } + + + @Override + public Q distinct() { + return queryMixin.distinct(); + } + + + @SuppressWarnings("unchecked") + public CloseableIterator iterate() { + return new IteratorAdapter(createQuery(false).iterate()); + } + + public CloseableIterator iterateDistinct() { + return iterate(); + } + + @Override + public Q limit(long limit) { + return queryMixin.limit(limit); + } + + @SuppressWarnings("unchecked") + @Override + public List list() { + return createQuery(false).list(); + } + + @SuppressWarnings("unchecked") + @Override + public SearchResults listResults() { + FullTextQuery query = createQuery(false); + return new SearchResults(query.list(), queryMixin.getMetadata().getModifiers(), query.getResultSize()); + } + + @Override + public Q offset(long offset) { + return queryMixin.offset(offset); + } + + @Override + public Q orderBy(OrderSpecifier... o) { + return queryMixin.orderBy(o); + } + + @Override + public Q restrict(QueryModifiers modifiers) { + return queryMixin.restrict(modifiers); + } + + @Override + public

Q set(ParamExpression

param, P value) { + return queryMixin.set(param, value); + } + + @Override + public T singleResult() { + return limit(1).uniqueResult(); + } + + @SuppressWarnings("unchecked") + @Override + public T uniqueResult() { + try { + return (T) createQuery(false).uniqueResult(); + } catch (org.hibernate.NonUniqueResultException e) { + throw new NonUniqueResultException(); + } + } + + @Override + public Q where(Predicate... e) { + return queryMixin.where(e); + } + +} diff --git a/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java index 8c38f6388c..de1dd75067 100644 --- a/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java +++ b/querydsl-hibernate-search/src/main/java/com/querydsl/hibernate/search/SearchQuery.java @@ -13,28 +13,11 @@ */ package com.querydsl.hibernate.search; -import java.util.List; - -import org.apache.lucene.search.MatchAllDocsQuery; import org.hibernate.Session; -import org.hibernate.search.FullTextQuery; import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; -import com.mysema.commons.lang.CloseableIterator; -import com.mysema.commons.lang.IteratorAdapter; -import com.querydsl.core.NonUniqueResultException; -import com.querydsl.core.QueryMetadata; -import com.querydsl.core.QueryModifiers; -import com.querydsl.core.SearchResults; -import com.querydsl.core.SimpleProjectable; -import com.querydsl.core.SimpleQuery; -import com.querydsl.lucene3.LuceneSerializer; -import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.EntityPath; -import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.ParamExpression; -import com.querydsl.core.types.Predicate; /** * SearchQuery is a Query implementation for Hibernate Search @@ -43,15 +26,7 @@ * * @param */ -public class SearchQuery implements SimpleQuery>, SimpleProjectable { - - private final EntityPath path; - - private final QueryMixin> queryMixin; - - private final LuceneSerializer serializer; - - private final FullTextSession session; +public class SearchQuery extends AbstractSearchQuery> { /** * Create a new SearchQuery instance @@ -60,137 +35,11 @@ public class SearchQuery implements SimpleQuery>, SimpleProjec * @param path */ public SearchQuery(FullTextSession session, EntityPath path) { - this.queryMixin = new QueryMixin>(this); - this.session = session; - this.path = path; - this.serializer = SearchSerializer.DEFAULT; - queryMixin.from(path); + super(session, path); } public SearchQuery(Session session, EntityPath path) { this(Search.getFullTextSession(session), path); } - - @Override - public boolean exists() { - return createQuery(true).getResultSize() > 0; - } - - @Override - public boolean notExists() { - return createQuery(true).getResultSize() == 0; - } - - @Override - public long count() { - return createQuery(true).getResultSize(); - } - - private FullTextQuery createQuery(boolean forCount) { - QueryMetadata metadata = queryMixin.getMetadata(); - org.apache.lucene.search.Query query; - if (metadata.getWhere() != null) { - query = serializer.toQuery(metadata.getWhere(), metadata); - } else { - query = new MatchAllDocsQuery(); - } - FullTextQuery fullTextQuery = session.createFullTextQuery(query, path.getType()); - - // order - if (!metadata.getOrderBy().isEmpty() && !forCount) { - fullTextQuery.setSort(serializer.toSort(metadata.getOrderBy())); - } - - // paging - QueryModifiers modifiers = metadata.getModifiers(); - if (modifiers.isRestricting() && !forCount) { - Integer limit = modifiers.getLimitAsInteger(); - Integer offset = modifiers.getOffsetAsInteger(); - if (limit != null) { - fullTextQuery.setMaxResults(limit.intValue()); - } - if (offset != null) { - fullTextQuery.setFirstResult(offset.intValue()); - } - } - return fullTextQuery; - } - - - @Override - public SearchQuery distinct() { - // do nothing - return this; - } - - - @SuppressWarnings("unchecked") - public CloseableIterator iterate() { - return new IteratorAdapter(createQuery(false).iterate()); - } - - public CloseableIterator iterateDistinct() { - return iterate(); - } - - @Override - public SearchQuery limit(long limit) { - return queryMixin.limit(limit); - } - - @SuppressWarnings("unchecked") - @Override - public List list() { - return createQuery(false).list(); - } - - @SuppressWarnings("unchecked") - @Override - public SearchResults listResults() { - FullTextQuery query = createQuery(false); - return new SearchResults(query.list(), queryMixin.getMetadata().getModifiers(), query.getResultSize()); - } - - @Override - public SearchQuery offset(long offset) { - return queryMixin.offset(offset); - } - - @Override - public SearchQuery orderBy(OrderSpecifier... o) { - return queryMixin.orderBy(o); - } - - @Override - public SearchQuery restrict(QueryModifiers modifiers) { - return queryMixin.restrict(modifiers); - } - - @Override - public

SearchQuery set(ParamExpression

param, P value) { - return queryMixin.set(param, value); - } - - @Override - public T singleResult() { - return limit(1).uniqueResult(); - } - - @SuppressWarnings("unchecked") - @Override - public T uniqueResult() { - try { - return (T) createQuery(false).uniqueResult(); - } catch (org.hibernate.NonUniqueResultException e) { - throw new NonUniqueResultException(); - } - } - - @Override - public SearchQuery where(Predicate... e) { - return queryMixin.where(e); - } - - } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java index 3ad4db6087..b39c0a1784 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/AbstractJDOSubQuery.java @@ -27,7 +27,7 @@ * * @param */ -public class AbstractJDOSubQuery> extends DetachableQuery implements JDOCommonQuery { +public abstract class AbstractJDOSubQuery> extends DetachableQuery implements JDOCommonQuery { public AbstractJDOSubQuery() { this(new DefaultQueryMetadata().noValidate()); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java index 6291e858ae..e7ab4dd847 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/AbstractJPASubQuery.java @@ -30,7 +30,7 @@ * * @param concrete subtype */ -public class AbstractJPASubQuery> extends DetachableQuery implements JPQLSubQuery { +public abstract class AbstractJPASubQuery> extends DetachableQuery implements JPQLSubQuery { private final JPAQueryMixin queryMixin; diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java similarity index 96% rename from querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java rename to querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java index 6d3c45f5b0..3e056d8475 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbQuery.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AbstractMongodbQuery.java @@ -31,14 +31,15 @@ import com.querydsl.core.types.path.CollectionPathBase; /** - * MongodbQuery provides a general Querydsl query implementation with a pluggable DBObject to Bean transformation + * AbstractMongodbQuery provides a base class for general Querydsl query implementation with a + * pluggable DBObject to Bean transformation * * @author laimw * - * @param * @param + * @param */ -public abstract class MongodbQuery, K> implements SimpleQuery, SimpleProjectable { +public abstract class AbstractMongodbQuery> implements SimpleQuery, SimpleProjectable { @SuppressWarnings("serial") private static class NoResults extends RuntimeException {} @@ -60,7 +61,7 @@ private static class NoResults extends RuntimeException {} * @param transformer * @param serializer */ - public MongodbQuery(DBCollection collection, Function transformer, MongodbSerializer serializer) { + public AbstractMongodbQuery(DBCollection collection, Function transformer, MongodbSerializer serializer) { this.queryMixin = new QueryMixin((Q)this, new DefaultQueryMetadata().noValidate(), false); this.transformer = transformer; this.collection = collection; diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java index 69bbb5b9b6..20d4ffadd9 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/AnyEmbeddedBuilder.java @@ -28,7 +28,7 @@ * * @param */ -public class AnyEmbeddedBuilder, K> { +public class AnyEmbeddedBuilder, K> { private final QueryMixin queryMixin; diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java index da8cd90bc3..d78270d975 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/JoinBuilder.java @@ -28,7 +28,7 @@ * @param * @param */ -public class JoinBuilder, K, T> { +public class JoinBuilder, K, T> { private final QueryMixin queryMixin; diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java index 991cff6517..9a64fbd92b 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/morphia/MorphiaQuery.java @@ -22,17 +22,17 @@ import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; -import com.querydsl.mongodb.MongodbQuery; +import com.querydsl.mongodb.AbstractMongodbQuery; import com.querydsl.core.types.EntityPath; /** - * MorphiaQuery extends {@link MongodbQuery} with Morphia specific transformations + * MorphiaQuery extends {@link com.querydsl.mongodb.AbstractMongodbQuery} with Morphia specific transformations * * @author laimw * @author tiwe * */ -public class MorphiaQuery extends MongodbQuery, K> { +public class MorphiaQuery extends AbstractMongodbQuery> { private final EntityCache cache; From efffbfa975dd5769fdc8ef1a656de9115a42be03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 9 Feb 2015 18:34:42 +0200 Subject: [PATCH 0726/1968] Add tests --- .../core/group/AbstractGroupByTest.java | 11 ++++++++ .../querydsl/core/group/GroupByMapTest.java | 27 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/test/java/com/querydsl/core/group/AbstractGroupByTest.java b/querydsl-core/src/test/java/com/querydsl/core/group/AbstractGroupByTest.java index fda1582214..42fcab4b14 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/group/AbstractGroupByTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/group/AbstractGroupByTest.java @@ -34,6 +34,17 @@ public abstract class AbstractGroupByTest { row(3, "post 3", 6, "comment 6") ); + protected static final Projectable BASIC_RESULTS_UNORDERED = projectable( + row(null, "null post", 8, "comment 8"), + row(null, "null post", 7, "comment 7"), + row(1, "post 1", 2, "comment 2"), + row(1, "post 1", 1, "comment 1"), + row(2, "post 2", 4, "comment 4"), + row(1, "post 1", 3, "comment 3"), + row(3, "post 3", 6, "comment 6"), + row(2, "post 2", 5, "comment 5") + ); + protected static final Projectable MAP_RESULTS = projectable( row(null, "null post", pair(7, "comment 7")), row(null, "null post", pair(8, "comment 8")), diff --git a/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java b/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java index 2f2e023447..6eb5795820 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java @@ -17,7 +17,7 @@ import static com.querydsl.core.group.GroupBy.groupBy; import static com.querydsl.core.group.GroupBy.list; import static com.querydsl.core.group.GroupBy.map; -import static com.querydsl.core.group.GroupBy.set; +import static com.querydsl.core.group.GroupBy.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; @@ -44,6 +44,18 @@ public void Group_Order() { assertEquals(4, results.size()); } + @Test + public void Set_By_Sorted() { + Map results = BASIC_RESULTS + .transform(groupBy(postId).as(postName, sortedSet(commentId))); + + Group group = results.get(1); + Iterator it = group.getSet(commentId).iterator(); + assertEquals(1, it.next().intValue()); + assertEquals(2, it.next().intValue()); + assertEquals(3, it.next().intValue()); + } + @Test public void First_Set_And_List() { Map results = BASIC_RESULTS.transform( @@ -99,6 +111,19 @@ public void Map() { assertEquals("comment 2", comments.get(2)); } + @Test + public void Map_Sorted() { + Map results = MAP_RESULTS.transform( + groupBy(postId).as(postName, sortedMap(commentId, commentText))); + + Group group = results.get(1); + + Iterator> it = group.getMap(commentId, commentText).entrySet().iterator(); + assertEquals(1, it.next().getKey().intValue()); + assertEquals(2, it.next().getKey().intValue()); + assertEquals(3, it.next().getKey().intValue()); + } + @Test public void Map2() { Map> results = MAP2_RESULTS.transform( From 9026fdad9105b68c8facf5cbbf5006a8db6cfa55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 9 Feb 2015 20:59:17 +0200 Subject: [PATCH 0727/1968] Add type property to Operator --- .../querydsl/core/types/OperationImpl.java | 4 + .../com/querydsl/core/types/Operator.java | 7 + .../java/com/querydsl/core/types/Ops.java | 378 ++++++++++-------- .../com/querydsl/core/types/PathType.java | 4 + .../core/types/expr/OperationTest.java | 4 +- .../main/java/com/querydsl/jpa/JPQLOps.java | 26 +- .../querydsl/jpa/JPAQueryMutability2Test.java | 1 + .../java/com/querydsl/lucene3/LuceneOps.java | 16 +- .../java/com/querydsl/lucene4/LuceneOps.java | 16 +- .../java/com/querydsl/mongodb/MongodbOps.java | 14 +- .../java/com/querydsl/spatial/SpatialOps.java | 164 ++++---- .../main/java/com/querydsl/sql/SQLOps.java | 108 ++--- .../com/querydsl/sql/SQLSubQueryTest.java | 1 + 13 files changed, 440 insertions(+), 303 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java index abf2e5dccb..ed61cb692c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/OperationImpl.java @@ -17,7 +17,9 @@ import javax.annotation.concurrent.Immutable; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; +import com.google.common.primitives.Primitives; /** @@ -50,6 +52,8 @@ protected OperationImpl(Class type, Operator operator, Expression type, Operator operator, ImmutableList> args) { super(type); + Class wrapped = Primitives.wrap(type); + Preconditions.checkArgument(operator.getType().isAssignableFrom(wrapped), operator.name()); this.operator = operator; this.args = args; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java index 5c3674c34d..bb30c5bfc1 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java @@ -28,5 +28,12 @@ public interface Operator extends Serializable{ * @return */ String name(); + + /** + * Get the result type of the operator + * + * @return + */ + Class getType(); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java b/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java index 2b6d8348bf..2a19a1d259 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java @@ -25,96 +25,106 @@ public enum Ops implements Operator { // general - EQ, - NE, - IS_NULL, - IS_NOT_NULL, - INSTANCE_OF, - NUMCAST, - STRING_CAST, - ALIAS, - LIST, - SINGLETON, - ORDINAL, - WRAPPED, + EQ(Boolean.class), + NE(Boolean.class), + IS_NULL(Boolean.class), + IS_NOT_NULL(Boolean.class), + INSTANCE_OF(Boolean.class), + NUMCAST(Number.class), + STRING_CAST(String.class), + ALIAS(Object.class), + LIST(Object.class), + SINGLETON(Object.class), + ORDINAL(Integer.class), + WRAPPED(Object.class), // collection - IN, // cmp. contains - NOT_IN, - COL_IS_EMPTY, - COL_SIZE, + IN(Boolean.class), // cmp. contains + NOT_IN(Boolean.class), + COL_IS_EMPTY(Boolean.class), + COL_SIZE(Integer.class), // array - ARRAY_SIZE, + ARRAY_SIZE(Number.class), // map - CONTAINS_KEY, - CONTAINS_VALUE, - MAP_SIZE, - MAP_IS_EMPTY, + CONTAINS_KEY(Boolean.class), + CONTAINS_VALUE(Boolean.class), + MAP_SIZE(Integer.class), + MAP_IS_EMPTY(Boolean.class), // Boolean - AND, - NOT, - OR, - XNOR, - XOR, + AND(Boolean.class), + NOT(Boolean.class), + OR(Boolean.class), + XNOR(Boolean.class), + XOR(Boolean.class), // Comparable - BETWEEN, - GOE, - GT, - LOE, - LT, + BETWEEN(Boolean.class), + GOE(Boolean.class), + GT(Boolean.class), + LOE(Boolean.class), + LT(Boolean.class), // Number - NEGATE, - ADD, - DIV, - MULT, - SUB, - MOD, + NEGATE(Number.class), + ADD(Number.class), + DIV(Number.class), + MULT(Number.class), + SUB(Number.class), + MOD(Number.class), // String - CHAR_AT, - CONCAT, - LOWER, - SUBSTR_1ARG, - SUBSTR_2ARGS, - TRIM, - UPPER, - MATCHES, - MATCHES_IC, - STRING_LENGTH, - STRING_IS_EMPTY, - STARTS_WITH, - STARTS_WITH_IC, - INDEX_OF_2ARGS, - INDEX_OF, - EQ_IGNORE_CASE, - ENDS_WITH, - ENDS_WITH_IC, - STRING_CONTAINS, - STRING_CONTAINS_IC, - LIKE, - LIKE_ESCAPE, + CHAR_AT(Character.class), + CONCAT(String.class), + LOWER(String.class), + SUBSTR_1ARG(String.class), + SUBSTR_2ARGS(String.class), + TRIM(String.class), + UPPER(String.class), + MATCHES(Boolean.class), + MATCHES_IC(Boolean.class), + STRING_LENGTH(Integer.class), + STRING_IS_EMPTY(Boolean.class), + STARTS_WITH(Boolean.class), + STARTS_WITH_IC(Boolean.class), + INDEX_OF_2ARGS(Integer.class), + INDEX_OF(Integer.class), + EQ_IGNORE_CASE(Boolean.class), + ENDS_WITH(Boolean.class), + ENDS_WITH_IC(Boolean.class), + STRING_CONTAINS(Boolean.class), + STRING_CONTAINS_IC(Boolean.class), + LIKE(Boolean.class), + LIKE_ESCAPE(Boolean.class), // case - CASE, - CASE_WHEN, - CASE_ELSE, + CASE(Object.class), + CASE_WHEN(Object.class), + CASE_ELSE(Object.class), // case for eq - CASE_EQ, - CASE_EQ_WHEN, - CASE_EQ_ELSE, + CASE_EQ(Object.class), + CASE_EQ_WHEN(Object.class), + CASE_EQ_ELSE(Object.class), // coalesce - COALESCE, - NULLIF, + COALESCE(Object.class), + NULLIF(Object.class), // subquery operations - EXISTS; + EXISTS(Boolean.class); + + private final Class type; + + private Ops(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } public static final Set equalsOps = ImmutableSet.of(EQ); @@ -135,16 +145,26 @@ public enum Ops implements Operator { */ @SuppressWarnings("unchecked") public enum AggOps implements Operator { - BOOLEAN_ALL, - BOOLEAN_ANY, - MAX_AGG, - MIN_AGG, - AVG_AGG, - SUM_AGG, - COUNT_AGG, - COUNT_DISTINCT_AGG, - COUNT_DISTINCT_ALL_AGG, - COUNT_ALL_AGG + BOOLEAN_ALL(Boolean.class), + BOOLEAN_ANY(Boolean.class), + MAX_AGG(Comparable.class), + MIN_AGG(Comparable.class), + AVG_AGG(Number.class), + SUM_AGG(Number.class), + COUNT_AGG(Number.class), + COUNT_DISTINCT_AGG(Number.class), + COUNT_DISTINCT_ALL_AGG(Number.class), + COUNT_ALL_AGG(Number.class); + + private final Class type; + + private AggOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } /** @@ -152,11 +172,21 @@ public enum AggOps implements Operator { */ @SuppressWarnings("unchecked") public enum QuantOps implements Operator { - AVG_IN_COL, - MAX_IN_COL, - MIN_IN_COL, - ANY, - ALL + AVG_IN_COL(Number.class), + MAX_IN_COL(Comparable.class), + MIN_IN_COL(Comparable.class), + ANY(Object.class), + ALL(Object.class); + + private final Class type; + + private QuantOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } /** @@ -164,44 +194,54 @@ public enum QuantOps implements Operator { */ @SuppressWarnings("unchecked") public enum DateTimeOps implements Operator { - DATE, - CURRENT_DATE, - CURRENT_TIME, - CURRENT_TIMESTAMP, - ADD_YEARS, - ADD_MONTHS, - ADD_WEEKS, - ADD_DAYS, - ADD_HOURS, - ADD_MINUTES, - ADD_SECONDS, - DIFF_YEARS, - DIFF_MONTHS, - DIFF_WEEKS, - DIFF_DAYS, - DIFF_HOURS, - DIFF_MINUTES, - DIFF_SECONDS, - TRUNC_YEAR, - TRUNC_MONTH, - TRUNC_WEEK, - TRUNC_DAY, - TRUNC_HOUR, - TRUNC_MINUTE, - TRUNC_SECOND, - HOUR, - MINUTE, - MONTH, - SECOND, - MILLISECOND, - SYSDATE, - YEAR, - WEEK, - YEAR_MONTH, - YEAR_WEEK, - DAY_OF_WEEK, - DAY_OF_MONTH, - DAY_OF_YEAR + DATE(Comparable.class), + CURRENT_DATE(Comparable.class), + CURRENT_TIME(Comparable.class), + CURRENT_TIMESTAMP(Comparable.class), + ADD_YEARS(Comparable.class), + ADD_MONTHS(Comparable.class), + ADD_WEEKS(Comparable.class), + ADD_DAYS(Comparable.class), + ADD_HOURS(Comparable.class), + ADD_MINUTES(Comparable.class), + ADD_SECONDS(Comparable.class), + DIFF_YEARS(Comparable.class), + DIFF_MONTHS(Comparable.class), + DIFF_WEEKS(Comparable.class), + DIFF_DAYS(Comparable.class), + DIFF_HOURS(Comparable.class), + DIFF_MINUTES(Comparable.class), + DIFF_SECONDS(Comparable.class), + TRUNC_YEAR(Comparable.class), + TRUNC_MONTH(Comparable.class), + TRUNC_WEEK(Comparable.class), + TRUNC_DAY(Comparable.class), + TRUNC_HOUR(Comparable.class), + TRUNC_MINUTE(Comparable.class), + TRUNC_SECOND(Comparable.class), + HOUR(Integer.class), + MINUTE(Integer.class), + MONTH(Integer.class), + SECOND(Integer.class), + MILLISECOND(Integer.class), + SYSDATE(Comparable.class), + YEAR(Integer.class), + WEEK(Integer.class), + YEAR_MONTH(Integer.class), + YEAR_WEEK(Integer.class), + DAY_OF_WEEK(Integer.class), + DAY_OF_MONTH(Integer.class), + DAY_OF_YEAR(Integer.class); + + private final Class type; + + private DateTimeOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } /** @@ -209,50 +249,70 @@ public enum DateTimeOps implements Operator { * */ public enum MathOps implements Operator { - ABS, - ACOS, - ASIN, - ATAN, - CEIL, - COS, - TAN, - SQRT, - SIN, - ROUND, - ROUND2, - RANDOM, - RANDOM2, - POWER, - MIN, - MAX, - LOG, - FLOOR, - EXP, - COSH, - COT, - COTH, - DEG, - LN, - RAD, - SIGN, - SINH, - TANH + ABS(Number.class), + ACOS(Number.class), + ASIN(Number.class), + ATAN(Number.class), + CEIL(Number.class), + COS(Number.class), + TAN(Number.class), + SQRT(Number.class), + SIN(Number.class), + ROUND(Number.class), + ROUND2(Number.class), + RANDOM(Number.class), + RANDOM2(Number.class), + POWER(Number.class), + MIN(Number.class), + MAX(Number.class), + LOG(Number.class), + FLOOR(Number.class), + EXP(Number.class), + COSH(Number.class), + COT(Number.class), + COTH(Number.class), + DEG(Number.class), + LN(Number.class), + RAD(Number.class), + SIGN(Number.class), + SINH(Number.class), + TANH(Number.class); + + private final Class type; + + private MathOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } /** * String operators */ public enum StringOps implements Operator { - LEFT, - RIGHT, - LTRIM, - RTRIM, - LPAD, - RPAD, - LPAD2, - RPAD2, - LOCATE, - LOCATE2 + LEFT(String.class), + RIGHT(String.class), + LTRIM(String.class), + RTRIM(String.class), + LPAD(String.class), + RPAD(String.class), + LPAD2(String.class), + RPAD2(String.class), + LOCATE(Number.class), + LOCATE2(Number.class); + + private final Class type; + + private StringOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java b/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java index b67d313f6e..c33b9e4a56 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/PathType.java @@ -66,5 +66,9 @@ public enum PathType implements Operator { * Root path */ VARIABLE; + + public Class getType() { + return Object.class; + } } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/expr/OperationTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/expr/OperationTest.java index beb96cb9ae..d2bacf1c56 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/expr/OperationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/expr/OperationTest.java @@ -45,9 +45,9 @@ public void Various() { operations.add(new ComparableOperation(String.class, Ops.SUBSTR_1ARG, args)); operations.add(new DateOperation(Date.class, Ops.DateTimeOps.CURRENT_DATE, args)); operations.add(new DateTimeOperation(Date.class,Ops.DateTimeOps.CURRENT_TIMESTAMP, args)); - operations.add(new EnumOperation(ExampleEnum.class,Ops.IS_NOT_NULL, args)); + operations.add(new EnumOperation(ExampleEnum.class,Ops.ALIAS, args)); operations.add(new NumberOperation(Integer.class,Ops.ADD, args)); - operations.add(new SimpleOperation(String.class,Ops.EQ, args)); + operations.add(new SimpleOperation(String.class,Ops.TRIM, args)); operations.add(new StringOperation(Ops.CONCAT, args)); operations.add(new TimeOperation(Time.class,Ops.DateTimeOps.CURRENT_TIME, args)); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java index 2a94c3e6c7..45db2f7565 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLOps.java @@ -20,12 +20,22 @@ * */ public enum JPQLOps implements Operator { - TREAT, - INDEX, - TYPE, - CAST, - MEMBER_OF, - NOT_MEMBER_OF, - KEY, - VALUE + TREAT(Object.class), + INDEX(Integer.class), + TYPE(String.class), + CAST(Object.class), + MEMBER_OF(Boolean.class), + NOT_MEMBER_OF(Boolean.class), + KEY(Object.class), + VALUE(Object.class); + + private final Class type; + + private JPQLOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java index c19be137c9..d97f59e95a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java @@ -34,6 +34,7 @@ public class JPAQueryMutability2Test implements JPATest { private final Operator customOperator = new Operator() { public String name() { return "custom"; } public String toString() { return name(); } + public Class getType() { return Object.class; } }; private final JPQLTemplates customTemplates = new HQLTemplates() {{ diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java index 5e78989831..4cf0319d3f 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneOps.java @@ -20,7 +20,17 @@ * */ public enum LuceneOps implements Operator { - LUCENE_QUERY, - PHRASE, - TERM + LUCENE_QUERY(Object.class), + PHRASE(String.class), + TERM(String.class); + + private final Class type; + + private LuceneOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java index 8d8bc54c46..6f68b7ff5b 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneOps.java @@ -20,7 +20,17 @@ * */ public enum LuceneOps implements Operator { - LUCENE_QUERY, - PHRASE, - TERM + LUCENE_QUERY(Object.class), + PHRASE(String.class), + TERM(String.class); + + private final Class type; + + private LuceneOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java index 2ea832a595..37c7f1a3e8 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbOps.java @@ -20,6 +20,16 @@ * */ public enum MongodbOps implements Operator { - NEAR, - ELEM_MATCH + NEAR(Boolean.class), + ELEM_MATCH(Boolean.class); + + private final Class type; + + private MongodbOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java index f0b9407637..e034daf1d6 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/SpatialOps.java @@ -22,99 +22,109 @@ public enum SpatialOps implements Operator { // Geometry - DIMENSION, - GEOMETRY_TYPE, - AS_TEXT, - AS_BINARY, - SRID, - SRID2, - IS_EMPTY, - IS_SIMPLE, - BOUNDARY, - ENVELOPE, - WKTTOSQL, - WKBTOSQL, - EQUALS, - DISJOINT, - INTERSECTS, - TOUCHES, - CROSSES, - WITHIN, - CONTAINS, - OVERLAPS, - RELATE, - DISTANCE, - DISTANCE2, - DISTANCE_SPHERE, - DISTANCE_SPHEROID, - INTERSECTION, - DIFFERENCE, - UNION, - SYMDIFFERENCE, - BUFFER, - BUFFER2, - CONVEXHULL, - TRANSFORM, + DIMENSION(Integer.class), + GEOMETRY_TYPE(String.class), + AS_TEXT(String.class), + AS_BINARY(Object.class), + SRID(Integer.class), + SRID2(Integer.class), + IS_EMPTY(Boolean.class), + IS_SIMPLE(Boolean.class), + BOUNDARY(Object.class), + ENVELOPE(Object.class), + WKTTOSQL(Object.class), + WKBTOSQL(Object.class), + EQUALS(Boolean.class), + DISJOINT(Boolean.class), + INTERSECTS(Boolean.class), + TOUCHES(Boolean.class), + CROSSES(Boolean.class), + WITHIN(Boolean.class), + CONTAINS(Boolean.class), + OVERLAPS(Boolean.class), + RELATE(Boolean.class), + DISTANCE(Number.class), + DISTANCE2(Number.class), + DISTANCE_SPHERE(Number.class), + DISTANCE_SPHEROID(Number.class), + INTERSECTION(Object.class), + DIFFERENCE(Object.class), + UNION(Object.class), + SYMDIFFERENCE(Object.class), + BUFFER(Object.class), + BUFFER2(Object.class), + CONVEXHULL(Object.class), + TRANSFORM(Object.class), // Point - X, - X2, - Y, - Y2, - Z, - Z2, - M, - M2, + X(Number.class), + X2(Number.class), + Y(Number.class), + Y2(Number.class), + Z(Number.class), + Z2(Number.class), + M(Number.class), + M2(Number.class), // Curve - START_POINT, - END_POINT, - IS_RING, - LENGTH, - LENGTH2, + START_POINT(Object.class), + END_POINT(Object.class), + IS_RING(Object.class), + LENGTH(Object.class), + LENGTH2(Object.class), // LineString - NUM_POINTS, - POINTN, + NUM_POINTS(Integer.class), + POINTN(Object.class), // Surface - AREA, - AREA2, - CENTROID, - POINT_ON_SURFACE, + AREA(Number.class), + AREA2(Number.class), + CENTROID(Object.class), + POINT_ON_SURFACE(Object.class), // Polygon - EXTERIOR_RING, - EXTERIOR_RING2, - INTERIOR_RINGS, - INTERIOR_RINGS2, - NUM_INTERIOR_RING, - INTERIOR_RINGN, + EXTERIOR_RING(Object.class), + EXTERIOR_RING2(Object.class), + INTERIOR_RINGS(Object.class), + INTERIOR_RINGS2(Object.class), + NUM_INTERIOR_RING(Integer.class), + INTERIOR_RINGN(Object.class), // Polyhedral Surface - GEOMETRIES, - NUM_SURFACES, - SURFACE, + GEOMETRIES(Object.class), + NUM_SURFACES(Integer.class), + SURFACE(Object.class), // GeometryCollection - NUM_GEOMETRIES, - GEOMETRYN, + NUM_GEOMETRIES(Integer.class), + GEOMETRYN(Object.class), // MultiCurve - IS_CLOSED, + IS_CLOSED(Boolean.class), // Extensions - AS_EWKT, - GEOM_FROM_TEXT, - SET_SRID, - XMIN, - XMAX, - YMIN, - YMAX, - DWITHIN, - EXTENT, - COLLECT, - COLLECT2, - TRANSLATE, - TRANSLATE2; + AS_EWKT(String.class), + GEOM_FROM_TEXT(Object.class), + SET_SRID(Object.class), + XMIN(Number.class), + XMAX(Number.class), + YMIN(Number.class), + YMAX(Number.class), + DWITHIN(Boolean.class), + EXTENT(Object.class), + COLLECT(Object.class), + COLLECT2(Object.class), + TRANSLATE(Object.class), + TRANSLATE2(Object.class); + + private final Class type; + + private SpatialOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } } \ No newline at end of file diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java index 08a6512ce9..022a2b96fd 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLOps.java @@ -27,55 +27,65 @@ * */ public enum SQLOps implements Operator { - ALL, - CAST, - CORR, - COVARPOP, - COVARSAMP, - CUMEDIST, - CUMEDIST2, - DENSERANK, - DENSERANK2, - FIRSTVALUE, - FOR_SHARE, - FOR_UPDATE, - LAG, - LASTVALUE, - LEAD, - LISTAGG, - NEXTVAL, - NO_WAIT, - NTHVALUE, - NTILE, - PERCENTRANK, - PERCENTRANK2, - PERCENTILECONT, - PERCENTILEDISC, - QUALIFY, - RANK, - RANK2, - REGR_SLOPE, - REGR_INTERCEPT, - REGR_COUNT, - REGR_R2, - REGR_AVGX, - REGR_AVGY, - REGR_SXX, - REGR_SYY, - REGR_SXY, - RATIOTOREPORT, - ROWNUMBER, - STDDEV, - STDDEVPOP, - STDDEVSAMP, - STDDEV_DISTINCT, - UNION, - UNION_ALL, - VARIANCE, - VARPOP, - VARSAMP, - WITH_ALIAS, - WITH_COLUMNS; + ALL(Object.class), + CAST(Object.class), + CORR(Double.class), + COVARPOP(Double.class), + COVARSAMP(Double.class), + CUMEDIST(Double.class), + CUMEDIST2(Double.class), + DENSERANK(Long.class), + DENSERANK2(Long.class), + FIRSTVALUE(Object.class), + FOR_SHARE(Object.class), + FOR_UPDATE(Object.class), + LAG(Object.class), + LASTVALUE(Object.class), + LEAD(Object.class), + LISTAGG(Object.class), + NEXTVAL(Object.class), + NO_WAIT(Object.class), + NTHVALUE(Object.class), + NTILE(Object.class), + PERCENTRANK(Double.class), + PERCENTRANK2(Double.class), + PERCENTILECONT(Object.class), + PERCENTILEDISC(Object.class), + QUALIFY(Boolean.class), + RANK(Long.class), + RANK2(Long.class), + REGR_SLOPE(Object.class), + REGR_INTERCEPT(Object.class), + REGR_COUNT(Object.class), + REGR_R2(Object.class), + REGR_AVGX(Object.class), + REGR_AVGY(Object.class), + REGR_SXX(Object.class), + REGR_SYY(Object.class), + REGR_SXY(Object.class), + RATIOTOREPORT(Object.class), + ROWNUMBER(Long.class), + STDDEV(Object.class), + STDDEVPOP(Object.class), + STDDEVSAMP(Object.class), + STDDEV_DISTINCT(Object.class), + UNION(Object.class), + UNION_ALL(Object.class), + VARIANCE(Object.class), + VARPOP(Object.class), + VARSAMP(Object.class), + WITH_ALIAS(Object.class), + WITH_COLUMNS(Object.class); + + private final Class type; + + private SQLOps(Class type) { + this.type = type; + } + + public Class getType() { + return type; + } public static final QueryFlag FOR_SHARE_FLAG = new QueryFlag(Position.END, new OperationImpl( Object.class, FOR_SHARE, ImmutableList.>of())); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java index 6966f955b7..9a75695fce 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java @@ -38,6 +38,7 @@ public void UnknownOperator() { Operator op = new Operator() { public String name() { return "unknownfn"; } public String toString() { return name(); } + public Class getType() { return Object.class; } }; SQLSubQuery query = new SQLSubQuery(); query.from(employee) From 97e629e589b994fa7570b33557a667e8c413135a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 9 Feb 2015 22:39:54 +0200 Subject: [PATCH 0728/1968] Improve docs --- .../src/main/java/com/querydsl/core/types/Operator.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java index bb30c5bfc1..2d68e71de1 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java @@ -16,7 +16,8 @@ import java.io.Serializable; /** - * Operator represents operator symbols + * Operator represents operator symbols. + *

Implementations should enums for automatic instance management.

* * @author tiwe */ From 8db5e3ee878b576efa3556476412c7049e8ac269 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Tue, 10 Feb 2015 11:50:21 +0100 Subject: [PATCH 0729/1968] Remove unnecessary casts and warning suppressions for Operator --- .../main/java/com/querydsl/core/support/ReplaceVisitor.java | 2 +- querydsl-core/src/main/java/com/querydsl/core/types/Ops.java | 3 --- .../java/com/querydsl/core/types/expr/BooleanOperation.java | 2 +- .../src/main/java/com/querydsl/core/types/expr/Wildcard.java | 3 +-- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java index c7fdfc402e..d76d2f1c57 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java @@ -49,7 +49,7 @@ public Expression visit(Operation expr, C context) { if (args.equals(expr.getArgs())) { return expr; } else if (expr instanceof Predicate) { - return new PredicateOperation((Operator)expr.getOperator(), args); + return new PredicateOperation(expr.getOperator(), args); } else { return new OperationImpl(expr.getType(), expr.getOperator(), args); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java b/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java index 2a19a1d259..47f61372bd 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Ops.java @@ -143,7 +143,6 @@ public Class getType() { /** * Aggregation operators */ - @SuppressWarnings("unchecked") public enum AggOps implements Operator { BOOLEAN_ALL(Boolean.class), BOOLEAN_ANY(Boolean.class), @@ -170,7 +169,6 @@ public Class getType() { /** * Quantification operators */ - @SuppressWarnings("unchecked") public enum QuantOps implements Operator { AVG_IN_COL(Number.class), MAX_IN_COL(Comparable.class), @@ -192,7 +190,6 @@ public Class getType() { /** * Date and time operators */ - @SuppressWarnings("unchecked") public enum DateTimeOps implements Operator { DATE(Comparable.class), CURRENT_DATE(Comparable.class), diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java index d1c00bee4b..7051c78e3d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java @@ -52,7 +52,7 @@ protected BooleanOperation(Operator op, Expression... args) { } protected BooleanOperation(Operator op, ImmutableList> args) { - super(new PredicateOperation((Operator)op, args)); + super(new PredicateOperation(op, args)); opMixin = (PredicateOperation)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java index b74df1faef..401438a8b4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java @@ -14,7 +14,6 @@ package com.querydsl.core.types.expr; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; import com.querydsl.core.types.TemplateExpressionImpl; @@ -44,7 +43,7 @@ public final class Wildcard { /** * Wilcard count distinct expression ((count(distinct *)) */ - public static final NumberExpression countAsInt = NumberOperation.create(Integer.class, (Operator)Ops.AggOps.COUNT_ALL_AGG); + public static final NumberExpression countAsInt = NumberOperation.create(Integer.class, Ops.AggOps.COUNT_ALL_AGG); private Wildcard() {} From bdaea48e14d80fc3c80ce1360900340d22166b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 10 Feb 2015 22:38:45 +0200 Subject: [PATCH 0730/1968] Make template methods abstract --- .../java/com/querydsl/mongodb/MongodbSerializer.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 455f3ab2c7..3f2dffdfc5 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -285,10 +285,7 @@ protected DBRef asReference(Operation expr, int constIndex) { return asReference(((Constant)expr.getArg(constIndex)).getConstant()); } - protected DBRef asReference(Object constant) { - // override in subclass - throw new UnsupportedOperationException(); - } + protected abstract DBRef asReference(Object constant); protected boolean isReference(Operation expr, int exprIndex) { Expression arg = expr.getArg(exprIndex); @@ -299,11 +296,7 @@ protected boolean isReference(Operation expr, int exprIndex) { } } - protected boolean isReference(Path arg) { - // override in subclass - return false; - } - + protected abstract boolean isReference(Path arg); @Override public String visit(Path expr, Void context) { From 98fe9ef086e56626b27afcc11f0ab927c5e4b247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 11 Feb 2015 22:33:39 +0200 Subject: [PATCH 0731/1968] Added tests with comparator --- .../querydsl/core/group/GroupByMapTest.java | 41 +++++++++++++------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java b/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java index 6eb5795820..67e69e8759 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java @@ -14,23 +14,14 @@ package com.querydsl.core.group; -import static com.querydsl.core.group.GroupBy.groupBy; -import static com.querydsl.core.group.GroupBy.list; -import static com.querydsl.core.group.GroupBy.map; import static com.querydsl.core.group.GroupBy.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.NoSuchElementException; +import java.util.*; import org.junit.Test; +import com.google.common.collect.Ordering; import com.mysema.commons.lang.Pair; import com.querydsl.core.Tuple; import com.querydsl.core.types.Projections; @@ -56,6 +47,18 @@ public void Set_By_Sorted() { assertEquals(3, it.next().intValue()); } + @Test + public void Set_By_Sorted_Reverse() { + Map results = BASIC_RESULTS + .transform(groupBy(postId).as(postName, sortedSet(commentId, Ordering.natural().reverse()))); + + Group group = results.get(1); + Iterator it = group.getSet(commentId).iterator(); + assertEquals(3, it.next().intValue()); + assertEquals(2, it.next().intValue()); + assertEquals(1, it.next().intValue()); + } + @Test public void First_Set_And_List() { Map results = BASIC_RESULTS.transform( @@ -124,6 +127,20 @@ public void Map_Sorted() { assertEquals(3, it.next().getKey().intValue()); } + @Test + public void Map_Sorted_Reverse() { + Map results = MAP_RESULTS.transform( + groupBy(postId).as(postName, sortedMap(commentId, commentText, Ordering.natural().reverse()))); + + Group group = results.get(1); + + Iterator> it = group.getMap(commentId, commentText).entrySet().iterator(); + assertEquals(3, it.next().getKey().intValue()); + assertEquals(2, it.next().getKey().intValue()); + assertEquals(1, it.next().getKey().intValue()); + } + + @Test public void Map2() { Map> results = MAP2_RESULTS.transform( From 5d48877cb14cb06583511eee8a31e57257f227bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 12:37:18 +0200 Subject: [PATCH 0732/1968] Sync Maven and Ant plugin configuration --- .../docbook/en-US/content/tutorials/sql.xml | 2 +- .../maven/AbstractMetaDataExportMojo.java | 8 +- .../sql/codegen/ant/AntMetaDataExporter.java | 336 ++++++++++++------ .../codegen/ant/AntMetaDataExporterTest.java | 33 +- 4 files changed, 246 insertions(+), 133 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index a63e93c216..f1146a3157 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -36,7 +36,7 @@ ]]> The querydsl-sql-codegen dependency can be skipped, if code generation happens - via Maven or Ant. + via Maven. diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java index 0e2d5ac5c0..314733e5d0 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java @@ -28,9 +28,7 @@ import com.querydsl.codegen.BeanSerializer; import com.querydsl.sql.Configuration; import com.querydsl.sql.SQLTemplates; -import com.querydsl.sql.codegen.DefaultNamingStrategy; -import com.querydsl.sql.codegen.MetaDataExporter; -import com.querydsl.sql.codegen.NamingStrategy; +import com.querydsl.sql.codegen.*; import com.querydsl.sql.types.Type; /** @@ -77,7 +75,7 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ private String namePrefix; /** - * name prefix for querydsl-types (default: "") + * name suffix for querydsl-types (default: "") * @parameter default-value="" */ private String nameSuffix; @@ -89,7 +87,7 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ private String beanPrefix; /** - * name prefix for bean types (default: "") + * name suffix for bean types (default: "") * @parameter default-value="" */ private String beanSuffix; diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java index 709d9d1638..8c797e9e6d 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java @@ -19,13 +19,14 @@ import java.sql.SQLException; import java.util.Comparator; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Task; + import com.mysema.codegen.model.SimpleType; import com.querydsl.codegen.BeanSerializer; import com.querydsl.sql.codegen.DefaultNamingStrategy; import com.querydsl.sql.codegen.MetaDataExporter; import com.querydsl.sql.codegen.NamingStrategy; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Task; /** * AntMetaDataExporter exports JDBC metadata to Querydsl query types @@ -38,57 +39,52 @@ public class AntMetaDataExporter extends Task { /** * JDBC driver class name */ - private String jdbcDriverClass; + private String jdbcDriver; /** * JDBC connection url */ - private String dbUrl; + private String jdbcUrl; /** * JDBC connection username */ - private String dbUserName; + private String jdbcUser; /** * JDBC connection password */ - private String dbPassword; + private String jdbcPassword; /** - * name prefix for generated query types (default: "Q") + * name prefix for querydsl-types (default: "Q") */ private String namePrefix; /** - * name suffix for generated query types (default: "") + * name suffix for querydsl-types (default: "") */ private String nameSuffix; /** - * name prefix for generated bean types (default: "Q") + * name prefix for bean types (default: "") */ private String beanPrefix; /** - * name suffix for generated bean types (default: "") + * name suffix for bean types (default: "") */ private String beanSuffix; /** - * target package to generate classes to + * package name for sources */ - private String targetPackage; + private String packageName; /** - * target package to generated bean classes to (default: targetPackage) + * package name for bean sources (default: packageName) */ - private String beanTargetPackage; - - /** - * target source folder - */ - private String targetSourceFolder; + private String beanPackageName; /** * schemaPattern a schema name pattern; must match the schema name @@ -105,9 +101,24 @@ public class AntMetaDataExporter extends Task { private String tableNamePattern; /** - * wrap key properties into inner classes (default: false) + * target source folder to create the sources into (e.g. target/generated-sources/java) */ - private boolean innerClassesForKeys; + private String targetFolder; + + /** + * namingstrategy class to override (default: DefaultNamingStrategy) + */ + private String namingStrategyClass; + + /** + * + */ + private String beanSerializerClass; + + /** + * + */ + private String serializerClass; /** * serialize beans as well @@ -115,75 +126,85 @@ public class AntMetaDataExporter extends Task { private boolean exportBeans; /** - * export validation annotations (@NotNull, @Size etc) + * */ - private boolean validationAnnotations = false; + private String[] beanInterfaces; /** - * charset encoding of the sources to be generated + * */ - private String sourceEncoding; + private boolean beanAddToString; /** * */ - private boolean columnAnnotations = false; + private boolean beanAddFullConstructor; /** * */ - private boolean schemaToPackage = false; + private boolean beanPrintSupertype; /** - * + * wrap key properties into inner classes (default: false) */ - private boolean lowerCase = false; + private boolean innerClassesForKeys; + + /** + * export validation annotations (default: false) + */ + private boolean validationAnnotations; + + /** + * export column annotations (default: false) + */ + private boolean columnAnnotations; /** * */ - private boolean exportTables = true; + private String[] customTypes; /** * */ - private boolean exportViews = true; + private boolean createScalaSources; /** * */ - private boolean exportAll = false; + private boolean schemaToPackage; /** * */ - private boolean exportPrimaryKeys = true; + private boolean lowerCase; /** * */ - private boolean exportForeignKeys = true; + private boolean exportTables; /** * */ - private String[] beanInterfaces; + private boolean exportViews; /** * */ - private boolean beanAddToString; + private boolean exportAll; /** * */ - private boolean beanAddFullConstructor; + private boolean exportPrimaryKeys; /** * */ - private boolean beanPrintSupertype; - + private boolean exportForeignKeys; + /** * override default column order (default: alphabetical) */ @@ -193,34 +214,40 @@ public class AntMetaDataExporter extends Task { * */ private boolean spatial; - + /** - * comma separated list of "table types" to export. - * ex: "TABLE, VIEW, MATERIALIZED VIEW" - * - * @parameter + * Comma-separated list of table types to export (allowable values will + * depend on JDBC driver). Allows for arbitrary set of types to be exported, + * e.g.: "TABLE, MATERIALIZED VIEW". The exportTables and exportViews + * parameters will be ignored if this parameter is set. (default: none) */ private String tableTypesToExport; - + /** * java import added to generated query classes: * com.bar for package (without .* notation) * com.bar.Foo for class - * */ private String[] imports; + // Ant only + private String sourceEncoding; + @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public void execute() { + if (targetFolder == null) { + throw new BuildException("targetFolder is a mandatory property"); + } + Connection dbConn = null; - File targetPackagePath = new File(targetSourceFolder); + File targetPackagePath = new File(targetFolder); try { - Class.forName(jdbcDriverClass).newInstance(); + Class.forName(jdbcDriver).newInstance(); - dbConn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword); + dbConn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword); NamingStrategy namingStrategy = new DefaultNamingStrategy(); MetaDataExporter exporter = new MetaDataExporter(); @@ -236,8 +263,8 @@ public void execute() { if (beanSuffix != null) { exporter.setBeanSuffix(beanSuffix); } - exporter.setPackageName(targetPackage); - exporter.setBeanPackageName(beanTargetPackage); + exporter.setPackageName(packageName); + exporter.setBeanPackageName(beanPackageName); exporter.setTargetFolder(targetPackagePath); exporter.setNamingStrategy(namingStrategy); exporter.setInnerClassesForKeys(innerClassesForKeys); @@ -308,36 +335,36 @@ public void execute() { } } - public String getDbUrl() { - return dbUrl; + public String getJdbcDriver() { + return jdbcDriver; } - public void setDbUrl(String dbUrl) { - this.dbUrl = dbUrl; + public void setJdbcDriver(String jdbcDriver) { + this.jdbcDriver = jdbcDriver; } - public String getDbUserName() { - return dbUserName; + public String getJdbcUrl() { + return jdbcUrl; } - public void setDbUserName(String dbUserName) { - this.dbUserName = dbUserName; + public void setJdbcUrl(String jdbcUrl) { + this.jdbcUrl = jdbcUrl; } - public String getDbPassword() { - return dbPassword; + public String getJdbcUser() { + return jdbcUser; } - public void setDbPassword(String dbPassword) { - this.dbPassword = dbPassword; + public void setJdbcUser(String jdbcUser) { + this.jdbcUser = jdbcUser; } - public String getJdbcDriverClass() { - return jdbcDriverClass; + public String getJdbcPassword() { + return jdbcPassword; } - public void setJdbcDriverClass(String jdbcDriverClass) { - this.jdbcDriverClass = jdbcDriverClass; + public void setJdbcPassword(String jdbcPassword) { + this.jdbcPassword = jdbcPassword; } public String getNamePrefix() { @@ -348,44 +375,92 @@ public void setNamePrefix(String namePrefix) { this.namePrefix = namePrefix; } - public String getTargetPackage() { - return targetPackage; + public String getNameSuffix() { + return nameSuffix; } - public void setTargetPackage(String targetPackage) { - this.targetPackage = targetPackage; + public void setNameSuffix(String nameSuffix) { + this.nameSuffix = nameSuffix; } - public String getTargetSourceFolder() { - return targetSourceFolder; + public String getBeanPrefix() { + return beanPrefix; } - public void setTargetSourceFolder(String targetSourceFolder) { - this.targetSourceFolder = targetSourceFolder; + public void setBeanPrefix(String beanPrefix) { + this.beanPrefix = beanPrefix; } - public void setSchemaPattern(String schemaPattern) { - this.schemaPattern = schemaPattern; + public String getBeanSuffix() { + return beanSuffix; } - public void setTableNamePattern(String tableNamePattern) { - this.tableNamePattern = tableNamePattern; + public void setBeanSuffix(String beanSuffix) { + this.beanSuffix = beanSuffix; + } + + public String getPackageName() { + return packageName; + } + + public void setPackageName(String packageName) { + this.packageName = packageName; + } + + public String getBeanPackageName() { + return beanPackageName; + } + + public void setBeanPackageName(String beanPackageName) { + this.beanPackageName = beanPackageName; } public String getSchemaPattern() { return schemaPattern; } + public void setSchemaPattern(String schemaPattern) { + this.schemaPattern = schemaPattern; + } + public String getTableNamePattern() { return tableNamePattern; } - public boolean isInnerClassesForKeys() { - return innerClassesForKeys; + public void setTableNamePattern(String tableNamePattern) { + this.tableNamePattern = tableNamePattern; } - public void setInnerClassesForKeys(boolean innerClassesForKeys) { - this.innerClassesForKeys = innerClassesForKeys; + public String getTargetFolder() { + return targetFolder; + } + + public void setTargetFolder(String targetFolder) { + this.targetFolder = targetFolder; + } + + public String getNamingStrategyClass() { + return namingStrategyClass; + } + + public void setNamingStrategyClass(String namingStrategyClass) { + this.namingStrategyClass = namingStrategyClass; + } + + public String getBeanSerializerClass() { + return beanSerializerClass; + } + + public void setBeanSerializerClass(String beanSerializerClass) { + this.beanSerializerClass = beanSerializerClass; + } + + public String getSerializerClass() { + return serializerClass; + } + + public void setSerializerClass(String serializerClass) { + this.serializerClass = serializerClass; } public boolean isExportBeans() { @@ -396,52 +471,52 @@ public void setExportBeans(boolean exportBeans) { this.exportBeans = exportBeans; } - public String getNameSuffix() { - return nameSuffix; + public String[] getBeanInterfaces() { + return beanInterfaces; } - public void setNameSuffix(String nameSuffix) { - this.nameSuffix = nameSuffix; + public void setBeanInterfaces(String[] beanInterfaces) { + this.beanInterfaces = beanInterfaces; } - public String getBeanPrefix() { - return beanPrefix; + public boolean isBeanAddToString() { + return beanAddToString; } - public void setBeanPrefix(String beanPrefix) { - this.beanPrefix = beanPrefix; + public void setBeanAddToString(boolean beanAddToString) { + this.beanAddToString = beanAddToString; } - public String getBeanSuffix() { - return beanSuffix; + public boolean isBeanAddFullConstructor() { + return beanAddFullConstructor; } - public void setBeanSuffix(String beanSuffix) { - this.beanSuffix = beanSuffix; + public void setBeanAddFullConstructor(boolean beanAddFullConstructor) { + this.beanAddFullConstructor = beanAddFullConstructor; } - public String getBeanTargetPackage() { - return beanTargetPackage; + public boolean isBeanPrintSupertype() { + return beanPrintSupertype; } - public void setBeanTargetPackage(String beanTargetPackage) { - this.beanTargetPackage = beanTargetPackage; + public void setBeanPrintSupertype(boolean beanPrintSupertype) { + this.beanPrintSupertype = beanPrintSupertype; } - public boolean isValidationAnnotations() { - return validationAnnotations; + public boolean isInnerClassesForKeys() { + return innerClassesForKeys; } - public void setValidationAnnotations(boolean validationAnnotations) { - this.validationAnnotations = validationAnnotations; + public void setInnerClassesForKeys(boolean innerClassesForKeys) { + this.innerClassesForKeys = innerClassesForKeys; } - public String getSourceEncoding() { - return sourceEncoding; + public boolean isValidationAnnotations() { + return validationAnnotations; } - public void setSourceEncoding(String sourceEncoding) { - this.sourceEncoding = sourceEncoding; + public void setValidationAnnotations(boolean validationAnnotations) { + this.validationAnnotations = validationAnnotations; } public boolean isColumnAnnotations() { @@ -452,6 +527,22 @@ public void setColumnAnnotations(boolean columnAnnotations) { this.columnAnnotations = columnAnnotations; } + public String[] getCustomTypes() { + return customTypes; + } + + public void setCustomTypes(String[] customTypes) { + this.customTypes = customTypes; + } + + public boolean isCreateScalaSources() { + return createScalaSources; + } + + public void setCreateScalaSources(boolean createScalaSources) { + this.createScalaSources = createScalaSources; + } + public boolean isSchemaToPackage() { return schemaToPackage; } @@ -508,12 +599,12 @@ public void setExportForeignKeys(boolean exportForeignKeys) { this.exportForeignKeys = exportForeignKeys; } - public String[] getImports() { - return imports; + public String getColumnComparatorClass() { + return columnComparatorClass; } - public void setImports(String[] imports) { - this.imports = imports; + public void setColumnComparatorClass(String columnComparatorClass) { + this.columnComparatorClass = columnComparatorClass; } public boolean isSpatial() { @@ -524,4 +615,27 @@ public void setSpatial(boolean spatial) { this.spatial = spatial; } + public String getTableTypesToExport() { + return tableTypesToExport; + } + + public void setTableTypesToExport(String tableTypesToExport) { + this.tableTypesToExport = tableTypesToExport; + } + + public String[] getImports() { + return imports; + } + + public void setImports(String[] imports) { + this.imports = imports; + } + + public String getSourceEncoding() { + return sourceEncoding; + } + + public void setSourceEncoding(String sourceEncoding) { + this.sourceEncoding = sourceEncoding; + } } \ No newline at end of file diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ant/AntMetaDataExporterTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ant/AntMetaDataExporterTest.java index cb0344a8f2..f493d4b920 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ant/AntMetaDataExporterTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ant/AntMetaDataExporterTest.java @@ -13,6 +13,8 @@ */ package com.querydsl.sql.codegen.ant; +import static org.junit.Assert.assertTrue; + import java.io.File; import java.sql.Connection; import java.sql.DriverManager; @@ -21,7 +23,6 @@ import org.junit.Before; import org.junit.Test; -import static org.junit.Assert.assertTrue; public class AntMetaDataExporterTest { @@ -46,11 +47,11 @@ public void setUp() throws SQLException { @Test public void Execute() { AntMetaDataExporter exporter = new AntMetaDataExporter(); - exporter.setJdbcDriverClass("org.h2.Driver"); - exporter.setDbUserName("sa"); - exporter.setDbUrl(url); - exporter.setTargetPackage("test"); - exporter.setTargetSourceFolder("target/AntMetaDataExporterTest"); + exporter.setJdbcDriver("org.h2.Driver"); + exporter.setJdbcUser("sa"); + exporter.setJdbcUrl(url); + exporter.setPackageName("test"); + exporter.setTargetFolder("target/AntMetaDataExporterTest"); exporter.execute(); assertTrue(new File("target/AntMetaDataExporterTest").exists()); @@ -59,11 +60,11 @@ public void Execute() { @Test public void Execute_With_Beans() { AntMetaDataExporter exporter = new AntMetaDataExporter(); - exporter.setJdbcDriverClass("org.h2.Driver"); - exporter.setDbUserName("sa"); - exporter.setDbUrl(url); - exporter.setTargetPackage("test"); - exporter.setTargetSourceFolder("target/AntMetaDataExporterTest2"); + exporter.setJdbcDriver("org.h2.Driver"); + exporter.setJdbcUser("sa"); + exporter.setJdbcUrl(url); + exporter.setPackageName("test"); + exporter.setTargetFolder("target/AntMetaDataExporterTest2"); exporter.setExportBeans(true); exporter.setNamePrefix(""); exporter.setNameSuffix("Q"); @@ -78,11 +79,11 @@ public void Execute_With_Beans() { @Test public void Execute_With_Import() { AntMetaDataExporter exporter = new AntMetaDataExporter(); - exporter.setJdbcDriverClass("org.h2.Driver"); - exporter.setDbUserName("sa"); - exporter.setDbUrl(url); - exporter.setTargetPackage("test"); - exporter.setTargetSourceFolder("target/AntMetaDataExporterTest3"); + exporter.setJdbcDriver("org.h2.Driver"); + exporter.setJdbcUser("sa"); + exporter.setJdbcUrl(url); + exporter.setPackageName("test"); + exporter.setTargetFolder("target/AntMetaDataExporterTest3"); exporter.setExportBeans(true); exporter.setNamePrefix(""); exporter.setNameSuffix("Q"); From fd39742221f8ba89b8427f747167c0a65e7999c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Feb 2015 18:57:15 +0200 Subject: [PATCH 0733/1968] Extend docs --- .../java/com/querydsl/core/group/GroupBy.java | 97 ++++++++++++++++++- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 523efb13bd..366c63dd11 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -18,7 +18,6 @@ import java.util.Map; import java.util.Set; -import com.infradna.tool.bridge_method_injector.WithBridgeMethods; import com.mysema.commons.lang.Pair; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Projections; @@ -130,14 +129,35 @@ public static > AbstractGroupExpression> GroupExpression> sortedSet(GroupExpression groupExpression) { return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression)); } + + /** + * Create a new aggregating set expression using a backing TreeSet using the given comparator + * + * @param expression + * @param comparator + * @return + */ public static AbstractGroupExpression> sortedSet(Expression expression, Comparator comparator) { return GSet.createSorted(expression, comparator); } + /** + * Create a new aggregating set expression using a backing TreeSet using the given comparator + * + * @param groupExpression + * @param comparator + * @return + */ public static GroupExpression> sortedSet(GroupExpression groupExpression, Comparator comparator) { return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression, comparator)); } @@ -150,19 +170,39 @@ public static GroupExpression> sortedSet(GroupExpression * @param value * @return */ - @WithBridgeMethods(value=Expression.class,castRequired=true) public static AbstractGroupExpression,Map> map(Expression key, Expression value) { return GMap.createLinked(QPair.create(key, value)); } + /** + * Create a new aggregating map expression using a backing LinkedHashMap + * + * @param key + * @param value + * @return + */ public static AbstractGroupExpression, Map> map(GroupExpression key, Expression value) { return map(key, new GOne(value)); } + /** + * Create a new aggregating map expression using a backing LinkedHashMap + * + * @param key + * @param value + * @return + */ public static AbstractGroupExpression, Map> map(Expression key, GroupExpression value) { return map(new GOne(key), value); } + /** + * Create a new aggregating map expression using a backing LinkedHashMap + * + * @param key + * @param value + * @return + */ public static AbstractGroupExpression, Map> map(GroupExpression key, GroupExpression value) { return new GMap.Mixin>(key, value, GMap.createLinked(QPair.create(key, value))); } @@ -178,30 +218,83 @@ public static , V> AbstractGroupExpression, V, T extends Comparable> AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { return sortedMap(key, new GOne(value)); } + /** + * Create a new aggregating map expression using a backing TreeMap + * + * @param key + * @param value + * @return + */ public static , V, U> AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { return sortedMap(new GOne(key), value); } + /** + * Create a new aggregating map expression using a backing TreeMap + * + * @param key + * @param value + * @return + */ public static , V, T extends Comparable, U> AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value))); } + /** + * Create a new aggregating map expression using a backing TreeMap using the given comparator + * + * @param key + * @param value + * @param comparator + * @return + */ public static AbstractGroupExpression,Map> sortedMap(Expression key, Expression value, Comparator comparator) { return GMap.createSorted(QPair.create(key, value), comparator); } + /** + * Create a new aggregating map expression using a backing TreeMap using the given comparator + * + * @param key + * @param value + * @param comparator + * @return + */ public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value, Comparator comparator) { return sortedMap(key, new GOne(value), comparator); } + /** + * Create a new aggregating map expression using a backing TreeMap using the given comparator + * + * @param key + * @param value + * @param comparator + * @return + */ public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value, Comparator comparator) { return sortedMap(new GOne(key), value, comparator); } + /** + * Create a new aggregating map expression using a backing TreeMap using the given comparator + * + * @param key + * @param value + * @param comparator + * @return + */ public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value, Comparator comparator) { return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value), comparator)); } From 2ccef669c8618c245b34babf23418ae5345fc263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Feb 2015 19:04:25 +0200 Subject: [PATCH 0734/1968] Use SortedSet and SortedMap as return types --- .../java/com/querydsl/core/group/GMap.java | 28 +++++++------- .../java/com/querydsl/core/group/GSet.java | 33 ++++++++--------- .../java/com/querydsl/core/group/GroupBy.java | 37 +++++++++---------- 3 files changed, 46 insertions(+), 52 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java index 787d31e4b4..fd41197f73 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GMap.java @@ -21,7 +21,7 @@ * @param * @param */ -abstract class GMap extends AbstractGroupExpression, Map> { +abstract class GMap> extends AbstractGroupExpression, M> { private static final long serialVersionUID = 7106389414200843920L; @@ -29,10 +29,10 @@ public GMap(QPair qpair) { super(Map.class, qpair); } - protected abstract Map createMap(); + protected abstract M createMap(); - public static GMap createLinked(QPair expr) { - return new GMap(expr) { + public static GMap> createLinked(QPair expr) { + return new GMap>(expr) { @Override protected Map createMap() { return new LinkedHashMap(); @@ -40,29 +40,29 @@ protected Map createMap() { }; } - public static , U> GMap createSorted(QPair expr) { - return new GMap(expr) { + public static , U> GMap> createSorted(QPair expr) { + return new GMap>(expr) { @Override - protected Map createMap() { + protected SortedMap createMap() { return new TreeMap(); } }; } - public static GMap createSorted(QPair expr, final Comparator comparator) { - return new GMap(expr) { + public static GMap> createSorted(QPair expr, final Comparator comparator) { + return new GMap>(expr) { @Override - protected Map createMap() { + protected SortedMap createMap() { return new TreeMap(comparator); } }; } @Override - public GroupCollector, Map> createGroupCollector() { - return new GroupCollector, Map>() { + public GroupCollector, M> createGroupCollector() { + return new GroupCollector, M>() { - private final Map map = createMap(); + private final M map = createMap(); @Override public void add(Pair pair) { @@ -70,7 +70,7 @@ public void add(Pair pair) { } @Override - public Map get() { + public M get() { return map; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java index 57035dafd5..c97fbba029 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GSet.java @@ -13,10 +13,7 @@ */ package com.querydsl.core.group; -import java.util.Comparator; -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.TreeSet; +import java.util.*; import com.querydsl.core.types.Expression; @@ -25,12 +22,12 @@ * * @param */ -abstract class GSet extends AbstractGroupExpression> { +abstract class GSet> extends AbstractGroupExpression { private static final long serialVersionUID = -1575808026237160843L; - public static GSet createLinked(Expression expr) { - return new GSet(expr) { + public static GSet> createLinked(Expression expr) { + return new GSet>(expr) { @Override protected Set createSet() { return new LinkedHashSet(); @@ -38,19 +35,19 @@ protected Set createSet() { }; } - public static > GSet createSorted(Expression expr) { - return new GSet(expr) { + public static > GSet> createSorted(Expression expr) { + return new GSet>(expr) { @Override - protected Set createSet() { + protected SortedSet createSet() { return new TreeSet(); } }; } - public static GSet createSorted(Expression expr, final Comparator comparator) { - return new GSet(expr) { + public static GSet> createSorted(Expression expr, final Comparator comparator) { + return new GSet>(expr) { @Override - protected Set createSet() { + protected SortedSet createSet() { return new TreeSet(comparator); } }; @@ -60,13 +57,13 @@ public GSet(Expression expr) { super(Set.class, expr); } - protected abstract Set createSet(); + protected abstract S createSet(); @Override - public GroupCollector> createGroupCollector() { - return new GroupCollector>() { + public GroupCollector createGroupCollector() { + return new GroupCollector() { - private final Set set = createSet(); + private final S set = createSet(); @Override public void add(T o) { @@ -76,7 +73,7 @@ public void add(T o) { } @Override - public Set get() { + public S get() { return set; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index 366c63dd11..c0693f09cb 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -13,10 +13,7 @@ */ package com.querydsl.core.group; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import com.mysema.commons.lang.Pair; import com.querydsl.core.types.Expression; @@ -125,7 +122,7 @@ public static GroupExpression> set(GroupExpression groupE * @param expression * @return */ - public static > AbstractGroupExpression> sortedSet(Expression expression) { + public static > AbstractGroupExpression> sortedSet(Expression expression) { return GSet.createSorted(expression); } @@ -135,8 +132,8 @@ public static > AbstractGroupExpression> GroupExpression> sortedSet(GroupExpression groupExpression) { - return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression)); + public static > GroupExpression> sortedSet(GroupExpression groupExpression) { + return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression)); } @@ -147,7 +144,7 @@ public static > GroupExpression> so * @param comparator * @return */ - public static AbstractGroupExpression> sortedSet(Expression expression, Comparator comparator) { + public static AbstractGroupExpression> sortedSet(Expression expression, Comparator comparator) { return GSet.createSorted(expression, comparator); } @@ -158,8 +155,8 @@ public static AbstractGroupExpression> sortedSet(Expression exp * @param comparator * @return */ - public static GroupExpression> sortedSet(GroupExpression groupExpression, Comparator comparator) { - return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression, comparator)); + public static GroupExpression> sortedSet(GroupExpression groupExpression, Comparator comparator) { + return new MixinGroupExpression>(groupExpression, GSet.createSorted(groupExpression, comparator)); } @@ -214,7 +211,7 @@ public static AbstractGroupExpression, Map> map(Gr * @param value * @return */ - public static , V> AbstractGroupExpression,Map> sortedMap(Expression key, Expression value) { + public static , V> AbstractGroupExpression, SortedMap> sortedMap(Expression key, Expression value) { return GMap.createSorted(QPair.create(key, value)); } @@ -225,7 +222,7 @@ public static , V> AbstractGroupExpression, V, T extends Comparable> AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value) { + public static , V, T extends Comparable> AbstractGroupExpression, SortedMap> sortedMap(GroupExpression key, Expression value) { return sortedMap(key, new GOne(value)); } @@ -236,7 +233,7 @@ public static , V, T extends Comparable, V, U> AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value) { + public static , V, U> AbstractGroupExpression, SortedMap> sortedMap(Expression key, GroupExpression value) { return sortedMap(new GOne(key), value); } @@ -247,8 +244,8 @@ public static , V, U> AbstractGroupExpression, V, T extends Comparable, U> AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value) { - return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value))); + public static , V, T extends Comparable, U> AbstractGroupExpression, SortedMap> sortedMap(GroupExpression key, GroupExpression value) { + return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value))); } /** @@ -259,7 +256,7 @@ public static , V, T extends Comparable AbstractGroupExpression,Map> sortedMap(Expression key, Expression value, Comparator comparator) { + public static AbstractGroupExpression, SortedMap> sortedMap(Expression key, Expression value, Comparator comparator) { return GMap.createSorted(QPair.create(key, value), comparator); } @@ -271,7 +268,7 @@ public static AbstractGroupExpression,Map> sortedMap(Exp * @param comparator * @return */ - public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, Expression value, Comparator comparator) { + public static AbstractGroupExpression, SortedMap> sortedMap(GroupExpression key, Expression value, Comparator comparator) { return sortedMap(key, new GOne(value), comparator); } @@ -283,7 +280,7 @@ public static AbstractGroupExpression, Map> sortedMap * @param comparator * @return */ - public static AbstractGroupExpression, Map> sortedMap(Expression key, GroupExpression value, Comparator comparator) { + public static AbstractGroupExpression, SortedMap> sortedMap(Expression key, GroupExpression value, Comparator comparator) { return sortedMap(new GOne(key), value, comparator); } @@ -295,8 +292,8 @@ public static AbstractGroupExpression, Map> sortedMap * @param comparator * @return */ - public static AbstractGroupExpression, Map> sortedMap(GroupExpression key, GroupExpression value, Comparator comparator) { - return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value), comparator)); + public static AbstractGroupExpression, SortedMap> sortedMap(GroupExpression key, GroupExpression value, Comparator comparator) { + return new GMap.Mixin>(key, value, GMap.createSorted(QPair.create(key, value), comparator)); } From 5480866f61c70b138bc54971cb95adcb23efe74a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Feb 2015 19:11:57 +0200 Subject: [PATCH 0735/1968] Use delegate method --- querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java b/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java index a02fe1ef6e..1065dde370 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/Configuration.java @@ -75,7 +75,7 @@ public Configuration(SQLTemplates templates) { javaTypeMapping.register(customType); } for (Map.Entry entry : templates.getTableOverrides().entrySet()) { - nameMapping.registerTableOverride(entry.getKey(), entry.getValue()); + registerTableOverride(entry.getKey(), entry.getValue()); } if (templates.isArraysSupported()) { From d206b55edbb08a91dc445de34a2c1c372b6783cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Feb 2015 19:14:56 +0200 Subject: [PATCH 0736/1968] Simplify visitor signature --- .../java/com/querydsl/core/types/Visitor.java | 24 +++++++------------ 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Visitor.java b/querydsl-core/src/main/java/com/querydsl/core/types/Visitor.java index c9b4777845..bbb5d713a7 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Visitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Visitor.java @@ -13,8 +13,6 @@ */ package com.querydsl.core.types; -import javax.annotation.Nullable; - /** * Visitor defines a Visitor signature for {@link Expression} instances. * @@ -25,43 +23,37 @@ public interface Visitor { /** * @param expr */ - @Nullable - R visit(Constant expr, @Nullable C context); + R visit(Constant expr, C context); /** * @param expr */ - @Nullable - R visit(FactoryExpression expr, @Nullable C context); + R visit(FactoryExpression expr, C context); /** * @param expr */ - @Nullable - R visit(Operation expr, @Nullable C context); + R visit(Operation expr, C context); /** * @param expr */ - @Nullable - R visit(ParamExpression expr, @Nullable C context); + R visit(ParamExpression expr, C context); /** * @param expr */ - @Nullable - R visit(Path expr, @Nullable C context); + R visit(Path expr, C context); /** * @param expr */ - @Nullable - R visit(SubQueryExpression expr, @Nullable C context); + R visit(SubQueryExpression expr, C context); /** * @param expr */ - @Nullable - R visit(TemplateExpression expr, @Nullable C context); + + R visit(TemplateExpression expr, C context); } From 337e523cbe8a32a788f7e7c595e6a3bbe44561bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Feb 2015 19:48:24 +0200 Subject: [PATCH 0737/1968] Improve numeric mappings --- .../com/querydsl/sql/JDBCTypeMapping.java | 44 ++++++++++++------- .../com/querydsl/sql/JDBCTypeMappingTest.java | 19 ++++++-- 2 files changed, 44 insertions(+), 19 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java b/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java index 7e64a2497a..3a1ed0506e 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java @@ -13,7 +13,6 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Blob; @@ -22,7 +21,11 @@ import java.sql.Types; import java.util.HashMap; import java.util.Map; +import java.util.Set; + +import javax.annotation.Nullable; +import com.google.common.collect.ImmutableSet; import com.mysema.commons.lang.Pair; import com.querydsl.sql.types.Null; @@ -34,11 +37,13 @@ */ public final class JDBCTypeMapping { + private static final Set NUMERIC_TYPES; + private static final Map> defaultTypes = new HashMap>(); private static final Map, Integer> defaultSqlTypes = new HashMap, Integer>(); - static{ + static { registerDefault(-101, Object.class); registerDefault(-102, java.sql.Timestamp.class); // Oracle: TIMESTAMP(6) WITH LOCAL TIME ZONE registerDefault(2012, Object.class); // REF_CURSOR @@ -94,6 +99,14 @@ public final class JDBCTypeMapping { registerDefault(Types.REF, Object.class); registerDefault(Types.ROWID, Object.class); registerDefault(Types.STRUCT, Object.class); + + ImmutableSet.Builder builder = ImmutableSet.builder(); + for (Map.Entry> entry : defaultTypes.entrySet()) { + if (Number.class.isAssignableFrom(entry.getValue())) { + builder.add(entry.getKey()); + } + } + NUMERIC_TYPES = builder.build(); } private static void registerDefault(int sqlType, Class javaType) { @@ -105,7 +118,7 @@ private static void registerDefault(int sqlType, Class javaType) { private final Map, Integer> sqlTypes = new HashMap, Integer>(); - private final Map, Class> numericTypes = new HashMap, Class>(); + private final Map, Class> numericTypes = new HashMap, Class>(); public void register(int sqlType, Class javaType) { types.put(sqlType, javaType); @@ -116,11 +129,8 @@ public void registerNumeric(int total, int decimal, Class javaType) { numericTypes.put(Pair.of(total, decimal), javaType); } - private Class getNumericClass(int total, int decimal) { - Pair key = Pair.of(total, decimal); - if (numericTypes.containsKey(key)) { - return numericTypes.get(key); - } else if (decimal <= 0) { + private static Class getNumericClass(int total, int decimal) { + if (decimal <= 0) { if (total > 18 || total == 0) { return BigInteger.class; } else if (total > 9 || total == 0) { @@ -135,19 +145,21 @@ private Class getNumericClass(int total, int decimal) { return Boolean.class; } } else { - if (total > 16) { - return BigDecimal.class; - } else { - return Double.class; - } + return BigDecimal.class; } } @Nullable public Class get(int sqlType, int total, int decimal) { - if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) { - return getNumericClass(total, decimal); - } else if (types.containsKey(sqlType)) { + if (NUMERIC_TYPES.contains(sqlType)) { + Pair key = Pair.of(total, decimal); + if (numericTypes.containsKey(key)) { + return numericTypes.get(key); + } else if (sqlType == Types.NUMERIC || sqlType == Types.DECIMAL) { + return getNumericClass(total, decimal); + } + } + if (types.containsKey(sqlType)) { return types.get(sqlType); } else { return defaultTypes.get(sqlType); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java index 2fe5851aa6..a89d068fd3 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java @@ -69,8 +69,7 @@ public void NumericTypes() { // 2,0 -> Byte // 0-1,0 -> Boolean -// 17-...,? -> BigDecimal -// 0-16,? -> Double +// ?,? -> BigDecimal assertEquals(typeMapping.get(Types.NUMERIC, 20, 0), BigInteger.class); assertEquals(typeMapping.get(Types.NUMERIC, 19, 0), BigInteger.class); assertEquals(typeMapping.get(Types.NUMERIC, 15, 0), Long.class); @@ -83,7 +82,7 @@ public void NumericTypes() { assertEquals(typeMapping.get(Types.NUMERIC, 0, 0), BigInteger.class); assertEquals(typeMapping.get(Types.NUMERIC, 17, 2), BigDecimal.class); - assertEquals(typeMapping.get(Types.NUMERIC, 5, 2), Double.class); + assertEquals(typeMapping.get(Types.NUMERIC, 5, 2), BigDecimal.class); } @Test @@ -101,4 +100,18 @@ public void NumericOverriden() { assertEquals(typeMapping.get(Types.NUMERIC, 19, 0), BigInteger.class); } + @Test + public void NumericOverriden2() { + typeMapping.registerNumeric(19, 0, BigInteger.class); + assertEquals(typeMapping.get(Types.INTEGER, 19, 0), BigInteger.class); + assertEquals(typeMapping.get(Types.INTEGER, 18, 0), Integer.class); + } + + @Test + public void NumericOverriden3() { + typeMapping.registerNumeric(5, 2, BigDecimal.class); + assertEquals(typeMapping.get(Types.DOUBLE, 5, 2), BigDecimal.class); + assertEquals(typeMapping.get(Types.DOUBLE, 5, 1), Double.class); + } + } From cffe40f0943db0ddc568ab7e045e8a7169b96a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 14 Feb 2015 10:56:34 +0200 Subject: [PATCH 0738/1968] Make all options of Configuration available in the Maven plugin --- .../maven/AbstractMetaDataExportMojo.java | 26 ++-- .../main/java/com/querydsl/maven/Mapping.java | 9 ++ .../com/querydsl/maven/NumericMapping.java | 12 +- .../com/querydsl/maven/RenameMapping.java | 59 +++++++++ .../java/com/querydsl/maven/TypeMapping.java | 23 +++- .../maven/MetadataExportMojoTest.java | 14 +++ .../com/querydsl/maven/RenameMappingTest.java | 112 ++++++++++++++++++ .../java/com/querydsl/sql/SchemaAndTable.java | 4 + 8 files changed, 248 insertions(+), 11 deletions(-) create mode 100644 querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java create mode 100644 querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java create mode 100644 querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java index f16abd0174..c7bd3118fb 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/AbstractMetaDataExportMojo.java @@ -211,6 +211,11 @@ public class AbstractMetaDataExportMojo extends AbstractMojo{ */ private NumericMapping[] numericMappings; + /** + * @parameter + */ + private RenameMapping[] renameMappings; + /** * @parameter default-value=false */ @@ -391,21 +396,20 @@ public void execute() throws MojoExecutionException, MojoFailureException { } if (typeMappings != null) { for (TypeMapping mapping : typeMappings) { - Class typeClass = Class.forName(mapping.type); - if (Type.class.isAssignableFrom(typeClass)) { - configuration.register(mapping.table, mapping.column, (Type)typeClass.newInstance()); - } else { - configuration.register(mapping.table, mapping.column, typeClass); - } + mapping.apply(configuration); } } if (numericMappings != null) { for (NumericMapping mapping : numericMappings) { - int total = mapping.total; - int decimal = mapping.decimal; - configuration.registerNumeric(total, decimal, Class.forName(mapping.javaType)); + mapping.apply(configuration); } } + if (renameMappings != null) { + for (RenameMapping mapping : renameMappings) { + mapping.apply(configuration); + } + } + if (columnComparatorClass != null) { try { exporter.setColumnComparatorClass( (Class) Class.forName(this.columnComparatorClass).asSubclass(Comparator.class)); @@ -554,6 +558,10 @@ public void setNumericMappings(NumericMapping[] numericMappings) { this.numericMappings = numericMappings; } + public void setRenameMappings(RenameMapping[] renameMappings) { + this.renameMappings = renameMappings; + } + public void setImports(String[] imports) { this.imports = imports; } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java new file mode 100644 index 0000000000..4f5c549728 --- /dev/null +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java @@ -0,0 +1,9 @@ +package com.querydsl.maven; + +import com.querydsl.sql.Configuration; + +public interface Mapping { + + void apply(Configuration configuration); + +} diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java index 487962506f..aca0688b7a 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java @@ -13,14 +13,24 @@ */ package com.querydsl.maven; +import com.querydsl.sql.Configuration; + /** * @author tiwe * */ -public class NumericMapping { +public class NumericMapping implements Mapping { public int total, decimal; public String javaType; + @Override + public void apply(Configuration configuration) { + try { + configuration.registerNumeric(total, decimal, Class.forName(javaType)); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java new file mode 100644 index 0000000000..0b591d191a --- /dev/null +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java @@ -0,0 +1,59 @@ +/* + * Copyright 2015, Timo Westkämper + * + * 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 com.querydsl.maven; + +import com.google.common.collect.ImmutableList; +import com.querydsl.sql.Configuration; + +public class RenameMapping implements Mapping { + + String fromSchema, fromTable, fromColumn; + + String toSchema, toTable, toColumn; + + @Override + public void apply(Configuration configuration) { + if (fromSchema != null) { + if (fromTable != null && fromColumn != null && toColumn != null) { + configuration.registerColumnOverride(fromSchema, fromTable, fromColumn, toColumn); + } else if (fromTable != null && toTable != null) { + if (toSchema != null) { + configuration.registerTableOverride(fromSchema, fromTable, toSchema, toTable); + } else { + configuration.registerTableOverride(fromSchema, fromTable, toTable); + } + } else if (toSchema != null) { + configuration.registerSchemaOverride(fromSchema, toSchema); + } else { + insufficientArgs(); + } + } else if (fromTable != null) { + if (fromColumn != null && toColumn != null) { + configuration.registerColumnOverride(fromTable, fromColumn, toColumn); + } else if (toTable != null) { + configuration.registerTableOverride(fromTable, toTable); + } else { + insufficientArgs(); + } + } else { + insufficientArgs(); + } + } + + private void insufficientArgs() { + throw new IllegalArgumentException("Insufficient args " + + ImmutableList.of(fromSchema, fromTable, fromColumn) + " to " + + ImmutableList.of(toSchema, toTable, toColumn)); + } +} diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java index 0335936863..104b98e3f1 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java @@ -13,11 +13,14 @@ */ package com.querydsl.maven; +import com.querydsl.sql.Configuration; +import com.querydsl.sql.types.Type; + /** * @author tiwe * */ -public class TypeMapping { +public class TypeMapping implements Mapping { public String table; @@ -25,4 +28,22 @@ public class TypeMapping { public String type; + @Override + public void apply(Configuration configuration) { + try { + Class typeClass = Class.forName(type); + if (Type.class.isAssignableFrom(typeClass)) { + configuration.register(table, column, (Type)typeClass.newInstance()); + } else { + configuration.register(table, column, typeClass); + } + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + + } } diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java index 4a4fa68f1c..f2ed82fb42 100644 --- a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/MetadataExportMojoTest.java @@ -176,4 +176,18 @@ public void ExecuteWithImportAndBeans1() throws Exception { assertTrue(new File("target/export12").exists()); } + + @Test + public void ExecuteWithRenames() throws Exception { + RenameMapping mapping = new RenameMapping(); + mapping.fromSchema = "ABC"; + mapping.toSchema = "DEF"; + + mojo.setTargetFolder("target/export13"); + mojo.setRenameMappings(new RenameMapping[]{mapping}); + mojo.execute(); + + assertEquals(Collections.singletonList("target/export13"), project.getCompileSourceRoots()); + assertTrue(new File("target/export13").exists()); + } } diff --git a/querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java new file mode 100644 index 0000000000..811754e43b --- /dev/null +++ b/querydsl-maven-plugin/src/test/java/com/querydsl/maven/RenameMappingTest.java @@ -0,0 +1,112 @@ +package com.querydsl.maven; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.querydsl.sql.Configuration; +import com.querydsl.sql.SQLTemplates; +import com.querydsl.sql.SchemaAndTable; + +public class RenameMappingTest { + + private RenameMapping mapping = new RenameMapping(); + private Configuration configuration = new Configuration(SQLTemplates.DEFAULT); + + // to schema + + @Test + public void SchemaToSchema() { + mapping.fromSchema = "ABC"; + mapping.toSchema = "DEF"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("DEF", "TABLE"), + configuration.getOverride(new SchemaAndTable("ABC", "TABLE"))); + assertEquals( + new SchemaAndTable("ABCD", "TABLE"), + configuration.getOverride(new SchemaAndTable("ABCD", "TABLE"))); + + } + + // to table + + @Test + public void TableToTable() { + mapping.fromTable = "TABLE1"; + mapping.toTable = "TABLE2"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("DEF", "TABLE2"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE1"))); + assertEquals( + new SchemaAndTable("DEF", "TABLE3"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE3"))); + } + + @Test + public void SchemaTableToTable() { + mapping.fromSchema = "ABC"; + mapping.fromTable = "TABLE1"; + mapping.toTable = "TABLE2"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("ABC", "TABLE2"), + configuration.getOverride(new SchemaAndTable("ABC", "TABLE1"))); + assertEquals( + new SchemaAndTable("DEF", "TABLE1"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE1"))); + } + + @Test + public void SchemaTableToSchemaTable() { + mapping.fromSchema = "ABC"; + mapping.fromTable = "TABLE1"; + mapping.toSchema = "ABC"; + mapping.toTable = "TABLE2"; + mapping.apply(configuration); + + assertEquals( + new SchemaAndTable("ABC", "TABLE2"), + configuration.getOverride(new SchemaAndTable("ABC", "TABLE1"))); + assertEquals( + new SchemaAndTable("DEF", "TABLE1"), + configuration.getOverride(new SchemaAndTable("DEF", "TABLE1"))); + } + + // to column + + @Test + public void SchemaTableColumnToColumn() { + mapping.fromSchema = "ABC"; + mapping.fromTable = "TABLE1"; + mapping.fromColumn = "COLUMN1"; + mapping.toColumn = "COLUMN2"; + mapping.apply(configuration); + + assertEquals( + "COLUMN2", + configuration.getColumnOverride(new SchemaAndTable("ABC", "TABLE1"), "COLUMN1")); + assertEquals( + "COLUMN1", + configuration.getColumnOverride(new SchemaAndTable("DEF", "TABLE1"), "COLUMN1")); + } + + @Test + public void TableColumnToColumn() { + mapping.fromTable = "TABLE1"; + mapping.fromColumn = "COLUMN1"; + mapping.toColumn = "COLUMN2"; + mapping.apply(configuration); + + assertEquals( + "COLUMN2", + configuration.getColumnOverride(new SchemaAndTable("ABC", "TABLE1"), "COLUMN1")); + assertEquals( + "COLUMN1", + configuration.getColumnOverride(new SchemaAndTable("ABC", "TABLE2"), "COLUMN1")); + } +} diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java b/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java index f8072c0379..d4fc3c5fd8 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SchemaAndTable.java @@ -54,4 +54,8 @@ public int hashCode() { return (schema != null ? 31 * schema.hashCode() : 0) + table.hashCode(); } + @Override + public String toString() { + return "(" + schema + " " + table + ")"; + } } From ffb5fa1091567aaa8c2e929c2d5a59c0609eb8c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Feb 2015 14:48:40 +0200 Subject: [PATCH 0739/1968] Add tests --- .../java/com/querydsl/sql/DB2Templates.java | 6 +- .../java/com/querydsl/sql/SelectBase.java | 80 +++++++++++++++++-- 2 files changed, 78 insertions(+), 8 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java index 74902f978c..3ba2d6ff34 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java @@ -185,9 +185,9 @@ public DB2Templates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_MONTH, "trunc_timestamp({0}, 'month')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc_timestamp({0}, 'week')"); add(Ops.DateTimeOps.TRUNC_DAY, "trunc_timestamp({0}, 'dd')"); - add(Ops.DateTimeOps.TRUNC_HOUR, "trunc_timestamp({0}, 'hour')"); - add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc_timestamp({0}, 'minute')"); - add(Ops.DateTimeOps.TRUNC_SECOND, "trunc_timestamp({0}, 'second')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "trunc_timestamp({0}, 'hh')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc_timestamp({0}, 'mi')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "trunc_timestamp({0}, 'ss')"); addTypeNameToCode("smallint", Types.BOOLEAN, true); addTypeNameToCode("smallint", Types.TINYINT, true); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index 625863d7b5..aa200d49fe 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -13,8 +13,8 @@ */ package com.querydsl.sql; -import static com.querydsl.sql.Constants.*; import static com.querydsl.core.Target.*; +import static com.querydsl.sql.Constants.*; import static org.junit.Assert.*; import java.io.*; @@ -40,8 +40,9 @@ import com.querydsl.core.*; import com.querydsl.core.group.Group; import com.querydsl.core.group.GroupBy; -import com.querydsl.sql.domain.*; import com.querydsl.core.support.Expressions; +import com.querydsl.core.testutil.ExcludeIn; +import com.querydsl.core.testutil.IncludeIn; import com.querydsl.core.types.*; import com.querydsl.core.types.expr.*; import com.querydsl.core.types.path.NumberPath; @@ -49,8 +50,7 @@ import com.querydsl.core.types.path.StringPath; import com.querydsl.core.types.query.NumberSubQuery; import com.querydsl.core.types.template.NumberTemplate; -import com.querydsl.core.testutil.ExcludeIn; -import com.querydsl.core.testutil.IncludeIn; +import com.querydsl.sql.domain.*; public class SelectBase extends AbstractBaseTest { @@ -482,7 +482,7 @@ public void Date_Diff2() { } @Test - @ExcludeIn({CUBRID, DB2, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME + @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME public void Date_Trunc() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(); @@ -500,6 +500,76 @@ public void Date_Trunc() { } } + @Test + @IncludeIn({DB2, ORACLE, POSTGRES, TERADATA}) + public void Date_Trunc2() { + DateTimeExpression expr = DateTimeExpression.currentTimestamp(DateTime.class); + + Tuple tuple = query().singleResult( + expr, + SQLExpressions.datetrunc(DatePart.year, expr), + SQLExpressions.datetrunc(DatePart.month, expr), + SQLExpressions.datetrunc(DatePart.day, expr), + SQLExpressions.datetrunc(DatePart.hour, expr), + SQLExpressions.datetrunc(DatePart.minute, expr), + SQLExpressions.datetrunc(DatePart.second, expr)); + DateTime date = tuple.get(expr); + DateTime toYear = tuple.get(SQLExpressions.datetrunc(DatePart.year, expr)); + DateTime toMonth = tuple.get(SQLExpressions.datetrunc(DatePart.month, expr)); + DateTime toDay = tuple.get(SQLExpressions.datetrunc(DatePart.day, expr)); + DateTime toHour = tuple.get(SQLExpressions.datetrunc(DatePart.hour, expr)); + DateTime toMinute = tuple.get(SQLExpressions.datetrunc(DatePart.minute, expr)); + DateTime toSecond = tuple.get(SQLExpressions.datetrunc(DatePart.second, expr)); + + // year + assertEquals(date.getYear(), toYear.getYear()); + assertEquals(date.getYear(), toMonth.getYear()); + assertEquals(date.getYear(), toDay.getYear()); + assertEquals(date.getYear(), toHour.getYear()); + assertEquals(date.getYear(), toMinute.getYear()); + assertEquals(date.getYear(), toSecond.getYear()); + + // month + assertEquals(1, toYear.getMonthOfYear()); + assertEquals(date.getMonthOfYear(), toMonth.getMonthOfYear()); + assertEquals(date.getMonthOfYear(), toDay.getMonthOfYear()); + assertEquals(date.getMonthOfYear(), toHour.getMonthOfYear()); + assertEquals(date.getMonthOfYear(), toMinute.getMonthOfYear()); + assertEquals(date.getMonthOfYear(), toSecond.getMonthOfYear()); + + // day + assertEquals(1, toYear.getDayOfMonth()); + assertEquals(1, toMonth.getDayOfMonth()); + assertEquals(date.getDayOfMonth(), toDay.getDayOfMonth()); + assertEquals(date.getDayOfMonth(), toHour.getDayOfMonth()); + assertEquals(date.getDayOfMonth(), toMinute.getDayOfMonth()); + assertEquals(date.getDayOfMonth(), toSecond.getDayOfMonth()); + + // hour + assertEquals(0, toYear.getHourOfDay()); + assertEquals(0, toMonth.getHourOfDay()); + assertEquals(0, toDay.getHourOfDay()); + assertEquals(date.getHourOfDay(), toHour.getHourOfDay()); + assertEquals(date.getHourOfDay(), toMinute.getHourOfDay()); + assertEquals(date.getHourOfDay(), toSecond.getHourOfDay()); + + // minute + assertEquals(0, toYear.getMinuteOfHour()); + assertEquals(0, toMonth.getMinuteOfHour()); + assertEquals(0, toDay.getMinuteOfHour()); + assertEquals(0, toHour.getMinuteOfHour()); + assertEquals(date.getMinuteOfHour(), toMinute.getMinuteOfHour()); + assertEquals(date.getMinuteOfHour(), toSecond.getMinuteOfHour()); + + // second + assertEquals(0, toYear.getSecondOfMinute()); + assertEquals(0, toMonth.getSecondOfMinute()); + assertEquals(0, toDay.getSecondOfMinute()); + assertEquals(0, toHour.getSecondOfMinute()); + assertEquals(0, toMinute.getSecondOfMinute()); + assertEquals(date.getSecondOfMinute(), toSecond.getSecondOfMinute()); + } + @Test public void DateTime() { TestQuery query = query().from(employee).orderBy(employee.id.asc()); From 5446c9500a6ce376ea2b747fec97956bdfac06bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Feb 2015 15:49:26 +0200 Subject: [PATCH 0740/1968] Use BASIC_RESULTS_UNORDERED --- .../src/test/java/com/querydsl/core/group/GroupByMapTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java b/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java index 67e69e8759..199e6f7cb3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/group/GroupByMapTest.java @@ -37,7 +37,7 @@ public void Group_Order() { @Test public void Set_By_Sorted() { - Map results = BASIC_RESULTS + Map results = BASIC_RESULTS_UNORDERED .transform(groupBy(postId).as(postName, sortedSet(commentId))); Group group = results.get(1); @@ -49,7 +49,7 @@ public void Set_By_Sorted() { @Test public void Set_By_Sorted_Reverse() { - Map results = BASIC_RESULTS + Map results = BASIC_RESULTS_UNORDERED .transform(groupBy(postId).as(postName, sortedSet(commentId, Ordering.natural().reverse()))); Group group = results.get(1); From 9e14dae85ee66af872b9ca5b837aad33aa6ed5bb Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sun, 15 Feb 2015 23:20:22 +0100 Subject: [PATCH 0741/1968] Add documentation for *Mapping classes --- .../src/main/java/com/querydsl/maven/Mapping.java | 10 ++++++++++ .../main/java/com/querydsl/maven/NumericMapping.java | 2 ++ .../main/java/com/querydsl/maven/RenameMapping.java | 5 +++++ .../src/main/java/com/querydsl/maven/TypeMapping.java | 2 ++ 4 files changed, 19 insertions(+) diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java index 4f5c549728..ebf06be78b 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/Mapping.java @@ -2,8 +2,18 @@ import com.querydsl.sql.Configuration; +/** + * Specifies mapping customization options. + * + * @author tiwe + */ public interface Mapping { + /** + * Apply the customization to the passed in configuration. + * + * @param configuration the configuration to apply the customization to + */ void apply(Configuration configuration); } diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java index aca0688b7a..7c264291b7 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/NumericMapping.java @@ -16,6 +16,8 @@ import com.querydsl.sql.Configuration; /** + * {@linkplain NumericMapping} is used to customize mappings of various numeric precisions to data types. + * * @author tiwe * */ diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java index 0b591d191a..3989c8a639 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/RenameMapping.java @@ -16,6 +16,11 @@ import com.google.common.collect.ImmutableList; import com.querydsl.sql.Configuration; +/** + * {@linkplain RenameMapping} is used to override schemas, tables, columns and combinations of the three. + * + * @author tiwe + */ public class RenameMapping implements Mapping { String fromSchema, fromTable, fromColumn; diff --git a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java index 104b98e3f1..d36f12adff 100644 --- a/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java +++ b/querydsl-maven-plugin/src/main/java/com/querydsl/maven/TypeMapping.java @@ -17,6 +17,8 @@ import com.querydsl.sql.types.Type; /** + * {@linkplain TypeMapping} is used to customize the mapping from table + column to a type. + * * @author tiwe * */ From f094e643a67ab671d1b6c9e02f3718f516abb221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Feb 2015 23:02:27 +0200 Subject: [PATCH 0742/1968] Add mappings --- .../main/java/com/querydsl/sql/CUBRIDTemplates.java | 8 ++++++++ .../main/java/com/querydsl/sql/DerbyTemplates.java | 9 +++++++++ .../src/main/java/com/querydsl/sql/H2Templates.java | 8 ++++++++ .../main/java/com/querydsl/sql/HSQLDBTemplates.java | 8 ++++++++ .../main/java/com/querydsl/sql/MySQLTemplates.java | 8 ++++++++ .../java/com/querydsl/sql/SQLServerTemplates.java | 9 +++++++++ .../main/java/com/querydsl/sql/TeradataTemplates.java | 2 +- .../src/test/java/com/querydsl/sql/SelectBase.java | 11 +++++++++-- 8 files changed, 60 insertions(+), 3 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java index 2918d2262f..39085fac09 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java @@ -74,6 +74,14 @@ public CUBRIDTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.ADD_MINUTES, "date_add({0}, interval {1s} minute)"); add(Ops.DateTimeOps.ADD_SECONDS, "date_add({0}, interval {1s} second)"); + add(Ops.DateTimeOps.TRUNC_YEAR, "trunc({0},'yyyy')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0},'mm')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0},'day')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0},'dd')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "timestamp(date({0}),concat(hour({0}),':00:00'))"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "timestamp(date({0}),concat(hour({0}),':',minute({0}),':00'))"); + add(Ops.DateTimeOps.TRUNC_SECOND, "timestamp(date({0}),concat(hour({0}),':',minute({0}),':',second({0})))"); + add(Ops.MathOps.LN, "ln({0})"); add(Ops.MathOps.LOG, "(ln({0}) / ln({1}))"); add(Ops.MathOps.COSH, "(exp({0}) + exp({0} * -1)) / 2"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java index 9c531b0270..032a93e716 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java @@ -105,6 +105,15 @@ public DerbyTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "{fn timestampdiff(SQL_TSI_MINUTE, {0}, {1})}"); add(Ops.DateTimeOps.DIFF_SECONDS, "{fn timestampdiff(SQL_TSI_SECOND, {0}, {1})}"); + // yyyy-MM-dd hh:mm:ss + add(Ops.DateTimeOps.TRUNC_YEAR, "timestamp(substr(cast({0} as char(30)),1,4)||'-01-01 00:00:00')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "timestamp(substr(cast({0} as char(30)),1,7)||'-01 00:00:00')"); + // TODO weeks + add(Ops.DateTimeOps.TRUNC_DAY, "timestamp(substr(cast({0} as char(30)),1,10)||' 00:00:00')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "timestamp(substr(cast({0} as char(30)),1,13)||':00:00')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "timestamp(substr(cast({0} as char(30)),1,16)||':00')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "timestamp(substr(cast({0} as char(30)),1,19))"); + // left via substr add(Ops.StringOps.LEFT, "substr({0},1,{1})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java index 120edce867..6903ffb0b4 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java @@ -67,6 +67,14 @@ public H2Templates(char escape, boolean quote) { addTypeNameToCode("uuid", Types.BINARY); addTypeNameToCode("serial", Types.INTEGER); addTypeNameToCode("varchar_ignorecase", Types.VARCHAR); + + add(Ops.DateTimeOps.TRUNC_YEAR, "parsedatetime(formatdatetime({0},'yyyy'),'yyyy')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "parsedatetime(formatdatetime({0},'yyyy-MM'),'yyyy-MM')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "parsedatetime(formatdatetime({0},'YYYY-ww'),'YYYY-ww')"); + add(Ops.DateTimeOps.TRUNC_DAY, "parsedatetime(formatdatetime({0},'yyyy-MM-dd'),'yyyy-MM-dd')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "parsedatetime(formatdatetime({0},'yyyy-MM-dd HH'),'yyyy-MM-dd HH')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "parsedatetime(formatdatetime({0},'yyyy-MM-dd HH:mm'),'yyyy-MM-dd HH:mm')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "parsedatetime(formatdatetime({0},'yyyy-MM-dd HH:mm:ss'),'yyyy-MM-dd HH:mm:ss')"); } } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java index 147ee910f4..eefe4d14d4 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java @@ -83,6 +83,14 @@ public HSQLDBTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff('mi', {0}, {1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff('ss', {0}, {1})"); + add(Ops.DateTimeOps.TRUNC_YEAR, "trunc({0},'YY')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0},'MM')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0},'WW')"); + add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0},'DD')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0},'HH')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0},'MI')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "trunc({0},'SS')"); + add(Ops.DateTimeOps.DATE, "convert({0}, date)"); addTypeNameToCode("character", Types.CHAR, true); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java index a34c5cbdd9..be4e321269 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java @@ -149,6 +149,14 @@ public MySQLTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "timestampdiff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "timestampdiff(second,{0},{1})"); + add(Ops.DateTimeOps.TRUNC_YEAR, "str_to_date(concat(date_format({0},'%Y'),'-1-1'),'%Y-%m-%d')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "str_to_date(concat(date_format({0},'%Y-%m'),'-1'),'%Y-%m-%d')"); + add(Ops.DateTimeOps.TRUNC_WEEK, "str_to_date(concat(date_format({0},'%Y-%u'),'-2'),'%Y-%u-%w')"); + add(Ops.DateTimeOps.TRUNC_DAY, "str_to_date(date_format({0},'%Y-%m-%d'),'%Y-%m-%d')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "str_to_date(date_format({0},'%Y-%m-%d %k'),'%Y-%m-%d %k')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "str_to_date(date_format({0},'%Y-%m-%d %k:%i'),'%Y-%m-%d %k:%i')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "str_to_date(date_format({0},'%Y-%m-%d %k:%i:%s'),'%Y-%m-%d %k:%i:%s')"); + addTypeNameToCode("bool", Types.BIT, true); addTypeNameToCode("tinyint unsigned", Types.TINYINT); addTypeNameToCode("bigint unsigned", Types.BIGINT); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index 6a8d0f785a..ac64e8ddbf 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -123,9 +123,18 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + add(Ops.DateTimeOps.TRUNC_YEAR, "CONVERT(DATETIME, CONVERT(VARCHAR(4), {0}, 120) + '-01-01')"); + add(Ops.DateTimeOps.TRUNC_MONTH, "CONVERT(DATETIME, CONVERT(VARCHAR(7), {0}, 120) + '-01')"); + // TODO week + add(Ops.DateTimeOps.TRUNC_DAY, "CONVERT(DATETIME, CONVERT(VARCHAR(10), {0}, 120))"); + add(Ops.DateTimeOps.TRUNC_HOUR, "CONVERT(DATETIME, CONVERT(VARCHAR(13), {0}, 120) + ':00:00')"); + add(Ops.DateTimeOps.TRUNC_MINUTE, "CONVERT(DATETIME, CONVERT(VARCHAR(16), {0}, 120) + ':00')"); + add(Ops.DateTimeOps.TRUNC_SECOND, "CONVERT(DATETIME, CONVERT(VARCHAR(19), {0}, 120))"); + add(Ops.DateTimeOps.DATE, "cast({0} as date)"); add(Ops.DateTimeOps.CURRENT_DATE, "cast(getdate() as date)"); + addTypeNameToCode("bit", Types.BOOLEAN, true); addTypeNameToCode("decimal", Types.DOUBLE, true); addTypeNameToCode("tinyint identity", Types.TINYINT); addTypeNameToCode("bigint identity", Types.BIGINT); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java index 33bb31a6ec..6234855cc7 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java @@ -103,7 +103,7 @@ public TeradataTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0}, 'month')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0}, 'w')"); add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0}, 'dd')"); - add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh')"); + add(Ops.DateTimeOps.TRUNC_HOUR, "trunc({0}, 'hh24')"); add(Ops.DateTimeOps.TRUNC_MINUTE, "trunc({0}, 'mi')"); add(Ops.DateTimeOps.TRUNC_SECOND, "{0}"); // not truncated } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index aa200d49fe..41835c9e71 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -482,7 +482,7 @@ public void Date_Diff2() { } @Test - @ExcludeIn({CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MYSQL, SQLITE, SQLSERVER, TERADATA}) // FIXME + @ExcludeIn({DERBY, FIREBIRD, SQLITE, SQLSERVER}) // FIXME public void Date_Trunc() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(); @@ -501,7 +501,7 @@ public void Date_Trunc() { } @Test - @IncludeIn({DB2, ORACLE, POSTGRES, TERADATA}) + @ExcludeIn({FIREBIRD, SQLITE}) // FIXME public void Date_Trunc2() { DateTimeExpression expr = DateTimeExpression.currentTimestamp(DateTime.class); @@ -521,6 +521,13 @@ public void Date_Trunc2() { DateTime toMinute = tuple.get(SQLExpressions.datetrunc(DatePart.minute, expr)); DateTime toSecond = tuple.get(SQLExpressions.datetrunc(DatePart.second, expr)); + assertEquals(date.getZone(), toYear.getZone()); + assertEquals(date.getZone(), toMonth.getZone()); + assertEquals(date.getZone(), toDay.getZone()); + assertEquals(date.getZone(), toHour.getZone()); + assertEquals(date.getZone(), toMinute.getZone()); + assertEquals(date.getZone(), toSecond.getZone()); + // year assertEquals(date.getYear(), toYear.getYear()); assertEquals(date.getYear(), toMonth.getYear()); From 718fd2382ed602a6062bba1dc7fa1960018ed1d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Feb 2015 12:34:50 +0200 Subject: [PATCH 0743/1968] Add getSorted* accessors --- .../java/com/querydsl/core/group/Group.java | 29 ++++++++++++++++--- .../com/querydsl/core/group/GroupImpl.java | 22 ++++++++++---- 2 files changed, 41 insertions(+), 10 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/Group.java b/querydsl-core/src/main/java/com/querydsl/core/group/Group.java index c309be280c..4cff1719df 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/Group.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/Group.java @@ -13,10 +13,7 @@ */ package com.querydsl.core.group; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.Set; +import java.util.*; import com.querydsl.core.types.Expression; @@ -67,6 +64,17 @@ public interface Group { * @return Set of values in this group */ Set getSet(Expression expr); + + /** + * Returns a SortedSet of values in this group. + * + * @param Value type of Set + * @param expr Grouped expression + * @throws NoSuchElementException if group is undefined. + * @throws ClassCastException if group is of different type (e.g. List) + * @return Set of values in this group + */ + SortedSet getSortedSet(Expression expr); /** * Returns a List of values in this group. @@ -91,5 +99,18 @@ public interface Group { * @return Map of values in this group */ Map getMap(Expression key, Expression value); + + /** + * Returns a SortedMap of values in this group + * + * @param Key type of result Map + * @param Value type of result Map + * @param key Key expression + * @param value Value expression + * @throws NoSuchElementException if group is undefined. + * @throws ClassCastException if group is of different type (e.g. List) + * @return Map of values in this group + */ + SortedMap getSortedMap(Expression key, Expression value); } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupImpl.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupImpl.java index 222a5386e6..af113ae42b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupImpl.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupImpl.java @@ -13,12 +13,7 @@ */ package com.querydsl.core.group; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.Set; +import java.util.*; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Operation; @@ -104,6 +99,16 @@ public Map getMap(Expression key, Expression value) { throw new NoSuchElementException("GMap(" + key + ", " + value + ")"); } + @Override + public SortedMap getSortedMap(Expression key, Expression value) { + for (QPair pair : maps) { + if (pair.equals(key, value)) { + return (SortedMap) groupCollectorMap.get(pair).get(); + } + } + throw new NoSuchElementException("GMap(" + key + ", " + value + ")"); + } + @Override public T getOne(Expression expr) { return this.get(expr); @@ -114,6 +119,11 @@ public Set getSet(Expression expr) { return this.>get(expr); } + @Override + public SortedSet getSortedSet(Expression expr) { + return this.>get(expr); + } + @Override public Object[] toArray() { List arr = new ArrayList(groupCollectors.size()); From 893acdd5cbb808a2c0c59540e4a5b443585dd5d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 17 Feb 2015 16:54:43 +0200 Subject: [PATCH 0744/1968] Fix mappings --- .../src/main/java/com/querydsl/sql/JDBCTypeMapping.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java b/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java index dbef319f22..6d48eb4d33 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/JDBCTypeMapping.java @@ -133,16 +133,14 @@ private static Class getNumericClass(int total, int decimal) { if (decimal <= 0) { if (total > 18 || total == 0) { return BigInteger.class; - } else if (total > 9 || total == 0) { + } else if (total > 9) { return Long.class; } else if (total > 4) { return Integer.class; } else if (total > 2) { return Short.class; - } else if (total > 0) { - return Byte.class; } else { - return Boolean.class; + return Byte.class; } } else { return BigDecimal.class; From 4f5411be21c91c97fc2cd8a189c1b86eba874e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 17 Feb 2015 17:08:30 +0200 Subject: [PATCH 0745/1968] Fix comments --- .../src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java index a89d068fd3..62763bd7be 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/JDBCTypeMappingTest.java @@ -66,8 +66,7 @@ public void NumericTypes() { // 10-18,0 -> Long // 5-9,0 -> Integer // 3-4,0 -> Short -// 2,0 -> Byte -// 0-1,0 -> Boolean +// 1-2,0 -> Byte // ?,? -> BigDecimal assertEquals(typeMapping.get(Types.NUMERIC, 20, 0), BigInteger.class); From 4faccd1eb78c5a628a8f6c2c8e9db7f8bfddae35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Feb 2015 20:02:15 +0200 Subject: [PATCH 0746/1968] Fix mapping --- querydsl-jpa/pom.xml | 2 +- .../main/java/com/querydsl/jpa/EclipseLinkTemplates.java | 2 +- .../src/test/java/com/querydsl/jpa/AbstractJPATest.java | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index cf126959b0..c4792ad3a1 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -25,7 +25,7 @@ 4.3.7.Final 4.3.1.Final - 2.5.1 + 2.6.0-RC1 javax.persistence.*;version="[1.1,3)",${osgi.import.package.root} diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java index f1a176ac14..a14924eae8 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java @@ -66,7 +66,7 @@ public EclipseLinkTemplates(char escape) { add(Ops.CHAR_AT, "substring({0},{1}+1,1)"); add(JPQLOps.CAST, "cast({0} {1s})"); - add(Ops.STRING_CAST, "cast({0} varchar(255))"); + add(Ops.STRING_CAST, "trim(cast({0} char(128)))"); add(Ops.NUMCAST, "cast({0} {1s})"); // datetime diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index c5df9b6f0b..0277c0727f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -343,6 +343,15 @@ public void Cast() { } } + @Test + public void Cast_ToString() { + for (Tuple tuple : query().from(cat).list(cat.breed, cat.breed.stringValue())) { + assertEquals( + tuple.get(cat.breed).toString(), + tuple.get(cat.breed.stringValue())); + } + } + @Test public void Collection_Predicates() { ListPath path = cat.kittens; From ca9f8ae175161efab7665d9953b1115622e7dc58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 17 Feb 2015 18:36:48 +0200 Subject: [PATCH 0747/1968] Add test --- .../src/test/java/com/querydsl/jpa/AbstractJPATest.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 0277c0727f..19f7cfb990 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -352,6 +352,15 @@ public void Cast_ToString() { } } + @Test + public void Cast_ToString_Append() { + for (Tuple tuple : query().from(cat).list(cat.breed, cat.breed.stringValue().append("test"))) { + assertEquals( + tuple.get(cat.breed).toString() + "test", + tuple.get(cat.breed.stringValue().append("test"))); + } + } + @Test public void Collection_Predicates() { ListPath path = cat.kittens; From 7155ec54c096d2c2206e1f5d38400846dd95514f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 17 Feb 2015 21:39:03 +0200 Subject: [PATCH 0748/1968] Add comments [ci skip] --- .../src/main/java/com/querydsl/sql/CUBRIDTemplates.java | 2 ++ querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java | 2 +- .../src/main/java/com/querydsl/sql/SQLServerTemplates.java | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java index 39085fac09..04108dd3b9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/CUBRIDTemplates.java @@ -78,6 +78,8 @@ public CUBRIDTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.TRUNC_MONTH, "trunc({0},'mm')"); add(Ops.DateTimeOps.TRUNC_WEEK, "trunc({0},'day')"); add(Ops.DateTimeOps.TRUNC_DAY, "trunc({0},'dd')"); + // trunc works only with date arguments + // timestamp(datepart, timepart) reconstructs a datetime add(Ops.DateTimeOps.TRUNC_HOUR, "timestamp(date({0}),concat(hour({0}),':00:00'))"); add(Ops.DateTimeOps.TRUNC_MINUTE, "timestamp(date({0}),concat(hour({0}),':',minute({0}),':00'))"); add(Ops.DateTimeOps.TRUNC_SECOND, "timestamp(date({0}),concat(hour({0}),':',minute({0}),':',second({0})))"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java index 032a93e716..5892d6c57c 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java @@ -105,7 +105,7 @@ public DerbyTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "{fn timestampdiff(SQL_TSI_MINUTE, {0}, {1})}"); add(Ops.DateTimeOps.DIFF_SECONDS, "{fn timestampdiff(SQL_TSI_SECOND, {0}, {1})}"); - // yyyy-MM-dd hh:mm:ss + // substrings 'yyyy-MM-dd hh:mm:ss' style date pattern and adds a static suffix add(Ops.DateTimeOps.TRUNC_YEAR, "timestamp(substr(cast({0} as char(30)),1,4)||'-01-01 00:00:00')"); add(Ops.DateTimeOps.TRUNC_MONTH, "timestamp(substr(cast({0} as char(30)),1,7)||'-01 00:00:00')"); // TODO weeks diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index ac64e8ddbf..80c04c9e1e 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -123,6 +123,7 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.DateTimeOps.DIFF_MINUTES, "datediff(minute,{0},{1})"); add(Ops.DateTimeOps.DIFF_SECONDS, "datediff(second,{0},{1})"); + // truncates timestamps by replacing suffix add(Ops.DateTimeOps.TRUNC_YEAR, "CONVERT(DATETIME, CONVERT(VARCHAR(4), {0}, 120) + '-01-01')"); add(Ops.DateTimeOps.TRUNC_MONTH, "CONVERT(DATETIME, CONVERT(VARCHAR(7), {0}, 120) + '-01')"); // TODO week From acd274195a0df347873a21ba5e40504d16071d09 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Wed, 18 Feb 2015 21:54:14 +0100 Subject: [PATCH 0749/1968] Sync surefire dependencies --- querydsl-root/pom.xml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 8457e94f61..53951aa41b 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -45,6 +45,7 @@ 2.2.2 1.3.2 1.6.1 + 2.18 @@ -53,7 +54,7 @@ ${osgi.import.package.root} - + junit @@ -67,7 +68,7 @@ - + org.easymock easymock @@ -109,7 +110,7 @@ ${project.checkout} ${project.githubpage} - + timowest @@ -159,7 +160,7 @@ LICENSE.txt - + @@ -181,7 +182,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.18.1 + ${surefire.version} org.apache.felix @@ -366,7 +367,7 @@ org.apache.maven.surefire surefire-junit47 - 2.16 + ${surefire.version} From a1b24f83bfb6cc15234ec780b485605c30ec1e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 16 Feb 2015 16:03:39 +0200 Subject: [PATCH 0750/1968] Access JodaTime types directly --- .../com/querydsl/sql/JavaTypeMapping.java | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java b/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java index 2b21ed74ed..711ad5088d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/JavaTypeMapping.java @@ -61,21 +61,11 @@ class JavaTypeMapping { registerDefault(new UtilDateType()); registerDefault(new UtilUUIDType(false)); - // initialize joda time converters only if joda time is available - try { - Class.forName("org.joda.time.DateTime"); - registerDefault((Type)Class.forName("com.querydsl.sql.types.DateTimeType").newInstance()); - registerDefault((Type)Class.forName("com.querydsl.sql.types.LocalDateTimeType").newInstance()); - registerDefault((Type)Class.forName("com.querydsl.sql.types.LocalDateType").newInstance()); - registerDefault((Type)Class.forName("com.querydsl.sql.types.LocalTimeType").newInstance()); - } catch (ClassNotFoundException e) { - // converters for joda.time are not loaded - } catch (InstantiationException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - + // Joda time types + registerDefault(new DateTimeType()); + registerDefault(new LocalDateTimeType()); + registerDefault(new LocalDateType()); + registerDefault(new LocalTimeType()); } private static void registerDefault(Type type) { From fc7d5753f6ec1f8182c29ac80dc9b89ebebead29 Mon Sep 17 00:00:00 2001 From: John Tims Date: Thu, 19 Feb 2015 14:48:33 -0500 Subject: [PATCH 0751/1968] Fix typo in ParameterizedExpression interface --- .../core/alias/PropertyAccessInvocationHandler.java | 6 +++--- .../com/querydsl/core/types/CollectionExpression.java | 2 +- .../main/java/com/querydsl/core/types/MapExpression.java | 2 +- ...trizedExpression.java => ParameterizedExpression.java} | 8 ++++---- .../main/java/com/querydsl/jpa/JPAMapAccessVisitor.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename querydsl-core/src/main/java/com/querydsl/core/types/{ParametrizedExpression.java => ParameterizedExpression.java} (82%) diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java b/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java index 14ee88b3e9..90e564bb63 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java @@ -32,7 +32,7 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ParametrizedExpression; +import com.querydsl.core.types.ParameterizedExpression; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.PathMetadataFactory; @@ -109,7 +109,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy rv = propToObj.get(propKey); } else { PathMetadata pm = createListAccessPath((Path) hostExpression, (Integer) args[0]); - Class elementType = ((ParametrizedExpression) hostExpression).getParameter(0); + Class elementType = ((ParameterizedExpression) hostExpression).getParameter(0); rv = newInstance(elementType, elementType, proxy, propKey, pm); } aliasFactory.setCurrent(propToExpr.get(propKey)); @@ -120,7 +120,7 @@ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy rv = propToObj.get(propKey); } else { PathMetadata pm = createMapAccessPath((Path)hostExpression, args[0]); - Class valueType = ((ParametrizedExpression) hostExpression).getParameter(1); + Class valueType = ((ParameterizedExpression) hostExpression).getParameter(1); rv = newInstance(valueType, valueType, proxy, propKey, pm); } aliasFactory.setCurrent(propToExpr.get(propKey)); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/CollectionExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/CollectionExpression.java index 7b995e4ec5..97fde1a3da 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/CollectionExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/CollectionExpression.java @@ -24,6 +24,6 @@ * @param element type * @see java.util.Collection */ -public interface CollectionExpression, E> extends ParametrizedExpression { +public interface CollectionExpression, E> extends ParameterizedExpression { } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/MapExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/MapExpression.java index 1380259990..ed651cadce 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/MapExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/MapExpression.java @@ -24,6 +24,6 @@ * @param value type * @see java.util.Map */ -public interface MapExpression extends ParametrizedExpression> { +public interface MapExpression extends ParameterizedExpression> { } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ParametrizedExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedExpression.java similarity index 82% rename from querydsl-core/src/main/java/com/querydsl/core/types/ParametrizedExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedExpression.java index d234e36724..bda5ff6de4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ParametrizedExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedExpression.java @@ -1,6 +1,6 @@ /* * Copyright 2011, Mysema Ltd - * + * * 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 @@ -14,13 +14,13 @@ package com.querydsl.core.types; /** - * ParametrizedExpression is a common interface for expressions with generic type parameters - * + * ParameterizedExpression is a common interface for expressions with generic type parameters + * * @author tiwe * * @param expression type */ -public interface ParametrizedExpression extends Expression { +public interface ParameterizedExpression extends Expression { /** * @param index diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java index a44dce05eb..79e61f6efa 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java @@ -30,7 +30,7 @@ public Expression visit(Path expr, @Nullable Void context) { if (replacement == null) { // join parent as path123 on key(path123) = ... Path parent = pathMetadata.getParent(); - ParametrizedExpression parExpr = (ParametrizedExpression) parent; + ParameterizedExpression parExpr = (ParameterizedExpression) parent; replacement = new PathImpl(parExpr.getParameter(1), ExpressionUtils.createRootVariable(parent)); metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, replacement)); From 854504a9ebe1fc0da0112b54595c43532a8adb45 Mon Sep 17 00:00:00 2001 From: John Tims Date: Thu, 19 Feb 2015 14:51:12 -0500 Subject: [PATCH 0752/1968] Fix tiny typo in javadoc --- .../src/main/java/com/querydsl/core/types/Operator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java index 2d68e71de1..39a085092d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Operator.java @@ -17,7 +17,7 @@ /** * Operator represents operator symbols. - *

Implementations should enums for automatic instance management.

+ *

Implementations should be enums for automatic instance management.

* * @author tiwe */ From 32a9c398d30045ec0249f51b5a136ab0c5cb2a7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Feb 2015 13:32:12 +0200 Subject: [PATCH 0753/1968] Transform containsKey and containsValue via JPAMapAccessVisitor --- .../core/types/ParameterizedPathImpl.java | 36 ++++++++++++++++++ .../core/types/path/CollectionPath.java | 8 +--- .../querydsl/core/types/path/ListPath.java | 9 +---- .../com/querydsl/core/types/path/MapPath.java | 10 +---- .../com/querydsl/core/types/path/SetPath.java | 8 +--- .../java/com/querydsl/jpa/HQLTemplates.java | 18 --------- .../com/querydsl/jpa/JPAMapAccessVisitor.java | 24 +++++++++++- .../com/querydsl/jpa/AbstractJPATest.java | 6 --- .../java/com/querydsl/jpa/CollectionTest.java | 25 ++---------- .../java/com/querydsl/jpa/FeaturesTest.java | 2 +- .../com/querydsl/jpa/JPQLSerializerTest.java | 2 +- .../test/java/com/querydsl/jpa/MapTest.java | 38 ------------------- 12 files changed, 73 insertions(+), 113 deletions(-) create mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedPathImpl.java delete mode 100644 querydsl-jpa/src/test/java/com/querydsl/jpa/MapTest.java diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedPathImpl.java b/querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedPathImpl.java new file mode 100644 index 0000000000..63087c6092 --- /dev/null +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ParameterizedPathImpl.java @@ -0,0 +1,36 @@ +/* + * Copyright 2015, Timo Westkämper + * + * 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 com.querydsl.core.types; + +/** + * + * @param + */ +public class ParameterizedPathImpl extends PathImpl implements ParameterizedExpression { + + private static final long serialVersionUID = -498707460985111265L; + + private final Class[] parameterTypes; + + public ParameterizedPathImpl(Class type, PathMetadata metadata, Class... parameterTypes) { + super(type, metadata); + this.parameterTypes = parameterTypes; + } + + @Override + public Class getParameter(int index) { + return parameterTypes[index]; + } + +} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java index 296e7b7394..652f50eead 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java @@ -18,11 +18,7 @@ import javax.annotation.Nullable; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.SimpleExpression; /** @@ -60,7 +56,7 @@ public CollectionPath(Class type, Class queryType, PathMetadata me @SuppressWarnings("unchecked") public CollectionPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { - super(new PathImpl>((Class)Collection.class, metadata), inits); + super(new ParameterizedPathImpl>((Class)Collection.class, metadata, type), inits); this.elementType = (Class)type; this.queryType = queryType; this.pathMixin = (PathImpl>)mixin; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java index e8215a3032..645744e658 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java @@ -20,12 +20,7 @@ import javax.annotation.Nullable; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.ListExpression; import com.querydsl.core.types.expr.SimpleExpression; @@ -66,7 +61,7 @@ public ListPath(Class elementType, Class queryType, PathMetadata m @SuppressWarnings("unchecked") public ListPath(Class elementType, Class queryType, PathMetadata metadata, PathInits inits) { - super(new PathImpl>((Class)List.class, metadata), inits); + super(new ParameterizedPathImpl>((Class)List.class, metadata, elementType), inits); this.elementType = (Class)elementType; this.queryType = queryType; this.pathMixin = (PathImpl>)mixin; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java index f0475cdff8..53b859881a 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java @@ -20,13 +20,7 @@ import javax.annotation.Nullable; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionException; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.MapExpressionBase; import com.querydsl.core.types.expr.SimpleExpression; @@ -63,7 +57,7 @@ public MapPath(Class keyType, Class valueType, Class qu @SuppressWarnings("unchecked") public MapPath(Class keyType, Class valueType, Class queryType, PathMetadata metadata) { - super(new PathImpl>((Class)Map.class, metadata)); + super(new ParameterizedPathImpl>((Class)Map.class, metadata, keyType, valueType)); this.keyType = (Class) keyType; this.valueType = (Class) valueType; this.queryType = queryType; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java index 888ba5404c..e7f9d76e13 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java @@ -18,11 +18,7 @@ import javax.annotation.Nullable; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.SimpleExpression; /** @@ -60,7 +56,7 @@ public SetPath(Class type, Class queryType, PathMetadata metadata) @SuppressWarnings("unchecked") public SetPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { - super(new PathImpl>((Class)Set.class, metadata), inits); + super(new ParameterizedPathImpl>((Class)Set.class, metadata, type), inits); this.elementType = (Class)type; this.queryType = queryType; this.pathMixin = (PathImpl>)mixin; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java index 32ba444c8a..08f7e4b429 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java @@ -23,7 +23,6 @@ import com.google.common.collect.ImmutableMap; import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.PathType; /** * HQLTemplates extends JPQLTemplates with Hibernate specific extensions @@ -75,23 +74,6 @@ public HQLTemplates(char escape) { builder.put(BigDecimal.class, "big_decimal"); typeNames = builder.build(); - // TODO : remove this when Hibernate supports member of properly - add(JPQLOps.MEMBER_OF, "{0} in elements({1})"); - add(JPQLOps.NOT_MEMBER_OF, "{0} not in elements({1})"); - - // path types - for (PathType type : new PathType[] { - PathType.LISTVALUE, - PathType.MAPVALUE, - PathType.MAPVALUE_CONSTANT }) { - add(type, "{0}[{1}]"); - } - add(PathType.LISTVALUE_CONSTANT, "{0}[{1s}]"); - add(PathType.COLLECTION_ANY, "any elements({0})"); - - add(Ops.CONTAINS_KEY, "{1} in indices({0})"); - add(Ops.CONTAINS_VALUE, "{1} in elements({0})"); - // add Hibernate Spatial mappings, if on classpath try { Class cl = Class.forName("com.querydsl.spatial.hibernate.HibernateSpatialSupport"); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java index 79e61f6efa..4d92a9ec20 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java @@ -21,6 +21,28 @@ public JPAMapAccessVisitor(QueryMetadata metadata) { this.metadata = metadata; } + @Override + public Expression visit(Operation expr, @Nullable Void context) { + if (expr.getOperator() == Ops.CONTAINS_KEY) { + ParameterizedExpression map = (ParameterizedExpression) expr.getArg(0); + Expression key = expr.getArg(1); + Path replacement = new PathImpl(map.getParameter(1), + ExpressionUtils.createRootVariable((Path)map)); + metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(map, replacement)); + metadata.addJoinCondition(ExpressionUtils.eq( + Expressions.operation(map.getParameter(0), JPQLOps.KEY, replacement), + key)); + return ExpressionUtils.isNotNull(replacement); + } else if (expr.getOperator() == Ops.CONTAINS_VALUE) { + ParameterizedExpression map = (ParameterizedExpression) expr.getArg(0); + Expression value = expr.getArg(1); + return Expressions.predicate(JPQLOps.MEMBER_OF, value, map); + } else { + return super.visit(expr, context); + } + } + + @Override public Expression visit(Path expr, @Nullable Void context) { expr = (Path) super.visit(expr, null); PathMetadata pathMetadata = expr.getMetadata(); @@ -33,7 +55,7 @@ public Expression visit(Path expr, @Nullable Void context) { ParameterizedExpression parExpr = (ParameterizedExpression) parent; replacement = new PathImpl(parExpr.getParameter(1), ExpressionUtils.createRootVariable(parent)); - metadata.addJoin(JoinType.JOIN, ExpressionUtils.as(parent, replacement)); + metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(parent, replacement)); metadata.addJoinCondition(ExpressionUtils.eq( Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, replacement), ExpressionUtils.toExpression(pathMetadata.getElement()))); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 19f7cfb990..52afbbf4d7 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -907,42 +907,36 @@ public void Map_Get2() { } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsKey() { QShow show = QShow.show; assertEquals(1l, query().from(show).where(show.acts.containsKey("a")).count()); } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsKey2() { QShow show = QShow.show; assertEquals(1l, query().from(show).where(show.acts.containsKey("b")).count()); } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsKey3() { QShow show = QShow.show; assertEquals(0l, query().from(show).where(show.acts.containsKey("c")).count()); } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsValue() { QShow show = QShow.show; assertEquals(1l, query().from(show).where(show.acts.containsValue("A")).count()); } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsValue2() { QShow show = QShow.show; assertEquals(1l, query().from(show).where(show.acts.containsValue("B")).count()); } @Test - @NoEclipseLink @NoOpenJPA @NoBatooJPA public void Map_ContainsValue3() { QShow show = QShow.show; assertEquals(0l, query().from(show).where(show.acts.containsValue("C")).count()); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/CollectionTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/CollectionTest.java index 64ee710bfd..ab865e4d02 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/CollectionTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/CollectionTest.java @@ -21,39 +21,22 @@ public class CollectionTest extends AbstractQueryTest{ @Test public void Constant_InElements_Set() { - assertToString("?1 in elements(cat.kittensSet)", cat.kittensSet.contains(new Cat())); + assertToString("?1 member of cat.kittensSet", cat.kittensSet.contains(new Cat())); } @Test public void Constant_InElements_List() { - assertToString("?1 in elements(cat.kittens)", cat.kittens.contains(new Cat())); + assertToString("?1 member of cat.kittens", cat.kittens.contains(new Cat())); } @Test public void Path_InElements_List() { - assertToString("cat in elements(cat1.kittens)", cat.in(cat1.kittens)); + assertToString("cat member of cat1.kittens", cat.in(cat1.kittens)); } @Test public void Path_InElements_Set() { - assertToString("cat in elements(cat1.kittensSet)", cat.in(cat1.kittensSet)); + assertToString("cat member of cat1.kittensSet", cat.in(cat1.kittensSet)); } - - @Test - public void CollectionOperations() { - // HQL functions that take collection-valued path expressions: size(), - // minelement(), maxelement(), minindex(), maxindex(), along with the - // special elements() and indices functions which may be quantified - // using some, all, exists, any, in. - cat.kittens.size(); -// minelement(cat.kittens); -// maxelement(cat.kittens); -// minindex(cat.kittens); -// maxindex(cat.kittens); - assertToString("cat.kittens[0]", cat.kittens(0)); - assertToString("cat.kittens[0]", cat.kittens.get(0)); - - // some, all, exists, any, in. - } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/FeaturesTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/FeaturesTest.java index 5faeca5c82..11942dbd00 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/FeaturesTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/FeaturesTest.java @@ -129,7 +129,7 @@ public void ToString() { // toString("cat.bodyWeight as bw", cat.bodyWeight.as("bw")); - assertToString("kitten in elements(cat.kittens)", kitten.in(cat.kittens)); + assertToString("kitten member of cat.kittens", kitten.in(cat.kittens)); // toString("distinct cat.bodyWeight", distinct(cat.bodyWeight)); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java index ce25d68129..71efdf2e49 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java @@ -154,7 +154,7 @@ public void Delete_With_SubQuery() { serializer.serializeForDelete(md); assertEquals("delete from Cat kitten\n" + "where kitten.id = ?1 and exists (select 1\n" + - "from Cat cat\nwhere cat.id = ?2 and kitten in elements(cat.kittens))", serializer.toString()); + "from Cat cat\nwhere cat.id = ?2 and kitten member of cat.kittens)", serializer.toString()); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/MapTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/MapTest.java deleted file mode 100644 index bce1c6dea8..0000000000 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/MapTest.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.jpa; - -import org.junit.Test; - -import com.querydsl.jpa.domain.QShow; - -public class MapTest extends AbstractQueryTest { - - private QShow show = QShow.show; - - @Test - public void Contains() { - assertToString("show.acts[?1] = ?2", show.acts.contains("x", "y")); - } - - @Test - public void Contains_Key() { - assertToString("?1 in indices(show.acts)", show.acts.containsKey("x")); - } - - @Test - public void Contains_Value() { - assertToString("?1 in elements(show.acts)", show.acts.containsValue("y")); - } -} From b7e4e212bf423bc4eedd446616a293596bde848d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Feb 2015 23:38:31 +0200 Subject: [PATCH 0754/1968] Add Override annotation --- .../src/main/java/com/querydsl/codegen/BeanSerializer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/BeanSerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/BeanSerializer.java index dc93c451c4..0ce27400c2 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/BeanSerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/BeanSerializer.java @@ -13,11 +13,12 @@ */ package com.querydsl.codegen; -import javax.annotation.Generated; import java.io.IOException; import java.lang.annotation.Annotation; import java.util.*; +import javax.annotation.Generated; + import com.google.common.base.Function; import com.google.common.collect.Lists; import com.mysema.codegen.CodeWriter; @@ -196,6 +197,7 @@ protected void addFullConstructor(EntityType model, CodeWriter writer) throws IO } protected void addToString(EntityType model, CodeWriter writer) throws IOException { + writer.line("@Override"); writer.beginPublicMethod(Types.STRING, "toString"); StringBuilder builder = new StringBuilder(); for (Property property : model.getProperties()) { From bdae3b15ea504a8eea96114a57d1d810118d3211 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Sat, 28 Feb 2015 23:00:03 +0100 Subject: [PATCH 0755/1968] Add verification test for Override annotation --- .../test/java/com/querydsl/codegen/BeanSerializerTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/querydsl-codegen/src/test/java/com/querydsl/codegen/BeanSerializerTest.java b/querydsl-codegen/src/test/java/com/querydsl/codegen/BeanSerializerTest.java index c56d8b51d8..66babc29de 100644 --- a/querydsl-codegen/src/test/java/com/querydsl/codegen/BeanSerializerTest.java +++ b/querydsl-codegen/src/test/java/com/querydsl/codegen/BeanSerializerTest.java @@ -121,7 +121,9 @@ public void ToString() throws IOException{ BeanSerializer serializer = new BeanSerializer(); serializer.setAddToString(true); serializer.serialize(type, SimpleSerializerConfig.DEFAULT, new JavaWriter(writer)); - //System.out.println(writer.toString()); + assertTrue(String.valueOf(writer).contains( + " @Override\n" + + " public String toString()")); } @Test From f1348fb72acaa5f257ee7d4bc0eea9a99bded9cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 4 Mar 2015 22:16:50 +0200 Subject: [PATCH 0756/1968] Fix typo --- .../src/main/java/com/querydsl/core/group/GroupBy.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java index c0693f09cb..fe2e8218d9 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/GroupBy.java @@ -103,7 +103,7 @@ public static AbstractGroupExpression> list(GroupExpression Date: Wed, 4 Mar 2015 19:02:07 -0500 Subject: [PATCH 0757/1968] Fix typo in test method's name --- querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java index 6d82d8e157..17e0c33f8f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java @@ -190,7 +190,7 @@ public void Update_with_SubQuery_notExists() { } @Test - public void Update_With_TempateExpression_In_Batch() { + public void Update_With_TemplateExpression_In_Batch() { update(survey) .set(survey.id, 3) .set(survey.name, Expressions.stringTemplate("'Hello'")) From e1a808f87079d1de9611172cd653e9b42bf76cc3 Mon Sep 17 00:00:00 2001 From: John Tims Date: Wed, 4 Mar 2015 23:40:43 -0500 Subject: [PATCH 0758/1968] Rename Postgres references to PostgreSQL. Closes #1218 --- .../querydsl/core/MatchingFiltersFactory.java | 8 +++--- .../test/java/com/querydsl/core/Target.java | 4 +-- .../com/querydsl/jpa/AbstractSQLTest.java | 4 +-- .../src/test/java/com/querydsl/jpa/Mode.java | 4 +-- .../java/com/querydsl/jpa/ParsingTest.java | 2 +- ...va => PostgreSQLEclipseLinkSuiteTest.java} | 6 ++-- ...uiteTest.java => PostgreSQLSuiteTest.java} | 6 ++-- .../test/resources/META-INF/persistence.xml | 6 ++-- ...tgres.properties => postgresql.properties} | 0 .../querydsl/sql/codegen/SpatialSupport.java | 2 +- ...resTest.java => ExportPostgreSQLTest.java} | 4 +-- .../sql/spatial/PostGISTemplates.java | 4 +-- .../com/querydsl/sql/spatial/SpatialBase.java | 11 +++----- .../suites/PostgreSQLLiteralsSuiteTest.java | 2 +- .../spatial/suites/PostgreSQLSuiteTest.java | 2 +- .../sql/spatial/suites/SpatialTest.java | 2 +- ...emplates.java => PostgreSQLTemplates.java} | 18 ++++++------ .../querydsl/sql/SQLTemplatesRegistry.java | 4 +-- .../PostgreSQLQuery.java} | 28 +++++++++---------- .../PostgreSQLQueryFactory.java} | 23 +++++++-------- .../com/querydsl/sql/AbstractBaseTest.java | 2 +- .../com/querydsl/sql/BeanPopulationBase.java | 4 +-- .../java/com/querydsl/sql/Connections.java | 18 ++++++------ .../com/querydsl/sql/DateArithmeticTest.java | 2 +- .../java/com/querydsl/sql/InsertBase.java | 2 +- .../test/java/com/querydsl/sql/MergeBase.java | 2 +- .../java/com/querydsl/sql/MetadataTest.java | 2 +- .../java/com/querydsl/sql/PaginationTest.java | 2 +- ...Test.java => PostgreSQLTemplatesTest.java} | 4 +-- .../com/querydsl/sql/SQLSerializerTest.java | 4 +-- .../sql/SQLTemplatesRegistryDump.java | 2 +- .../com/querydsl/sql/SQLTemplatesTest.java | 2 +- .../java/com/querydsl/sql/SelectBase.java | 22 +++++++-------- .../java/com/querydsl/sql/SubqueriesBase.java | 2 +- .../java/com/querydsl/sql/TemplatesTest.java | 2 +- .../test/java/com/querydsl/sql/TypesBase.java | 2 +- .../PostgreSQLQueryFactoryTest.java} | 8 +++--- .../PostgreSQLQueryTest.java} | 12 ++++---- .../suites/PostgreSQLLiteralsSuiteTest.java | 6 ++-- .../sql/suites/PostgreSQLSuiteTest.java | 6 ++-- 40 files changed, 120 insertions(+), 126 deletions(-) rename querydsl-jpa/src/test/java/com/querydsl/jpa/suites/{PostgresEclipseLinkSuiteTest.java => PostgreSQLEclipseLinkSuiteTest.java} (81%) rename querydsl-jpa/src/test/java/com/querydsl/jpa/suites/{PostgresSuiteTest.java => PostgreSQLSuiteTest.java} (87%) rename querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/{postgres.properties => postgresql.properties} (100%) rename querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/{ExportPostgresTest.java => ExportPostgreSQLTest.java} (90%) rename querydsl-sql/src/main/java/com/querydsl/sql/{PostgresTemplates.java => PostgreSQLTemplates.java} (92%) rename querydsl-sql/src/main/java/com/querydsl/sql/{postgres/PostgresQuery.java => postgresql/PostgreSQLQuery.java} (67%) rename querydsl-sql/src/main/java/com/querydsl/sql/{postgres/PostgresQueryFactory.java => postgresql/PostgreSQLQueryFactory.java} (53%) rename querydsl-sql/src/test/java/com/querydsl/sql/{PostgresTemplatesTest.java => PostgreSQLTemplatesTest.java} (94%) rename querydsl-sql/src/test/java/com/querydsl/sql/{postgres/PostgresQueryFactoryTest.java => postgresql/PostgreSQLQueryFactoryTest.java} (90%) rename querydsl-sql/src/test/java/com/querydsl/sql/{postgres/PostgresQueryTest.java => postgresql/PostgreSQLQueryTest.java} (91%) diff --git a/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java b/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java index 812e0699cb..c92e3b2e60 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java +++ b/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java @@ -77,13 +77,13 @@ public Collection date(DateExpression expr, if (!target.equals(Target.DERBY) && !module.equals(Module.JDO) && !target.equals(Target.ORACLE) && !target.equals(Target.FIREBIRD) - && (!target.equals(Target.POSTGRES) || !module.equals(Module.JPA))) { + && (!target.equals(Target.POSTGRESQL) || !module.equals(Module.JPA))) { rv.add(expr.dayOfWeek().eq(other.dayOfWeek ())); rv.add(expr.dayOfYear().eq(other.dayOfYear())); if (!target.equals(Target.SQLSERVER) && !target.equals(Target.MYSQL) && !target.equals(Target.CUBRID) - && !target.equals(Target.POSTGRES) && !target.equals(Target.HSQLDB)) { + && !target.equals(Target.POSTGRESQL) && !target.equals(Target.HSQLDB)) { rv.add(expr.week().eq(other.week())); } } @@ -113,13 +113,13 @@ public Collection dateTime(DateTimeExpression expr, rv.add(expr.dayOfMonth().eq(other.dayOfMonth())); if (!target.equals(Target.DERBY) && !module.equals(Module.JDO) && !target.equals(Target.ORACLE) - && (!target.equals(Target.POSTGRES) || !module.equals(Module.JPA))) { + && (!target.equals(Target.POSTGRESQL) || !module.equals(Module.JPA))) { rv.add(expr.dayOfWeek().eq(other.dayOfWeek ())); rv.add(expr.dayOfYear().eq(other.dayOfYear())); if (!target.equals(Target.SQLSERVER) && !target.equals(Target.MYSQL) && !target.equals(Target.CUBRID) - && !target.equals(Target.POSTGRES) && !target.equals(Target.HSQLDB)) { + && !target.equals(Target.POSTGRESQL) && !target.equals(Target.HSQLDB)) { rv.add(expr.week().eq(other.week())); } } diff --git a/querydsl-core/src/test/java/com/querydsl/core/Target.java b/querydsl-core/src/test/java/com/querydsl/core/Target.java index a1e0f20992..f24145336d 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/Target.java +++ b/querydsl-core/src/test/java/com/querydsl/core/Target.java @@ -55,9 +55,9 @@ public enum Target{ */ ORACLE, /** - * Postgres + * PostgreSQL */ - POSTGRES, + POSTGRESQL, /** * Microsoft SQL Server */ diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java index 8a2bbe29bb..78fc56b57a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java @@ -288,7 +288,7 @@ public void Union_All() { } @Test - @ExcludeIn({Target.DERBY, Target.POSTGRES}) + @ExcludeIn({Target.DERBY, Target.POSTGRESQL}) public void Union2() { List rows = query().union( new SQLSubQuery().from(cat).where(cat.name.eq("Beck")).distinct().list(cat.name, cat.id), @@ -320,7 +320,7 @@ public void Union3() { } @Test - @ExcludeIn({Target.DERBY, Target.POSTGRES}) + @ExcludeIn({Target.DERBY, Target.POSTGRESQL}) public void Union4() { query().union(cat, new SQLSubQuery().from(cat).where(cat.name.eq("Beck")).distinct().list(cat.name, cat.id), diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/Mode.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/Mode.java index cf388146b2..165d979152 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/Mode.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/Mode.java @@ -7,7 +7,7 @@ import com.querydsl.sql.HSQLDBTemplates; import com.querydsl.sql.MySQLTemplates; import com.querydsl.sql.OracleTemplates; -import com.querydsl.sql.PostgresTemplates; +import com.querydsl.sql.PostgreSQLTemplates; import com.querydsl.sql.SQLServerTemplates; import com.querydsl.sql.SQLTemplates; import com.querydsl.sql.SQLiteTemplates; @@ -32,7 +32,7 @@ public static SQLTemplates getSQLTemplates() { case SQLSERVER: return new SQLServerTemplates(); case MYSQL: return new MySQLTemplates(); case ORACLE:return new OracleTemplates(); - case POSTGRES: return new PostgresTemplates(); + case POSTGRESQL: return new PostgreSQLTemplates(); case SQLITE:return new SQLiteTemplates(); case TERADATA: return new TeradataTemplates(); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java index bd06fd8102..7a01d1f38f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java @@ -399,7 +399,7 @@ public void DocoExamples98_10() throws Exception { @Test @NoEclipseLink - @ExcludeIn({DERBY, HSQLDB, H2, MYSQL, ORACLE, POSTGRES}) + @ExcludeIn({DERBY, HSQLDB, H2, MYSQL, ORACLE, POSTGRESQL}) @Ignore public void DocoExamples98_11() throws Exception { query().from(item, ord).select(item).where( diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgresEclipseLinkSuiteTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgreSQLEclipseLinkSuiteTest.java similarity index 81% rename from querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgresEclipseLinkSuiteTest.java rename to querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgreSQLEclipseLinkSuiteTest.java index 9c455a7d7e..5a44b7854f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgresEclipseLinkSuiteTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgreSQLEclipseLinkSuiteTest.java @@ -12,7 +12,7 @@ import com.querydsl.core.testutil.ExternalDB; @Category(ExternalDB.class) -public class PostgresEclipseLinkSuiteTest extends AbstractJPASuite { +public class PostgreSQLEclipseLinkSuiteTest extends AbstractJPASuite { public static class JPA extends JPABase {} public static class JPASQL extends JPASQLBase {} @@ -21,8 +21,8 @@ public static class Serialization extends SerializationBase {} @BeforeClass public static void setUp() throws Exception { - Mode.mode.set("postgres-eclipselink"); - Mode.target.set(Target.POSTGRES); + Mode.mode.set("postgresql-eclipselink"); + Mode.target.set(Target.POSTGRESQL); } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgresSuiteTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgreSQLSuiteTest.java similarity index 87% rename from querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgresSuiteTest.java rename to querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgreSQLSuiteTest.java index ebc909580f..d0343493bf 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgresSuiteTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/suites/PostgreSQLSuiteTest.java @@ -14,7 +14,7 @@ import com.querydsl.core.testutil.ExternalDB; @Category(ExternalDB.class) -public class PostgresSuiteTest extends AbstractSuite { +public class PostgreSQLSuiteTest extends AbstractSuite { public static class JPA extends JPABase {} public static class JPASQL extends JPASQLBase {} @@ -25,8 +25,8 @@ public static class HibernateSQL extends HibernateSQLBase {} @BeforeClass public static void setUp() throws Exception { - Mode.mode.set("postgres"); - Mode.target.set(Target.POSTGRES); + Mode.mode.set("postgresql"); + Mode.target.set(Target.POSTGRESQL); } } diff --git a/querydsl-jpa/src/test/resources/META-INF/persistence.xml b/querydsl-jpa/src/test/resources/META-INF/persistence.xml index ac0e520fae..e83cbcdbd9 100644 --- a/querydsl-jpa/src/test/resources/META-INF/persistence.xml +++ b/querydsl-jpa/src/test/resources/META-INF/persistence.xml @@ -228,9 +228,9 @@ - + - + org.hibernate.ejb.HibernatePersistence @@ -245,7 +245,7 @@ - + org.eclipse.persistence.jpa.PersistenceProvider false diff --git a/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/postgres.properties b/querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/postgresql.properties similarity index 100% rename from querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/postgres.properties rename to querydsl-jpa/src/test/resources/com/querydsl/jpa/testutil/postgresql.properties diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/SpatialSupport.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/SpatialSupport.java index 3117ae123f..676810a4da 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/SpatialSupport.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/SpatialSupport.java @@ -55,7 +55,7 @@ public final class SpatialSupport { private static void registerTypes(Configuration configuration) { - // mysql & postgres + // mysql & postgresql configuration.registerType("geometry", Geometry.class); configuration.registerType("point", Point.class); configuration.registerType("linestring", LineString.class); diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportPostgresTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportPostgreSQLTest.java similarity index 90% rename from querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportPostgresTest.java rename to querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportPostgreSQLTest.java index 6428927acc..f2f4c43137 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportPostgresTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportPostgreSQLTest.java @@ -20,11 +20,11 @@ import com.querydsl.sql.Connections; @Category(ExternalDB.class) -public class ExportPostgresTest extends ExportBaseTest{ +public class ExportPostgreSQLTest extends ExportBaseTest{ @BeforeClass public static void setUpClass() throws Exception { - Connections.initPostgres(); + Connections.initPostgreSQL(); } } diff --git a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java index aa53686585..4457b6cef8 100644 --- a/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java +++ b/querydsl-sql-spatial/src/main/java/com/querydsl/sql/spatial/PostGISTemplates.java @@ -14,7 +14,7 @@ package com.querydsl.sql.spatial; import com.querydsl.spatial.SpatialOps; -import com.querydsl.sql.PostgresTemplates; +import com.querydsl.sql.PostgreSQLTemplates; import com.querydsl.sql.SQLTemplates; /** @@ -23,7 +23,7 @@ * @author tiwe * */ -public class PostGISTemplates extends PostgresTemplates { +public class PostGISTemplates extends PostgreSQLTemplates { @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional public static final PostGISTemplates DEFAULT = new PostGISTemplates(); diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java index 8763a5d25d..2f934f7406 100644 --- a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/SpatialBase.java @@ -10,9 +10,6 @@ import com.querydsl.spatial.PointExpression; import com.querydsl.spatial.path.*; import com.querydsl.sql.AbstractBaseTest; -import com.querydsl.sql.spatial.QShapes; -import com.querydsl.sql.spatial.QSpatialRefSys; -import com.querydsl.sql.spatial.Shapes; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; import com.querydsl.core.testutil.ExcludeIn; @@ -59,7 +56,7 @@ private TestQuery withMultiPolygons() { } @Test - @IncludeIn(POSTGRES) + @IncludeIn(POSTGRESQL) public void SpatialRefSys() { QSpatialRefSys spatialRefSys = QSpatialRefSys.spatialRefSys; query().from(spatialRefSys).list(spatialRefSys); @@ -203,7 +200,7 @@ public void Point_Methods() { add(expressions, point.m(), MYSQL, TERADATA, H2); add(expressions, point.srid()); // TODO add emulations - add(expressions, point.transform(26986), MYSQL, POSTGRES, SQLSERVER, TERADATA, H2); + add(expressions, point.transform(26986), MYSQL, POSTGRESQL, SQLSERVER, TERADATA, H2); // point specific add(expressions, point.x(), H2); add(expressions, point.y(), H2); @@ -228,7 +225,7 @@ private List> createExpressions(PointExpression point1, Exp add(expressions, point1.disjoint(point2)); add(expressions, point1.distance(point2), MYSQL); add(expressions, point1.distanceSphere(point2), H2, MYSQL, SQLSERVER); - add(expressions, point1.distanceSpheroid(point2), H2, MYSQL, POSTGRES, SQLSERVER); + add(expressions, point1.distanceSpheroid(point2), H2, MYSQL, POSTGRESQL, SQLSERVER); add(expressions, point1.eq(point2)); add(expressions, point1.intersection(point2), MYSQL); add(expressions, point1.intersects(point2)); @@ -421,7 +418,7 @@ public void MultiPolygon_Methods() { } @Test - @IncludeIn(Target.POSTGRES) + @IncludeIn(Target.POSTGRESQL) public void Extensions() { List> expressions = Lists.newArrayList(); GeometryExpression expr1 = shapes.geometry; diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java index d83b92e555..7f4ef1375e 100644 --- a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLLiteralsSuiteTest.java @@ -16,7 +16,7 @@ public static class Spatial extends SpatialBase {} @BeforeClass public static void setUp() throws Exception { - Connections.initPostgres(); + Connections.initPostgreSQL(); Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java index b3bc6b5fa5..a3d9a8f7d0 100644 --- a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/PostgreSQLSuiteTest.java @@ -16,7 +16,7 @@ public static class Spatial extends SpatialBase {} @BeforeClass public static void setUp() throws Exception { - Connections.initPostgres(); + Connections.initPostgreSQL(); Connections.initConfiguration(PostGISTemplates.builder().quote().newLineToSingleSpace().build()); } diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java index aff7063729..a43c58c941 100644 --- a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/suites/SpatialTest.java @@ -14,7 +14,7 @@ public class SpatialTest { public void setUp() throws ClassNotFoundException, SQLException { Connections.initH2(); // Connections.initMySQL(); -// Connections.initPostgres(); +// Connections.initPostgreSQL(); // Connections.initTeradata(); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/PostgresTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java similarity index 92% rename from querydsl-sql/src/main/java/com/querydsl/sql/PostgresTemplates.java rename to querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java index 0327f0d815..64715630af 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/PostgresTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java @@ -20,16 +20,16 @@ import com.querydsl.core.types.Ops; /** - * PostgresTemplates is an SQL dialect for PostgreSQL + * PostgreSQLTemplates is an SQL dialect for PostgreSQL * *

tested with PostgreSQL 8.4 and 9.1

* * @author tiwe * */ -public class PostgresTemplates extends SQLTemplates { +public class PostgreSQLTemplates extends SQLTemplates { - protected static final Set POSTGRES_RESERVED_WORDS + protected static final Set POSTGRESQL_RESERVED_WORDS = ImmutableSet.of( "ALL", "ANALYSE", "ANALYZE", "AND", "ANY", "ARRAY", "AS", "ASC", "ASYMMETRIC", "AUTHORIZATION", "BINARY", "BOTH", @@ -51,27 +51,27 @@ public class PostgresTemplates extends SQLTemplates { "VARIADIC", "VERBOSE", "WHEN", "WHERE", "WINDOW", "WITH"); @SuppressWarnings("FieldNameHidesFieldInSuperclass") //Intentional - public static final PostgresTemplates DEFAULT = new PostgresTemplates(); + public static final PostgreSQLTemplates DEFAULT = new PostgreSQLTemplates(); public static Builder builder() { return new Builder() { @Override protected SQLTemplates build(char escape, boolean quote) { - return new PostgresTemplates(escape, quote); + return new PostgreSQLTemplates(escape, quote); } }; } - public PostgresTemplates() { + public PostgreSQLTemplates() { this('\\', false); } - public PostgresTemplates(boolean quote) { + public PostgreSQLTemplates(boolean quote) { this('\\', quote); } - public PostgresTemplates(char escape, boolean quote) { - super(POSTGRES_RESERVED_WORDS, "\"", escape, quote); + public PostgreSQLTemplates(char escape, boolean quote) { + super(POSTGRESQL_RESERVED_WORDS, "\"", escape, quote); setDummyTable(null); setCountDistinctMultipleColumns(true); setCountViaAnalytics(true); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java index 794e56dfc2..72451b8fff 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplatesRegistry.java @@ -17,7 +17,7 @@ public class SQLTemplatesRegistry { private final SQLTemplates hsqldb = new HSQLDBTemplates(); private final SQLTemplates mysql = new MySQLTemplates(); private final SQLTemplates oracle = new OracleTemplates(); - private final SQLTemplates postgres = new PostgresTemplates(); + private final SQLTemplates postgresql = new PostgreSQLTemplates(); private final SQLTemplates sqlite = new SQLiteTemplates(); private final SQLTemplates teradata = new TeradataTemplates(); @@ -35,7 +35,7 @@ public SQLTemplates getTemplates(DatabaseMetaData md) throws SQLException { if (name.equals("hsql")) return hsqldb; if (name.equals("mysql")) return mysql; if (name.equals("oracle")) return oracle; - if (name.equals("postgresql")) return postgres; + if (name.equals("postgresql")) return postgresql; if (name.equals("sqlite")) return sqlite; if (name.startsWith("teradata")) return teradata; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/postgres/PostgresQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/postgresql/PostgreSQLQuery.java similarity index 67% rename from querydsl-sql/src/main/java/com/querydsl/sql/postgres/PostgresQuery.java rename to querydsl-sql/src/main/java/com/querydsl/sql/postgresql/PostgreSQLQuery.java index f1f0931806..412a77aeaa 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/postgres/PostgresQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/postgresql/PostgreSQLQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.sql.postgres; +package com.querydsl.sql.postgresql; import java.sql.Connection; @@ -20,48 +20,48 @@ import com.querydsl.core.QueryMetadata; import com.querydsl.sql.AbstractSQLQuery; import com.querydsl.sql.Configuration; -import com.querydsl.sql.PostgresTemplates; +import com.querydsl.sql.PostgreSQLTemplates; import com.querydsl.sql.RelationalPath; import com.querydsl.sql.SQLOps; import com.querydsl.sql.SQLQuery; import com.querydsl.sql.SQLTemplates; /** - * PostgresQuery provides Postgres related extensions to SQLQuery + * PostgreSQLQuery provides PostgreSQL related extensions to SQLQuery * * @author tiwe * @see SQLQuery * */ -public class PostgresQuery extends AbstractSQLQuery { +public class PostgreSQLQuery extends AbstractSQLQuery { - public PostgresQuery(Connection conn) { - this(conn, new Configuration(new PostgresTemplates()), new DefaultQueryMetadata()); + public PostgreSQLQuery(Connection conn) { + this(conn, new Configuration(new PostgreSQLTemplates()), new DefaultQueryMetadata()); } - public PostgresQuery(Connection conn, SQLTemplates templates) { + public PostgreSQLQuery(Connection conn, SQLTemplates templates) { this(conn, new Configuration(templates), new DefaultQueryMetadata()); } - public PostgresQuery(Connection conn, Configuration configuration) { + public PostgreSQLQuery(Connection conn, Configuration configuration) { this(conn, configuration, new DefaultQueryMetadata()); } - public PostgresQuery(Connection conn, Configuration configuration, QueryMetadata metadata) { + public PostgreSQLQuery(Connection conn, Configuration configuration, QueryMetadata metadata) { super(conn, configuration, metadata); } /** * @return */ - public PostgresQuery forShare() { + public PostgreSQLQuery forShare() { return addFlag(SQLOps.FOR_SHARE_FLAG); } /** * @return */ - public PostgresQuery noWait() { + public PostgreSQLQuery noWait() { return addFlag(SQLOps.NO_WAIT_FLAG); } @@ -69,7 +69,7 @@ public PostgresQuery noWait() { * @param paths * @return */ - public PostgresQuery of(RelationalPath... paths) { + public PostgreSQLQuery of(RelationalPath... paths) { StringBuilder builder = new StringBuilder(" of "); for (RelationalPath path : paths) { if (builder.length() > 4) { @@ -81,8 +81,8 @@ public PostgresQuery of(RelationalPath... paths) { } @Override - public PostgresQuery clone(Connection conn) { - PostgresQuery q = new PostgresQuery(conn, getConfiguration(), getMetadata().clone()); + public PostgreSQLQuery clone(Connection conn) { + PostgreSQLQuery q = new PostgreSQLQuery(conn, getConfiguration(), getMetadata().clone()); q.clone(this); return q; } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/postgres/PostgresQueryFactory.java b/querydsl-sql/src/main/java/com/querydsl/sql/postgresql/PostgreSQLQueryFactory.java similarity index 53% rename from querydsl-sql/src/main/java/com/querydsl/sql/postgres/PostgresQueryFactory.java rename to querydsl-sql/src/main/java/com/querydsl/sql/postgresql/PostgreSQLQueryFactory.java index 945b09dd02..1ebaf3ab46 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/postgres/PostgresQueryFactory.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/postgresql/PostgreSQLQueryFactory.java @@ -11,17 +11,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.sql.postgres; +package com.querydsl.sql.postgresql; import java.sql.Connection; import javax.inject.Provider; -import com.querydsl.sql.AbstractSQLQueryFactory; -import com.querydsl.sql.Configuration; -import com.querydsl.sql.PostgresTemplates; -import com.querydsl.sql.SQLSubQuery; -import com.querydsl.sql.SQLTemplates; +import com.querydsl.sql.*; +import com.querydsl.sql.PostgreSQLTemplates; /** * PostgreSQL specific implementation of SQLQueryFactory @@ -29,22 +26,22 @@ * @author tiwe * */ -public class PostgresQueryFactory extends AbstractSQLQueryFactory { +public class PostgreSQLQueryFactory extends AbstractSQLQueryFactory { - public PostgresQueryFactory(Configuration configuration, Provider connection) { + public PostgreSQLQueryFactory(Configuration configuration, Provider connection) { super(configuration, connection); } - public PostgresQueryFactory(Provider connection) { - this(new Configuration(new PostgresTemplates()), connection); + public PostgreSQLQueryFactory(Provider connection) { + this(new Configuration(new PostgreSQLTemplates()), connection); } - public PostgresQueryFactory(SQLTemplates templates, Provider connection) { + public PostgreSQLQueryFactory(SQLTemplates templates, Provider connection) { this(new Configuration(templates), connection); } - public PostgresQuery query() { - return new PostgresQuery(connection.get(), configuration); + public PostgreSQLQuery query() { + return new PostgreSQLQuery(connection.get(), configuration); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractBaseTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractBaseTest.java index 59f03c6105..a693e00f7f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractBaseTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractBaseTest.java @@ -83,7 +83,7 @@ public TestQuery clone(Connection conn) { public AbstractBaseTest() { // TODO enable registration of (jdbc type, java type) -> usertype mappings - if (target == Target.POSTGRES || target == Target.ORACLE) { + if (target == Target.POSTGRESQL || target == Target.ORACLE) { configuration.register("XML_TEST", "COL", new XMLAsStringType()); } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/BeanPopulationBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/BeanPopulationBase.java index 7698b88966..25acc1198c 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/BeanPopulationBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/BeanPopulationBase.java @@ -17,7 +17,7 @@ import static com.querydsl.core.Target.DB2; import static com.querydsl.core.Target.DERBY; import static com.querydsl.core.Target.ORACLE; -import static com.querydsl.core.Target.POSTGRES; +import static com.querydsl.core.Target.POSTGRESQL; import static com.querydsl.core.Target.SQLITE; import static com.querydsl.core.Target.SQLSERVER; import static com.querydsl.core.Target.TERADATA; @@ -32,7 +32,7 @@ import com.querydsl.sql.domain.QEmployee; import com.querydsl.core.testutil.ExcludeIn; -@ExcludeIn({CUBRID, DB2, DERBY, ORACLE, SQLSERVER, POSTGRES, SQLITE, TERADATA}) +@ExcludeIn({CUBRID, DB2, DERBY, ORACLE, SQLSERVER, POSTGRESQL, SQLITE, TERADATA}) public class BeanPopulationBase extends AbstractBaseTest { private final QEmployee e = new QEmployee("e"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java b/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java index 6f3016083e..716a29b72e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java @@ -60,7 +60,7 @@ public final class Connections { private static ThreadLocal stmtHolder = new ThreadLocal(); - private static boolean db2Inited, derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresInited, sqliteInited, teradataInited, firebirdInited; + private static boolean db2Inited, derbyInited, sqlServerInited, h2Inited, hsqlInited, mysqlInited, cubridInited, oracleInited, postgresqlInited, sqliteInited, teradataInited, firebirdInited; public static void close() throws SQLException{ if (stmtHolder.get() != null) { @@ -129,7 +129,7 @@ private static Connection getOracle() throws SQLException, ClassNotFoundExceptio return DriverManager.getConnection(url, "querydsl", "querydsl"); } - private static Connection getPostgres() throws ClassNotFoundException, SQLException{ + private static Connection getPostgreSQL() throws ClassNotFoundException, SQLException{ Class.forName("org.postgresql.Driver"); String url = "jdbc:postgresql://localhost:5432/querydsl"; return DriverManager.getConnection(url, "querydsl", "querydsl"); @@ -849,16 +849,16 @@ public static void initOracle() throws SQLException, ClassNotFoundException{ oracleInited = true; } - public static void initPostgres() throws SQLException, ClassNotFoundException{ - targetHolder.set(Target.POSTGRES); - SQLTemplates templates = new PostgresTemplates(true); - // NOTE : unquoted identifiers are converted to lower case in Postgres - Connection c = getPostgres(); + public static void initPostgreSQL() throws SQLException, ClassNotFoundException{ + targetHolder.set(Target.POSTGRESQL); + SQLTemplates templates = new PostgreSQLTemplates(true); + // NOTE : unquoted identifiers are converted to lower case in PostgreSQL + Connection c = getPostgreSQL(); connHolder.set(c); Statement stmt = c.createStatement(); stmtHolder.set(stmt); - if (postgresInited) { + if (postgresqlInited) { return; } @@ -942,7 +942,7 @@ public static void initPostgres() throws SQLException, ClassNotFoundException{ dropTable(templates, "XML_TEST"); stmt.execute("create table \"XML_TEST\"(\"COL\" XML)"); - postgresInited = true; + postgresqlInited = true; } public static void initSQLite() throws SQLException, ClassNotFoundException{ diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java index 2144aac285..6746ad7d98 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/DateArithmeticTest.java @@ -29,7 +29,7 @@ public void test() { list.add(new HSQLDBTemplates()); list.add(new MySQLTemplates()); list.add(new OracleTemplates()); - list.add(new PostgresTemplates()); + list.add(new PostgreSQLTemplates()); list.add(new SQLiteTemplates()); list.add(new SQLServerTemplates()); list.add(new SQLServer2005Templates()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java index e1ebe2a7ce..77270ace45 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java @@ -423,7 +423,7 @@ public void Insert_With_TempateExpression_In_Batch() { } @Test - @IncludeIn({H2, POSTGRES}) + @IncludeIn({H2, POSTGRESQL}) @SkipForQuoted public void Uuids() { delete(QUuids.uuids).execute(); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java index 37fe86dda3..c42c0f7508 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java @@ -98,7 +98,7 @@ public void Merge_with_Keys_Columns_and_Values_using_null() { } @Test - @ExcludeIn({CUBRID, DB2, DERBY, POSTGRES, SQLSERVER}) + @ExcludeIn({CUBRID, DB2, DERBY, POSTGRESQL, SQLSERVER}) public void Merge_With_Keys_Null_Id() throws SQLException{ ResultSet rs = merge(survey).keys(survey.id) .setNull(survey.id) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/MetadataTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/MetadataTest.java index dde86c4825..aadf968880 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/MetadataTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/MetadataTest.java @@ -32,7 +32,7 @@ public void test() throws SQLException, ClassNotFoundException { printMetadata(); Connections.initOracle(); printMetadata(); - Connections.initPostgres(); + Connections.initPostgreSQL(); printMetadata(); Connections.initSQLite(); printMetadata(); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java index 07e45b2d36..1d3c7e8c45 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PaginationTest.java @@ -30,7 +30,7 @@ public void test() { list.add(new HSQLDBTemplates()); list.add(new MySQLTemplates()); list.add(new OracleTemplates()); // inner query - list.add(new PostgresTemplates()); + list.add(new PostgreSQLTemplates()); list.add(new SQLiteTemplates()); list.add(new SQLServerTemplates()); list.add(new SQLServer2005Templates()); // inner query diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java similarity index 94% rename from querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java rename to querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java index f68b1d8ab4..f183677624 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PostgresTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java @@ -23,11 +23,11 @@ import com.querydsl.core.types.template.NumberTemplate; -public class PostgresTemplatesTest extends AbstractSQLTemplatesTest{ +public class PostgreSQLTemplatesTest extends AbstractSQLTemplatesTest{ @Override protected SQLTemplates createTemplates() { - return new PostgresTemplates(); + return new PostgreSQLTemplates(); } @Test diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java index 4b8ffe9393..a481da99a9 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java @@ -67,8 +67,8 @@ public void CountDistinct() { @Test public void CountDistinct_PostgreSQL() { - Configuration postgres = new Configuration(new PostgresTemplates()); - SQLSerializer serializer = new SQLSerializer(postgres); + Configuration postgresql = new Configuration(new PostgreSQLTemplates()); + SQLSerializer serializer = new SQLSerializer(postgresql); SQLSubQuery query = new SQLSubQuery(); query.from(QEmployeeNoPK.employee); query.distinct(); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesRegistryDump.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesRegistryDump.java index d520a0376d..02beaf1c26 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesRegistryDump.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesRegistryDump.java @@ -20,7 +20,7 @@ public static void main(String[] args) throws SQLException, ClassNotFoundExcepti dump(); Connections.initOracle(); dump(); - Connections.initPostgres(); + Connections.initPostgreSQL(); dump(); Connections.initSQLite(); dump(); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java index 3ba08ac6b7..b19a406ecc 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java @@ -97,7 +97,7 @@ public void NextVal() { // MSSQL OK // MySQL // Oracle OK - // Postgres OK + // PostgreSQL OK } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index 41835c9e71..9012f23d6e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -126,7 +126,7 @@ public void All() { } @Test - @IncludeIn(POSTGRES) // TODO generalize array literal projections + @IncludeIn(POSTGRESQL) // TODO generalize array literal projections public void Array() { Expression expr = Expressions.template(Integer[].class, "'{1,2,3}'::int[]"); Integer[] result = query().singleResult(expr); @@ -137,7 +137,7 @@ public void Array() { } @Test - @IncludeIn(POSTGRES) // TODO generalize array literal projections + @IncludeIn(POSTGRESQL) // TODO generalize array literal projections public void Array2() { Expression expr = Expressions.template(int[].class, "'{1,2,3}'::int[]"); int[] result = query().singleResult(expr); @@ -351,7 +351,7 @@ public void Custom_Projection() { } @Test - @IncludeIn({H2, SQLSERVER, MYSQL, ORACLE, TERADATA}) // TODO fix postgres + @IncludeIn({H2, SQLSERVER, MYSQL, ORACLE, TERADATA}) // TODO fix postgresql public void Dates() { long ts = ((long)Math.floor(System.currentTimeMillis() / 1000)) * 1000; long tsDate = new org.joda.time.LocalDate(ts).toDateMidnight().getMillis(); @@ -1073,7 +1073,7 @@ public void Num_Cast2() { } @Test - @ExcludeIn({CUBRID, DERBY, FIREBIRD, POSTGRES}) + @ExcludeIn({CUBRID, DERBY, FIREBIRD, POSTGRESQL}) public void Number_As_Boolean() { QNumberTest numberTest = QNumberTest.numberTest; delete(numberTest).execute(); @@ -1274,7 +1274,7 @@ public void Random() { } @Test - @ExcludeIn({FIREBIRD, ORACLE, POSTGRES, SQLITE, TERADATA}) + @ExcludeIn({FIREBIRD, ORACLE, POSTGRESQL, SQLITE, TERADATA}) public void Random2() { query().uniqueResult(MathExpressions.random(10)); } @@ -1473,7 +1473,7 @@ public void String() { } @Test - @ExcludeIn({POSTGRES, SQLITE}) + @ExcludeIn({POSTGRESQL, SQLITE}) public void String_IndexOf() { StringExpression str = Expressions.stringTemplate("' abcd '"); @@ -1665,7 +1665,7 @@ public void Where_Exists_Not() throws SQLException { } @Test - @IncludeIn({HSQLDB, ORACLE, POSTGRES}) + @IncludeIn({HSQLDB, ORACLE, POSTGRESQL}) public void With() { query().with(employee2, sq().from(employee) .where(employee.firstname.eq("Tom")) @@ -1675,7 +1675,7 @@ public void With() { } @Test - @IncludeIn({HSQLDB, ORACLE, POSTGRES}) + @IncludeIn({HSQLDB, ORACLE, POSTGRESQL}) public void With2() { QEmployee employee3 = new QEmployee("e3"); query().with(employee2, sq().from(employee) @@ -1689,7 +1689,7 @@ public void With2() { } @Test - @IncludeIn({HSQLDB, ORACLE, POSTGRES}) + @IncludeIn({HSQLDB, ORACLE, POSTGRESQL}) public void With3() { query().with(employee2, employee2.all()).as( sq().from(employee) @@ -1700,7 +1700,7 @@ public void With3() { } @Test - @IncludeIn({ORACLE, POSTGRES}) + @IncludeIn({ORACLE, POSTGRESQL}) public void With_Recursive() { query().withRecursive(employee2, sq().from(employee) .where(employee.firstname.eq("Tom")) @@ -1711,7 +1711,7 @@ public void With_Recursive() { @Test - @IncludeIn({ORACLE, POSTGRES}) + @IncludeIn({ORACLE, POSTGRESQL}) public void With_Recursive2() { query().withRecursive(employee2, employee2.all()).as( sq().from(employee) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java index f2fc93a66d..42460f0c3e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java @@ -100,7 +100,7 @@ public void SubQuery_LeftJoin() { } @Test - @ExcludeIn({MYSQL, POSTGRES, DERBY, SQLSERVER, TERADATA}) + @ExcludeIn({MYSQL, POSTGRESQL, DERBY, SQLSERVER, TERADATA}) public void SubQuery_Params() { Param aParam = new Param(String.class, "param"); SQLSubQuery subQuery = new SQLSubQuery().from(employee).where(employee.firstname.eq(aParam)); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/TemplatesTest.java index 8bd24d9f68..ca1b3c456e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/TemplatesTest.java @@ -26,7 +26,7 @@ public void test() { new HSQLDBTemplates(); new MySQLTemplates(); new OracleTemplates(); - new PostgresTemplates(); + new PostgreSQLTemplates(); new SQLTemplates("\"",'\\',false); new SQLServerTemplates(); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java index 00768a6066..bec86771a0 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java @@ -54,7 +54,7 @@ public void CreateTables() { } @Test - @ExcludeIn({CUBRID, POSTGRES, TERADATA}) + @ExcludeIn({CUBRID, POSTGRESQL, TERADATA}) public void DumpTypes() throws SQLException { Connection conn = Connections.getConnection(); DatabaseMetaData md = conn.getMetaData(); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresQueryFactoryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/postgresql/PostgreSQLQueryFactoryTest.java similarity index 90% rename from querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresQueryFactoryTest.java rename to querydsl-sql/src/test/java/com/querydsl/sql/postgresql/PostgreSQLQueryFactoryTest.java index e2b124e082..bcc322b2ea 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresQueryFactoryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/postgresql/PostgreSQLQueryFactoryTest.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.sql.postgres; +package com.querydsl.sql.postgresql; import static org.junit.Assert.assertNotNull; @@ -26,9 +26,9 @@ import com.querydsl.sql.SQLTemplates; import com.querydsl.sql.domain.QSurvey; -public class PostgresQueryFactoryTest { +public class PostgreSQLQueryFactoryTest { - private PostgresQueryFactory queryFactory; + private PostgreSQLQueryFactory queryFactory; @Before public void setUp() { @@ -38,7 +38,7 @@ public Connection get() { return EasyMock.createNiceMock(Connection.class); } }; - queryFactory = new PostgresQueryFactory(SQLTemplates.DEFAULT, provider); + queryFactory = new PostgreSQLQueryFactory(SQLTemplates.DEFAULT, provider); } @Test diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresQueryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/postgresql/PostgreSQLQueryTest.java similarity index 91% rename from querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresQueryTest.java rename to querydsl-sql/src/test/java/com/querydsl/sql/postgresql/PostgreSQLQueryTest.java index 94d190af58..d9003cfa6c 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/postgres/PostgresQueryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/postgresql/PostgreSQLQueryTest.java @@ -1,22 +1,22 @@ -package com.querydsl.sql.postgres; +package com.querydsl.sql.postgresql; import static org.junit.Assert.assertEquals; +import com.querydsl.sql.PostgreSQLTemplates; import org.junit.Before; import org.junit.Test; -import com.querydsl.sql.PostgresTemplates; import com.querydsl.sql.domain.QSurvey; -public class PostgresQueryTest { +public class PostgreSQLQueryTest { - private PostgresQuery query; + private PostgreSQLQuery query; private QSurvey survey = new QSurvey("survey"); @Before public void setUp() { - query = new PostgresQuery(null, new PostgresTemplates() {{ + query = new PostgreSQLQuery(null, new PostgreSQLTemplates() {{ newLineToSingleSpace(); }}); } @@ -87,7 +87,7 @@ public void ForUpdate_Of() { assertEquals("from SURVEY survey for update of SURVEY", toString(query)); } - private String toString(PostgresQuery query) { + private String toString(PostgreSQLQuery query) { return query.toString().replace('\n', ' '); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java index 552f51ded3..84f8cc9f9a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLLiteralsSuiteTest.java @@ -20,7 +20,7 @@ public static class KeywordQuoting extends KeywordQuotingBase { public void setUp() throws Exception { //NOTE: replacing the templates with a non-quoting one previous = configuration; - configuration = new Configuration(PostgresTemplates.builder().newLineToSingleSpace().build()); + configuration = new Configuration(PostgreSQLTemplates.builder().newLineToSingleSpace().build()); super.setUp(); } @@ -43,8 +43,8 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - Connections.initPostgres(); - Connections.initConfiguration(PostgresTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initPostgreSQL(); + Connections.initConfiguration(PostgreSQLTemplates.builder().quote().newLineToSingleSpace().build()); Connections.getConfiguration().setUseLiterals(true); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java index a8cbb03b59..5f5f9a5d80 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/suites/PostgreSQLSuiteTest.java @@ -20,7 +20,7 @@ public static class KeywordQuoting extends KeywordQuotingBase { public void setUp() throws Exception { //NOTE: replacing the templates with a non-quoting one previous = configuration; - configuration = new Configuration(PostgresTemplates.builder().newLineToSingleSpace().build()); + configuration = new Configuration(PostgreSQLTemplates.builder().newLineToSingleSpace().build()); super.setUp(); } @@ -43,8 +43,8 @@ public static class Update extends UpdateBase {} @BeforeClass public static void setUp() throws Exception { - Connections.initPostgres(); - Connections.initConfiguration(PostgresTemplates.builder().quote().newLineToSingleSpace().build()); + Connections.initPostgreSQL(); + Connections.initConfiguration(PostgreSQLTemplates.builder().quote().newLineToSingleSpace().build()); } } From d487a3343d2329d79c709c90cc1800f9203d1ecf Mon Sep 17 00:00:00 2001 From: John Tims Date: Thu, 5 Mar 2015 07:34:02 -0500 Subject: [PATCH 0759/1968] Call execute method --- querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java index 17e0c33f8f..f810c0070f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java @@ -194,7 +194,8 @@ public void Update_With_TemplateExpression_In_Batch() { update(survey) .set(survey.id, 3) .set(survey.name, Expressions.stringTemplate("'Hello'")) - .addBatch(); + .addBatch() + .execute(); } } From 90d6d9b3d8b05c85706bbfe88df2c2040061afd7 Mon Sep 17 00:00:00 2001 From: John Tims Date: Thu, 5 Mar 2015 15:52:15 -0500 Subject: [PATCH 0760/1968] Update references to postgres in docs --- querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml | 2 +- querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 29f2cfc44a..697d02d3f5 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -437,7 +437,7 @@ Configuration configuration = new Configuration(templates); OracleTemplates (test with Oracle 10 and 11) - PostgresTemplates (tested with PostgreSQL 9.1) + PostgreSQLTemplates (tested with PostgreSQL 9.1) SQLiteTemplates (tested with xerial JDBC 3.7.2) diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml index e4991f2fcd..299d06e854 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/sql.xml @@ -423,7 +423,7 @@ Configuration configuration = new Configuration(templates); OracleTemplates (test with Oracle 10 and 11) - PostgresTemplates (tested with PostgreSQL 9.1) + PostgreSQLTemplates (tested with PostgreSQL 9.1) SQLiteTemplates (tested with xerial JDBC 3.7.2) From 71ad1de2f712673a2cd2d5a2e5b04a0d0a60a366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 5 Mar 2015 22:40:34 +0200 Subject: [PATCH 0761/1968] Tune surefire settings --- querydsl-root/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 53951aa41b..5b236d623f 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -360,7 +360,7 @@ org.apache.maven.plugins maven-surefire-plugin - -Xms256m -Xmx512m -XX:MaxPermSize=512m + -Xms256m -Xmx512m com.querydsl.core.testutil.ExternalDB diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 84b39b7952..e17fddbba2 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -203,7 +203,7 @@ org.apache.maven.plugins maven-surefire-plugin - -Xss2m + -Xms256m -Xmx512m -Xss2m From 8718f37a3aabba7d84298c6b2b8d68b2182af158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Mar 2015 00:19:01 +0200 Subject: [PATCH 0762/1968] Optimize exists queries --- .../main/java/com/querydsl/jpa/EclipseLinkTemplates.java | 6 ------ .../src/main/java/com/querydsl/jpa/HQLTemplates.java | 6 ------ .../src/main/java/com/querydsl/jpa/JPAQueryBase.java | 7 +------ .../src/main/java/com/querydsl/jpa/JPQLTemplates.java | 4 ---- .../src/test/java/com/querydsl/jpa/AbstractJPATest.java | 1 + 5 files changed, 2 insertions(+), 22 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java index a14924eae8..ff32d63c67 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/EclipseLinkTemplates.java @@ -95,10 +95,4 @@ public boolean isPathInEntitiesSupported() { return false; } - @Override - public boolean isSelect1Supported() { - return true; - } - - } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java index 32ba444c8a..5f17a9ae74 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/HQLTemplates.java @@ -116,12 +116,6 @@ public String getExistsProjection() { return "1"; } - @Override - public boolean isSelect1Supported() { - // TODO return true, when JPQLTemplates becomes standard - return false; - } - @Override public boolean isEnumInPathSupported() { // related : http://opensource.atlassian.com/projects/hibernate/browse/HHH-5159 diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java index f51c60e6f4..6ae03f1905 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryBase.java @@ -64,12 +64,7 @@ protected void reset() { @Override public boolean exists() { - if (templates.isSelect1Supported()) { - return singleResult(NumberTemplate.ONE) != null; - } else { - EntityPath entityPath = (EntityPath) queryMixin.getMetadata().getJoins().get(0).getTarget(); - return !limit(1).list(entityPath).isEmpty(); - } + return singleResult(NumberTemplate.ONE) != null; } public Q fetch() { diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index c89fa89d6a..283737e4e0 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -158,10 +158,6 @@ public boolean isPathInEntitiesSupported() { return true; } - public boolean isSelect1Supported() { - return false; - } - @Nullable public String getExistsProjection() { return null; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 19f7cfb990..2525116396 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -621,6 +621,7 @@ public void Enum_StartsWith() { @Test public void Exists() { assertTrue(query().from(cat).where(cat.kittens.any().name.eq("Ruth123")).exists()); + assertFalse(query().from(cat).where(cat.kittens.any().name.eq("Ruth321")).exists()); } @Test From 85233125c853c9489115c1eae636e397c1c24337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 24 Feb 2015 18:23:44 +0200 Subject: [PATCH 0763/1968] Improve operator precedence --- .../querydsl/core/support/SerializerBase.java | 27 ++++--- .../com/querydsl/core/types/Templates.java | 45 ++++++----- .../java/com/querydsl/sql/DerbyTemplates.java | 2 + .../java/com/querydsl/sql/MySQLTemplates.java | 1 + .../com/querydsl/sql/OracleTemplates.java | 8 ++ .../com/querydsl/sql/PostgreSQLTemplates.java | 13 ++++ .../com/querydsl/sql/SQLServerTemplates.java | 16 +++- .../java/com/querydsl/sql/SQLTemplates.java | 23 +++--- .../com/querydsl/sql/SQLiteTemplates.java | 4 +- .../com/querydsl/sql/TeradataTemplates.java | 4 + .../sql/AbstractSQLTemplatesTest.java | 45 +++++++++-- .../com/querydsl/sql/CUBRIDTemplatesTest.java | 23 ++++++ .../com/querydsl/sql/DB2TemplatesTest.java | 23 ++++++ .../com/querydsl/sql/DerbyTemplatesTest.java | 35 ++++++++- .../querydsl/sql/FirebirdTemplatesTest.java | 57 ++++++++++++++ .../com/querydsl/sql/HSQLDBTemplatesTest.java | 23 ++++++ .../com/querydsl/sql/MySQLTemplatesTest.java | 39 ++++++++++ .../com/querydsl/sql/OracleTemplatesTest.java | 30 +++++++ .../querydsl/sql/PostgreSQLTemplatesTest.java | 49 ++++++++++++ .../sql/SQLServer2005TemplatesTest.java | 30 ++++++- .../com/querydsl/sql/SQLiteTemplatesTest.java | 78 +++++++++++++++++++ .../com/querydsl/sql/SerializationTest.java | 18 +++-- .../querydsl/sql/TeradataTemplatesTest.java | 33 ++++++++ 23 files changed, 557 insertions(+), 69 deletions(-) create mode 100644 querydsl-sql/src/test/java/com/querydsl/sql/CUBRIDTemplatesTest.java create mode 100644 querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java create mode 100644 querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java create mode 100644 querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java create mode 100644 querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java index 775da6da15..0b1c1a7f2d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java @@ -19,20 +19,10 @@ import java.util.Set; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.querydsl.core.JoinFlag; import com.querydsl.core.QueryFlag; -import com.querydsl.core.types.Constant; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.FactoryExpression; -import com.querydsl.core.types.Operation; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.ParamExpression; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathType; -import com.querydsl.core.types.Template; -import com.querydsl.core.types.TemplateExpression; -import com.querydsl.core.types.Templates; -import com.querydsl.core.types.Visitor; +import com.querydsl.core.types.*; /** * SerializerBase is a stub for Serializer implementations which serialize query metadata to Strings @@ -41,6 +31,9 @@ */ public abstract class SerializerBase> implements Visitor { + private static final Set SAME_PRECEDENCE = ImmutableSet.of(Ops.CASE, + Ops.CASE_WHEN, Ops.CASE_ELSE, Ops.CASE_EQ, Ops.CASE_EQ_WHEN, Ops.CASE_EQ_ELSE); + private final StringBuilder builder = new StringBuilder(128); private String constantPrefix = "a"; @@ -268,13 +261,18 @@ public Void visit(Path path, Void context) { protected void visitOperation(Class type, Operator operator, final List> args) { final Template template = templates.getTemplate(operator); if (template != null) { - final int precedence = templates.getPrecedence(operator); + final int precedence = templates.getPrecedence(operator); + boolean first = true; for (final Template.Element element : template.getElements()) { final Object rv = element.convert(args); if (rv instanceof Expression) { final Expression expr = (Expression) rv; if (precedence > -1 && expr instanceof Operation) { - if (precedence < templates.getPrecedence(((Operation) expr).getOperator())) { + Operator op = ((Operation) expr).getOperator(); + int opPrecedence = templates.getPrecedence(op); + if (precedence < opPrecedence) { + append("(").handle(expr).append(")"); + } else if (!first && precedence == opPrecedence && !SAME_PRECEDENCE.contains(op)) { append("(").handle(expr).append(")"); } else { handle(expr); @@ -282,6 +280,7 @@ protected void visitOperation(Class type, Operator operator, final List= {1}", 20); - add(Ops.GT, "{0} > {1}", 21); - add(Ops.LOE, "{0} <= {1}", 22); - add(Ops.LT, "{0} < {1}", 23); + add(Ops.GOE, "{0} >= {1}", 18); + add(Ops.GT, "{0} > {1}", 18); + add(Ops.LOE, "{0} <= {1}", 18); + add(Ops.LT, "{0} < {1}", 18); // numeric add(Ops.NEGATE, "-{0}", 6); - add(Ops.ADD, "{0} + {1}", 13); - add(Ops.DIV, "{0} / {1}", 8); - add(Ops.MOD, "{0} % {1}", 10); + add(Ops.ADD, "{0} + {1}", 12); + add(Ops.DIV, "{0} / {1}", 7); + add(Ops.MOD, "{0} % {1}", 7); add(Ops.MULT, "{0} * {1}", 7); add(Ops.SUB, "{0} - {1}", 12); // various add(Ops.EQ, "{0} = {1}", 18); add(Ops.EQ_IGNORE_CASE, "eqIc({0},{1})", 18); - add(Ops.INSTANCE_OF, "{0}.class = {1}"); - add(Ops.NE, "{0} != {1}", 25); - add(Ops.IN, "{0} in {1}", 27); + add(Ops.INSTANCE_OF, "{0}.class = {1}", 18); + add(Ops.NE, "{0} != {1}", 18); + add(Ops.IN, "{0} in {1}", 18); add(Ops.NOT_IN, "{0} not in {1}", 27); - add(Ops.IS_NULL, "{0} is null", 26); - add(Ops.IS_NOT_NULL, "{0} is not null", 26); + add(Ops.IS_NULL, "{0} is null", 18); + add(Ops.IS_NOT_NULL, "{0} is not null", 18); add(Ops.ALIAS, "{0} as {1}", 0); - add(Ops.EXISTS, "exists({0})"); - add(Ops.NUMCAST, "cast({0},{1})"); add(Ops.STRING_CAST, "str({0})"); @@ -122,8 +121,8 @@ public String escapeForLike(String str) { add(Ops.INDEX_OF, "indexOf({0},{1})"); add(Ops.INDEX_OF_2ARGS, "indexOf({0},{1},{2})"); add(Ops.STRING_IS_EMPTY, "empty({0})"); - add(Ops.LIKE, "{0} like {1}", 26); - add(Ops.LIKE_ESCAPE, "{0} like {1} escape '{2s}'", 26); + add(Ops.LIKE, "{0} like {1}", 18); + add(Ops.LIKE_ESCAPE, "{0} like {1} escape '{2s}'", 18); add(Ops.StringOps.LEFT, "left({0},{1})"); add(Ops.StringOps.RIGHT, "right({0},{1})"); @@ -244,7 +243,7 @@ public String escapeForLike(String str) { add(Ops.NULLIF, "nullif({0},{1})"); // subquery - add(Ops.EXISTS, "exists {0}"); + add(Ops.EXISTS, "exists {0}", 0); // numeric aggregates add(Ops.AggOps.BOOLEAN_ALL, "all({0})"); @@ -310,4 +309,10 @@ public final int getPrecedence(Operator op) { return precedence.get(op).intValue(); } + protected void setPrecedence(int p, Operator... ops) { + for (Operator op : ops) { + precedence.put(op, p); + } + } + } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java index 5892d6c57c..1822e1886c 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java @@ -60,6 +60,8 @@ public DerbyTemplates(char escape, boolean quote) { setFunctionJoinsWrapped(true); setDefaultValues("\nvalues (default)"); + setPrecedence(18, Ops.BETWEEN, Ops.EXISTS); + add(Ops.CONCAT, "varchar({0} || {1})"); add(SQLOps.NEXTVAL, "next value for {0s}"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java index be4e321269..69dda5d7c3 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java @@ -103,6 +103,7 @@ public MySQLTemplates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); + add(Ops.MOD, "{0} % {1}", 7); add(Ops.CONCAT, "concat({0}, {1})",0); add(Ops.StringOps.LPAD, "lpad({0},{1},' ')"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index 8322a937a5..f50ac0795d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -72,6 +72,14 @@ public OracleTemplates(char escape, boolean quote) { setCountViaAnalytics(true); setListMaxSize(1000); + setPrecedence(19, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, + Ops.IN, Ops.NOT_IN, Ops.EXISTS); + + // other like cases + setPrecedence(19, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + Ops.STARTS_WITH, Ops.STARTS_WITH_IC, + Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); + add(Ops.ALIAS, "{0} {1}"); add(SQLOps.NEXTVAL, "{0s}.nextval"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java index 64715630af..9ea36e3b6a 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java @@ -78,6 +78,19 @@ public PostgreSQLTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setSupportsUnquotedReservedWordsAsIdentifier(true); + setPrecedence(19, Ops.IN, Ops.CONCAT, Ops.MATCHES); + setPrecedence(20, Ops.BETWEEN); + setPrecedence(21, Ops.LIKE, Ops.LIKE_ESCAPE); + setPrecedence(22, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + setPrecedence(23, Ops.EQ, Ops.EQ_IGNORE_CASE); + + // other like cases + setPrecedence(21, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + Ops.STARTS_WITH, Ops.STARTS_WITH_IC, + Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); + + add(Ops.MOD, "{0} % {1}", 7); + // String add(Ops.MATCHES, "{0} ~ {1}"); add(Ops.INDEX_OF, "strpos({0},{1})-1"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index 80c04c9e1e..935f564bba 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -60,14 +60,24 @@ public SQLServerTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setArraysSupported(false); + setPrecedence(12, Ops.NEGATE); + setPrecedence(28, Ops.NOT); + setPrecedence(29, Ops.AND); + setPrecedence(30, Ops.IN, Ops.NOT_IN, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.OR); + + // other like cases + setPrecedence(30, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + Ops.STARTS_WITH, Ops.STARTS_WITH_IC, + Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); + // String - add(Ops.CONCAT, "{0} + {1}", 13); + add(Ops.CONCAT, "{0} + {1}", 12); add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)"); add(Ops.INDEX_OF, "charindex({1},{0})-1"); add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2})-1"); // NOTE : needs to be replaced with real regular expression - add(Ops.MATCHES, "{0} like {1}"); - add(Ops.STRING_IS_EMPTY, "len({0}) = 0"); + add(Ops.MATCHES, "{0} like {1}", 30); + add(Ops.STRING_IS_EMPTY, "len({0}) = 0", 18); add(Ops.STRING_LENGTH, "len({0})"); add(Ops.SUBSTR_1ARG, "substring({0},{1}+1,255)"); add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2s}-{1s})", 1); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index d20943a364..93b9370222 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -26,14 +26,13 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.mysema.commons.lang.Pair; import com.querydsl.core.JoinType; import com.querydsl.core.QueryException; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; -import com.querydsl.sql.types.Type; import com.querydsl.core.types.*; +import com.querydsl.sql.types.Type; /** * SQLTemplates extends Templates to provides SQL specific extensions @@ -306,8 +305,6 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.AND, "{0} and {1}", 36); add(Ops.NOT, "not {0}", 35); add(Ops.OR, "{0} or {1}", 38); - add(Ops.XNOR, "{0} xnor {1}", 39); - add(Ops.XOR, "{0} xor {1}", 39); // math add(Ops.MathOps.RANDOM, "rand()"); @@ -359,8 +356,8 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.DateTimeOps.TRUNC_SECOND, "date_trunc('second',{0})"); // string - add(Ops.CONCAT, "{0} || {1}", 38); - add(Ops.MATCHES, "{0} regexp {1}", 25); + add(Ops.CONCAT, "{0} || {1}", 12); + add(Ops.MATCHES, "{0} regexp {1}", 18); add(Ops.CHAR_AT, "cast(substr({0},{1s}+1,1) as char)"); add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}"); add(Ops.INDEX_OF, "locate({1},{0})-1"); @@ -372,13 +369,13 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.StringOps.LOCATE2, "locate({0},{1},{2})"); // like with escape - add(Ops.LIKE, "{0} like {1} escape '"+escape+"'"); - add(Ops.ENDS_WITH, "{0} like {%1} escape '"+escape+"'"); - add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '"+escape+"'"); - add(Ops.STARTS_WITH, "{0} like {1%} escape '"+escape+"'"); - add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '"+escape+"'"); - add(Ops.STRING_CONTAINS, "{0} like {%1%} escape '"+escape+"'"); - add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%} escape '"+escape+"'"); + add(Ops.LIKE, "{0} like {1} escape '"+escape+"'", 18); + add(Ops.ENDS_WITH, "{0} like {%1} escape '"+escape+"'", 18); + add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '"+escape+"'", 18); + add(Ops.STARTS_WITH, "{0} like {1%} escape '"+escape+"'", 18); + add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '"+escape+"'", 18); + add(Ops.STRING_CONTAINS, "{0} like {%1%} escape '"+escape+"'", 18); + add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%} escape '"+escape+"'", 18); add(SQLOps.CAST, "cast({0} as {1s})"); add(SQLOps.UNION, "{0}\nunion\n{1}", 50); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java index a86f4098ea..7f87db9285 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java @@ -68,7 +68,9 @@ public SQLiteTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setArraysSupported(false); - add(Ops.MOD, "{0} % {1}"); + setPrecedence(17, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + + add(Ops.MOD, "{0} % {1}", 7); add(Ops.INDEX_OF, "charindex({1},{0},1)-1"); add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2s}+1)-1"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java index 6234855cc7..157a8750e8 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java @@ -62,7 +62,11 @@ public TeradataTemplates(char escape, boolean quote) { setCountViaAnalytics(true); setDefaultValues("\ndefault values"); + setPrecedence(13, Ops.CONCAT); + setPrecedence(18, Ops.BETWEEN, Ops.NOT_IN); + add(Ops.NE, "{0} <> {1}"); + add(Ops.MOD, "{0} % {1}", 7); // String add(Ops.STRING_LENGTH, "character_length({0})"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java index dfa11f8d4d..7dac6718d1 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java @@ -18,11 +18,16 @@ import org.junit.Before; import org.junit.Test; -import com.querydsl.sql.domain.QSurvey; +import com.querydsl.core.types.Operator; +import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; +import com.querydsl.core.types.Template; import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; +import com.querydsl.sql.domain.QSurvey; + +import junit.framework.Assert; public abstract class AbstractSQLTemplatesTest { @@ -49,7 +54,7 @@ public void NoFrom() { if (templates.getDummyTable() == null) { assertEquals("select 1", query.toString()); } else { - assertEquals("select 1 from dual", query.toString()); + assertEquals("select 1 from " + templates.getDummyTable(), query.toString()); } } @@ -73,12 +78,13 @@ public void Union() { "union\n" + "(select 3)", union.toString()); } else { + String dummyTable = templates.getDummyTable(); assertEquals( - "(select 1 as col1 from dual)\n" + + "(select 1 as col1 from "+dummyTable+")\n" + "union\n" + - "(select 2 from dual)\n" + + "(select 2 from "+dummyTable+")\n" + "union\n" + - "(select 3 from dual)", union.toString()); + "(select 3 from "+dummyTable+")", union.toString()); } } @@ -92,4 +98,33 @@ protected SQLSubQuery sq() { return new SQLSubQuery(); } + protected int getPrecedence(Operator... ops) { + int precedence = templates.getPrecedence(ops[0]); + for (int i = 1; i < ops.length; i++) { + assertEquals(ops[i].name(), precedence, templates.getPrecedence(ops[i])); + } + return precedence; + } + + @Test + public void Generic_Precedence() { + int likePrecedence = templates.getPrecedence(Ops.LIKE); + int eqPrecedence = templates.getPrecedence(Ops.EQ); + if (templates.getPrecedence(Ops.EQ_IGNORE_CASE) != eqPrecedence) { + Assert.fail("Unexpected precedence for EQ_IGNORE_CASE " + + templates.getPrecedence(Ops.EQ_IGNORE_CASE)); + } + for (Operator op : Ops.values()) { + Template template = templates.getTemplate(op); + int precedence = templates.getPrecedence(op); + if (template.toString().contains(" like ") && precedence != likePrecedence) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (!template.toString().contains("(") && precedence < 0) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } + + } + } + + } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/CUBRIDTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/CUBRIDTemplatesTest.java new file mode 100644 index 0000000000..85041b27d3 --- /dev/null +++ b/querydsl-sql/src/test/java/com/querydsl/sql/CUBRIDTemplatesTest.java @@ -0,0 +1,23 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.sql; + +public class CUBRIDTemplatesTest extends AbstractSQLTemplatesTest{ + + @Override + protected SQLTemplates createTemplates() { + return new CUBRIDTemplates(); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java new file mode 100644 index 0000000000..ad0d3f1ac0 --- /dev/null +++ b/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java @@ -0,0 +1,23 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.sql; + +public class DB2TemplatesTest extends AbstractSQLTemplatesTest{ + + @Override + protected SQLTemplates createTemplates() { + return new DB2Templates(); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/DerbyTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/DerbyTemplatesTest.java index 396d39ea9b..e4112b9f16 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/DerbyTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/DerbyTemplatesTest.java @@ -14,14 +14,21 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Operation; import com.querydsl.core.types.OperationImpl; +import com.querydsl.core.types.Ops; -public class DerbyTemplatesTest { +public class DerbyTemplatesTest extends AbstractSQLTemplatesTest{ + + @Override + protected SQLTemplates createTemplates() { + return new DerbyTemplates(); + } @Test public void NextVal() { @@ -29,4 +36,30 @@ public void NextVal() { assertEquals("next value for myseq", new SQLSerializer(new Configuration(new DerbyTemplates())).handle(nextval).toString()); } + @Test + public void Precedence() { + // unary + and - + int p1 = getPrecedence(Ops.NEGATE); + // *, /, || (concatenation) + int p2 = getPrecedence(Ops.MULT, Ops.DIV); + // binary + and - + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + // comparisons, quantified comparisons, EXISTS, IN, IS NULL, LIKE, BETWEEN, IS + int p4 = getPrecedence(Ops.EQ, Ops.NE, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE, Ops.EXISTS, + Ops.IN, Ops.IS_NULL, Ops.LIKE, Ops.BETWEEN, Ops.IS_NOT_NULL); + // NOT + int p5 = getPrecedence(Ops.NOT); + // AND + int p6 = getPrecedence(Ops.AND); + // OR + int p7 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + } + } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java new file mode 100644 index 0000000000..fbbe17c35c --- /dev/null +++ b/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java @@ -0,0 +1,57 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.sql; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.querydsl.core.types.Path; +import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.template.NumberTemplate; + +public class FirebirdTemplatesTest extends AbstractSQLTemplatesTest{ + + @Override + protected SQLTemplates createTemplates() { + return new FirebirdTemplates(); + } + + @Override + public void Arithmetic() { + // uses additional casts + } + + @Test + @Override + public void Union() { + NumberExpression one = NumberTemplate.ONE; + NumberExpression two = NumberTemplate.TWO; + NumberExpression three = NumberTemplate.THREE; + Path col1 = new SimplePath(Integer.class,"col1"); + Union union = query.union( + sq().unique(one.as(col1)), + sq().unique(two), + sq().unique(three)); + + assertEquals( + "select 1 as col1 from RDB$DATABASE\n" + + "union\n" + + "select 2 from RDB$DATABASE\n" + + "union\n" + + "select 3 from RDB$DATABASE", union.toString()); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java new file mode 100644 index 0000000000..3986256e5d --- /dev/null +++ b/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java @@ -0,0 +1,23 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.sql; + +public class HSQLDBTemplatesTest extends AbstractSQLTemplatesTest{ + + @Override + protected SQLTemplates createTemplates() { + return new HSQLDBTemplates(); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/MySQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/MySQLTemplatesTest.java index b8d2942a0c..719cd7c39e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/MySQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/MySQLTemplatesTest.java @@ -14,9 +14,11 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; +import com.querydsl.core.types.Ops; public class MySQLTemplatesTest extends AbstractSQLTemplatesTest { @@ -47,6 +49,43 @@ public void Order_NullsLast() { assertEquals("from SURVEY survey1 order by (case when survey1.NAME is null then 1 else 0 end), survey1.NAME asc", query.toString()); } + @Test + public void Precedence() { + // INTERVAL + // BINARY, COLLATE + // ! + // - (unary minus), ~ (unary bit inversion) + int p0 = getPrecedence(Ops.NEGATE); + // ^ + // *, /, DIV, %, MOD + int p1 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); + // -, + + int p2 = getPrecedence(Ops.SUB, Ops.ADD); + // <<, >> + // & + // | + // = (comparison), <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN + int p3 = getPrecedence(Ops.EQ, Ops.GOE, Ops.GT, Ops.LT, Ops.NE, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.MATCHES, Ops.IN, Ops.LIKE, Ops.LIKE_ESCAPE); + // BETWEEN, CASE, WHEN, THEN, ELSE + int p4 = getPrecedence(Ops.BETWEEN, Ops.CASE, Ops.CASE_ELSE); + // NOT + int p5 = getPrecedence(Ops.NOT); + // &&, AND + int p6 = getPrecedence(Ops.AND); + // XOR + int p7 = getPrecedence(Ops.XOR, Ops.XNOR); + // ||, OR + int p8 = getPrecedence(Ops.OR); + // = (assignment), := + assertTrue(p0 < p1); + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java index b364dc7626..6a43677a1b 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java @@ -14,6 +14,7 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -21,6 +22,7 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Operation; import com.querydsl.core.types.OperationImpl; +import com.querydsl.core.types.Ops; import com.querydsl.core.types.expr.SimpleExpression; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.template.SimpleTemplate; @@ -84,4 +86,32 @@ public void NextVal() { assertEquals("myseq.nextval", new SQLSerializer(new Configuration(new OracleTemplates())).handle(nextval).toString()); } + @Test + public void Precedence() { + // +, - (as unary operators), PRIOR, CONNECT_BY_ROOT identity, negation, location in hierarchy + int p1 = getPrecedence(Ops.NEGATE); + // *, / multiplication, division + int p2 = getPrecedence(Ops.MULT, Ops.DIV); + // +, - (as binary operators), || addition, subtraction, concatenation + int p3 = getPrecedence(Ops.ADD, Ops.SUB, Ops.CONCAT); + // =, !=, <, >, <=, >=, comparison + int p4 = getPrecedence(Ops.EQ, Ops.NE, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + // IS [NOT] NULL, LIKE, [NOT] BETWEEN, [NOT] IN, EXISTS, IS OF type comparison + int p5 = getPrecedence(Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.EXISTS); + // NOT exponentiation, logical negation + int p6 = getPrecedence(Ops.NOT); + // AND conjunction + int p7 = getPrecedence(Ops.AND); + // OR disjunction + int p8 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } + } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java index f183677624..a2e296583a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java @@ -14,9 +14,11 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; +import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; @@ -55,5 +57,52 @@ public void Union() { "(select 3)", union.toString()); } + @Test + public void Precedence() { + //. left table/column name separator + // :: left PostgreSQL-style typecast + //[ ] left array element selection + //+ - right unary plus, unary minus + int p0 = getPrecedence(Ops.NEGATE); + // ^ left exponentiation + // * / % left multiplication, division, modulo + int p1 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); + //+ - left addition, subtraction + int p2 = getPrecedence(Ops.ADD, Ops.SUB); + //IS IS TRUE, IS FALSE, IS NULL, etc + int p3 = getPrecedence(Ops.IS_NULL, Ops.IS_NOT_NULL); + //ISNULL test for null + //NOTNULL test for not null + //(any other) left all other native and user-defined operators + //IN set membership + int p4 = getPrecedence(Ops.IN); + //BETWEEN range containment + int p5 = getPrecedence(Ops.BETWEEN); + //OVERLAPS time interval overlap + //LIKE ILIKE SIMILAR string pattern matching + int p6 = getPrecedence(Ops.LIKE, Ops.LIKE_ESCAPE); + //< > less than, greater than + int p7 = getPrecedence(Ops.LT, Ops.GT); + // = right equality, assignment + int p8 = getPrecedence(Ops.EQ); + //NOT right logical negation + int p9 = getPrecedence(Ops.NOT); + //AND left logical conjunction + int p10 = getPrecedence(Ops.AND); + //OR left logical disjunction + int p11 = getPrecedence(Ops.OR); + + assertTrue(p0 < p1); + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + assertTrue(p8 < p9); + assertTrue(p9 < p10); + assertTrue(p10 < p11); + } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java index b0cfa540f2..d5d6dda39c 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java @@ -14,13 +14,11 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; -import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.Operation; -import com.querydsl.core.types.OperationImpl; -import com.querydsl.core.types.Path; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; @@ -82,4 +80,28 @@ public void NextVal() { assertEquals("myseq.nextval", new SQLSerializer(new Configuration(new SQLServerTemplates())).handle(nextval).toString()); } + @Test + public void Precedence() { + // 1 ~ (Bitwise NOT) + // 2 (Multiply), / (Division), % (Modulo) + int p2 = getPrecedence(Ops.MULT, Ops.DIV); + // 3 + (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR) + int p3 = getPrecedence(Ops.NEGATE, Ops.ADD, Ops.SUB, Ops.CONCAT); + // 4 =, >, <, >=, <=, <>, !=, !>, !< (Comparison operators) + int p4 = getPrecedence(Ops.EQ, Ops.GT, Ops.LT, Ops.GOE, Ops.LOE, Ops.NE); + // 5 NOT + int p5 = getPrecedence(Ops.NOT); + // 6 AND + int p6 = getPrecedence(Ops.AND); + // 7 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME + int p7 = getPrecedence(Ops.BETWEEN, Ops.IN, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.OR); + // 8 = (Assignment) + + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + } + } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java new file mode 100644 index 0000000000..6061de1061 --- /dev/null +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java @@ -0,0 +1,78 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.sql; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.querydsl.core.types.Ops; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.template.NumberTemplate; + +public class SQLiteTemplatesTest extends AbstractSQLTemplatesTest{ + + @Override + protected SQLTemplates createTemplates() { + return new SQLiteTemplates(); + } + + @Override + public void Union() { + NumberExpression one = NumberTemplate.ONE; + NumberExpression two = NumberTemplate.TWO; + NumberExpression three = NumberTemplate.THREE; + Path col1 = new SimplePath(Integer.class,"col1"); + Union union = query.union( + sq().unique(one.as(col1)), + sq().unique(two), + sq().unique(three)); + + assertEquals( + "select 1 as col1\n" + + "union\n" + + "select 2\n" + + "union\n" + + "select 3", union.toString()); + } + + @Test + public void Precedence() { + // || + // * / % + int p1 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); + // + - + int p2 = getPrecedence(Ops.ADD, Ops.SUB); + // << >> & | + // < <= > >= + int p3 = getPrecedence(Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + // = == != <> IS IS NOT IN LIKE GLOB MATCH REGEXP + int p4 = getPrecedence(Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.IS_NULL, Ops.IS_NOT_NULL, + Ops.IN, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.MATCHES); + // AND + int p5 = getPrecedence(Ops.AND); + // OR + int p6 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + } + +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java index 76bcf0e03c..9d2e5aec4e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java @@ -13,19 +13,21 @@ */ package com.querydsl.sql; +import static org.junit.Assert.assertEquals; + import java.sql.Connection; +import org.easymock.EasyMock; +import org.junit.Test; + +import com.querydsl.core.types.Path; +import com.querydsl.core.types.SubQueryExpression; +import com.querydsl.core.types.path.PathBuilder; import com.querydsl.sql.dml.SQLDeleteClause; import com.querydsl.sql.dml.SQLInsertClause; import com.querydsl.sql.dml.SQLUpdateClause; import com.querydsl.sql.domain.QEmployee; import com.querydsl.sql.domain.QSurvey; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.SubQueryExpression; -import com.querydsl.core.types.path.PathBuilder; -import org.easymock.EasyMock; -import org.junit.Test; -import static org.junit.Assert.assertEquals; public class SerializationTest { @@ -120,7 +122,7 @@ public void FunctionCall() { assertEquals("select SURVEY.NAME\n" + "from SURVEY SURVEY\n" + "join TableValuedFunction(?) as tokFunc\n" + - "on not SURVEY.NAME like tokFunc.prop escape '\\'", serializer.toString()); + "on not (SURVEY.NAME like tokFunc.prop escape '\\')", serializer.toString()); } @@ -134,7 +136,7 @@ public void FunctionCall2() { assertEquals("from SURVEY SURVEY\n" + "join TableValuedFunction(?) as tokFunc\n" + - "on not SURVEY.NAME like tokFunc.prop escape '\\'", q.toString()); + "on not (SURVEY.NAME like tokFunc.prop escape '\\')", q.toString()); } @Test diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/TeradataTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/TeradataTemplatesTest.java index cdec2e4f26..9710e7d09e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/TeradataTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/TeradataTemplatesTest.java @@ -1,9 +1,12 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; +import com.querydsl.core.types.Ops; + public class TeradataTemplatesTest extends AbstractSQLTemplatesTest { @Override @@ -40,4 +43,34 @@ public void OrderBy_Limit() { "qualify row_number() over (order by survey1.NAME asc) <= ?", query.toString()); } + @Test + public void Precedence() { + // +, - (unary) + int p1 = getPrecedence(Ops.NEGATE); + // ** (exponentation) + // * / MOD + int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); + // +, - (binary) + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + // concat + int p4 = getPrecedence(Ops.CONCAT); + // EQ, NE, GT, LE, LT, GE, IN, NOT IN, BEWEEN, LIKE + int p5 = getPrecedence(Ops.EQ, Ops.NE, Ops.GT, Ops.LT, Ops.GOE, Ops.LOE, Ops.IN, Ops.NOT_IN, + Ops.BETWEEN, Ops.LIKE, Ops.LIKE_ESCAPE); + // NOT + int p6 = getPrecedence(Ops.NOT); + // AND + int p7 = getPrecedence(Ops.AND); + // OR + int p8 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } + } From 514782b9e65a833a1bd1ed016739b27d10d6f155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 24 Feb 2015 23:22:49 +0200 Subject: [PATCH 0764/1968] Improve operator precedence in JPQL --- .../java/com/querydsl/jpa/JPQLTemplates.java | 34 +++++++---- .../querydsl/jpa/BooleanOperationsTest.java | 2 +- .../com/querydsl/jpa/JPQLTemplatesTest.java | 61 ++++++++++++++++++- .../jpa/RelationalFunctionCallTest.java | 2 +- 4 files changed, 83 insertions(+), 16 deletions(-) diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index c89fa89d6a..46ea46ffa5 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -48,6 +48,14 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { super(escape); this.queryHandler = queryHandler; + setPrecedence(18, Ops.BETWEEN, Ops.COL_IS_EMPTY, Ops.MAP_IS_EMPTY); + + // other like cases + setPrecedence(18, Ops.MATCHES, Ops.MATCHES_IC, + Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + Ops.STARTS_WITH, Ops.STARTS_WITH_IC, + Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); + add(Ops.CASE, "case {0} end"); add(Ops.CASE_WHEN, "when {0} then {1} {2}", 0); add(Ops.CASE_ELSE, "else {0}", 0); @@ -55,28 +63,28 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { //CHECKSTYLE:OFF // boolean add(Ops.AND, "{0} and {1}", 36); - add(Ops.NOT, "not {0}", 3); - add(Ops.OR, "{0} or {1}", 38); - add(Ops.XNOR, "{0} xnor {1}", 39); - add(Ops.XOR, "{0} xor {1}", 39); + add(Ops.NOT, "not {0}", 35); + add(Ops.OR, "{0} or {1}", 37); + add(Ops.XNOR, "{0} xnor {1}"); + add(Ops.XOR, "{0} xor {1}"); // comparison - add(Ops.BETWEEN, "{0} between {1} and {2}", 30); + add(Ops.BETWEEN, "{0} between {1} and {2}"); // numeric add(Ops.MathOps.SQRT, "sqrt({0})"); add(Ops.MOD, "mod({0},{1})", 0); // various - add(Ops.NE, "{0} <> {1}", 25); - add(Ops.IS_NULL, "{0} is null", 26); - add(Ops.IS_NOT_NULL, "{0} is not null", 26); + add(Ops.NE, "{0} <> {1}"); + add(Ops.IS_NULL, "{0} is null"); + add(Ops.IS_NOT_NULL, "{0} is not null"); add(JPQLOps.CAST, "cast({0} as {1s})"); add(Ops.NUMCAST, "cast({0} as {1s})"); // collection - add(JPQLOps.MEMBER_OF, "{0} member of {1}"); - add(JPQLOps.NOT_MEMBER_OF, "{0} not member of {1}"); + add(JPQLOps.MEMBER_OF, "{0} member of {1}", 18); + add(JPQLOps.NOT_MEMBER_OF, "{0} not member of {1}", 18); add(Ops.IN, "{0} in {1}"); add(Ops.NOT_IN, "{0} not in {1}"); @@ -85,10 +93,10 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(Ops.ARRAY_SIZE, "size({0})"); // string - add(Ops.LIKE, "{0} like {1} escape '"+escape+"'",1); + add(Ops.LIKE, "{0} like {1} escape '"+escape+"'"); add(Ops.CONCAT, "concat({0},{1})",0); - add(Ops.MATCHES, "{0} like {1} escape '"+escape+"'", 27); // TODO : support real regexes - add(Ops.MATCHES_IC, "{0} like {1} escape '"+escape+"'", 27); // TODO : support real regexes + add(Ops.MATCHES, "{0} like {1} escape '"+escape+"'"); // TODO : support real regexes + add(Ops.MATCHES_IC, "{0} like {1} escape '"+escape+"'"); // TODO : support real regexes add(Ops.LOWER, "lower({0})"); add(Ops.SUBSTR_1ARG, "substring({0},{1s}+1)", 1); add(Ops.SUBSTR_2ARGS, "substring({0},{1s}+1,{2s}-{1s})", 1); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/BooleanOperationsTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/BooleanOperationsTest.java index 2cb767988d..20c02f2949 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/BooleanOperationsTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/BooleanOperationsTest.java @@ -34,7 +34,7 @@ public void BooleanOperations_And() { @Test public void BooleanOperations_Not() { - assertToString("not (cust is null)", cust.isNull().not()); + assertToString("not cust is null", cust.isNull().not()); } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java index 48afada3e3..bdcbeda01f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java @@ -1,15 +1,21 @@ package com.querydsl.jpa; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.List; import org.junit.Test; +import com.google.common.collect.ImmutableList; +import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; +import com.querydsl.core.types.Template; import com.querydsl.core.types.Templates; +import junit.framework.Assert; + public class JPQLTemplatesTest { @Test @@ -24,7 +30,6 @@ public void Escape() { } } - @Test public void Custom_Escape() { List templates = Arrays.asList( @@ -37,4 +42,58 @@ public void Custom_Escape() { } } + @Test + public void Precedence() { + // Navigation operator (.) + // +, - unary *, + int p1 = getPrecedence(Ops.NEGATE); + // / multiplication and division + int p2 = getPrecedence(Ops.MULT, Ops.DIV); + // +, - addition and subtraction + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + // Comparison operators : =, >, >=, <, <=, <> (not equal), [NOT] BETWEEN, [NOT] LIKE, [NOT] IN, IS [NOT] NULL, IS [NOT] EMPTY, [NOT] MEMBER [OF] + int p4 = getPrecedence(Ops.EQ, Ops.GT, Ops.GOE, Ops.LT, Ops.LOE, Ops.NE, Ops.BETWEEN, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.IN, + Ops.IS_NULL, Ops.IS_NOT_NULL, JPQLOps.MEMBER_OF, JPQLOps.NOT_MEMBER_OF); + // NOT + int p5 = getPrecedence(Ops.NOT); + // AND + int p6 = getPrecedence(Ops.AND); + // OR + int p7 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + } + + protected int getPrecedence(Operator... ops) { + int precedence = JPQLTemplates.DEFAULT.getPrecedence(ops[0]); + for (int i = 1; i < ops.length; i++) { + assertEquals(ops[i].name(), precedence, JPQLTemplates.DEFAULT.getPrecedence(ops[i])); + } + return precedence; + } + + @Test + public void Generic_Precedence() { + for (JPQLTemplates templates : ImmutableList.of( + JPQLTemplates.DEFAULT, HQLTemplates.DEFAULT, EclipseLinkTemplates.DEFAULT)) { + int likePrecedence = templates.getPrecedence(Ops.LIKE); + for (Operator op : Ops.values()) { + Template template = templates.getTemplate(op); + int precedence = templates.getPrecedence(op); + if (template.toString().contains(" like ") && precedence != likePrecedence) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (!template.toString().contains("(") && precedence < 0) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } + + } + } + + } + } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/RelationalFunctionCallTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/RelationalFunctionCallTest.java index 3f0fe66cc6..55a6e6bab3 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/RelationalFunctionCallTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/RelationalFunctionCallTest.java @@ -61,7 +61,7 @@ public void FunctionCall() { assertEquals("select SURVEY.NAME\n" + "from SURVEY SURVEY\n" + "join TableValuedFunction(?1) as tokFunc\n" + - "on not SURVEY.NAME like tokFunc.prop escape '\\'", serializer.toString()); + "on not (SURVEY.NAME like tokFunc.prop escape '\\')", serializer.toString()); } From b5bfaaee791d8e7fbd51079f2c6eb7aa609149bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Feb 2015 22:51:33 +0200 Subject: [PATCH 0765/1968] Improve operator precedence in JDOQL --- .../querydsl/core/types/JavaTemplates.java | 2 +- .../java/com/querydsl/jdo/JDOQLTemplates.java | 2 + .../com/querydsl/jdo/JDOQLTemplatesTest.java | 71 +++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java index ecfd05683b..e6c84334e8 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java @@ -42,7 +42,7 @@ public JavaTemplates() { add(Ops.COL_SIZE, "{0}.size()"); // array - add(Ops.ARRAY_SIZE, "{0}.length"); + add(Ops.ARRAY_SIZE, "{0}.length", 0); // map add(Ops.MAP_IS_EMPTY, "{0}.isEmpty()"); diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java index 0e90338daf..fcfae304e0 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java @@ -28,6 +28,8 @@ public final class JDOQLTemplates extends JavaTemplates { public static final JDOQLTemplates DEFAULT = new JDOQLTemplates(); protected JDOQLTemplates() { + setPrecedence(17, Ops.GOE, Ops.GT, Ops.LOE, Ops.LT, Ops.INSTANCE_OF); + // String add(Ops.STRING_CONTAINS, "{0}.indexOf({1}) > -1", 25); add(Ops.STRING_CONTAINS_IC, "{0l}.indexOf({1l}) > -1", 25); diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java new file mode 100644 index 0000000000..f6eafb5a71 --- /dev/null +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java @@ -0,0 +1,71 @@ +package com.querydsl.jdo; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.querydsl.core.types.Operator; +import com.querydsl.core.types.Ops; +import com.querydsl.core.types.Template; + +import junit.framework.Assert; + +public class JDOQLTemplatesTest { + + @Test + public void Precedence() { +// Cast +// Unary ("~") ("!") + int p1 = getPrecedence(Ops.NOT); +// Unary ("+") ("-") + int p2 = getPrecedence(Ops.NEGATE); +// Multiplicative ("*") ("/") ("%") + int p3 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); +// Additive ("+") ("-") + int p4 = getPrecedence(Ops.ADD, Ops.SUB); +// Relational (">=") (">") ("<=") ("<") ("instanceof") + int p5 = getPrecedence(Ops.GOE, Ops.GT, Ops.LOE, Ops.LT, Ops.INSTANCE_OF); +// Equality ("==") ("!=") + int p6 = getPrecedence(Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); +// Boolean logical AND ("&") +// Boolean logical OR ("|") +// Conditional AND ("&&") + int p7 = getPrecedence(Ops.AND); +// Conditional OR ("||") + int p8 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } + + protected int getPrecedence(Operator... ops) { + int precedence = JDOQLTemplates.DEFAULT.getPrecedence(ops[0]); + for (int i = 1; i < ops.length; i++) { + assertEquals(ops[i].name(), precedence, JDOQLTemplates.DEFAULT.getPrecedence(ops[i])); + } + return precedence; + } + + @Test + public void Generic_Precedence() { + JDOQLTemplates templates = JDOQLTemplates.DEFAULT; + int likePrecedence = templates.getPrecedence(Ops.LIKE); + for (Operator op : Ops.values()) { + Template template = templates.getTemplate(op); + int precedence = templates.getPrecedence(op); + if (template.toString().contains(" like ") && precedence != likePrecedence) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (!template.toString().contains("(") && precedence < 0) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } + + } + } + +} From 46f1f09730dd7b102a5a4839290879501b6c06f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 25 Feb 2015 23:26:31 +0200 Subject: [PATCH 0766/1968] Add test for arithmetics --- .../sql/AbstractSQLTemplatesTest.java | 48 +++++++++++++++++-- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java index 7dac6718d1..529d2b31aa 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java @@ -18,10 +18,8 @@ import org.junit.Before; import org.junit.Test; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.Template; +import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.*; import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; @@ -126,5 +124,47 @@ public void Generic_Precedence() { } } + @Test + public void Arithmetic() { + NumberExpression one = Expressions.numberPath(Integer.class, "one"); + NumberExpression two = Expressions.numberPath(Integer.class, "two"); + + // add + assertSerialized(one.add(two), "one + two"); + assertSerialized(one.add(two).multiply(1), "(one + two) * ?"); + assertSerialized(one.add(two).divide(1), "(one + two) / ?"); + assertSerialized(one.add(two).add(1), "one + two + ?"); + + assertSerialized(one.add(two.multiply(1)), "one + two * ?"); + assertSerialized(one.add(two.divide(1)), "one + two / ?"); + assertSerialized(one.add(two.add(1)), "one + (two + ?)"); // XXX could be better + + // sub + assertSerialized(one.subtract(two), "one - two"); + assertSerialized(one.subtract(two).multiply(1), "(one - two) * ?"); + assertSerialized(one.subtract(two).divide(1), "(one - two) / ?"); + assertSerialized(one.subtract(two).add(1), "one - two + ?"); + + assertSerialized(one.subtract(two.multiply(1)), "one - two * ?"); + assertSerialized(one.subtract(two.divide(1)), "one - two / ?"); + assertSerialized(one.subtract(two.add(1)), "one - (two + ?)"); + + // mult + assertSerialized(one.multiply(two), "one * two"); + assertSerialized(one.multiply(two).multiply(1), "one * two * ?"); + assertSerialized(one.multiply(two).divide(1), "one * two / ?"); + assertSerialized(one.multiply(two).add(1), "one * two + ?"); + + assertSerialized(one.multiply(two.multiply(1)), "one * (two * ?)"); // XXX could better + assertSerialized(one.multiply(two.divide(1)), "one * (two / ?)"); + assertSerialized(one.multiply(two.add(1)), "one * (two + ?)"); + } + + private void assertSerialized(Expression expr, String serialized) { + SQLSerializer serializer = new SQLSerializer(new Configuration(templates)); + serializer.handle(expr); + assertEquals(serialized, serializer.toString()); + } + } From aa7d7c2b6a47f308762960c636a5f30aff0e5bea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 26 Feb 2015 22:06:08 +0200 Subject: [PATCH 0767/1968] Improve precedence tests --- .../src/main/java/com/querydsl/jdo/JDOQLTemplates.java | 6 +++--- .../test/java/com/querydsl/jdo/JDOQLTemplatesTest.java | 8 +++++--- .../src/main/java/com/querydsl/jpa/JPQLTemplates.java | 4 ++-- .../test/java/com/querydsl/jpa/JPQLTemplatesTest.java | 9 +++++---- .../test/java/com/querydsl/jpa/StringOperationsTest.java | 4 ++-- .../src/test/java/com/querydsl/jpa/SubQueryTest.java | 2 +- .../main/java/com/querydsl/sql/FirebirdTemplates.java | 4 ++-- .../src/main/java/com/querydsl/sql/HSQLDBTemplates.java | 2 +- .../src/main/java/com/querydsl/sql/OracleTemplates.java | 4 ++-- .../main/java/com/querydsl/sql/PostgreSQLTemplates.java | 4 ++-- .../main/java/com/querydsl/sql/SQLServerTemplates.java | 4 ++-- .../src/main/java/com/querydsl/sql/SQLTemplates.java | 4 ++-- .../src/main/java/com/querydsl/sql/SQLiteTemplates.java | 4 ++-- .../java/com/querydsl/sql/AbstractSQLTemplatesTest.java | 8 +++++--- 14 files changed, 36 insertions(+), 31 deletions(-) diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java index fcfae304e0..7f0eaf193d 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java @@ -31,10 +31,10 @@ protected JDOQLTemplates() { setPrecedence(17, Ops.GOE, Ops.GT, Ops.LOE, Ops.LT, Ops.INSTANCE_OF); // String - add(Ops.STRING_CONTAINS, "{0}.indexOf({1}) > -1", 25); - add(Ops.STRING_CONTAINS_IC, "{0l}.indexOf({1l}) > -1", 25); + add(Ops.STRING_CONTAINS, "({0}.indexOf({1}) > -1)", -1); + add(Ops.STRING_CONTAINS_IC, "({0l}.indexOf({1l}) > -1)", -1); add(Ops.EQ_IGNORE_CASE, "{0l}.equals({1l})"); - add(Ops.STRING_IS_EMPTY, "{0} == \"\"", 25); + add(Ops.STRING_IS_EMPTY, "{0} == \"\"", 18); add(Ops.LIKE, "{0}.like({1})"); add(Ops.LIKE_ESCAPE, "{0}.like({1})"); diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java index f6eafb5a71..c7cd5f53cf 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java @@ -58,13 +58,15 @@ public void Generic_Precedence() { int likePrecedence = templates.getPrecedence(Ops.LIKE); for (Operator op : Ops.values()) { Template template = templates.getTemplate(op); + String str = template.toString(); int precedence = templates.getPrecedence(op); - if (template.toString().contains(" like ") && precedence != likePrecedence) { + if (str.contains(" like ") && precedence != likePrecedence) { Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!template.toString().contains("(") && precedence < 0) { + } else if (!str.contains("(") && precedence < 0) { Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { + Assert.fail("Unsafe pattern for " + op + " with template " + template); } - } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index 46ea46ffa5..bb87a113af 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -112,8 +112,8 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '"+escape+"'"); add(Ops.STARTS_WITH, "{0} like {1%} escape '"+escape+"'"); add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '"+escape+"'"); - add(Ops.INDEX_OF, "locate({1},{0})-1"); - add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2s}+1)-1"); + add(Ops.INDEX_OF, "(locate({1},{0})-1)"); + add(Ops.INDEX_OF_2ARGS, "(locate({1},{0},{2s}+1)-1)"); // date time add(Ops.DateTimeOps.SYSDATE, "sysdate"); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java index bdcbeda01f..0ffe4cb78e 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java @@ -84,16 +84,17 @@ public void Generic_Precedence() { int likePrecedence = templates.getPrecedence(Ops.LIKE); for (Operator op : Ops.values()) { Template template = templates.getTemplate(op); + String str = template.toString(); int precedence = templates.getPrecedence(op); - if (template.toString().contains(" like ") && precedence != likePrecedence) { + if (str.contains(" like ") && precedence != likePrecedence) { Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!template.toString().contains("(") && precedence < 0) { + } else if (!str.contains("(") && precedence < 0) { Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { + Assert.fail("Unsafe pattern for " + op + " with template " + template); } - } } - } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java index 47dd97d095..e680375602 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java @@ -49,13 +49,13 @@ public void IndexOf() { Expression startIndex = Expressions.constant(0); Expression endIndex = NumberOperation.create(Integer.class, Ops.INDEX_OF, path, Expressions.constant("x")); Expression substr = StringOperation.create(Ops.SUBSTR_2ARGS, path, startIndex, endIndex); - assertToString("substring(cat.name,1,locate(?1,cat.name)-1)", substr); + assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", substr); } @Test public void IndexOf2() { StringPath str = QCat.cat.name; - assertToString("substring(cat.name,1,locate(?1,cat.name)-1)", str.substring(0, str.indexOf("x"))); + assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", str.substring(0, str.indexOf("x"))); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java index e62b548555..362abb535f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java @@ -182,7 +182,7 @@ public void Indexed_Access_Without_Constant() { @Test public void IndexOf() { - assertToString("(select count(cat) from Cat cat where locate(?1,cat.name)-1 = ?2)", + assertToString("(select count(cat) from Cat cat where (locate(?1,cat.name)-1) = ?2)", sub().from(cat).where(cat.name.indexOf("a").eq(1)).count()); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java index 0b0e4d7c02..194cabbdeb 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java @@ -45,8 +45,8 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)", 1); add(Ops.SUBSTR_2ARGS, "substring({0} from {1s}+1 for {2s}-{1s})", 1); - add(Ops.INDEX_OF, "position({1},{0})-1"); - add(Ops.INDEX_OF_2ARGS, "position({1},{0},{2s}+1)-1"); + add(Ops.INDEX_OF, "(position({1},{0})-1)"); + add(Ops.INDEX_OF_2ARGS, "(position({1},{0},{2s}+1)-1)"); add(Ops.StringOps.LOCATE, "position({0},{1})"); add(Ops.StringOps.LOCATE2, "position({0},{1},{2})"); add(Ops.STRING_LENGTH, "char_length({0})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java index eefe4d14d4..ba158e70ae 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java @@ -52,7 +52,7 @@ public HSQLDBTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setFunctionJoinsWrapped(true); add(Ops.TRIM, "trim(both from {0})"); - add(Ops.NEGATE, "{0} * -1", 7); + add(Ops.NEGATE, "({0} * -1)", -1); add(SQLOps.NEXTVAL, "next value for {0s}"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index f50ac0795d..7513207abe 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -84,8 +84,8 @@ public OracleTemplates(char escape, boolean quote) { add(SQLOps.NEXTVAL, "{0s}.nextval"); // String - add(Ops.INDEX_OF, "instrb({0},{1})-1"); - add(Ops.INDEX_OF_2ARGS, "instrb({0},{1},{2}+1)-1"); + add(Ops.INDEX_OF, "(instrb({0},{1})-1)"); + add(Ops.INDEX_OF_2ARGS, "(instrb({0},{1},{2}+1)-1)"); add(Ops.MATCHES, "regexp_like({0},{1})"); add(Ops.StringOps.LOCATE, "instr({1},{0})"); add(Ops.StringOps.LOCATE2, "instr({1},{0},{2s})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java index 9ea36e3b6a..1bfaad2cc3 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java @@ -93,8 +93,8 @@ public PostgreSQLTemplates(char escape, boolean quote) { // String add(Ops.MATCHES, "{0} ~ {1}"); - add(Ops.INDEX_OF, "strpos({0},{1})-1"); - add(Ops.INDEX_OF_2ARGS, "strpos({0},{1})-1"); //FIXME + add(Ops.INDEX_OF, "(strpos({0},{1})-1)"); + add(Ops.INDEX_OF_2ARGS, "(strpos({0},{1})-1)"); //FIXME add(Ops.StringOps.LOCATE, "strpos({1},{0})"); add(Ops.StringOps.LOCATE2, "strpos(repeat('^',{2s}-1) || substr({1},{2s}),{0})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index 935f564bba..ef835295e0 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -73,8 +73,8 @@ public SQLServerTemplates(char escape, boolean quote) { // String add(Ops.CONCAT, "{0} + {1}", 12); add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)"); - add(Ops.INDEX_OF, "charindex({1},{0})-1"); - add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2})-1"); + add(Ops.INDEX_OF, "(charindex({1},{0})-1)"); + add(Ops.INDEX_OF_2ARGS, "(charindex({1},{0},{2})-1)"); // NOTE : needs to be replaced with real regular expression add(Ops.MATCHES, "{0} like {1}", 30); add(Ops.STRING_IS_EMPTY, "len({0}) = 0", 18); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index 93b9370222..a7d438de91 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -360,8 +360,8 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.MATCHES, "{0} regexp {1}", 18); add(Ops.CHAR_AT, "cast(substr({0},{1s}+1,1) as char)"); add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}"); - add(Ops.INDEX_OF, "locate({1},{0})-1"); - add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2s}+1)-1"); + add(Ops.INDEX_OF, "(locate({1},{0})-1)"); + add(Ops.INDEX_OF_2ARGS, "(locate({1},{0},{2s}+1)-1)"); add(Ops.STRING_IS_EMPTY, "length({0}) = 0"); add(Ops.SUBSTR_1ARG, "substr({0},{1s}+1)", 1); add(Ops.SUBSTR_2ARGS, "substr({0},{1s}+1,{2s}-{1s})", 1); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java index 7f87db9285..d253a7afd4 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java @@ -72,8 +72,8 @@ public SQLiteTemplates(char escape, boolean quote) { add(Ops.MOD, "{0} % {1}", 7); - add(Ops.INDEX_OF, "charindex({1},{0},1)-1"); - add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2s}+1)-1"); + add(Ops.INDEX_OF, "(charindex({1},{0},1)-1)"); + add(Ops.INDEX_OF_2ARGS, "(charindex({1},{0},{2s}+1)-1)"); add(Ops.StringOps.LOCATE, "charindex({0},{1})"); add(Ops.StringOps.LOCATE2, "charindex({0},{1},{2s})"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java index 529d2b31aa..413a3e11a5 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java @@ -114,13 +114,15 @@ public void Generic_Precedence() { } for (Operator op : Ops.values()) { Template template = templates.getTemplate(op); + String str = template.toString(); int precedence = templates.getPrecedence(op); - if (template.toString().contains(" like ") && precedence != likePrecedence) { + if (str.contains(" like ") && precedence != likePrecedence) { Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!template.toString().contains("(") && precedence < 0) { + } else if (!str.contains("(") && precedence < 0) { Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { + Assert.fail("Unsafe pattern for " + op + " with template " + template); } - } } From 4ffb9ebf9aa6005800e5a1eaf34bb27c74bc9fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 27 Feb 2015 20:49:58 +0200 Subject: [PATCH 0768/1968] Improve Firebird patterns --- .../com/querydsl/sql/FirebirdTemplates.java | 5 +++ .../java/com/querydsl/sql/MySQLTemplates.java | 2 +- .../querydsl/sql/FirebirdTemplatesTest.java | 32 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java index 194cabbdeb..d77a5ae782 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java @@ -41,6 +41,11 @@ public FirebirdTemplates(char escape, boolean quote) { setWrapSelectParameters(true); setArraysSupported(false); + setPrecedence(6, Ops.NEGATE); + setPrecedence(18, Ops.BETWEEN); + + add(Ops.CONCAT, "{0} || {1}", 5); + // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)", 1); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java index 69dda5d7c3..7aeec4c1de 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java @@ -104,7 +104,7 @@ public MySQLTemplates(char escape, boolean quote) { setNullsLast(null); add(Ops.MOD, "{0} % {1}", 7); - add(Ops.CONCAT, "concat({0}, {1})",0); + add(Ops.CONCAT, "concat({0}, {1})", 0); add(Ops.StringOps.LPAD, "lpad({0},{1},' ')"); add(Ops.StringOps.RPAD, "rpad({0},{1},' ')"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java index fbbe17c35c..60ff1e8a7c 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java @@ -14,9 +14,11 @@ package com.querydsl.sql; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Test; +import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; @@ -54,4 +56,34 @@ public void Union() { "select 3 from RDB$DATABASE", union.toString()); } + @Test + public void Precedence() { + // concat + // *, /, +, - + // comparison + // NOT + // AND + // OR + + int p1 = getPrecedence(Ops.CONCAT); + int p2 = getPrecedence(Ops.NEGATE); + int p3 = getPrecedence(Ops.MULT, Ops.DIV); + int p4 = getPrecedence(Ops.SUB, Ops.ADD); + int p5 = getPrecedence(Ops.EQ, Ops.GOE, Ops.GT, Ops.LT, Ops.NE, Ops.IS_NULL, Ops.IS_NOT_NULL, + Ops.MATCHES, Ops.IN, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN); + int p6 = getPrecedence(Ops.NOT); + int p7 = getPrecedence(Ops.AND); + int p8 = getPrecedence(Ops.XOR, Ops.XNOR); + int p9 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + assertTrue(p8 < p9); + } + } From 46397396e6dd473770dc5418552fcc82be74f7bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 28 Feb 2015 12:13:32 +0200 Subject: [PATCH 0769/1968] Add test for arithmetic operations --- .../querydsl/core/support/Normalization.java | 19 ++++++++------- .../querydsl/core/support/SerializerBase.java | 4 ++-- .../core/types/template/NumberTemplate.java | 2 ++ .../core/support/NormalizationTest.java | 5 ++++ .../java/com/querydsl/sql/Connections.java | 2 +- .../java/com/querydsl/sql/SelectBase.java | 23 +++++++++++++++++++ 6 files changed, 42 insertions(+), 13 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java index ea05bdad04..840597e6a5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java @@ -31,10 +31,8 @@ public final class Normalization { "(?![\\d\\*/\"' ])"); private static final Pattern[] OPERATIONS = { - Pattern.compile(NUMBER + WS + "\\*" + WS + NUMBER), - Pattern.compile(NUMBER + WS + "/" + WS + NUMBER), - Pattern.compile(NUMBER + WS + "\\+" + WS + NUMBER), - Pattern.compile(NUMBER + WS + "\\-" + WS + NUMBER) + Pattern.compile(NUMBER + WS + "(\\*|/)" + WS + NUMBER), + Pattern.compile(NUMBER + WS + "(\\+|\\-)" + WS + NUMBER), }; private static String normalizeOperation(String queryString) { @@ -42,14 +40,15 @@ private static String normalizeOperation(String queryString) { Pattern operation = OPERATIONS[i]; Matcher matcher; while ((matcher = operation.matcher(queryString)).find()) { + char operator = matcher.group(2).charAt(0); BigDecimal first = new BigDecimal(matcher.group(1)); - BigDecimal second = new BigDecimal(matcher.group(2)); + BigDecimal second = new BigDecimal(matcher.group(3)); BigDecimal result; - switch (i) { - case 0: result = first.multiply(second); break; - case 1: result = first.divide(second, 10, RoundingMode.HALF_UP); break; - case 2: result = first.add(second); break; - case 3: result = first.subtract(second); break; + switch (operator) { + case '*': result = first.multiply(second); break; + case '/': result = first.divide(second, 10, RoundingMode.HALF_UP); break; + case '+': result = first.add(second); break; + case '-': result = first.subtract(second); break; default: throw new IllegalStateException(); } StringBuffer buffer = new StringBuffer(); diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java index 0b1c1a7f2d..c601209ce5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/SerializerBase.java @@ -190,10 +190,10 @@ public void setStrict(boolean strict) { @Override public String toString() { if (normalize) { - return Normalization.normalize(builder.toString()); + return Normalization.normalize(builder.toString()); } else { return builder.toString(); - } + } } @Override diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java index 431150abd5..e9117439d2 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java @@ -60,6 +60,8 @@ public static > NumberExpression create(Clas public static final NumberExpression THREE = create(Integer.class, "3"); + public static final NumberExpression FOUR = create(Integer.class, "4"); + public static final NumberExpression ZERO = create(Integer.class, "0"); private final TemplateExpressionImpl templateMixin; diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java index 538bc869fe..6ed3f58f93 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java @@ -30,6 +30,11 @@ public void Variables() { assertEquals("var1 + 3", Normalization.normalize("var1 + 3")); } + @Test + public void Arithmetic() { + assertEquals("3", Normalization.normalize("1 - 2 + 4")); + } + @Test public void Normalize_Addition() { assertEquals("3", Normalization.normalize("1+2")); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java b/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java index 716a29b72e..e532e82775 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java @@ -89,7 +89,7 @@ public static void initConfiguration(SQLTemplates templates) { private static Connection getDB2() throws SQLException, ClassNotFoundException { Class.forName("com.ibm.db2.jcc.DB2Driver"); - String url = "jdbc:db2://192.168.0.14:50001/SAMPLE"; + String url = "jdbc:db2://192.168.0.24:50001/SAMPLE"; return DriverManager.getConnection(url, "db2inst1", "a3sd!fDj"); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index 9012f23d6e..b0bf7d94c4 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -125,6 +125,29 @@ public void All() { } } + @Test + public void Arithmetic() { + NumberExpression one = NumberTemplate.create(Integer.class, "(1.0)"); + NumberExpression two = NumberTemplate.create(Integer.class, "(2.0)"); + NumberExpression three = NumberTemplate.create(Integer.class, "(3.0)"); + NumberExpression four = NumberTemplate.create(Integer.class, "(4.0)"); + + assertEquals(1, query().singleResult(one).intValue()); + assertEquals(2, query().singleResult(two).intValue()); + assertEquals(4, query().singleResult(four).intValue()); + + assertEquals(3, query().singleResult(one.subtract(two).add(four)).intValue()); + assertEquals(-5, query().singleResult(one.subtract(two.add(four))).intValue()); + assertEquals(-1, query().singleResult(one.add(two).subtract(four)).intValue()); + assertEquals(-1, query().singleResult(one.add(two.subtract(four))).intValue()); + + assertEquals(12, query().singleResult(one.add(two).multiply(four)).intValue()); + assertEquals(2, query().singleResult(four.multiply(one).divide(two)).intValue()); + assertEquals(2, query().singleResult(four.multiply(one.divide(two))).intValue()); + assertEquals(6, query().singleResult(four.divide(two).multiply(three)).intValue()); + assertEquals(1, query().singleResult(four.divide(two.multiply(two))).intValue()); + } + @Test @IncludeIn(POSTGRESQL) // TODO generalize array literal projections public void Array() { From b306f74075cf4495c85aa3df9ec5e7aa6bdf0187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 28 Feb 2015 19:26:20 +0200 Subject: [PATCH 0770/1968] Improve DB2 patterns --- .../java/com/querydsl/sql/DB2Templates.java | 9 ++++++ .../com/querydsl/sql/DB2TemplatesTest.java | 31 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java index 3ba2d6ff34..3abc054213 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java @@ -144,6 +144,15 @@ public DB2Templates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); + setPrecedence(7, Ops.CONCAT); + setPrecedence(19, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, + Ops.IN, Ops.NOT_IN, Ops.EXISTS); + + // other like cases + setPrecedence(19, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + Ops.STARTS_WITH, Ops.STARTS_WITH_IC, + Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); + add(SQLOps.NEXTVAL, "next value for {0s}"); add(Ops.MathOps.RANDOM, "rand()"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java index ad0d3f1ac0..d396ecd8c4 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/DB2TemplatesTest.java @@ -13,6 +13,12 @@ */ package com.querydsl.sql; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.querydsl.core.types.Ops; + public class DB2TemplatesTest extends AbstractSQLTemplatesTest{ @Override @@ -20,4 +26,29 @@ protected SQLTemplates createTemplates() { return new DB2Templates(); } + @Test + public void Precedence() { + // Expressions within parentheses are evaluated first. When the order of evaluation is not + // specified by parentheses, prefix operators are applied before multiplication and division, + // and multiplication, division, and concatenation are applied before addition and subtraction. + // Operators at the same precedence level are applied from left to right. + + int p1 = getPrecedence(Ops.NEGATE); + int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.CONCAT); + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + int p4 = getPrecedence(Ops.EQ, Ops.NE, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + int p5 = getPrecedence(Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.EXISTS); + int p6 = getPrecedence(Ops.NOT); + int p7 = getPrecedence(Ops.AND); + int p8 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } + } From 622a1fde8fa4361d9b227533a582dcf51ca1f9f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 28 Feb 2015 22:47:44 +0200 Subject: [PATCH 0771/1968] Centralize Templates precedence validations --- .../collections/CollQueryTemplatesTest.java | 14 ++++++++ .../querydsl/core/support/Normalization.java | 2 +- .../core/support/NormalizationTest.java | 5 +++ .../core/types/TemplatesTestUtils.java | 32 +++++++++++++++++++ .../com/querydsl/jdo/JDOQLTemplatesTest.java | 19 ++--------- .../java/com/querydsl/jpa/JPQLTemplates.java | 10 +++--- .../jpa/JPACollectionAnyVisitorTest.java | 16 ++++++---- .../com/querydsl/jpa/JPQLSerializerTest.java | 2 +- .../com/querydsl/jpa/JPQLTemplatesTest.java | 18 ++--------- .../querydsl/jpa/StringOperationsTest.java | 6 ++-- .../java/com/querydsl/sql/DerbyTemplates.java | 2 +- .../com/querydsl/sql/FirebirdTemplates.java | 4 +-- .../java/com/querydsl/sql/MySQLTemplates.java | 2 +- .../com/querydsl/sql/OracleTemplates.java | 2 +- .../com/querydsl/sql/SQLServerTemplates.java | 2 +- .../java/com/querydsl/sql/SQLTemplates.java | 4 +-- .../sql/AbstractSQLTemplatesTest.java | 26 +++------------ 17 files changed, 87 insertions(+), 79 deletions(-) create mode 100644 querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java create mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/TemplatesTestUtils.java diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java new file mode 100644 index 0000000000..0ceef79b2c --- /dev/null +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTemplatesTest.java @@ -0,0 +1,14 @@ +package com.querydsl.collections; + +import org.junit.Test; + +import com.querydsl.core.types.TemplatesTestUtils; + +public class CollQueryTemplatesTest { + + @Test + public void Generic_Precedence() { + TemplatesTestUtils.testPrecedence(CollQueryTemplates.DEFAULT); + } + +} diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java index 840597e6a5..6d837f69b6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java @@ -26,7 +26,7 @@ public final class Normalization { // TODO simplify private static final Pattern FULL_OPERATION = Pattern.compile( - "(? -1) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (str.contains(" like ") && precedence != likePrecedence) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (!str.contains("(") && precedence < 0) { + Assert.fail("Unexpected precedence for " + op + " with template " + template); + } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { + Assert.fail("Unsafe pattern for " + op + " with template " + template); + } + } + } + + private TemplatesTestUtils() {} + +} diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java index c7cd5f53cf..26c7481912 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/JDOQLTemplatesTest.java @@ -7,9 +7,7 @@ import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Template; - -import junit.framework.Assert; +import com.querydsl.core.types.TemplatesTestUtils; public class JDOQLTemplatesTest { @@ -54,20 +52,7 @@ protected int getPrecedence(Operator... ops) { @Test public void Generic_Precedence() { - JDOQLTemplates templates = JDOQLTemplates.DEFAULT; - int likePrecedence = templates.getPrecedence(Ops.LIKE); - for (Operator op : Ops.values()) { - Template template = templates.getTemplate(op); - String str = template.toString(); - int precedence = templates.getPrecedence(op); - if (str.contains(" like ") && precedence != likePrecedence) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!str.contains("(") && precedence < 0) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { - Assert.fail("Unsafe pattern for " + op + " with template " + template); - } - } + TemplatesTestUtils.testPrecedence(JDOQLTemplates.DEFAULT); } } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index bb87a113af..65dd406314 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -48,7 +48,7 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { super(escape); this.queryHandler = queryHandler; - setPrecedence(18, Ops.BETWEEN, Ops.COL_IS_EMPTY, Ops.MAP_IS_EMPTY); + setPrecedence(18, Ops.BETWEEN, Ops.COL_IS_EMPTY); // other like cases setPrecedence(18, Ops.MATCHES, Ops.MATCHES_IC, @@ -73,7 +73,7 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { // numeric add(Ops.MathOps.SQRT, "sqrt({0})"); - add(Ops.MOD, "mod({0},{1})", 0); + add(Ops.MOD, "mod({0},{1})", -1); // various add(Ops.NE, "{0} <> {1}"); @@ -94,12 +94,12 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { // string add(Ops.LIKE, "{0} like {1} escape '"+escape+"'"); - add(Ops.CONCAT, "concat({0},{1})",0); + add(Ops.CONCAT, "concat({0},{1})", -1); add(Ops.MATCHES, "{0} like {1} escape '"+escape+"'"); // TODO : support real regexes add(Ops.MATCHES_IC, "{0} like {1} escape '"+escape+"'"); // TODO : support real regexes add(Ops.LOWER, "lower({0})"); - add(Ops.SUBSTR_1ARG, "substring({0},{1s}+1)", 1); - add(Ops.SUBSTR_2ARGS, "substring({0},{1s}+1,{2s}-{1s})", 1); + add(Ops.SUBSTR_1ARG, "substring({0},({1s})+1)", -1); // TODO simplify + add(Ops.SUBSTR_2ARGS, "substring({0},({1s})+1,({2s})-({1s}))", -1); // TODO simplify add(Ops.TRIM, "trim({0})"); add(Ops.UPPER, "upper({0})"); add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}"); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java index e1395c21e2..2f39375b07 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java @@ -13,17 +13,19 @@ */ package com.querydsl.jpa; -import com.querydsl.jpa.domain.JobFunction; -import com.querydsl.jpa.domain.QCat; -import com.querydsl.jpa.domain.QDomesticCat; -import com.querydsl.jpa.domain.QEmployee; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + import com.querydsl.core.support.Context; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.TemplateExpressionImpl; -import org.junit.Test; -import static org.junit.Assert.assertTrue; +import com.querydsl.jpa.domain.JobFunction; +import com.querydsl.jpa.domain.QCat; +import com.querydsl.jpa.domain.QDomesticCat; +import com.querydsl.jpa.domain.QEmployee; public class JPACollectionAnyVisitorTest { @@ -63,7 +65,7 @@ public void Simple_StringOperation() { Predicate predicate = cat.kittens.any().name.substring(1).eq("uth123"); assertMatches("exists \\(select 1\n"+ "from cat.kittens as cat_kittens.*\n" + - "where substring\\(cat_kittens.*\\.name,2\\) = \\?1\\)", serialize(predicate)); + "where substring\\(cat_kittens.*\\.name,\\(1\\)\\+1\\) = \\?1\\)", serialize(predicate)); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java index 71efdf2e49..84c6f88d6d 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java @@ -192,7 +192,7 @@ public void Substring() { JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); QCat cat = QCat.cat; serializer.handle(cat.name.substring(cat.name.length().subtract(1), 1)); - assertEquals("substring(cat.name,(length(cat.name) - ?1)+1,1-(length(cat.name) - ?1))", serializer.toString()); + assertEquals("substring(cat.name,(length(cat.name) - ?1)+1,(1)-(length(cat.name) - ?1))", serializer.toString()); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java index 0ffe4cb78e..761d876a70 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLTemplatesTest.java @@ -11,10 +11,8 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Template; import com.querydsl.core.types.Templates; - -import junit.framework.Assert; +import com.querydsl.core.types.TemplatesTestUtils; public class JPQLTemplatesTest { @@ -81,19 +79,7 @@ protected int getPrecedence(Operator... ops) { public void Generic_Precedence() { for (JPQLTemplates templates : ImmutableList.of( JPQLTemplates.DEFAULT, HQLTemplates.DEFAULT, EclipseLinkTemplates.DEFAULT)) { - int likePrecedence = templates.getPrecedence(Ops.LIKE); - for (Operator op : Ops.values()) { - Template template = templates.getTemplate(op); - String str = template.toString(); - int precedence = templates.getPrecedence(op); - if (str.contains(" like ") && precedence != likePrecedence) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!str.contains("(") && precedence < 0) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { - Assert.fail("Unsafe pattern for " + op + " with template " + template); - } - } + TemplatesTestUtils.testPrecedence(templates); } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java index e680375602..eb04498d11 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java @@ -49,17 +49,17 @@ public void IndexOf() { Expression startIndex = Expressions.constant(0); Expression endIndex = NumberOperation.create(Integer.class, Ops.INDEX_OF, path, Expressions.constant("x")); Expression substr = StringOperation.create(Ops.SUBSTR_2ARGS, path, startIndex, endIndex); - assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", substr); + assertToString("substring(cat.name,(0)+1,((locate(?1,cat.name)-1))-(0))", substr); } @Test public void IndexOf2() { StringPath str = QCat.cat.name; - assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", str.substring(0, str.indexOf("x"))); + assertToString("substring(cat.name,(0)+1,((locate(?1,cat.name)-1))-(0))", str.substring(0, str.indexOf("x"))); } @Test public void IndexOf3() { - assertToString("substring(cat.name,2,1)", QCat.cat.name.substring(1,2)); + assertToString("substring(cat.name,(1)+1,(2)-(1))", QCat.cat.name.substring(1,2)); } } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java index 1822e1886c..dcbf6a69cb 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java @@ -62,7 +62,7 @@ public DerbyTemplates(char escape, boolean quote) { setPrecedence(18, Ops.BETWEEN, Ops.EXISTS); - add(Ops.CONCAT, "varchar({0} || {1})"); + add(Ops.CONCAT, "varchar({0} || {1})", -1); add(SQLOps.NEXTVAL, "next value for {0s}"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java index d77a5ae782..417f4c48f9 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java @@ -48,8 +48,8 @@ public FirebirdTemplates(char escape, boolean quote) { // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); - add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)", 1); - add(Ops.SUBSTR_2ARGS, "substring({0} from {1s}+1 for {2s}-{1s})", 1); + add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)"); + add(Ops.SUBSTR_2ARGS, "substring({0} from {1s}+1 for {2s}-{1s})"); add(Ops.INDEX_OF, "(position({1},{0})-1)"); add(Ops.INDEX_OF_2ARGS, "(position({1},{0},{2s}+1)-1)"); add(Ops.StringOps.LOCATE, "position({0},{1})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java index 7aeec4c1de..567dbe129f 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java @@ -104,7 +104,7 @@ public MySQLTemplates(char escape, boolean quote) { setNullsLast(null); add(Ops.MOD, "{0} % {1}", 7); - add(Ops.CONCAT, "concat({0}, {1})", 0); + add(Ops.CONCAT, "concat({0}, {1})", -1); add(Ops.StringOps.LPAD, "lpad({0},{1},' ')"); add(Ops.StringOps.RPAD, "rpad({0},{1},' ')"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index 7513207abe..d713195078 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -86,7 +86,7 @@ public OracleTemplates(char escape, boolean quote) { // String add(Ops.INDEX_OF, "(instrb({0},{1})-1)"); add(Ops.INDEX_OF_2ARGS, "(instrb({0},{1},{2}+1)-1)"); - add(Ops.MATCHES, "regexp_like({0},{1})"); + add(Ops.MATCHES, "regexp_like({0},{1})", -1); add(Ops.StringOps.LOCATE, "instr({1},{0})"); add(Ops.StringOps.LOCATE2, "instr({1},{0},{2s})"); add(Ops.StringOps.LEFT, "substr({0},1,{1})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index ef835295e0..272699560b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -80,7 +80,7 @@ public SQLServerTemplates(char escape, boolean quote) { add(Ops.STRING_IS_EMPTY, "len({0}) = 0", 18); add(Ops.STRING_LENGTH, "len({0})"); add(Ops.SUBSTR_1ARG, "substring({0},{1}+1,255)"); - add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2s}-{1s})", 1); + add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2s}-{1s})"); add(Ops.TRIM, "ltrim(rtrim({0}))"); add(Ops.StringOps.LOCATE, "charindex({0},{1})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index a7d438de91..30271af5de 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -363,8 +363,8 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.INDEX_OF, "(locate({1},{0})-1)"); add(Ops.INDEX_OF_2ARGS, "(locate({1},{0},{2s}+1)-1)"); add(Ops.STRING_IS_EMPTY, "length({0}) = 0"); - add(Ops.SUBSTR_1ARG, "substr({0},{1s}+1)", 1); - add(Ops.SUBSTR_2ARGS, "substr({0},{1s}+1,{2s}-{1s})", 1); + add(Ops.SUBSTR_1ARG, "substr({0},{1s}+1)"); + add(Ops.SUBSTR_2ARGS, "substr({0},{1s}+1,{2s}-{1s})"); add(Ops.StringOps.LOCATE, "locate({0},{1})"); add(Ops.StringOps.LOCATE2, "locate({0},{1},{2})"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java index 413a3e11a5..9d84b9571f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java @@ -19,14 +19,15 @@ import org.junit.Test; import com.querydsl.core.support.Expressions; -import com.querydsl.core.types.*; +import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Operator; +import com.querydsl.core.types.Path; +import com.querydsl.core.types.TemplatesTestUtils; import com.querydsl.core.types.expr.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; import com.querydsl.sql.domain.QSurvey; -import junit.framework.Assert; - public abstract class AbstractSQLTemplatesTest { protected static final QSurvey survey1 = new QSurvey("survey1"); @@ -106,24 +107,7 @@ protected int getPrecedence(Operator... ops) { @Test public void Generic_Precedence() { - int likePrecedence = templates.getPrecedence(Ops.LIKE); - int eqPrecedence = templates.getPrecedence(Ops.EQ); - if (templates.getPrecedence(Ops.EQ_IGNORE_CASE) != eqPrecedence) { - Assert.fail("Unexpected precedence for EQ_IGNORE_CASE " - + templates.getPrecedence(Ops.EQ_IGNORE_CASE)); - } - for (Operator op : Ops.values()) { - Template template = templates.getTemplate(op); - String str = template.toString(); - int precedence = templates.getPrecedence(op); - if (str.contains(" like ") && precedence != likePrecedence) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!str.contains("(") && precedence < 0) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { - Assert.fail("Unsafe pattern for " + op + " with template " + template); - } - } + TemplatesTestUtils.testPrecedence(templates); } @Test From 4291becd30ca2aa17d4f46a652a6b25459b2a55c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 1 Mar 2015 01:26:45 +0200 Subject: [PATCH 0772/1968] Extend arithmetic tests --- .../java/com/querydsl/sql/SelectBase.java | 40 +++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index b0bf7d94c4..7abcb2ab8a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -125,13 +125,8 @@ public void All() { } } - @Test - public void Arithmetic() { - NumberExpression one = NumberTemplate.create(Integer.class, "(1.0)"); - NumberExpression two = NumberTemplate.create(Integer.class, "(2.0)"); - NumberExpression three = NumberTemplate.create(Integer.class, "(3.0)"); - NumberExpression four = NumberTemplate.create(Integer.class, "(4.0)"); - + private void arithmeticTests(NumberExpression one, NumberExpression two, + NumberExpression three, NumberExpression four) { assertEquals(1, query().singleResult(one).intValue()); assertEquals(2, query().singleResult(two).intValue()); assertEquals(4, query().singleResult(four).intValue()); @@ -148,6 +143,37 @@ public void Arithmetic() { assertEquals(1, query().singleResult(four.divide(two.multiply(two))).intValue()); } + @Test + public void Arithmetic() { + NumberExpression one = NumberTemplate.create(Integer.class, "(1.0)"); + NumberExpression two = NumberTemplate.create(Integer.class, "(2.0)"); + NumberExpression three = NumberTemplate.create(Integer.class, "(3.0)"); + NumberExpression four = NumberTemplate.create(Integer.class, "(4.0)"); + arithmeticTests(one, two, three, four); + } + + @Test + public void Arithmetic2() { + NumberExpression one = NumberTemplate.ONE; + NumberExpression two = NumberTemplate.TWO; + NumberExpression three = NumberTemplate.THREE; + NumberExpression four = NumberTemplate.FOUR; + arithmeticTests(one, two, three, four); + } + + @Test + public void Arithmetic_Mod() { + NumberExpression one = NumberTemplate.create(Integer.class, "(1)"); + NumberExpression two = NumberTemplate.create(Integer.class, "(2)"); + NumberExpression three = NumberTemplate.create(Integer.class, "(3)"); + NumberExpression four = NumberTemplate.create(Integer.class, "(4)"); + + assertEquals(4, query().singleResult(four.mod(three).add(three)).intValue()); + assertEquals(1, query().singleResult(four.mod(two.add(one))).intValue()); + assertEquals(0, query().singleResult(four.mod(two.multiply(one))).intValue()); + assertEquals(2, query().singleResult(four.add(one).mod(three)).intValue()); + } + @Test @IncludeIn(POSTGRESQL) // TODO generalize array literal projections public void Array() { From 2f5d617424158af1e156bade0ea222750622ae78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 1 Mar 2015 22:28:08 +0200 Subject: [PATCH 0773/1968] Improve HSQLDB patterns --- .../com/querydsl/sql/HSQLDBTemplates.java | 11 +++++++ .../com/querydsl/sql/HSQLDBTemplatesTest.java | 33 +++++++++++++++++++ .../com/querydsl/sql/SerializationTest.java | 2 +- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java index ba158e70ae..04ab9526d6 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java @@ -51,6 +51,17 @@ public HSQLDBTemplates(char escape, boolean quote) { setAutoIncrement(" identity"); setDefaultValues("\ndefault values"); setFunctionJoinsWrapped(true); + + setPrecedence(7, Ops.CONCAT); + setPrecedence(17, Ops.NOT); + setPrecedence(19, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, + Ops.IN, Ops.NOT_IN, Ops.EXISTS); + + // other like cases + setPrecedence(19, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + Ops.STARTS_WITH, Ops.STARTS_WITH_IC, + Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); + add(Ops.TRIM, "trim(both from {0})"); add(Ops.NEGATE, "({0} * -1)", -1); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java index 3986256e5d..2e59205c85 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java @@ -13,6 +13,12 @@ */ package com.querydsl.sql; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.querydsl.core.types.Ops; + public class HSQLDBTemplatesTest extends AbstractSQLTemplatesTest{ @Override @@ -20,4 +26,31 @@ protected SQLTemplates createTemplates() { return new HSQLDBTemplates(); } + @Test + public void Precedence() { + // Evaluation from left to right. Parentheses group operations. + // Multiplication and division take precedence over addition and subtraction. + // AND takes precedence over OR. + // NOT applies to the immediate term. + // LIKE applies to the result of any string concatenation to the right. + // Comparison ops are not combined without logical ops so there is no precedence issue. + + int p1 = getPrecedence(Ops.NEGATE); + int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.CONCAT); + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + int p4 = getPrecedence(Ops.NOT); + int p5 = getPrecedence(Ops.EQ, Ops.NE, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + int p6 = getPrecedence(Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.EXISTS); + int p7 = getPrecedence(Ops.AND); + int p8 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } + } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java index 9d2e5aec4e..2681af3a8a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SerializationTest.java @@ -149,7 +149,7 @@ public void FunctionCall3() { assertEquals("from SURVEY SURVEY\n" + "join table(TableValuedFunction(?)) as tokFunc\n" + - "on not SURVEY.NAME like tokFunc.prop escape '\\'", q.toString()); + "on not (SURVEY.NAME like tokFunc.prop escape '\\')", q.toString()); } @Test From c1d9ca16f766c2d06e5876ecb39566e8cd00f193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Mar 2015 22:20:28 +0200 Subject: [PATCH 0774/1968] Use constants instead of literals for precedence values --- .../com/querydsl/core/types/Templates.java | 86 +++++++++++-------- .../core/types/JavaTemplatesTest.java | 59 +++++++++++++ .../core/types/path/BeanPathTest.java | 4 +- .../java/com/querydsl/jdo/JDOQLTemplates.java | 4 +- .../java/com/querydsl/jpa/JPQLTemplates.java | 15 ++-- .../java/com/querydsl/sql/DB2Templates.java | 7 +- .../java/com/querydsl/sql/DerbyTemplates.java | 2 +- .../com/querydsl/sql/FirebirdTemplates.java | 5 +- .../java/com/querydsl/sql/H2Templates.java | 5 ++ .../com/querydsl/sql/HSQLDBTemplates.java | 9 +- .../java/com/querydsl/sql/MySQLTemplates.java | 5 +- .../com/querydsl/sql/OracleTemplates.java | 5 +- .../com/querydsl/sql/PostgreSQLTemplates.java | 16 ++-- .../com/querydsl/sql/SQLServerTemplates.java | 17 ++-- .../java/com/querydsl/sql/SQLTemplates.java | 30 +++---- .../com/querydsl/sql/SQLiteTemplates.java | 5 +- .../com/querydsl/sql/TeradataTemplates.java | 6 +- .../com/querydsl/sql/H2TemplatesTest.java | 31 +++++++ .../sql/SQLServer2005TemplatesTest.java | 2 +- 19 files changed, 215 insertions(+), 98 deletions(-) create mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/JavaTemplatesTest.java diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java index b6e82f9527..6ed7e8c18d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java @@ -25,6 +25,21 @@ */ public class Templates { + protected static class Precedence { + public static final int HIGHEST = -1; + public static final int NOT_HIGH = 10; + public static final int NEGATE = 20; + public static final int ARITH_HIGH = 30; + public static final int ARITH_LOW = 40; + public static final int COMPARISON = 50; + public static final int EQUALITY = 60; + public static final int CASE = 70, LIST = 70; + public static final int NOT = 80; + public static final int AND = 90; + public static final int XOR = 100, XNOR = 100; + public static final int OR = 110; + } + public static final Templates DEFAULT = new Templates(); private final Map templates = new IdentityHashMap(150); @@ -48,16 +63,16 @@ public String escapeForLike(String str) { }; //CHECKSTYLE:OFF - add(Ops.LIST, "{0}, {1}", 40); - add(Ops.SINGLETON, "{0}", 40); + add(Ops.LIST, "{0}, {1}", Precedence.LIST); + add(Ops.SINGLETON, "{0}", Precedence.LIST); add(Ops.WRAPPED, "({0})"); // boolean - add(Ops.AND, "{0} && {1}", 36); - add(Ops.NOT, "!{0}", 3); - add(Ops.OR, "{0} || {1}", 38); - add(Ops.XNOR, "{0} xnor {1}", 37); - add(Ops.XOR, "{0} xor {1}", 37); + add(Ops.AND, "{0} && {1}", Precedence.AND); + add(Ops.NOT, "!{0}", Precedence.NOT_HIGH); + add(Ops.OR, "{0} || {1}", Precedence.OR); + add(Ops.XNOR, "{0} xnor {1}", Precedence.XNOR); + add(Ops.XOR, "{0} xor {1}", Precedence.XOR); // collection add(Ops.COL_IS_EMPTY, "empty({0})"); @@ -73,36 +88,37 @@ public String escapeForLike(String str) { add(Ops.CONTAINS_VALUE, "containsValue({0},{1})"); // comparison - add(Ops.BETWEEN, "{0} between {1} and {2}", 30); - add(Ops.GOE, "{0} >= {1}", 18); - add(Ops.GT, "{0} > {1}", 18); - add(Ops.LOE, "{0} <= {1}", 18); - add(Ops.LT, "{0} < {1}", 18); + add(Ops.BETWEEN, "{0} between {1} and {2}", Precedence.COMPARISON); + add(Ops.GOE, "{0} >= {1}", Precedence.COMPARISON); + add(Ops.GT, "{0} > {1}", Precedence.COMPARISON); + add(Ops.LOE, "{0} <= {1}", Precedence.COMPARISON); + add(Ops.LT, "{0} < {1}", Precedence.COMPARISON); // numeric - add(Ops.NEGATE, "-{0}", 6); - add(Ops.ADD, "{0} + {1}", 12); - add(Ops.DIV, "{0} / {1}", 7); - add(Ops.MOD, "{0} % {1}", 7); - add(Ops.MULT, "{0} * {1}", 7); - add(Ops.SUB, "{0} - {1}", 12); + add(Ops.NEGATE, "-{0}", Precedence.NEGATE); + add(Ops.ADD, "{0} + {1}", Precedence.ARITH_LOW); + add(Ops.DIV, "{0} / {1}", Precedence.ARITH_HIGH); + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); + add(Ops.MULT, "{0} * {1}", Precedence.ARITH_HIGH); + add(Ops.SUB, "{0} - {1}", Precedence.ARITH_LOW); // various - add(Ops.EQ, "{0} = {1}", 18); - add(Ops.EQ_IGNORE_CASE, "eqIc({0},{1})", 18); - add(Ops.INSTANCE_OF, "{0}.class = {1}", 18); - add(Ops.NE, "{0} != {1}", 18); - add(Ops.IN, "{0} in {1}", 18); - add(Ops.NOT_IN, "{0} not in {1}", 27); - add(Ops.IS_NULL, "{0} is null", 18); - add(Ops.IS_NOT_NULL, "{0} is not null", 18); + add(Ops.EQ, "{0} = {1}", Precedence.EQUALITY); + add(Ops.EQ_IGNORE_CASE, "eqIc({0},{1})", Precedence.EQUALITY); + add(Ops.INSTANCE_OF, "{0} instanceof {1}", Precedence.COMPARISON); + add(Ops.NE, "{0} != {1}", Precedence.EQUALITY); + + add(Ops.IN, "{0} in {1}", Precedence.COMPARISON); + add(Ops.NOT_IN, "{0} not in {1}", Precedence.COMPARISON); + add(Ops.IS_NULL, "{0} is null", Precedence.COMPARISON); + add(Ops.IS_NOT_NULL, "{0} is not null", Precedence.COMPARISON); add(Ops.ALIAS, "{0} as {1}", 0); add(Ops.NUMCAST, "cast({0},{1})"); add(Ops.STRING_CAST, "str({0})"); // string - add(Ops.CONCAT, "{0} + {1}", 37); + add(Ops.CONCAT, "{0} + {1}", Precedence.ARITH_LOW); add(Ops.LOWER, "lower({0})"); add(Ops.SUBSTR_1ARG, "substring({0},{1})"); add(Ops.SUBSTR_2ARGS, "substring({0},{1},{2})"); @@ -121,8 +137,8 @@ public String escapeForLike(String str) { add(Ops.INDEX_OF, "indexOf({0},{1})"); add(Ops.INDEX_OF_2ARGS, "indexOf({0},{1},{2})"); add(Ops.STRING_IS_EMPTY, "empty({0})"); - add(Ops.LIKE, "{0} like {1}", 18); - add(Ops.LIKE_ESCAPE, "{0} like {1} escape '{2s}'", 18); + add(Ops.LIKE, "{0} like {1}", Precedence.COMPARISON); + add(Ops.LIKE_ESCAPE, "{0} like {1} escape '{2s}'", Precedence.COMPARISON); add(Ops.StringOps.LEFT, "left({0},{1})"); add(Ops.StringOps.RIGHT, "right({0},{1})"); @@ -228,14 +244,14 @@ public String escapeForLike(String str) { add(PathType.ARRAYVALUE_CONSTANT, "{0}[{1s}]"); // serialized constant // case - add(Ops.CASE, "case {0} end", 30); - add(Ops.CASE_WHEN, "when {0} then {1} {2}", 30); - add(Ops.CASE_ELSE, "else {0}", 30); + add(Ops.CASE, "case {0} end", Precedence.CASE); + add(Ops.CASE_WHEN, "when {0} then {1} {2}", Precedence.CASE); + add(Ops.CASE_ELSE, "else {0}", Precedence.CASE); // case for - add(Ops.CASE_EQ, "case {0} {1} end", 30); - add(Ops.CASE_EQ_WHEN, "when {1} then {2} {3}", 30); - add(Ops.CASE_EQ_ELSE, "else {0}", 30); + add(Ops.CASE_EQ, "case {0} {1} end", Precedence.CASE); + add(Ops.CASE_EQ_WHEN, "when {1} then {2} {3}", Precedence.CASE); + add(Ops.CASE_EQ_ELSE, "else {0}", Precedence.CASE); // coalesce add(Ops.COALESCE, "coalesce({0})"); diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/JavaTemplatesTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/JavaTemplatesTest.java new file mode 100644 index 0000000000..8818e4eae3 --- /dev/null +++ b/querydsl-core/src/test/java/com/querydsl/core/types/JavaTemplatesTest.java @@ -0,0 +1,59 @@ +package com.querydsl.core.types; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +public class JavaTemplatesTest { + + private Templates templates = JavaTemplates.DEFAULT; + + @Test + public void Precedence() { + // postfix expr++ expr-- + // unary ++expr --expr +expr -expr ~ ! + // multiplicative * / % + // additive + - + // shift << >> >>> + // relational < > <= >= instanceof + // equality == != + // bitwise AND & + // bitwise exclusive OR ^ + // bitwise inclusive OR | + // logical AND && + // logical OR || + // ternary ? : + // assignment = += -= *= /= %= &= ^= |= <<= >>= >>>= + + int p1 = getPrecedence(Ops.NOT); + int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + int p4 = getPrecedence(Ops.LT, Ops.GT, Ops.GOE, Ops.LOE, Ops.BETWEEN, Ops.INSTANCE_OF); + int p5 = getPrecedence(Ops.EQ, Ops.NE); + int p6 = getPrecedence(Ops.AND); + int p7 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + } + + @Test + public void Generic_Precedence() { + TemplatesTestUtils.testPrecedence(JavaTemplates.DEFAULT); + } + + protected int getPrecedence(Operator... ops) { + int precedence = templates.getPrecedence(ops[0]); + for (int i = 1; i < ops.length; i++) { + assertEquals(ops[i].name(), precedence, templates.getPrecedence(ops[i])); + } + return precedence; + } + + +} diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java index fbb0bcbe76..acd3065284 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/path/BeanPathTest.java @@ -103,8 +103,8 @@ public void InstanceOfAny() { BooleanExpression pred1 = beanPath.instanceOf(BeanPathTest.class).or(beanPath.instanceOf(SubClass.class)); BooleanExpression pred2 = beanPath.instanceOfAny(BeanPathTest.class, SubClass.class); assertEquals(pred1, pred2); - assertEquals("p.class = class com.querydsl.core.types.path.BeanPathTest || " + - "p.class = class com.querydsl.core.types.path.BeanPathTest$SubClass", pred2.toString()); + assertEquals("p instanceof class com.querydsl.core.types.path.BeanPathTest || " + + "p instanceof class com.querydsl.core.types.path.BeanPathTest$SubClass", pred2.toString()); } } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java index 7f0eaf193d..afff1eadfe 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java @@ -28,13 +28,11 @@ public final class JDOQLTemplates extends JavaTemplates { public static final JDOQLTemplates DEFAULT = new JDOQLTemplates(); protected JDOQLTemplates() { - setPrecedence(17, Ops.GOE, Ops.GT, Ops.LOE, Ops.LT, Ops.INSTANCE_OF); - // String add(Ops.STRING_CONTAINS, "({0}.indexOf({1}) > -1)", -1); add(Ops.STRING_CONTAINS_IC, "({0l}.indexOf({1l}) > -1)", -1); add(Ops.EQ_IGNORE_CASE, "{0l}.equals({1l})"); - add(Ops.STRING_IS_EMPTY, "{0} == \"\"", 18); + add(Ops.STRING_IS_EMPTY, "{0} == \"\"", Precedence.EQUALITY); add(Ops.LIKE, "{0}.like({1})"); add(Ops.LIKE_ESCAPE, "{0}.like({1})"); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index 65dd406314..6f76431679 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -48,10 +48,11 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { super(escape); this.queryHandler = queryHandler; - setPrecedence(18, Ops.BETWEEN, Ops.COL_IS_EMPTY); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.NE, Ops.EQ_IGNORE_CASE, + Ops.BETWEEN, Ops.COL_IS_EMPTY); // other like cases - setPrecedence(18, Ops.MATCHES, Ops.MATCHES_IC, + setPrecedence(Precedence.COMPARISON, Ops.MATCHES, Ops.MATCHES_IC, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, Ops.STARTS_WITH, Ops.STARTS_WITH_IC, Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); @@ -62,9 +63,9 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { //CHECKSTYLE:OFF // boolean - add(Ops.AND, "{0} and {1}", 36); - add(Ops.NOT, "not {0}", 35); - add(Ops.OR, "{0} or {1}", 37); + add(Ops.AND, "{0} and {1}"); + add(Ops.NOT, "not {0}", Precedence.NOT); + add(Ops.OR, "{0} or {1}"); add(Ops.XNOR, "{0} xnor {1}"); add(Ops.XOR, "{0} xor {1}"); @@ -83,8 +84,8 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(Ops.NUMCAST, "cast({0} as {1s})"); // collection - add(JPQLOps.MEMBER_OF, "{0} member of {1}", 18); - add(JPQLOps.NOT_MEMBER_OF, "{0} not member of {1}", 18); + add(JPQLOps.MEMBER_OF, "{0} member of {1}", Precedence.COMPARISON); + add(JPQLOps.NOT_MEMBER_OF, "{0} not member of {1}", Precedence.COMPARISON); add(Ops.IN, "{0} in {1}"); add(Ops.NOT_IN, "{0} not in {1}"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java index 3abc054213..6dfa940d16 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DB2Templates.java @@ -144,12 +144,13 @@ public DB2Templates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); - setPrecedence(7, Ops.CONCAT); - setPrecedence(19, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, + setPrecedence(Precedence.ARITH_HIGH, Ops.CONCAT); + setPrecedence(Precedence.COMPARISON - 1, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + setPrecedence(Precedence.COMPARISON, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.EXISTS); // other like cases - setPrecedence(19, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + setPrecedence(Precedence.COMPARISON, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, Ops.STARTS_WITH, Ops.STARTS_WITH_IC, Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java index dcbf6a69cb..3185c44479 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DerbyTemplates.java @@ -60,7 +60,7 @@ public DerbyTemplates(char escape, boolean quote) { setFunctionJoinsWrapped(true); setDefaultValues("\nvalues (default)"); - setPrecedence(18, Ops.BETWEEN, Ops.EXISTS); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE, Ops.EXISTS); add(Ops.CONCAT, "varchar({0} || {1})", -1); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java index 417f4c48f9..a3aebd1813 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java @@ -41,10 +41,9 @@ public FirebirdTemplates(char escape, boolean quote) { setWrapSelectParameters(true); setArraysSupported(false); - setPrecedence(6, Ops.NEGATE); - setPrecedence(18, Ops.BETWEEN); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); - add(Ops.CONCAT, "{0} || {1}", 5); + add(Ops.CONCAT, "{0} || {1}", Precedence.NEGATE - 1); // string add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java index 6903ffb0b4..eaad40a302 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/H2Templates.java @@ -51,6 +51,11 @@ public H2Templates(char escape, boolean quote) { setLimitRequired(true); setCountDistinctMultipleColumns(true); + setPrecedence(Precedence.ARITH_LOW + 1, Ops.CONCAT); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); + + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); + add(Ops.MathOps.ROUND, "round({0},0)"); add(Ops.TRIM, "trim(both from {0})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java index 04ab9526d6..06f28e545b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java @@ -52,13 +52,14 @@ public HSQLDBTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setFunctionJoinsWrapped(true); - setPrecedence(7, Ops.CONCAT); - setPrecedence(17, Ops.NOT); - setPrecedence(19, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, + setPrecedence(Precedence.ARITH_HIGH, Ops.CONCAT); + setPrecedence(Precedence.ARITH_LOW + 1, Ops.NOT); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); + setPrecedence(Precedence.COMPARISON + 1, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.EXISTS); // other like cases - setPrecedence(19, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + setPrecedence(Precedence.COMPARISON + 1, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, Ops.STARTS_WITH, Ops.STARTS_WITH_IC, Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java index 567dbe129f..31e34dd5d2 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/MySQLTemplates.java @@ -103,7 +103,10 @@ public MySQLTemplates(char escape, boolean quote) { setNullsFirst(null); setNullsLast(null); - add(Ops.MOD, "{0} % {1}", 7); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); + setPrecedence(Precedence.CASE, Ops.BETWEEN); + + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); add(Ops.CONCAT, "concat({0}, {1})", -1); add(Ops.StringOps.LPAD, "lpad({0},{1},' ')"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index d713195078..84c9451e72 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -72,11 +72,12 @@ public OracleTemplates(char escape, boolean quote) { setCountViaAnalytics(true); setListMaxSize(1000); - setPrecedence(19, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); + setPrecedence(Precedence.COMPARISON + 1, Ops.IS_NULL, Ops.IS_NOT_NULL, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.EXISTS); // other like cases - setPrecedence(19, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + setPrecedence(Precedence.COMPARISON + 1, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, Ops.STARTS_WITH, Ops.STARTS_WITH_IC, Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java index 1bfaad2cc3..f7a141f6fa 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java @@ -78,18 +78,20 @@ public PostgreSQLTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setSupportsUnquotedReservedWordsAsIdentifier(true); - setPrecedence(19, Ops.IN, Ops.CONCAT, Ops.MATCHES); - setPrecedence(20, Ops.BETWEEN); - setPrecedence(21, Ops.LIKE, Ops.LIKE_ESCAPE); - setPrecedence(22, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); - setPrecedence(23, Ops.EQ, Ops.EQ_IGNORE_CASE); + setPrecedence(Precedence.COMPARISON - 3, Ops.IS_NULL, Ops.IS_NOT_NULL); + setPrecedence(Precedence.COMPARISON - 2, Ops.CONCAT, Ops.MATCHES); + setPrecedence(Precedence.COMPARISON - 1, Ops.IN); + setPrecedence(Precedence.COMPARISON, Ops.BETWEEN); + setPrecedence(Precedence.COMPARISON + 1, Ops.LIKE, Ops.LIKE_ESCAPE); + setPrecedence(Precedence.COMPARISON + 2, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + setPrecedence(Precedence.COMPARISON + 3, Ops.EQ, Ops.EQ_IGNORE_CASE); // other like cases - setPrecedence(21, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + setPrecedence(Precedence.COMPARISON + 1, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, Ops.STARTS_WITH, Ops.STARTS_WITH_IC, Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); - add(Ops.MOD, "{0} % {1}", 7); + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); // String add(Ops.MATCHES, "{0} ~ {1}"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index 272699560b..e505f45346 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -60,24 +60,23 @@ public SQLServerTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setArraysSupported(false); - setPrecedence(12, Ops.NEGATE); - setPrecedence(28, Ops.NOT); - setPrecedence(29, Ops.AND); - setPrecedence(30, Ops.IN, Ops.NOT_IN, Ops.LIKE, Ops.LIKE_ESCAPE, Ops.OR); + setPrecedence(Precedence.ARITH_LOW, Ops.NEGATE); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); + setPrecedence(Precedence.OR, Ops.BETWEEN, Ops.IN, Ops.NOT_IN, Ops.LIKE, Ops.LIKE_ESCAPE); // other like cases - setPrecedence(30, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, + setPrecedence(Precedence.OR, Ops.ENDS_WITH, Ops.ENDS_WITH_IC, Ops.STARTS_WITH, Ops.STARTS_WITH_IC, Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); // String - add(Ops.CONCAT, "{0} + {1}", 12); + add(Ops.CONCAT, "{0} + {1}"); add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)"); add(Ops.INDEX_OF, "(charindex({1},{0})-1)"); add(Ops.INDEX_OF_2ARGS, "(charindex({1},{0},{2})-1)"); // NOTE : needs to be replaced with real regular expression - add(Ops.MATCHES, "{0} like {1}", 30); - add(Ops.STRING_IS_EMPTY, "len({0}) = 0", 18); + add(Ops.MATCHES, "{0} like {1}", Precedence.OR); + add(Ops.STRING_IS_EMPTY, "len({0}) = 0", Precedence.COMPARISON); add(Ops.STRING_LENGTH, "len({0})"); add(Ops.SUBSTR_1ARG, "substring({0},{1}+1,255)"); add(Ops.SUBSTR_2ARGS, "substring({0},{1}+1,{2s}-{1s})"); @@ -92,7 +91,7 @@ public SQLServerTemplates(char escape, boolean quote) { add(SQLOps.NEXTVAL, "{0s}.nextval"); - add(Ops.MOD, "{0} % {1}", 10); + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); add(Ops.MathOps.COSH, "(exp({0}) + exp({0} * -1)) / 2"); add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); add(Ops.MathOps.LN, "log({0})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index 30271af5de..c8f6f8ef30 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -302,16 +302,16 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(SQLOps.QUALIFY, "\nqualify {0}"); // boolean - add(Ops.AND, "{0} and {1}", 36); - add(Ops.NOT, "not {0}", 35); - add(Ops.OR, "{0} or {1}", 38); + add(Ops.AND, "{0} and {1}"); + add(Ops.NOT, "not {0}", Precedence.NOT); + add(Ops.OR, "{0} or {1}"); // math add(Ops.MathOps.RANDOM, "rand()"); add(Ops.MathOps.RANDOM2, "rand({0})"); add(Ops.MathOps.CEIL, "ceiling({0})"); add(Ops.MathOps.POWER, "power({0},{1})"); - add(Ops.MOD, "mod({0},{1})", -1); + add(Ops.MOD, "mod({0},{1})", Precedence.HIGHEST); // date time add(Ops.DateTimeOps.CURRENT_DATE, "current_date"); @@ -356,8 +356,8 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.DateTimeOps.TRUNC_SECOND, "date_trunc('second',{0})"); // string - add(Ops.CONCAT, "{0} || {1}", 12); - add(Ops.MATCHES, "{0} regexp {1}", 18); + add(Ops.CONCAT, "{0} || {1}", Precedence.ARITH_LOW); + add(Ops.MATCHES, "{0} regexp {1}", Precedence.COMPARISON); add(Ops.CHAR_AT, "cast(substr({0},{1s}+1,1) as char)"); add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}"); add(Ops.INDEX_OF, "(locate({1},{0})-1)"); @@ -369,17 +369,17 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.StringOps.LOCATE2, "locate({0},{1},{2})"); // like with escape - add(Ops.LIKE, "{0} like {1} escape '"+escape+"'", 18); - add(Ops.ENDS_WITH, "{0} like {%1} escape '"+escape+"'", 18); - add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '"+escape+"'", 18); - add(Ops.STARTS_WITH, "{0} like {1%} escape '"+escape+"'", 18); - add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '"+escape+"'", 18); - add(Ops.STRING_CONTAINS, "{0} like {%1%} escape '"+escape+"'", 18); - add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%} escape '"+escape+"'", 18); + add(Ops.LIKE, "{0} like {1} escape '"+escape+"'", Precedence.COMPARISON); + add(Ops.ENDS_WITH, "{0} like {%1} escape '"+escape+"'", Precedence.COMPARISON); + add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '"+escape+"'", Precedence.COMPARISON); + add(Ops.STARTS_WITH, "{0} like {1%} escape '"+escape+"'", Precedence.COMPARISON); + add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '"+escape+"'", Precedence.COMPARISON); + add(Ops.STRING_CONTAINS, "{0} like {%1%} escape '"+escape+"'", Precedence.COMPARISON); + add(Ops.STRING_CONTAINS_IC, "{0l} like {%%1%%} escape '"+escape+"'", Precedence.COMPARISON); add(SQLOps.CAST, "cast({0} as {1s})"); - add(SQLOps.UNION, "{0}\nunion\n{1}", 50); - add(SQLOps.UNION_ALL, "{0}\nunion all\n{1}", 50); + add(SQLOps.UNION, "{0}\nunion\n{1}", Precedence.LIST); + add(SQLOps.UNION_ALL, "{0}\nunion all\n{1}", Precedence.LIST); add(SQLOps.NEXTVAL, "nextval('{0s}')"); // analytic functions diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java index d253a7afd4..14d3a4c81d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java @@ -68,9 +68,10 @@ public SQLiteTemplates(char escape, boolean quote) { setDefaultValues("\ndefault values"); setArraysSupported(false); - setPrecedence(17, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + setPrecedence(Precedence.COMPARISON - 1, Ops.LT, Ops.GT, Ops.LOE, Ops.GOE); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); - add(Ops.MOD, "{0} % {1}", 7); + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); add(Ops.INDEX_OF, "(charindex({1},{0},1)-1)"); add(Ops.INDEX_OF_2ARGS, "(charindex({1},{0},{2s}+1)-1)"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java index 157a8750e8..0d49eaa58d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/TeradataTemplates.java @@ -62,11 +62,11 @@ public TeradataTemplates(char escape, boolean quote) { setCountViaAnalytics(true); setDefaultValues("\ndefault values"); - setPrecedence(13, Ops.CONCAT); - setPrecedence(18, Ops.BETWEEN, Ops.NOT_IN); + setPrecedence(Precedence.ARITH_LOW + 1, Ops.CONCAT); + setPrecedence(Precedence.COMPARISON, Ops.EQ, Ops.EQ_IGNORE_CASE, Ops.NE); add(Ops.NE, "{0} <> {1}"); - add(Ops.MOD, "{0} % {1}", 7); + add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); // String add(Ops.STRING_LENGTH, "character_length({0})"); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/H2TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/H2TemplatesTest.java index 1b1567fa59..1afff49408 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/H2TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/H2TemplatesTest.java @@ -17,6 +17,8 @@ import org.junit.Test; +import com.querydsl.core.types.Ops; + public class H2TemplatesTest extends AbstractSQLTemplatesTest{ @Override @@ -32,4 +34,33 @@ public void Builder() { assertNotNull(templates); } + + @Test + public void Precedence() { + // unary + // *, /, % + // +, - + // || + // comparison + // NOT + // AND + // OR + + int p1 = getPrecedence(Ops.NEGATE); + int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); + int p3 = getPrecedence(Ops.ADD, Ops.SUB); + int p4 = getPrecedence(Ops.CONCAT); + int p5 = getPrecedence(Ops.EQ, Ops.NE, Ops.LT, Ops.GT); // ... + int p6 = getPrecedence(Ops.NOT); + int p7 = getPrecedence(Ops.AND); + int p8 = getPrecedence(Ops.OR); + + assertTrue(p1 < p2); + assertTrue(p2 < p3); + assertTrue(p3 < p4); + assertTrue(p4 < p5); + assertTrue(p5 < p6); + assertTrue(p6 < p7); + assertTrue(p7 < p8); + } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java index d5d6dda39c..c502287702 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java @@ -84,7 +84,7 @@ public void NextVal() { public void Precedence() { // 1 ~ (Bitwise NOT) // 2 (Multiply), / (Division), % (Modulo) - int p2 = getPrecedence(Ops.MULT, Ops.DIV); + int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.MOD); // 3 + (Positive), - (Negative), + (Add), (+ Concatenate), - (Subtract), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR) int p3 = getPrecedence(Ops.NEGATE, Ops.ADD, Ops.SUB, Ops.CONCAT); // 4 =, >, <, >=, <=, <>, !=, !>, !< (Comparison operators) From 8a8cf8c66c3be82b2436f6e81ba5475aaf1d8346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 4 Mar 2015 23:30:40 +0200 Subject: [PATCH 0775/1968] Tune precedence mappings Add docs --- .../com/querydsl/core/types/JavaTemplates.java | 2 +- .../java/com/querydsl/core/types/Templates.java | 3 +++ .../querydsl/core/types/TemplatesTestUtils.java | 16 ++++++++++------ .../java/com/querydsl/jdo/JDOQLTemplates.java | 4 ++-- .../java/com/querydsl/jpa/JPQLTemplates.java | 12 ++++++------ .../jpa/JPACollectionAnyVisitorTest.java | 2 +- .../com/querydsl/jpa/JPQLSerializerTest.java | 2 +- .../com/querydsl/jpa/StringOperationsTest.java | 6 +++--- .../test/java/com/querydsl/jpa/SubQueryTest.java | 2 +- .../java/com/querydsl/sql/FirebirdTemplates.java | 14 +++++++------- .../java/com/querydsl/sql/HSQLDBTemplates.java | 4 ++-- .../java/com/querydsl/sql/OracleTemplates.java | 4 ++-- .../com/querydsl/sql/PostgreSQLTemplates.java | 4 ++-- .../com/querydsl/sql/SQLServerTemplates.java | 4 ++-- .../main/java/com/querydsl/sql/SQLTemplates.java | 12 ++++++------ .../java/com/querydsl/sql/SQLiteTemplates.java | 6 +++--- .../com/querydsl/sql/HSQLDBTemplatesTest.java | 4 ++-- 17 files changed, 54 insertions(+), 47 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java index e6c84334e8..ecfd05683b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/JavaTemplates.java @@ -42,7 +42,7 @@ public JavaTemplates() { add(Ops.COL_SIZE, "{0}.size()"); // array - add(Ops.ARRAY_SIZE, "{0}.length", 0); + add(Ops.ARRAY_SIZE, "{0}.length"); // map add(Ops.MAP_IS_EMPTY, "{0}.isEmpty()"); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java index 6ed7e8c18d..fb364f6e9b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/Templates.java @@ -25,6 +25,9 @@ */ public class Templates { + /** + * Precedence order based on Java language operator precedence + */ protected static class Precedence { public static final int HIGHEST = -1; public static final int NOT_HIGH = 10; diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/TemplatesTestUtils.java b/querydsl-core/src/test/java/com/querydsl/core/types/TemplatesTestUtils.java index c581b43e96..4689f11f0d 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/TemplatesTestUtils.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/TemplatesTestUtils.java @@ -15,14 +15,18 @@ public static void testPrecedence(Templates templates) { Template template = templates.getTemplate(op); String str = template.toString(); int precedence = templates.getPrecedence(op); - if (str.matches("\\w+\\([^\\(\\)]+\\)") && precedence > -1) { + if (str.contains(" like ") && precedence != likePrecedence) { Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (str.contains(" like ") && precedence != likePrecedence) { + } else if (!str.contains("(") && !str.contains(".") && precedence < 0) { Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (!str.contains("(") && precedence < 0) { - Assert.fail("Unexpected precedence for " + op + " with template " + template); - } else if (str.endsWith(" + 1") || str.endsWith("+1") || str.endsWith(" - 1") || str.endsWith("-1")) { - Assert.fail("Unsafe pattern for " + op + " with template " + template); + } else if (str.matches(".*[<>] ?\\-?\\d")) { + if (precedence != Templates.Precedence.COMPARISON) { + Assert.fail("Unsafe pattern for " + op + " with template " + template); + } + } else if (str.matches(".*[\\+\\-] ?\\-?\\d")) { + if (precedence != Templates.Precedence.ARITH_LOW && precedence != Templates.Precedence.ARITH_HIGH) { + Assert.fail("Unsafe pattern for " + op + " with template " + template); + } } } } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java index afff1eadfe..231c3bba4e 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQLTemplates.java @@ -29,8 +29,8 @@ public final class JDOQLTemplates extends JavaTemplates { protected JDOQLTemplates() { // String - add(Ops.STRING_CONTAINS, "({0}.indexOf({1}) > -1)", -1); - add(Ops.STRING_CONTAINS_IC, "({0l}.indexOf({1l}) > -1)", -1); + add(Ops.STRING_CONTAINS, "{0}.indexOf({1}) > -1", Precedence.COMPARISON); + add(Ops.STRING_CONTAINS_IC, "{0l}.indexOf({1l}) > -1", Precedence.COMPARISON); add(Ops.EQ_IGNORE_CASE, "{0l}.equals({1l})"); add(Ops.STRING_IS_EMPTY, "{0} == \"\"", Precedence.EQUALITY); add(Ops.LIKE, "{0}.like({1})"); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java index 6f76431679..89d17db52a 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLTemplates.java @@ -99,12 +99,12 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(Ops.MATCHES, "{0} like {1} escape '"+escape+"'"); // TODO : support real regexes add(Ops.MATCHES_IC, "{0} like {1} escape '"+escape+"'"); // TODO : support real regexes add(Ops.LOWER, "lower({0})"); - add(Ops.SUBSTR_1ARG, "substring({0},({1s})+1)", -1); // TODO simplify - add(Ops.SUBSTR_2ARGS, "substring({0},({1s})+1,({2s})-({1s}))", -1); // TODO simplify + add(Ops.SUBSTR_1ARG, "substring({0},{1s}+1)", Precedence.ARITH_LOW); + add(Ops.SUBSTR_2ARGS, "substring({0},{1s}+1,{2s}-{1s})", Precedence.ARITH_LOW); add(Ops.TRIM, "trim({0})"); add(Ops.UPPER, "upper({0})"); add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}"); - add(Ops.CHAR_AT, "cast(substring({0},{1s}+1,1) as char)"); + add(Ops.CHAR_AT, "cast(substring({0},{1s}+1,1) as char)", Precedence.ARITH_LOW); add(Ops.STRING_IS_EMPTY, "length({0}) = 0"); add(Ops.STRING_CONTAINS, "{0} like {%1%} escape '"+escape+"'"); @@ -113,8 +113,8 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(Ops.ENDS_WITH_IC, "{0l} like {%%1} escape '"+escape+"'"); add(Ops.STARTS_WITH, "{0} like {1%} escape '"+escape+"'"); add(Ops.STARTS_WITH_IC, "{0l} like {1%%} escape '"+escape+"'"); - add(Ops.INDEX_OF, "(locate({1},{0})-1)"); - add(Ops.INDEX_OF_2ARGS, "(locate({1},{0},{2s}+1)-1)"); + add(Ops.INDEX_OF, "locate({1},{0})-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2s}+1)-1", Precedence.ARITH_LOW); // date time add(Ops.DateTimeOps.SYSDATE, "sysdate"); @@ -130,7 +130,7 @@ protected JPQLTemplates(char escape, QueryHandler queryHandler) { add(Ops.DateTimeOps.MONTH, "month({0})"); add(Ops.DateTimeOps.YEAR, "year({0})"); - add(Ops.DateTimeOps.YEAR_MONTH, "year({0}) * 100 + month({0})"); + add(Ops.DateTimeOps.YEAR_MONTH, "year({0}) * 100 + month({0})", Precedence.ARITH_LOW); // path types add(PathType.PROPERTY, "{0}.{1s}"); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java index 2f39375b07..47284936f9 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java @@ -65,7 +65,7 @@ public void Simple_StringOperation() { Predicate predicate = cat.kittens.any().name.substring(1).eq("uth123"); assertMatches("exists \\(select 1\n"+ "from cat.kittens as cat_kittens.*\n" + - "where substring\\(cat_kittens.*\\.name,\\(1\\)\\+1\\) = \\?1\\)", serialize(predicate)); + "where substring\\(cat_kittens.*\\.name,2\\) = \\?1\\)", serialize(predicate)); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java index 84c6f88d6d..71efdf2e49 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java @@ -192,7 +192,7 @@ public void Substring() { JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT); QCat cat = QCat.cat; serializer.handle(cat.name.substring(cat.name.length().subtract(1), 1)); - assertEquals("substring(cat.name,(length(cat.name) - ?1)+1,(1)-(length(cat.name) - ?1))", serializer.toString()); + assertEquals("substring(cat.name,(length(cat.name) - ?1)+1,1-(length(cat.name) - ?1))", serializer.toString()); } @Test diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java index eb04498d11..e680375602 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java @@ -49,17 +49,17 @@ public void IndexOf() { Expression startIndex = Expressions.constant(0); Expression endIndex = NumberOperation.create(Integer.class, Ops.INDEX_OF, path, Expressions.constant("x")); Expression substr = StringOperation.create(Ops.SUBSTR_2ARGS, path, startIndex, endIndex); - assertToString("substring(cat.name,(0)+1,((locate(?1,cat.name)-1))-(0))", substr); + assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", substr); } @Test public void IndexOf2() { StringPath str = QCat.cat.name; - assertToString("substring(cat.name,(0)+1,((locate(?1,cat.name)-1))-(0))", str.substring(0, str.indexOf("x"))); + assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", str.substring(0, str.indexOf("x"))); } @Test public void IndexOf3() { - assertToString("substring(cat.name,(1)+1,(2)-(1))", QCat.cat.name.substring(1,2)); + assertToString("substring(cat.name,2,1)", QCat.cat.name.substring(1,2)); } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java index 362abb535f..e69ff9b280 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/SubQueryTest.java @@ -182,7 +182,7 @@ public void Indexed_Access_Without_Constant() { @Test public void IndexOf() { - assertToString("(select count(cat) from Cat cat where (locate(?1,cat.name)-1) = ?2)", + assertToString("(select count(cat) from Cat cat where locate(?1,cat.name)-1 = ?2)", sub().from(cat).where(cat.name.indexOf("a").eq(1)).count()); } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java index a3aebd1813..65f9f69abc 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/FirebirdTemplates.java @@ -49,8 +49,8 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.CHAR_AT, "cast(substring({0} from {1s}+1 for 1) as char)"); add(Ops.SUBSTR_1ARG, "substring({0} from {1s}+1)"); add(Ops.SUBSTR_2ARGS, "substring({0} from {1s}+1 for {2s}-{1s})"); - add(Ops.INDEX_OF, "(position({1},{0})-1)"); - add(Ops.INDEX_OF_2ARGS, "(position({1},{0},{2s}+1)-1)"); + add(Ops.INDEX_OF, "position({1},{0})-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "position({1},{0},{2s}+1)-1", Precedence.ARITH_LOW); add(Ops.StringOps.LOCATE, "position({0},{1})"); add(Ops.StringOps.LOCATE2, "position({0},{1},{2})"); add(Ops.STRING_LENGTH, "char_length({0})"); @@ -65,15 +65,15 @@ public FirebirdTemplates(char escape, boolean quote) { add(Ops.MathOps.COTH, "(exp({0} * 2) + 1) / (exp({0} * 2) - 1)"); add(Ops.MathOps.SINH, "(exp({0}) - exp({0} * -1)) / 2"); add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); - add(Ops.MathOps.DEG, "({0} / pi() * 180.0)"); - add(Ops.MathOps.RAD, "(({0} / 180.0) * pi())"); + add(Ops.MathOps.DEG, "{0} / pi() * 180.0", Precedence.ARITH_HIGH); + add(Ops.MathOps.RAD, "({0} / 180.0) * pi()", Precedence.ARITH_HIGH); // add(Ops.DateTimeOps.DATE, "cast({0} as date)"); add(Ops.DateTimeOps.MILLISECOND, "extract(millisecond from {0})"); - add(Ops.DateTimeOps.YEAR_MONTH, "(extract(year from {0}) * 100 + extract(month from {0}))"); - add(Ops.DateTimeOps.YEAR_WEEK, "(extract(year from {0}) * 100 + extract(week from {0}))"); + add(Ops.DateTimeOps.YEAR_MONTH, "extract(year from {0}) * 100 + extract(month from {0})", Precedence.ARITH_LOW); + add(Ops.DateTimeOps.YEAR_WEEK, "extract(year from {0}) * 100 + extract(week from {0})", Precedence.ARITH_LOW); add(Ops.DateTimeOps.DAY_OF_WEEK, "extract(weekday from {0})"); add(Ops.DateTimeOps.DAY_OF_MONTH, "extract(day from {0})"); //add(Ops.DateTimeOps.DAY_OF_YEAR, "extract(day_of_year from {0})"); @@ -102,7 +102,7 @@ public FirebirdTemplates(char escape, boolean quote) { addTypeNameToCode("blob sub_type 1", Types.LONGVARCHAR); addTypeNameToCode("double precision", Types.DOUBLE); addTypeNameToCode("array", Types.OTHER); - addTypeNameToCode("blob sub_type <0 ", Types.BLOB); + addTypeNameToCode("blob sub_type 0 ", Types.BLOB); } @Override diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java index 06f28e545b..94c20af0c7 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/HSQLDBTemplates.java @@ -64,7 +64,7 @@ public HSQLDBTemplates(char escape, boolean quote) { Ops.STRING_CONTAINS, Ops.STRING_CONTAINS_IC); add(Ops.TRIM, "trim(both from {0})"); - add(Ops.NEGATE, "({0} * -1)", -1); + add(Ops.NEGATE, "{0} * -1", Precedence.ARITH_HIGH); add(SQLOps.NEXTVAL, "next value for {0s}"); @@ -77,7 +77,7 @@ public HSQLDBTemplates(char escape, boolean quote) { add(Ops.MathOps.TANH, "(exp({0} * 2) - 1) / (exp({0} * 2) + 1)"); add(Ops.DateTimeOps.WEEK, "extract(week_of_year from {0})"); - add(Ops.DateTimeOps.YEAR_WEEK, "(extract(year from {0}) * 100 + extract(week_of_year from {0}))"); + add(Ops.DateTimeOps.YEAR_WEEK, "extract(year from {0}) * 100 + extract(week_of_year from {0})", Precedence.ARITH_LOW); add(Ops.DateTimeOps.ADD_YEARS, "dateadd('yy', {1s}, {0})"); add(Ops.DateTimeOps.ADD_MONTHS, "dateadd('mm', {1s}, {0})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java index 84c9451e72..cc57b16520 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/OracleTemplates.java @@ -85,8 +85,8 @@ public OracleTemplates(char escape, boolean quote) { add(SQLOps.NEXTVAL, "{0s}.nextval"); // String - add(Ops.INDEX_OF, "(instrb({0},{1})-1)"); - add(Ops.INDEX_OF_2ARGS, "(instrb({0},{1},{2}+1)-1)"); + add(Ops.INDEX_OF, "instrb({0},{1})-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "instrb({0},{1},{2}+1)-1", Precedence.ARITH_LOW); add(Ops.MATCHES, "regexp_like({0},{1})", -1); add(Ops.StringOps.LOCATE, "instr({1},{0})"); add(Ops.StringOps.LOCATE2, "instr({1},{0},{2s})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java index f7a141f6fa..b49873bf95 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/PostgreSQLTemplates.java @@ -95,8 +95,8 @@ public PostgreSQLTemplates(char escape, boolean quote) { // String add(Ops.MATCHES, "{0} ~ {1}"); - add(Ops.INDEX_OF, "(strpos({0},{1})-1)"); - add(Ops.INDEX_OF_2ARGS, "(strpos({0},{1})-1)"); //FIXME + add(Ops.INDEX_OF, "strpos({0},{1})-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "strpos({0},{1})-1", Precedence.ARITH_LOW); //FIXME add(Ops.StringOps.LOCATE, "strpos({1},{0})"); add(Ops.StringOps.LOCATE2, "strpos(repeat('^',{2s}-1) || substr({1},{2s}),{0})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index e505f45346..1b040667de 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -72,8 +72,8 @@ public SQLServerTemplates(char escape, boolean quote) { // String add(Ops.CONCAT, "{0} + {1}"); add(Ops.CHAR_AT, "cast(substring({0},{1}+1,1) as char)"); - add(Ops.INDEX_OF, "(charindex({1},{0})-1)"); - add(Ops.INDEX_OF_2ARGS, "(charindex({1},{0},{2})-1)"); + add(Ops.INDEX_OF, "charindex({1},{0})-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2})-1", Precedence.ARITH_LOW); // NOTE : needs to be replaced with real regular expression add(Ops.MATCHES, "{0} like {1}", Precedence.OR); add(Ops.STRING_IS_EMPTY, "len({0}) = 0", Precedence.COMPARISON); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index c8f6f8ef30..445e44555b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -325,8 +325,8 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.DateTimeOps.WEEK, "extract(week from {0})"); add(Ops.DateTimeOps.MONTH, "extract(month from {0})"); add(Ops.DateTimeOps.YEAR, "extract(year from {0})"); - add(Ops.DateTimeOps.YEAR_MONTH, "(extract(year from {0}) * 100 + extract(month from {0}))"); - add(Ops.DateTimeOps.YEAR_WEEK, "(extract(year from {0}) * 100 + extract(week from {0}))"); + add(Ops.DateTimeOps.YEAR_MONTH, "extract(year from {0}) * 100 + extract(month from {0})", Precedence.ARITH_LOW); + add(Ops.DateTimeOps.YEAR_WEEK, "extract(year from {0}) * 100 + extract(week from {0})", Precedence.ARITH_LOW); add(Ops.DateTimeOps.DAY_OF_WEEK, "extract(day_of_week from {0})"); add(Ops.DateTimeOps.DAY_OF_MONTH, "extract(day from {0})"); add(Ops.DateTimeOps.DAY_OF_YEAR, "extract(day_of_year from {0})"); @@ -360,11 +360,11 @@ protected SQLTemplates(Set reservedKeywords, String quoteStr, char escap add(Ops.MATCHES, "{0} regexp {1}", Precedence.COMPARISON); add(Ops.CHAR_AT, "cast(substr({0},{1s}+1,1) as char)"); add(Ops.EQ_IGNORE_CASE, "{0l} = {1l}"); - add(Ops.INDEX_OF, "(locate({1},{0})-1)"); - add(Ops.INDEX_OF_2ARGS, "(locate({1},{0},{2s}+1)-1)"); + add(Ops.INDEX_OF, "locate({1},{0})-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "locate({1},{0},{2s}+1)-1", Precedence.ARITH_LOW); add(Ops.STRING_IS_EMPTY, "length({0}) = 0"); - add(Ops.SUBSTR_1ARG, "substr({0},{1s}+1)"); - add(Ops.SUBSTR_2ARGS, "substr({0},{1s}+1,{2s}-{1s})"); + add(Ops.SUBSTR_1ARG, "substr({0},{1s}+1)", Precedence.ARITH_LOW); + add(Ops.SUBSTR_2ARGS, "substr({0},{1s}+1,{2s}-{1s})", Precedence.ARITH_LOW); add(Ops.StringOps.LOCATE, "locate({0},{1})"); add(Ops.StringOps.LOCATE2, "locate({0},{1},{2})"); diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java index 14d3a4c81d..7cc664a2cd 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLiteTemplates.java @@ -73,8 +73,8 @@ public SQLiteTemplates(char escape, boolean quote) { add(Ops.MOD, "{0} % {1}", Precedence.ARITH_HIGH); - add(Ops.INDEX_OF, "(charindex({1},{0},1)-1)"); - add(Ops.INDEX_OF_2ARGS, "(charindex({1},{0},{2s}+1)-1)"); + add(Ops.INDEX_OF, "charindex({1},{0},1)-1", Precedence.ARITH_LOW); + add(Ops.INDEX_OF_2ARGS, "charindex({1},{0},{2s}+1)-1", Precedence.ARITH_LOW); add(Ops.StringOps.LOCATE, "charindex({0},{1})"); add(Ops.StringOps.LOCATE2, "charindex({0},{1},{2s})"); @@ -104,7 +104,7 @@ public SQLiteTemplates(char escape, boolean quote) { add(Ops.MathOps.RANDOM, "random()"); add(Ops.MathOps.RANDOM2, "random({0})"); add(Ops.MathOps.LN, "log({0})"); - add(Ops.MathOps.LOG, "(log({0}) / log({1}))"); + add(Ops.MathOps.LOG, "log({0}) / log({1})", Precedence.ARITH_HIGH); addTypeNameToCode("text", Types.VARCHAR); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java index 2e59205c85..ebbef3edf8 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/HSQLDBTemplatesTest.java @@ -35,7 +35,7 @@ public void Precedence() { // LIKE applies to the result of any string concatenation to the right. // Comparison ops are not combined without logical ops so there is no precedence issue. - int p1 = getPrecedence(Ops.NEGATE); + //int p1 = getPrecedence(Ops.NEGATE); int p2 = getPrecedence(Ops.MULT, Ops.DIV, Ops.CONCAT); int p3 = getPrecedence(Ops.ADD, Ops.SUB); int p4 = getPrecedence(Ops.NOT); @@ -44,7 +44,7 @@ public void Precedence() { int p7 = getPrecedence(Ops.AND); int p8 = getPrecedence(Ops.OR); - assertTrue(p1 < p2); + //assertTrue(p1 < p2); assertTrue(p2 < p3); assertTrue(p3 < p4); assertTrue(p4 < p5); From 7e41421da20484697539d6baef449db029af9dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 3 Mar 2015 22:55:00 +0200 Subject: [PATCH 0776/1968] Add test for property type Add exclusion in GenericExporterTest --- .../com/querydsl/apt/GenericExporterTest.java | 1 + .../querydsl/apt/domain/Properties3Test.java | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/GenericExporterTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/GenericExporterTest.java index 68304f83f2..643a378f29 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/GenericExporterTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/GenericExporterTest.java @@ -102,6 +102,7 @@ public void Execute2() throws IOException { expected.add("QGeneric16Test_HidaBez.java"); expected.add("QGeneric16Test_HidaBezGruppe.java"); expected.add("QProperties2Test_ConcreteX.java"); + expected.add("QProperties3Test_Order.java"); execute(expected, "GenericExporterTest2", "HibernateAnnotationProcessor"); } diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java new file mode 100644 index 0000000000..78365ddfe1 --- /dev/null +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java @@ -0,0 +1,34 @@ +package com.querydsl.apt.domain; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Temporal; +import javax.persistence.TemporalType; + +import org.joda.time.LocalDateTime; +import org.junit.Test; + +import com.querydsl.core.types.path.DateTimePath; + +public class Properties3Test extends AbstractTest { + + @Entity + public static class Order { + + @Column(name = "order_date") + @Temporal(TemporalType.TIMESTAMP) + private java.util.Date orderDate; + + public LocalDateTime getOrderDate() { + return orderDate != null ? new LocalDateTime(orderDate) : null; + } + } + + @Test + public void PropertyType() throws IllegalAccessException, NoSuchFieldException { + start(QProperties3Test_Order.class, QProperties3Test_Order.order); + match(DateTimePath.class, "orderDate"); + matchType(java.util.Date.class, "orderDate"); + } + +} From 67ff1abfeb796912561f4bca484287dc83b5a4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 9 Mar 2015 19:32:28 +0200 Subject: [PATCH 0777/1968] Optimize regex usage --- .../java/com/querydsl/core/support/Normalization.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java index 6d837f69b6..9ba286ebc6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java @@ -26,13 +26,13 @@ public final class Normalization { // TODO simplify private static final Pattern FULL_OPERATION = Pattern.compile( - "(? Date: Mon, 9 Mar 2015 17:01:11 +0100 Subject: [PATCH 0778/1968] Fixed some Links in the tutorials chapter [ci skip] --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 514e1ef250..fc84ac05ab 100644 --- a/README.md +++ b/README.md @@ -12,9 +12,9 @@ Use these tutorials to get started * [Querying JPA](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration) * [Querying SQL](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s03.html) -* [Querying Mongodb](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s06.html) -* [Querying Lucene](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s04.html) -* [Querying Collections](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s07.html) +* [Querying Mongodb](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s07.html) +* [Querying Lucene](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s05.html) +* [Querying Collections](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s08.html) * [Querydsl Spatial](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s04.html) * [Querying JDO](http://www.querydsl.com/static/querydsl/latest/reference/html/ch02s02.html) From b403746f06668b255a94e764cdafe2a7664138ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 6 Mar 2015 23:59:05 +0200 Subject: [PATCH 0779/1968] Improve Scala usage --- .../com/querydsl/scala/Expressions.scala | 2 +- .../com/querydsl/scala/ManifestUtils.scala | 2 +- .../com/querydsl/scala/Projections.scala | 2 +- ...alizer.scala => ScalaBeanSerializer.scala} | 14 +- ...izer.scala => ScalaEntitySerializer.scala} | 12 +- .../com/querydsl/scala/TypeMappings.scala | 2 +- .../{Paths.scala => RelationalPathImpl.scala} | 2 +- ...rs.scala => ScalaMetaDataSerializer.scala} | 0 .../scala/CaseClassSerializerTest.scala | 8 +- .../com/querydsl/scala/CompileTestUtils.scala | 8 +- .../com/querydsl/scala/ExampleDomain.scala | 6 +- .../com/querydsl/scala/ExpressionTest.scala | 8 +- .../scala/GenericExporterJPATest.scala | 2 +- .../querydsl/scala/GenericExporterTest.scala | 2 +- .../scala/com/querydsl/scala/QPerson.scala | 13 +- .../com/querydsl/scala/QPersonTest.scala | 6 +- ...st.scala => ScalaBeanSerializerTest.scala} | 14 +- ....scala => ScalaEntitySerializerTest.scala} | 0 .../test/scala/com/querydsl/scala/Types.scala | 2 +- .../scala/com/querydsl/scala/ext/Types2.scala | 2 +- .../scala/sql/MetaDataExporterTest.scala | 168 +++++++++--------- .../scala/sql/MetaDataSerializerTest.scala | 12 +- .../src/test/scala/test/Employee.scala | 20 +-- .../src/test/scala/test/QEmployee.scala | 18 +- .../src/test/scala/test/QSurvey.scala | 16 +- .../src/test/scala/test/Survey.scala | 14 +- 26 files changed, 177 insertions(+), 178 deletions(-) rename querydsl-scala/src/main/scala/com/querydsl/scala/{BeanSerializer.scala => ScalaBeanSerializer.scala} (91%) rename querydsl-scala/src/main/scala/com/querydsl/scala/{EntitySerializer.scala => ScalaEntitySerializer.scala} (94%) rename querydsl-scala/src/main/scala/com/querydsl/scala/sql/{Paths.scala => RelationalPathImpl.scala} (99%) rename querydsl-scala/src/main/scala/com/querydsl/scala/sql/{Serializers.scala => ScalaMetaDataSerializer.scala} (100%) rename querydsl-scala/src/test/scala/com/querydsl/scala/{BeanSerializerTest.scala => ScalaBeanSerializerTest.scala} (87%) rename querydsl-scala/src/test/scala/com/querydsl/scala/{EntitySerializerTest.scala => ScalaEntitySerializerTest.scala} (100%) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala index b2c8a0bbb4..5df8efa68c 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala @@ -21,7 +21,7 @@ import com.querydsl.core.types.PathMetadataFactory._ import com.querydsl.core.types.Ops._ import java.util.Collection -import java.util.Arrays._; +import java.util.Arrays._ import Constants._ import Operations._ diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/ManifestUtils.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/ManifestUtils.scala index ed47bec148..b64e379fc3 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/ManifestUtils.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/ManifestUtils.scala @@ -20,6 +20,6 @@ package com.querydsl.scala */ object ManifestUtils { - implicit def toClass[X](mf: Manifest[X]) = mf.runtimeClass.asInstanceOf[Class[X]] + implicit def toClass[X](mf: Manifest[X]): Class[X] = mf.runtimeClass.asInstanceOf[Class[X]] } \ No newline at end of file diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/Projections.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/Projections.scala index cff5669fb2..50f5c27eaf 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/Projections.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/Projections.scala @@ -374,7 +374,7 @@ abstract class FactoryExpressionBase[T](cl: Class[T], args: Ex[_]*) def accept[R,C](v: Visitor[R,C], context: C): R = v.visit(this, context) - def getArgs(): java.util.List[Ex[_]] = Arrays.asList(args:_*) + def getArgs: java.util.List[Ex[_]] = Arrays.asList(args:_*) def apply(i: Int): Ex[_] = args(i) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/BeanSerializer.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala similarity index 91% rename from querydsl-scala/src/main/scala/com/querydsl/scala/BeanSerializer.scala rename to querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala index fcc1340026..3d00a37bab 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/BeanSerializer.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala @@ -24,7 +24,7 @@ import javax.inject.Inject import java.util._ import java.io.IOException -import scala.reflect.BeanProperty +import scala.beans.BeanProperty import scala.collection.JavaConversions._ import scala.collection.mutable.Set @@ -48,8 +48,8 @@ object Serializer { def writeImports(model: EntityType, javaBeanSupport: Boolean, writer: ScalaWriter) { val importedClasses = getAnnotationTypes(model) if (javaBeanSupport) importedClasses.add("scala.reflect.BeanProperty") - if (model.hasLists()) importedClasses.add(classOf[List[_]].getName) - if (model.hasMaps()) importedClasses.add(classOf[Map[_, _]].getName) + if (model.hasLists) importedClasses.add(classOf[List[_]].getName) + if (model.hasMaps) importedClasses.add(classOf[Map[_, _]].getName) writer.importClasses(importedClasses.toArray: _*) } @@ -105,12 +105,12 @@ class ScalaBeanSerializer @Inject() (typeMappings: TypeMappings) extends Seriali def writeClass(model: EntityType, writer: ScalaWriter) = { writer.javadoc(model.getSimpleName + javadocSuffix) - model.getAnnotations foreach(writer.annotation(_)) + model.getAnnotations foreach(writer.annotation) writer.beginClass(model) for (property <- model.getProperties) { - property.getAnnotations.foreach(writer.annotation(_)) + property.getAnnotations.foreach(writer.annotation) if (javaBeanSupport) writer.line("@BeanProperty") - writer.publicField(property.getType(), property.getEscapedName, "_") + writer.publicField(property.getType, property.getEscapedName, "_") } writer.end() } @@ -139,7 +139,7 @@ class CaseClassSerializer @Inject() (typeMappings: TypeMappings) extends Seriali } def writeClass(model: EntityType, writer: ScalaWriter) = { - model.getAnnotations foreach (writer.annotation(_)) + model.getAnnotations foreach writer.annotation val parameters = model.getProperties .map(p => new Parameter(p.getEscapedName, p.getType)).toArray writer.caseClass(model.getSimpleName, parameters:_*) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaEntitySerializer.scala similarity index 94% rename from querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala rename to querydsl-scala/src/main/scala/com/querydsl/scala/ScalaEntitySerializer.scala index 5ec2b9e7a8..ea737231f2 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/EntitySerializer.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaEntitySerializer.scala @@ -26,7 +26,7 @@ import com.querydsl.sql.codegen.support._ import com.querydsl.core.types._ import java.util._ import java.io.IOException -import scala.reflect.BeanProperty +import scala.beans.BeanProperty import scala.collection.JavaConversions._ import scala.collection.mutable.Set import scala.collection.immutable.Map @@ -57,15 +57,15 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se val simpleName: String = model.getSimpleName // package - if (!model.getPackageName.isEmpty()) writer.packageDecl(model.getPackageName) + if (!model.getPackageName.isEmpty) writer.packageDecl(model.getPackageName) // imports writer.importPackages("com.querydsl.core.types","com.querydsl.scala") writer.staticimports(classOf[PathMetadataFactory]) var importedClasses = getAnnotationTypes(model) - if (model.hasLists()) importedClasses.add(classOf[java.util.List[_]].getName) - if (model.hasMaps()) importedClasses.add(classOf[java.util.Map[_, _]].getName) + if (model.hasLists) importedClasses.add(classOf[java.util.List[_]].getName) + if (model.hasMaps) importedClasses.add(classOf[java.util.Map[_, _]].getName) writer.importClasses(importedClasses.toArray: _*) writeHeader(model, scalaWriter) @@ -121,7 +121,7 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se } def writeAnnotations(model: EntityType, queryType: Type, writer: ScalaWriter) = { - model.getAnnotations.foreach(writer.annotation(_)) + model.getAnnotations.foreach(writer.annotation) } def writeAdditionalCompanionContent(model: EntityType, writer: ScalaWriter) = {} @@ -194,7 +194,7 @@ class ScalaEntitySerializer @Inject()(val typeMappings: TypeMappings) extends Se } def getAnnotationTypes(model: EntityType): Set[String] = { - Set() ++ (model.getAnnotations.map(_.annotationType.getName)) + Set() ++ model.getAnnotations.map(_.annotationType.getName) } private def getRaw(t : Type): Type = { diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/TypeMappings.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/TypeMappings.scala index 903c8d19a9..c9ba1fde52 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/TypeMappings.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/TypeMappings.scala @@ -27,7 +27,7 @@ import com.querydsl.core.types.Path */ object ScalaTypeMappings { - def create: TypeMappings = new ScalaTypeMappings(); + def create: TypeMappings = new ScalaTypeMappings() } diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/RelationalPathImpl.scala similarity index 99% rename from querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala rename to querydsl-scala/src/main/scala/com/querydsl/scala/sql/RelationalPathImpl.scala index 3404ad6cfa..474076db9a 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Paths.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/RelationalPathImpl.scala @@ -24,7 +24,7 @@ import com.querydsl.core.types._ import com.querydsl.core.types.PathMetadataFactory._ import java.util.{List => JavaList, ArrayList, Map => JavaMap, HashMap} import java.lang.reflect._ -import scala.reflect.BeanProperty +import scala.beans.BeanProperty /** * Implementation of RelationalPath for Scala diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/Serializers.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/ScalaMetaDataSerializer.scala similarity index 100% rename from querydsl-scala/src/main/scala/com/querydsl/scala/sql/Serializers.scala rename to querydsl-scala/src/main/scala/com/querydsl/scala/sql/ScalaMetaDataSerializer.scala diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala index 6c2a2daabe..61afa7662b 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala @@ -1,10 +1,10 @@ package com.querydsl.scala -import com.mysema.codegen._; -import com.mysema.codegen.model._; -import com.querydsl.codegen._; +import com.mysema.codegen._ +import com.mysema.codegen.model._ +import com.querydsl.codegen._ -import java.io.StringWriter; +import java.io.StringWriter import org.junit._ import org.junit.Assert._ diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala index 5af461de3a..387c0880b2 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala @@ -16,7 +16,7 @@ trait CompileTestUtils { Class.forName(className).getProtectionDomain.getCodeSource.getLocation } - val currentLibraries = (this.getClass.getClassLoader).asInstanceOf[java.net.URLClassLoader].getURLs().toList + val currentLibraries = this.getClass.getClassLoader.asInstanceOf[java.net.URLClassLoader].getURLs.toList val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries classpath.value = cp.mkString(pathSeparator) @@ -40,14 +40,14 @@ trait CompileTestUtils { throw new AssertionError("Compile failed, interpreter output:\n" + out.toString("utf-8")) } } finally { - interpreterWriter.close - interpreter.close + interpreterWriter.close() + interpreter.close() } } def recursiveFileList(file: File): Array[File] = { if (file.isDirectory) { - file.listFiles.flatMap(recursiveFileList(_)) + file.listFiles.flatMap(recursiveFileList) } else { Array(file) } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ExampleDomain.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ExampleDomain.scala index 5f419d30af..e94a5f3c72 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ExampleDomain.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ExampleDomain.scala @@ -1,7 +1,7 @@ -package com.querydsl.scala; +package com.querydsl.scala -import com.querydsl.core.types._; -import com.querydsl.core.types.PathMetadataFactory._; +import com.querydsl.core.types._ +import com.querydsl.core.types.PathMetadataFactory._ class Person { var scalaInt: Int = _ diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ExpressionTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ExpressionTest.scala index 819cdd0fc8..034943d07b 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ExpressionTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ExpressionTest.scala @@ -1,8 +1,8 @@ -package com.querydsl.scala; +package com.querydsl.scala -import com.querydsl.core.types._; +import com.querydsl.core.types._ -import org.junit.{ Test, Before, After, Assert }; +import org.junit.{ Test, Before, After, Assert } import Matchers._ @@ -16,7 +16,7 @@ class ExpressionTest { @Test def Double_Negation { - assertEquals("person.javaInt", person.javaInt.negate.negate); + assertEquals("person.javaInt", person.javaInt.negate.negate) } @Test diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala index 53b7473dc2..535a822458 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala @@ -1,4 +1,4 @@ -package com.querydsl.scala; +package com.querydsl.scala import javax.persistence._ import com.querydsl.codegen.GenericExporter diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala index 56fc3a5d80..42dc5e6a23 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala @@ -1,4 +1,4 @@ -package com.querydsl.scala; +package com.querydsl.scala import com.querydsl.core.annotations._ import com.querydsl.codegen.GenericExporter diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala index f9a2d04ef9..d589229f13 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/QPerson.scala @@ -1,11 +1,10 @@ -package com.querydsl.scala; +package com.querydsl.scala -import com.querydsl.core.types._; -import com.querydsl.scala._; - -import com.querydsl.core.types.PathMetadataFactory._; -import java.util.List; -import java.util.Map; +import com.querydsl.core.types._ +import com.querydsl.scala._ +import com.querydsl.core.types.PathMetadataFactory._ +import java.util.List +import java.util.Map object QPerson extends QPerson("person"){ override def as(variable: String) = new QPerson(variable) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/QPersonTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/QPersonTest.scala index 33d3b4d5fe..4bc704d558 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/QPersonTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/QPersonTest.scala @@ -1,8 +1,8 @@ -package com.querydsl.scala; +package com.querydsl.scala -import com.querydsl.core.types._; +import com.querydsl.core.types._ -import org.junit.{ Test, Before, After, Assert }; +import org.junit.{ Test, Before, After, Assert } import Matchers._ diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/BeanSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala similarity index 87% rename from querydsl-scala/src/test/scala/com/querydsl/scala/BeanSerializerTest.scala rename to querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala index d0e111cd54..840c23b0b6 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/BeanSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala @@ -1,10 +1,10 @@ package com.querydsl.scala -import com.mysema.codegen._; -import com.mysema.codegen.model._; -import com.querydsl.codegen._; +import com.mysema.codegen._ +import com.mysema.codegen.model._ +import com.querydsl.codegen._ -import java.io.StringWriter; +import java.io.StringWriter import org.junit._ import org.junit.Assert._ @@ -47,11 +47,11 @@ class ScalaBeanSerializerTest extends CompileTestUtils { @BeanProperty var setField: java.util.Set[DomainClass] = _ @BeanProperty var time: java.sql.Time = _""" - val str = writer.toString().replaceAll("\\s+", " ") + val str = writer.toString.replaceAll("\\s+", " ") //println(str) toMatch.split("\\n").map(_.trim).foreach { line => - assertTrue(line, str.contains(line)); + assertTrue(line, str.contains(line)) } } @@ -62,7 +62,7 @@ class ScalaBeanSerializerTest extends CompileTestUtils { serializer.createCompanionObject = false typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) - val str = writer.toString() + val str = writer.toString assertCompileSuccess(str) } } \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/EntitySerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala similarity index 100% rename from querydsl-scala/src/test/scala/com/querydsl/scala/EntitySerializerTest.scala rename to querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/Types.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/Types.scala index 0de84ccee3..35389a3182 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/Types.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/Types.scala @@ -1,4 +1,4 @@ -package com.querydsl.scala; +package com.querydsl.scala import com.querydsl.core.annotations._ diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ext/Types2.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ext/Types2.scala index 1f7c6e5d82..deb0a2bf15 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ext/Types2.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ext/Types2.scala @@ -1,4 +1,4 @@ -package com.querydsl.scala.ext; +package com.querydsl.scala.ext import com.querydsl.core.annotations._ import scala.runtime.RichChar diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index 1642e69aa5..49e5e2721c 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -7,7 +7,7 @@ import com.querydsl.codegen._ import com.querydsl.sql._ import com.querydsl.sql.codegen._ -import java.io.StringWriter; +import java.io.StringWriter import org.junit._ import org.junit.Assert._ @@ -18,124 +18,124 @@ import com.querydsl.scala._ class MetaDataExporterTest extends CompileTestUtils { - var connection: java.sql.Connection = _; + var connection: java.sql.Connection = _ @Before def setUp() { - Class.forName("org.h2.Driver"); - val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis(); - connection = java.sql.DriverManager.getConnection(url, "sa", ""); + Class.forName("org.h2.Driver") + val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() + connection = java.sql.DriverManager.getConnection(url, "sa", "") - val stmt = connection.createStatement(); + val stmt = connection.createStatement() + + try { + stmt.execute("create table reserved (id int, while int)") + stmt.execute("create table underscore (e_id int, c_id int)") + stmt.execute("create table beangen1 (\"SEP_Order\" int)") + stmt.execute("create table definstance (id int, definstance int, definstance1 int)") + stmt.execute("create table pkfk (id int primary key, pk int, fk int)") + stmt.execute("create table \"camelCase\" (id int)") + stmt.execute("create table \"vwServiceName\" (id int)") + stmt.execute("create table date_test (d date)") + stmt.execute("create table date_time_test (dt datetime)") + stmt.execute("create table survey (id int, name varchar(30))") + stmt.execute("create table typetest (type int, constraint pk_typetest primary key(type))") - try{ - stmt.execute("create table reserved (id int, while int)"); - stmt.execute("create table underscore (e_id int, c_id int)"); - stmt.execute("create table beangen1 (\"SEP_Order\" int)"); - stmt.execute("create table definstance (id int, definstance int, definstance1 int)"); - stmt.execute("create table pkfk (id int primary key, pk int, fk int)"); - stmt.execute("create table \"camelCase\" (id int)"); - stmt.execute("create table \"vwServiceName\" (id int)"); - stmt.execute("create table date_test (d date)"); - stmt.execute("create table date_time_test (dt datetime)"); - stmt.execute("create table survey (id int, name varchar(30))"); - stmt.execute("create table typetest (type int, constraint pk_typetest primary key(type))"); - stmt.execute("""create table employee( - id INT, firstname VARCHAR(50), lastname VARCHAR(50), salary DECIMAL(10, 2), - datefield DATE, timefield TIME, - superior_id int, survey_id int, survey_name varchar(30), - CONSTRAINT PK_employee PRIMARY KEY (id), - CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))"""); - - + id INT, firstname VARCHAR(50), lastname VARCHAR(50), salary DECIMAL(10, 2), + datefield DATE, timefield TIME, + superior_id int, survey_id int, survey_name varchar(30), + CONSTRAINT PK_employee PRIMARY KEY (id), + CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))""") + + // table with count column - stmt.execute("create table count_table(count int)"); - + stmt.execute("create table count_table(count int)") + // multi primary key stmt.execute("create table multikey(id INT, id2 VARCHAR, id3 INT," + - " CONSTRAINT pk_multikey PRIMARY KEY (id, id2, id3) )"); - + " CONSTRAINT pk_multikey PRIMARY KEY (id, id2, id3) )") + // multi foreign key stmt.execute("create table multikey2(id INT, id2 INT, id3 INT, id4 INT, id5 INT, id6 INT," + - " CONSTRAINT pk_multikey2 FOREIGN KEY (id4, id5, id6) REFERENCES multikey2(id, id2, id3) )"); + " CONSTRAINT pk_multikey2 FOREIGN KEY (id4, id5, id6) REFERENCES multikey2(id, id2, id3) )") } finally { - stmt.close(); + stmt.close() } } @Test def Generate_Without_BeanTypes() { - val directory = new java.io.File("target/jdbcgen1"); - val namingStrategy = new DefaultNamingStrategy(); - val exporter = new MetaDataExporter(); - exporter.setNamePrefix("Q"); - exporter.setPackageName("com.querydsl"); - exporter.setSchemaPattern("PUBLIC"); - exporter.setTargetFolder(directory); - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]); - exporter.setCreateScalaSources(true); - exporter.setTypeMappings(ScalaTypeMappings.create); - exporter.export(connection.getMetaData); + val directory = new java.io.File("target/jdbcgen1") + val namingStrategy = new DefaultNamingStrategy() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) assertCompileSuccess(recursiveFileList(directory)) } @Test def Generate_With_BeanTypes() { - val directory = new java.io.File("target/jdbcgen2"); - val namingStrategy = new DefaultNamingStrategy(); - //val beanSerializer = new ScalaBeanSerializer(); - val exporter = new MetaDataExporter(); - exporter.setNamePrefix("Q"); - exporter.setPackageName("com.querydsl"); - exporter.setSchemaPattern("PUBLIC"); - exporter.setTargetFolder(directory); - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]); - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]); - exporter.setCreateScalaSources(true); - exporter.setTypeMappings(ScalaTypeMappings.create); - exporter.export(connection.getMetaData); + val directory = new java.io.File("target/jdbcgen2") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) assertCompileSuccess(recursiveFileList(directory)) } @Test def Generate_With_Schema() { - val directory = new java.io.File("target/jdbcgen3"); - val namingStrategy = new DefaultNamingStrategy(); - //val beanSerializer = new ScalaBeanSerializer(); - val exporter = new MetaDataExporter(); - exporter.setNamePrefix("Q"); - exporter.setPackageName("com.querydsl"); - exporter.setSchemaPattern("PUBLIC"); - exporter.setSchemaToPackage(true); - exporter.setTargetFolder(directory); - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]); - exporter.setCreateScalaSources(true); - exporter.setTypeMappings(ScalaTypeMappings.create); - exporter.export(connection.getMetaData); - + val directory = new java.io.File("target/jdbcgen3") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setSchemaToPackage(true) + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + assertCompileSuccess(recursiveFileList(directory)) } @Test def Generate_With_BeanTypes_And_Schema() { - val directory = new java.io.File("target/jdbcgen4"); - val namingStrategy = new DefaultNamingStrategy(); - //val beanSerializer = new ScalaBeanSerializer(); - val exporter = new MetaDataExporter(); - exporter.setNamePrefix("Q"); - exporter.setPackageName("com.querydsl"); - exporter.setSchemaPattern("PUBLIC"); - exporter.setSchemaToPackage(true); - exporter.setTargetFolder(directory); - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]); - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]); - exporter.setCreateScalaSources(true); - exporter.setTypeMappings(ScalaTypeMappings.create); - exporter.export(connection.getMetaData); + val directory = new java.io.File("target/jdbcgen4") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setSchemaToPackage(true) + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) assertCompileSuccess(recursiveFileList(directory)) } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataSerializerTest.scala index c2cb8c04e3..2911c4ac4e 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataSerializerTest.scala @@ -1,13 +1,13 @@ package com.querydsl.scala.sql -import com.mysema.codegen._; -import com.mysema.codegen.model._; +import com.mysema.codegen._ +import com.mysema.codegen.model._ -import com.querydsl.codegen._; +import com.querydsl.codegen._ import com.querydsl.sql._ import com.querydsl.sql.codegen._ -import java.io.StringWriter; +import java.io.StringWriter import org.junit._ import org.junit.Assert._ @@ -29,7 +29,7 @@ class ScalaMetaDataSerializerTest { "com.querydsl.DomainClass", "com.querydsl", "DomainClass", false, false) entityType = new EntityType(typeModel) //entityType.addAnnotation(new TableImpl("DOMAIN_TYPE")) - entityType.getData().put("table", "DOMAIN_TYPE") + entityType.getData.put("table", "DOMAIN_TYPE") // properties List(classOf[java.lang.Boolean], classOf[Comparable[_]], classOf[Integer], @@ -49,7 +49,7 @@ class ScalaMetaDataSerializerTest { val namingStrategy = new DefaultNamingStrategy() val serializer = new ScalaMetaDataSerializer(typeMappings, namingStrategy) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) - val str = writer.toString() + val str = writer.toString //System.err.println(str) assertTrue("companion object isn't before class", str.indexOf("object") < str.indexOf("class")) //assertTrue("companion object isn't before annotations", str.indexOf("object") < str.indexOf("@Table")) diff --git a/querydsl-scala/src/test/scala/test/Employee.scala b/querydsl-scala/src/test/scala/test/Employee.scala index 9f00f6b576..df156c777a 100644 --- a/querydsl-scala/src/test/scala/test/Employee.scala +++ b/querydsl-scala/src/test/scala/test/Employee.scala @@ -1,24 +1,24 @@ -package test; +package test -import scala.reflect.BeanProperty; -import javax.validation.constraints.Size; -import javax.validation.constraints.NotNull; -import com.querydsl.sql._; +import scala.beans.BeanProperty +import javax.validation.constraints.Size +import javax.validation.constraints.NotNull +import com.querydsl.sql._ -object Employee extends QEmployee("employee"){ +object Employee extends QEmployee("employee") { override def as(variable: String) = new QEmployee(variable) } class Employee { - var firstname: String = _; + var firstname: String = _ - var id: Integer = _; + var id: Integer = _ - var lastname: String = _; + var lastname: String = _ - var superiorId: Integer = _; + var superiorId: Integer = _ } diff --git a/querydsl-scala/src/test/scala/test/QEmployee.scala b/querydsl-scala/src/test/scala/test/QEmployee.scala index 7194fb6ea2..ce2a455789 100644 --- a/querydsl-scala/src/test/scala/test/QEmployee.scala +++ b/querydsl-scala/src/test/scala/test/QEmployee.scala @@ -1,13 +1,13 @@ -package test; +package test -import com.querydsl.core.types._; -import com.querydsl.scala._; +import com.querydsl.core.types._ +import com.querydsl.scala._ -import com.querydsl.core.types.PathMetadataFactory._; +import com.querydsl.core.types.PathMetadataFactory._ -import com.querydsl.scala.sql.RelationalPathImpl; +import com.querydsl.scala.sql.RelationalPathImpl -import com.querydsl.sql._; +import com.querydsl.sql._ object QEmployee extends QEmployee("employee"){ override def as(variable: String) = new QEmployee(variable) @@ -27,11 +27,11 @@ class QEmployee(md: PathMetadata) extends RelationalPathImpl[Employee](md, "PUBL val superiorId = createNumber[Integer]("superiorId") - val sysIdx55: PrimaryKey[Employee] = createPrimaryKey(id); + val sysIdx55: PrimaryKey[Employee] = createPrimaryKey(id) - val superiorFk: ForeignKey[Employee] = createForeignKey(superiorId, "ID"); + val superiorFk: ForeignKey[Employee] = createForeignKey(superiorId, "ID") - val _superiorFk: ForeignKey[Employee] = createInvForeignKey(id, "SUPERIOR_ID"); + val _superiorFk: ForeignKey[Employee] = createInvForeignKey(id, "SUPERIOR_ID") addMetadata(firstname, ColumnMetadata.named("FIRSTNAME")) addMetadata(id, ColumnMetadata.named("ID")) diff --git a/querydsl-scala/src/test/scala/test/QSurvey.scala b/querydsl-scala/src/test/scala/test/QSurvey.scala index c042b77c78..21e302257d 100644 --- a/querydsl-scala/src/test/scala/test/QSurvey.scala +++ b/querydsl-scala/src/test/scala/test/QSurvey.scala @@ -1,14 +1,14 @@ -package test; +package test -import com.querydsl.core.types._; -import com.querydsl.scala._; +import com.querydsl.core.types._ +import com.querydsl.scala._ -import com.querydsl.core.types.PathMetadataFactory._; -import com.querydsl.scala.sql.RelationalPathImpl; +import com.querydsl.core.types.PathMetadataFactory._ +import com.querydsl.scala.sql.RelationalPathImpl -import com.querydsl.sql._; +import com.querydsl.sql._ -object QSurvey extends QSurvey("survey"){ +object QSurvey extends QSurvey("survey") { override def as(variable: String) = new QSurvey(variable) } @@ -22,7 +22,7 @@ class QSurvey(md: PathMetadata) extends RelationalPathImpl[Survey](md, "PUBLIC", val name = createString("name") - val sysIdx54: PrimaryKey[Survey] = createPrimaryKey(id); + val sysIdx54: PrimaryKey[Survey] = createPrimaryKey(id) addMetadata(id, ColumnMetadata.named("ID")) addMetadata(name, ColumnMetadata.named("NAME")) diff --git a/querydsl-scala/src/test/scala/test/Survey.scala b/querydsl-scala/src/test/scala/test/Survey.scala index 92c7742ca5..1dce1e5c5e 100644 --- a/querydsl-scala/src/test/scala/test/Survey.scala +++ b/querydsl-scala/src/test/scala/test/Survey.scala @@ -1,9 +1,9 @@ -package test; +package test -import scala.reflect.BeanProperty; -import javax.validation.constraints.Size; -import javax.validation.constraints.NotNull; -import com.querydsl.sql._; +import scala.beans.BeanProperty +import javax.validation.constraints.Size +import javax.validation.constraints.NotNull +import com.querydsl.sql._ object Survey extends QSurvey("survey"){ override def as(variable: String) = new QSurvey(variable) @@ -12,9 +12,9 @@ object Survey extends QSurvey("survey"){ class Survey { - var id: Integer = _; + var id: Integer = _ - var name: String = _; + var name: String = _ } From a98c663f681bd0a8d38c443e5c4d2abd06247ddc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Mar 2015 12:02:53 +0200 Subject: [PATCH 0780/1968] Bump Scala version --- querydsl-scala/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index e17fddbba2..8874797ea4 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -18,7 +18,7 @@ UTF-8 2.10 - 2.10.4 + 2.10.5 3.5.1-Final 4.0.2.GA
From d2fc14f9f7dc500000e376b59732b48b700bbb1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Mar 2015 18:19:12 +0200 Subject: [PATCH 0781/1968] Compile individual files --- .../scala/com/querydsl/scala/CompileTestUtils.scala | 10 ++++++++-- .../com/querydsl/scala/sql/JDBCIntegrationTest.scala | 4 ++-- .../com/querydsl/scala/sql/MetaDataExporterTest.scala | 8 ++++---- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala index 387c0880b2..3f48c4ae8e 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala @@ -24,9 +24,15 @@ trait CompileTestUtils { } def assertCompileSuccess(files: Traversable[File]): Unit = { + for (file <- files) { + assertCompileSuccess(fromFile(file).mkString) + } + } + + def assertCompileSuccessCombined(files: Traversable[File]): Unit = { assertCompileSuccess(files - map (fromFile(_).mkString) - mkString ("\n")) + map (fromFile(_).mkString) + mkString ("\n")) } def assertCompileSuccess(source: String): Unit = { diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala index 01cacbc5b9..92bc42f70a 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala @@ -100,8 +100,8 @@ class JDBCIntegrationTest extends CompileTestUtils with SQLHelpers { exporter.setTypeMappings(ScalaTypeMappings.create) exporter.setSchemaPattern("PUBLIC") exporter.export(connection.getMetaData) - - assertCompileSuccess(recursiveFileList(directory)) + + assertCompileSuccessCombined(recursiveFileList(directory)) } @Test diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index 49e5e2721c..23866ee39c 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -97,8 +97,8 @@ class MetaDataExporterTest extends CompileTestUtils { exporter.setCreateScalaSources(true) exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - - assertCompileSuccess(recursiveFileList(directory)) + + assertCompileSuccessCombined(recursiveFileList(directory)) } @Test @@ -136,8 +136,8 @@ class MetaDataExporterTest extends CompileTestUtils { exporter.setCreateScalaSources(true) exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - - assertCompileSuccess(recursiveFileList(directory)) + + assertCompileSuccessCombined(recursiveFileList(directory)) } } \ No newline at end of file From 76b2e49f0a1efeedafd71de539488d42bf66bccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Mar 2015 20:13:40 +0200 Subject: [PATCH 0782/1968] Print surefire summary in querydsl-scala --- querydsl-scala/pom.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 8874797ea4..76911afe03 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -203,7 +203,8 @@ org.apache.maven.plugins maven-surefire-plugin - -Xms256m -Xmx512m -Xss2m + -Xms256m -Xmx512m -Xss2m + true From 903b92fbadbf90b3f024d1ec4d8ed3c6de613098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Mar 2015 17:52:15 +0200 Subject: [PATCH 0783/1968] Make CompileTestUtils an object --- .../querydsl/scala/CaseClassSerializerTest.scala | 4 ++-- .../scala/com/querydsl/scala/CompileTestUtils.scala | 12 ++++++++++-- .../com/querydsl/scala/GenericExporterJPATest.scala | 4 ++-- .../com/querydsl/scala/GenericExporterTest.scala | 8 ++++---- .../querydsl/scala/ScalaBeanSerializerTest.scala | 4 ++-- .../querydsl/scala/ScalaEntitySerializerTest.scala | 4 ++-- .../querydsl/scala/sql/JDBCIntegrationTest.scala | 6 +++--- .../querydsl/scala/sql/MetaDataExporterTest.scala | 13 ++++++------- ...Test.scala => ScalaMetaDataSerializerTest.scala} | 0 9 files changed, 31 insertions(+), 24 deletions(-) rename querydsl-scala/src/test/scala/com/querydsl/scala/sql/{MetaDataSerializerTest.scala => ScalaMetaDataSerializerTest.scala} (100%) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala index 61afa7662b..472480ee6b 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala @@ -11,7 +11,7 @@ import org.junit.Assert._ import scala.collection.JavaConversions._ -class CaseClassSerializerTest extends CompileTestUtils { +class CaseClassSerializerTest { val typeMappings = ScalaTypeMappings.create @@ -36,7 +36,7 @@ class CaseClassSerializerTest extends CompileTestUtils { serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) val str = writer.toString() - assertCompileSuccess(str) + CompileTestUtils.assertCompileSuccess(str) } } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala index 3f48c4ae8e..c77e3dbcd6 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala @@ -8,7 +8,7 @@ import scala.io.Source.fromFile import java.io.File import java.io.File.pathSeparator -trait CompileTestUtils { +object CompileTestUtils { private object env extends Settings { @@ -23,12 +23,20 @@ trait CompileTestUtils { usejavacp.value = true } + def assertCompileSuccess(file: File): Unit = { + assertCompileSuccess(recursiveFileList(file)) + } + def assertCompileSuccess(files: Traversable[File]): Unit = { for (file <- files) { assertCompileSuccess(fromFile(file).mkString) } } + def assertCompileSuccessCombined(file: File): Unit = { + assertCompileSuccessCombined(recursiveFileList(file)) + } + def assertCompileSuccessCombined(files: Traversable[File]): Unit = { assertCompileSuccess(files map (fromFile(_).mkString) @@ -51,7 +59,7 @@ trait CompileTestUtils { } } - def recursiveFileList(file: File): Array[File] = { + private def recursiveFileList(file: File): Array[File] = { if (file.isDirectory) { file.listFiles.flatMap(recursiveFileList) } else { diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala index 535a822458..2391de14a4 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala @@ -5,7 +5,7 @@ import com.querydsl.codegen.GenericExporter import org.junit.Test import io.Source.fromFile -class GenericExporterJPATest extends CompileTestUtils { +class GenericExporterJPATest { @Test def Export { @@ -26,7 +26,7 @@ class GenericExporterJPATest extends CompileTestUtils { filter (_.getName.endsWith(".scala")) map (fromFile(_).mkString) mkString ("\n")) - assertCompileSuccess(sources) + CompileTestUtils.assertCompileSuccess(sources) } } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala index 42dc5e6a23..f93acfa299 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala @@ -6,7 +6,7 @@ import org.junit.Test import io.Source.fromFile import java.io.File -class GenericExporterTest extends CompileTestUtils { +class GenericExporterTest { @Test def Export { @@ -18,20 +18,20 @@ class GenericExporterTest extends CompileTestUtils { exporter.export(getClass.getPackage) val targetFolder = new File("target/gen1/com/querydsl/scala/") - + // com.querydsl.scala val sources = (targetFolder.listFiles() filter (_.getName.endsWith(".scala")) map (fromFile(_).mkString) mkString ("\n")) - assertCompileSuccess(sources) + CompileTestUtils.assertCompileSuccess(sources) // com.querydsl.scala.ext val other = (new File(targetFolder, "ext").listFiles() filter (_.getName.endsWith(".scala")) map (fromFile(_).mkString) mkString ("\n")) - assertCompileSuccess("import com.querydsl.scala.ext._\n" + other) + CompileTestUtils.assertCompileSuccess("import com.querydsl.scala.ext._\n" + other) } } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala index 840c23b0b6..c55563692a 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala @@ -11,7 +11,7 @@ import org.junit.Assert._ import scala.collection.JavaConversions._ -class ScalaBeanSerializerTest extends CompileTestUtils { +class ScalaBeanSerializerTest { val typeMappings = ScalaTypeMappings.create @@ -63,6 +63,6 @@ class ScalaBeanSerializerTest extends CompileTestUtils { typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) val str = writer.toString - assertCompileSuccess(str) + CompileTestUtils.assertCompileSuccess(str) } } \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala index 4def5d2d02..c2073fe79d 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala @@ -13,7 +13,7 @@ import com.querydsl.sql._ import java.io.StringWriter -class ScalaEntitySerializerTest extends CompileTestUtils { +class ScalaEntitySerializerTest { var entityType: EntityType = null @@ -69,6 +69,6 @@ class ScalaEntitySerializerTest extends CompileTestUtils { serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) val str = writer.toString() //System.err.println(str); - assertCompileSuccess(str) + CompileTestUtils.assertCompileSuccess(str) } } \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala index 92bc42f70a..8fe1e2296b 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala @@ -24,7 +24,7 @@ import com.querydsl.sql.codegen._ import com.querydsl.sql.dml._ import com.querydsl.scala.Helpers._ -class JDBCIntegrationTest extends CompileTestUtils with SQLHelpers { +class JDBCIntegrationTest extends SQLHelpers { val survey = QSurvey val employee = QEmployee @@ -82,7 +82,7 @@ class JDBCIntegrationTest extends CompileTestUtils with SQLHelpers { exporter.setSchemaPattern("PUBLIC") exporter.export(connection.getMetaData) - assertCompileSuccess(recursiveFileList(directory)) + CompileTestUtils.assertCompileSuccess(directory) } @Test @@ -101,7 +101,7 @@ class JDBCIntegrationTest extends CompileTestUtils with SQLHelpers { exporter.setSchemaPattern("PUBLIC") exporter.export(connection.getMetaData) - assertCompileSuccessCombined(recursiveFileList(directory)) + CompileTestUtils.assertCompileSuccessCombined(directory) } @Test diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index 23866ee39c..5ea3f46a5d 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -16,7 +16,7 @@ import scala.collection.JavaConversions._ import com.querydsl.scala._ -class MetaDataExporterTest extends CompileTestUtils { +class MetaDataExporterTest { var connection: java.sql.Connection = _ @@ -48,7 +48,6 @@ class MetaDataExporterTest extends CompileTestUtils { CONSTRAINT PK_employee PRIMARY KEY (id), CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))""") - // table with count column stmt.execute("create table count_table(count int)") @@ -78,8 +77,8 @@ class MetaDataExporterTest extends CompileTestUtils { exporter.setCreateScalaSources(true) exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - - assertCompileSuccess(recursiveFileList(directory)) + + CompileTestUtils.assertCompileSuccess(directory) } @Test @@ -98,7 +97,7 @@ class MetaDataExporterTest extends CompileTestUtils { exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - assertCompileSuccessCombined(recursiveFileList(directory)) + CompileTestUtils.assertCompileSuccessCombined(directory) } @Test @@ -117,7 +116,7 @@ class MetaDataExporterTest extends CompileTestUtils { exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - assertCompileSuccess(recursiveFileList(directory)) + CompileTestUtils.assertCompileSuccess(directory) } @Test @@ -137,7 +136,7 @@ class MetaDataExporterTest extends CompileTestUtils { exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - assertCompileSuccessCombined(recursiveFileList(directory)) + CompileTestUtils.assertCompileSuccessCombined(directory) } } \ No newline at end of file diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/ScalaMetaDataSerializerTest.scala similarity index 100% rename from querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataSerializerTest.scala rename to querydsl-scala/src/test/scala/com/querydsl/scala/sql/ScalaMetaDataSerializerTest.scala From 97882965acb6cd8543195b4a35b247f8669282de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 8 Mar 2015 18:29:29 +0200 Subject: [PATCH 0784/1968] Fix indentation --- .../scala/sql/MetaDataExporterTest.scala | 180 +++++++++--------- 1 file changed, 90 insertions(+), 90 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index 5ea3f46a5d..c0d13573ea 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -22,121 +22,121 @@ class MetaDataExporterTest { @Before def setUp() { - Class.forName("org.h2.Driver") - val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() - connection = java.sql.DriverManager.getConnection(url, "sa", "") - - val stmt = connection.createStatement() - - try { - stmt.execute("create table reserved (id int, while int)") - stmt.execute("create table underscore (e_id int, c_id int)") - stmt.execute("create table beangen1 (\"SEP_Order\" int)") - stmt.execute("create table definstance (id int, definstance int, definstance1 int)") - stmt.execute("create table pkfk (id int primary key, pk int, fk int)") - stmt.execute("create table \"camelCase\" (id int)") - stmt.execute("create table \"vwServiceName\" (id int)") - stmt.execute("create table date_test (d date)") - stmt.execute("create table date_time_test (dt datetime)") - stmt.execute("create table survey (id int, name varchar(30))") - stmt.execute("create table typetest (type int, constraint pk_typetest primary key(type))") - - stmt.execute("""create table employee( + Class.forName("org.h2.Driver") + val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() + connection = java.sql.DriverManager.getConnection(url, "sa", "") + + val stmt = connection.createStatement() + + try { + stmt.execute("create table reserved (id int, while int)") + stmt.execute("create table underscore (e_id int, c_id int)") + stmt.execute("create table beangen1 (\"SEP_Order\" int)") + stmt.execute("create table definstance (id int, definstance int, definstance1 int)") + stmt.execute("create table pkfk (id int primary key, pk int, fk int)") + stmt.execute("create table \"camelCase\" (id int)") + stmt.execute("create table \"vwServiceName\" (id int)") + stmt.execute("create table date_test (d date)") + stmt.execute("create table date_time_test (dt datetime)") + stmt.execute("create table survey (id int, name varchar(30))") + stmt.execute("create table typetest (type int, constraint pk_typetest primary key(type))") + + stmt.execute("""create table employee( id INT, firstname VARCHAR(50), lastname VARCHAR(50), salary DECIMAL(10, 2), datefield DATE, timefield TIME, superior_id int, survey_id int, survey_name varchar(30), CONSTRAINT PK_employee PRIMARY KEY (id), CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))""") - // table with count column - stmt.execute("create table count_table(count int)") + // table with count column + stmt.execute("create table count_table(count int)") - // multi primary key - stmt.execute("create table multikey(id INT, id2 VARCHAR, id3 INT," + - " CONSTRAINT pk_multikey PRIMARY KEY (id, id2, id3) )") + // multi primary key + stmt.execute("create table multikey(id INT, id2 VARCHAR, id3 INT," + + " CONSTRAINT pk_multikey PRIMARY KEY (id, id2, id3) )") - // multi foreign key - stmt.execute("create table multikey2(id INT, id2 INT, id3 INT, id4 INT, id5 INT, id6 INT," + - " CONSTRAINT pk_multikey2 FOREIGN KEY (id4, id5, id6) REFERENCES multikey2(id, id2, id3) )") + // multi foreign key + stmt.execute("create table multikey2(id INT, id2 INT, id3 INT, id4 INT, id5 INT, id6 INT," + + " CONSTRAINT pk_multikey2 FOREIGN KEY (id4, id5, id6) REFERENCES multikey2(id, id2, id3) )") - } finally { - stmt.close() - } + } finally { + stmt.close() + } } @Test def Generate_Without_BeanTypes() { - val directory = new java.io.File("target/jdbcgen1") - val namingStrategy = new DefaultNamingStrategy() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) + val directory = new java.io.File("target/jdbcgen1") + val namingStrategy = new DefaultNamingStrategy() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccess(directory) } @Test def Generate_With_BeanTypes() { - val directory = new java.io.File("target/jdbcgen2") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccessCombined(directory) + val directory = new java.io.File("target/jdbcgen2") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccessCombined(directory) } @Test def Generate_With_Schema() { - val directory = new java.io.File("target/jdbcgen3") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setSchemaToPackage(true) - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) + val directory = new java.io.File("target/jdbcgen3") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setSchemaToPackage(true) + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccess(directory) } @Test def Generate_With_BeanTypes_And_Schema() { - val directory = new java.io.File("target/jdbcgen4") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setSchemaToPackage(true) - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccessCombined(directory) + val directory = new java.io.File("target/jdbcgen4") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setSchemaToPackage(true) + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccessCombined(directory) } } \ No newline at end of file From 3a68a8a0d32dd4addec747d9c2dba254c2831ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 9 Mar 2015 22:23:01 +0200 Subject: [PATCH 0785/1968] Use Global for Scala compilation --- .../com/querydsl/scala/CompileTestUtils.scala | 40 ++++++++----------- .../scala/GenericExporterJPATest.scala | 5 +-- .../querydsl/scala/GenericExporterTest.scala | 8 +--- .../scala/sql/JDBCIntegrationTest.scala | 2 +- .../scala/sql/MetaDataExporterTest.scala | 4 +- 5 files changed, 23 insertions(+), 36 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala index c77e3dbcd6..5dbe943a31 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala @@ -8,41 +8,35 @@ import scala.io.Source.fromFile import java.io.File import java.io.File.pathSeparator -object CompileTestUtils { - - private object env extends Settings { +import scala.tools.nsc.reporters.{ConsoleReporter, Reporter} - private def jarPathOfClass(className: String) = { - Class.forName(className).getProtectionDomain.getCodeSource.getLocation - } - - val currentLibraries = this.getClass.getClassLoader.asInstanceOf[java.net.URLClassLoader].getURLs.toList - val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries +object CompileTestUtils { - classpath.value = cp.mkString(pathSeparator) - usejavacp.value = true + private def jarPathOfClass(className: String) = { + Class.forName(className).getProtectionDomain.getCodeSource.getLocation } + private val env = new Settings() + private val currentLibraries = this.getClass.getClassLoader.asInstanceOf[java.net.URLClassLoader].getURLs.toList + private val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries + env.classpath.value = cp.mkString(pathSeparator) + env.usejavacp.value = true + env.d.value = "target" + def assertCompileSuccess(file: File): Unit = { assertCompileSuccess(recursiveFileList(file)) } def assertCompileSuccess(files: Traversable[File]): Unit = { - for (file <- files) { - assertCompileSuccess(fromFile(file).mkString) + val reporter = new ConsoleReporter(env) + val g = new Global(env, reporter) + val run = new g.Run + run.compile(files.map(_.getPath).toList) + if (reporter.hasErrors) { + throw new AssertionError("Compilation failed") } } - def assertCompileSuccessCombined(file: File): Unit = { - assertCompileSuccessCombined(recursiveFileList(file)) - } - - def assertCompileSuccessCombined(files: Traversable[File]): Unit = { - assertCompileSuccess(files - map (fromFile(_).mkString) - mkString ("\n")) - } - def assertCompileSuccess(source: String): Unit = { val out = new java.io.ByteArrayOutputStream val interpreterWriter = new java.io.PrintWriter(out) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala index 2391de14a4..f162d9a289 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterJPATest.scala @@ -22,10 +22,7 @@ class GenericExporterJPATest { exporter.export(getClass.getPackage) val targetFolder = new java.io.File("target/gen1-jpa/com/querydsl/scala/") - val sources = (targetFolder listFiles () - filter (_.getName.endsWith(".scala")) - map (fromFile(_).mkString) - mkString ("\n")) + val sources = targetFolder.listFiles.filter(_.getName.endsWith(".scala")) CompileTestUtils.assertCompileSuccess(sources) } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala index f93acfa299..4677f836b7 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala @@ -20,15 +20,11 @@ class GenericExporterTest { val targetFolder = new File("target/gen1/com/querydsl/scala/") // com.querydsl.scala - val sources = (targetFolder.listFiles() - filter (_.getName.endsWith(".scala")) - map (fromFile(_).mkString) - mkString ("\n")) + val sources = targetFolder.listFiles.filter(_.getName.endsWith(".scala")) CompileTestUtils.assertCompileSuccess(sources) // com.querydsl.scala.ext - val other = (new File(targetFolder, "ext").listFiles() - filter (_.getName.endsWith(".scala")) + val other = (new File(targetFolder, "ext").listFiles() filter (_.getName.endsWith(".scala")) map (fromFile(_).mkString) mkString ("\n")) CompileTestUtils.assertCompileSuccess("import com.querydsl.scala.ext._\n" + other) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala index 8fe1e2296b..2cdb42a66f 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala @@ -101,7 +101,7 @@ class JDBCIntegrationTest extends SQLHelpers { exporter.setSchemaPattern("PUBLIC") exporter.export(connection.getMetaData) - CompileTestUtils.assertCompileSuccessCombined(directory) + CompileTestUtils.assertCompileSuccess(directory) } @Test diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index c0d13573ea..f0507fee25 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -97,7 +97,7 @@ class MetaDataExporterTest { exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - CompileTestUtils.assertCompileSuccessCombined(directory) + CompileTestUtils.assertCompileSuccess(directory) } @Test @@ -136,7 +136,7 @@ class MetaDataExporterTest { exporter.setTypeMappings(ScalaTypeMappings.create) exporter.export(connection.getMetaData) - CompileTestUtils.assertCompileSuccessCombined(directory) + CompileTestUtils.assertCompileSuccess(directory) } } \ No newline at end of file From dbf37b9ac19e8948b9d1500075025b5e27382c7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 10 Mar 2015 22:27:30 +0200 Subject: [PATCH 0786/1968] Fix setUp/tearDown logic --- .../scala/sql/MetaDataExporterTest.scala | 231 +++++++++--------- 1 file changed, 121 insertions(+), 110 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index f0507fee25..64bc1f0f39 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -16,127 +16,138 @@ import scala.collection.JavaConversions._ import com.querydsl.scala._ -class MetaDataExporterTest { - - var connection: java.sql.Connection = _ - - @Before - def setUp() { - Class.forName("org.h2.Driver") - val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() - connection = java.sql.DriverManager.getConnection(url, "sa", "") - - val stmt = connection.createStatement() - - try { - stmt.execute("create table reserved (id int, while int)") - stmt.execute("create table underscore (e_id int, c_id int)") - stmt.execute("create table beangen1 (\"SEP_Order\" int)") - stmt.execute("create table definstance (id int, definstance int, definstance1 int)") - stmt.execute("create table pkfk (id int primary key, pk int, fk int)") - stmt.execute("create table \"camelCase\" (id int)") - stmt.execute("create table \"vwServiceName\" (id int)") - stmt.execute("create table date_test (d date)") - stmt.execute("create table date_time_test (dt datetime)") - stmt.execute("create table survey (id int, name varchar(30))") - stmt.execute("create table typetest (type int, constraint pk_typetest primary key(type))") - - stmt.execute("""create table employee( +object MetaDataExporterTest { + + var connection: java.sql.Connection = _ + + @BeforeClass + def setUp() { + Class.forName("org.h2.Driver") + val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() + connection = java.sql.DriverManager.getConnection(url, "sa", "") + + val stmt = connection.createStatement() + + try { + stmt.execute("create table reserved (id int, while int)") + stmt.execute("create table underscore (e_id int, c_id int)") + stmt.execute("create table beangen1 (\"SEP_Order\" int)") + stmt.execute("create table definstance (id int, definstance int, definstance1 int)") + stmt.execute("create table pkfk (id int primary key, pk int, fk int)") + stmt.execute("create table \"camelCase\" (id int)") + stmt.execute("create table \"vwServiceName\" (id int)") + stmt.execute("create table date_test (d date)") + stmt.execute("create table date_time_test (dt datetime)") + stmt.execute("create table survey (id int, name varchar(30))") + stmt.execute("create table typetest (type int, constraint pk_typetest primary key(type))") + + stmt.execute("""create table employee( id INT, firstname VARCHAR(50), lastname VARCHAR(50), salary DECIMAL(10, 2), datefield DATE, timefield TIME, superior_id int, survey_id int, survey_name varchar(30), CONSTRAINT PK_employee PRIMARY KEY (id), CONSTRAINT FK_superior FOREIGN KEY (superior_id) REFERENCES employee(id))""") - // table with count column - stmt.execute("create table count_table(count int)") + // table with count column + stmt.execute("create table count_table(count int)") - // multi primary key - stmt.execute("create table multikey(id INT, id2 VARCHAR, id3 INT," + - " CONSTRAINT pk_multikey PRIMARY KEY (id, id2, id3) )") + // multi primary key + stmt.execute("create table multikey(id INT, id2 VARCHAR, id3 INT," + + " CONSTRAINT pk_multikey PRIMARY KEY (id, id2, id3) )") - // multi foreign key - stmt.execute("create table multikey2(id INT, id2 INT, id3 INT, id4 INT, id5 INT, id6 INT," + - " CONSTRAINT pk_multikey2 FOREIGN KEY (id4, id5, id6) REFERENCES multikey2(id, id2, id3) )") - - } finally { - stmt.close() - } - } - - @Test - def Generate_Without_BeanTypes() { - val directory = new java.io.File("target/jdbcgen1") - val namingStrategy = new DefaultNamingStrategy() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) + // multi foreign key + stmt.execute("create table multikey2(id INT, id2 INT, id3 INT, id4 INT, id5 INT, id6 INT," + + " CONSTRAINT pk_multikey2 FOREIGN KEY (id4, id5, id6) REFERENCES multikey2(id, id2, id3) )") + + } finally { + stmt.close() } + } + + @AfterClass + def tearDown() { + connection.close() + } + + +} + +class MetaDataExporterTest { + import MetaDataExporterTest._ + + @Test + def Generate_Without_BeanTypes() { + val directory = new java.io.File("target/jdbcgen1") + val namingStrategy = new DefaultNamingStrategy() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccess(directory) + } - @Test - def Generate_With_BeanTypes() { - val directory = new java.io.File("target/jdbcgen2") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) - } + @Test + def Generate_With_BeanTypes() { + val directory = new java.io.File("target/jdbcgen2") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccess(directory) + } - @Test - def Generate_With_Schema() { - val directory = new java.io.File("target/jdbcgen3") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setSchemaToPackage(true) - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) - } + @Test + def Generate_With_Schema() { + val directory = new java.io.File("target/jdbcgen3") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setSchemaToPackage(true) + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccess(directory) + } - @Test - def Generate_With_BeanTypes_And_Schema() { - val directory = new java.io.File("target/jdbcgen4") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - exporter.setSchemaPattern("PUBLIC") - exporter.setSchemaToPackage(true) - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) - } + @Test + def Generate_With_BeanTypes_And_Schema() { + val directory = new java.io.File("target/jdbcgen4") + val namingStrategy = new DefaultNamingStrategy() + //val beanSerializer = new ScalaBeanSerializer() + val exporter = new MetaDataExporter() + exporter.setNamePrefix("Q") + exporter.setPackageName("com.querydsl") + exporter.setSchemaPattern("PUBLIC") + exporter.setSchemaToPackage(true) + exporter.setTargetFolder(directory) + exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) + exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) + exporter.setCreateScalaSources(true) + exporter.setTypeMappings(ScalaTypeMappings.create) + exporter.export(connection.getMetaData) + + CompileTestUtils.assertCompileSuccess(directory) + } } \ No newline at end of file From 2394df5b3d763fc2d62292cd48b59efe04aa8c0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 11 Mar 2015 18:23:21 +0200 Subject: [PATCH 0787/1968] Refactor setup/teardown of JDBCIntegrationTest --- .../scala/sql/JDBCIntegrationTest.scala | 101 +++++++----------- .../scala/sql/MetaDataExporterTest.scala | 2 +- 2 files changed, 42 insertions(+), 61 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala index 2cdb42a66f..7252326c48 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/JDBCIntegrationTest.scala @@ -24,22 +24,16 @@ import com.querydsl.sql.codegen._ import com.querydsl.sql.dml._ import com.querydsl.scala.Helpers._ -class JDBCIntegrationTest extends SQLHelpers { - - val survey = QSurvey - val employee = QEmployee - - val templates = new HSQLDBTemplates() +object JDBCIntegrationTest { - var connection: Connection = _ + private var connection: Connection = _ + private var statement: Statement = _ - var statement: Statement = _ - - @Before - def setUp() { + @BeforeClass + def setUpClass() { Class.forName("org.h2.Driver") - val url = "jdbc:h2:~/dbs/h2-scala" - + val url = "jdbc:h2:mem:testdb" + System.currentTimeMillis() + connection = DriverManager.getConnection(url, "sa", "") statement = connection.createStatement() statement.execute("drop table employee if exists") @@ -64,46 +58,43 @@ class JDBCIntegrationTest extends SQLHelpers { statement.execute("insert into employee (firstname, lastname) values ('Bob', 'Smith')") statement.execute("insert into employee (firstname, lastname) values ('John', 'Doe')") - + // TODO : create table with multi column primary key } - @Test - def Generation_without_Beantypes { - val namingStrategy = new DefaultNamingStrategy() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - val directory = new File("target/gensql1") - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.setSchemaPattern("PUBLIC") - exporter.export(connection.getMetaData) - - CompileTestUtils.assertCompileSuccess(directory) + @AfterClass + def tearDownClass() { + try { + statement.close() + } finally { + connection.close() + } } - @Test - def Generation_with_Beantypes { - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() - val exporter = new MetaDataExporter() - exporter.setNamePrefix("Q") - exporter.setPackageName("com.querydsl") - val directory = new File("target/gensql2") - exporter.setTargetFolder(directory) - exporter.setSerializerClass(classOf[ScalaMetaDataSerializer]) - exporter.setBeanSerializerClass(classOf[ScalaBeanSerializer]) - exporter.setCreateScalaSources(true) - exporter.setTypeMappings(ScalaTypeMappings.create) - exporter.setSchemaPattern("PUBLIC") - exporter.export(connection.getMetaData) +} + +class JDBCIntegrationTest extends SQLHelpers { + import JDBCIntegrationTest._ - CompileTestUtils.assertCompileSuccess(directory) + val survey = QSurvey + val employee = QEmployee + + val templates = new HSQLDBTemplates() + val configuration = new Configuration(templates) + + def connection = JDBCIntegrationTest.connection + + @Before + def setUp(): Unit = { + connection.setAutoCommit(false) + } + + @After + def tearDown(): Unit = { + connection.rollback() + connection.setAutoCommit(true) } - + @Test def Populate_Bean { assertEquals(2, query.from(survey).list(survey) size ()) @@ -235,23 +226,13 @@ class JDBCIntegrationTest extends SQLHelpers { val count = delete(survey) where(survey.id === id) execute() assertTrue(count > 0) } - - - @After - def tearDown() { - try { - statement.close() - } finally { - connection.close() - } - } - def query = new SQLQuery(connection, templates) + def query = new SQLQuery(connection, configuration) - def delete(path: RelationalPath[_]) = new SQLDeleteClause(connection, templates, path) + def delete(path: RelationalPath[_]) = new SQLDeleteClause(connection, configuration, path) - def insert(path: RelationalPath[_]) = new SQLInsertClause(connection, templates, path) + def insert(path: RelationalPath[_]) = new SQLInsertClause(connection, configuration, path) - def update(path: RelationalPath[_]) = new SQLUpdateClause(connection, templates, path) + def update(path: RelationalPath[_]) = new SQLUpdateClause(connection, configuration, path) } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index 64bc1f0f39..b1b37fcbf5 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -18,7 +18,7 @@ import com.querydsl.scala._ object MetaDataExporterTest { - var connection: java.sql.Connection = _ + private var connection: java.sql.Connection = _ @BeforeClass def setUp() { From e27afcd9025f5fe5c5ad3d9653207b6fe7a74968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 11 Mar 2015 22:14:11 +0200 Subject: [PATCH 0788/1968] Improve normalization --- .../java/com/querydsl/core/support/Normalization.java | 2 +- .../com/querydsl/core/support/NormalizationTest.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java index 9ba286ebc6..8df6f9273c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/Normalization.java @@ -22,7 +22,7 @@ public final class Normalization { private static final String WS = "\\s*"; - private static final String NUMBER = "([\\+\\-]?\\d+\\.?\\d*)"; + private static final String NUMBER = "([\\+\\-]?\\d+\\.?\\d*)(?!\\p{Alpha})"; // TODO simplify private static final Pattern FULL_OPERATION = Pattern.compile( diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java index 1d86a4513e..23b58d15fa 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/NormalizationTest.java @@ -75,6 +75,8 @@ public void Mixed() { assertEquals("-2.5", Normalization.normalize("2.5 * -1")); assertEquals("hours * 2 + 3", Normalization.normalize("hours * 2 + 3")); assertEquals("2 + 3 * hours", Normalization.normalize("2 + 3 * hours")); + assertEquals("2 + 3 * 0hours", Normalization.normalize("2 + 3 * 0hours")); + assertEquals("a like '1 + 2 ' and b like '2 * 3'", Normalization.normalize("a like '1 + 2 ' and b like '2 * 3'")); } @Test @@ -108,4 +110,13 @@ public void Substring() { public void Parameters() { assertEquals("?1 + 1", Normalization.normalize("?1 + 1")); } + + @Test + public void Literals() { + assertEquals("'INPS-ISET-0000-12345678A'", Normalization.normalize("'INPS-ISET-0000-12345678A'")); + assertEquals("'INPS-ISET-0000X00000000A'", Normalization.normalize("'INPS-ISET-0000X00000000A'")); + assertEquals("'INPS-ISET-0000-00000000A'", Normalization.normalize("'INPS-ISET-0000-00000000A'")); + + assertEquals("column = 'INPS-ISET-0000-00000000A' limit 1", Normalization.normalize("column = 'INPS-ISET-0000-00000000A' limit 1")); + } } From 0b952defabb00e5c4a740a7e1cbec5503909f91a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Wed, 11 Mar 2015 23:25:35 +0200 Subject: [PATCH 0789/1968] Remove unused variable --- .../com/querydsl/scala/sql/MetaDataExporterTest.scala | 7 ------- 1 file changed, 7 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala index b1b37fcbf5..ad0fd11419 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/sql/MetaDataExporterTest.scala @@ -78,7 +78,6 @@ class MetaDataExporterTest { @Test def Generate_Without_BeanTypes() { val directory = new java.io.File("target/jdbcgen1") - val namingStrategy = new DefaultNamingStrategy() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") exporter.setPackageName("com.querydsl") @@ -95,8 +94,6 @@ class MetaDataExporterTest { @Test def Generate_With_BeanTypes() { val directory = new java.io.File("target/jdbcgen2") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") exporter.setPackageName("com.querydsl") @@ -114,8 +111,6 @@ class MetaDataExporterTest { @Test def Generate_With_Schema() { val directory = new java.io.File("target/jdbcgen3") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") exporter.setPackageName("com.querydsl") @@ -133,8 +128,6 @@ class MetaDataExporterTest { @Test def Generate_With_BeanTypes_And_Schema() { val directory = new java.io.File("target/jdbcgen4") - val namingStrategy = new DefaultNamingStrategy() - //val beanSerializer = new ScalaBeanSerializer() val exporter = new MetaDataExporter() exporter.setNamePrefix("Q") exporter.setPackageName("com.querydsl") From d23a7ce3eaef845f010a032a8957a4297b711cd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 12 Mar 2015 23:06:31 +0200 Subject: [PATCH 0790/1968] Optimize compilation --- .../com/querydsl/scala/CompileTestUtils.scala | 23 +++++++++---------- .../querydsl/scala/GenericExporterTest.scala | 13 ++--------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala index 5dbe943a31..b89490fc75 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CompileTestUtils.scala @@ -2,6 +2,9 @@ package com.querydsl.scala import java.io.File._ +import com.google.common.base.Charsets +import com.google.common.io.Files + import scala.tools.nsc._ import scala.tools.nsc.interpreter.IR.Success import scala.io.Source.fromFile @@ -16,12 +19,14 @@ object CompileTestUtils { Class.forName(className).getProtectionDomain.getCodeSource.getLocation } - private val env = new Settings() private val currentLibraries = this.getClass.getClassLoader.asInstanceOf[java.net.URLClassLoader].getURLs.toList private val cp = jarPathOfClass("scala.tools.nsc.Interpreter") :: jarPathOfClass("scala.ScalaObject") :: currentLibraries + + private val env = new Settings() env.classpath.value = cp.mkString(pathSeparator) env.usejavacp.value = true - env.d.value = "target" + //env.d.value = "target" + env.stopAfter.value = List("refchecks") def assertCompileSuccess(file: File): Unit = { assertCompileSuccess(recursiveFileList(file)) @@ -38,18 +43,12 @@ object CompileTestUtils { } def assertCompileSuccess(source: String): Unit = { - val out = new java.io.ByteArrayOutputStream - val interpreterWriter = new java.io.PrintWriter(out) - - val interpreter = new scala.tools.nsc.interpreter.IMain(env, interpreterWriter) + val file = File.createTempFile("source", ".scala") try { - val result = interpreter.interpret(source.replaceAll("package [\\w\\.]+", "")) - if (result != Success) { - throw new AssertionError("Compile failed, interpreter output:\n" + out.toString("utf-8")) - } + Files.write(source, file, Charsets.UTF_8) + assertCompileSuccess(file) } finally { - interpreterWriter.close() - interpreter.close() + file.delete() } } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala index 4677f836b7..88cf516a78 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/GenericExporterTest.scala @@ -17,17 +17,8 @@ class GenericExporterTest { exporter.setCreateScalaSources(true) exporter.export(getClass.getPackage) - val targetFolder = new File("target/gen1/com/querydsl/scala/") - - // com.querydsl.scala - val sources = targetFolder.listFiles.filter(_.getName.endsWith(".scala")) - CompileTestUtils.assertCompileSuccess(sources) - - // com.querydsl.scala.ext - val other = (new File(targetFolder, "ext").listFiles() filter (_.getName.endsWith(".scala")) - map (fromFile(_).mkString) - mkString ("\n")) - CompileTestUtils.assertCompileSuccess("import com.querydsl.scala.ext._\n" + other) + val targetFolder = new File("target/gen1") + CompileTestUtils.assertCompileSuccess(targetFolder) } } From 2e60cc0f47787d26e4b87b7defca5bb6cfea7134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 13 Mar 2015 17:57:54 +0200 Subject: [PATCH 0791/1968] Syntax usage improvements --- .../querydsl/scala/sql/ScalaMetaDataSerializer.scala | 12 ++++++------ .../com/querydsl/scala/CaseClassSerializerTest.scala | 2 +- .../querydsl/scala/ScalaEntitySerializerTest.scala | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/ScalaMetaDataSerializer.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/ScalaMetaDataSerializer.scala index b441d1a06a..b4dc1f4129 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/sql/ScalaMetaDataSerializer.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/sql/ScalaMetaDataSerializer.scala @@ -88,10 +88,10 @@ class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingS columnMeta.append(".named(\"" + metadata.getName + "\")") columnMeta.append(".ofType(" + metadata.getJdbcType + ")") if (metadata.hasSize) { - columnMeta.append(".withSize(" + metadata.getSize() + ")") + columnMeta.append(".withSize(" + metadata.getSize + ")") } if (metadata.getDigits > 0) { - columnMeta.append(".withDigits(" + metadata.getDigits() + ")") + columnMeta.append(".withDigits(" + metadata.getDigits + ")") } if (!metadata.isNullable) { columnMeta.append(".notNull()") @@ -102,13 +102,13 @@ class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingS override def writeAnnotations(model: EntityType, queryType: Type, writer: ScalaWriter) = { if (model == queryType) { - model.getAnnotations.foreach(writer.annotation(_)) + model.getAnnotations.foreach(writer.annotation) } } def serializePrimaryKeys(model: EntityType, writer: CodeWriter, primaryKeys: Collection[PrimaryKeyData]) { primaryKeys.foreach { pk => - val fieldName = namingStrategy.getPropertyNameForPrimaryKey(pk.getName(), model) + val fieldName = namingStrategy.getPropertyNameForPrimaryKey(pk.getName, model) val value = pk.getColumns.map(c => escape(namingStrategy.getPropertyName(c, model))) .mkString("createPrimaryKey(", ", ", ")") writer.publicFinal(new ClassType(classOf[PrimaryKey[_]], model), fieldName, value) @@ -126,7 +126,7 @@ class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingS val value = new StringBuilder(if (inverse) "createInvForeignKey(" else "createForeignKey(") if (fk.getForeignColumns.size == 1) { value.append(namingStrategy.getPropertyName(fk.getForeignColumns.get(0), model)) - value.append(", \"" + fk.getParentColumns().get(0) + "\"") + value.append(", \"" + fk.getParentColumns.get(0) + "\"") } else { val local = fk.getForeignColumns.map(c => escape(namingStrategy.getPropertyName(c, model))).mkString(", ") val foreign = fk.getParentColumns.map("\"" + _ + "\"").mkString(", ") @@ -134,7 +134,7 @@ class ScalaMetaDataSerializer @Inject() (typeMappings: TypeMappings, val namingS } value.append(")") val t = new ClassType(classOf[ForeignKey[_]], fk.getType) - writer.publicFinal(t, fieldName, value.toString()) + writer.publicFinal(t, fieldName, value.toString) } } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala index 472480ee6b..c0a330ba88 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/CaseClassSerializerTest.scala @@ -34,7 +34,7 @@ class CaseClassSerializerTest { serializer.createCompanionObject = false typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) - val str = writer.toString() + val str = writer.toString CompileTestUtils.assertCompileSuccess(str) } diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala index c2073fe79d..a1f2b5f7f0 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaEntitySerializerTest.scala @@ -51,7 +51,7 @@ class ScalaEntitySerializerTest { typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) val serializer = new ScalaEntitySerializer(typeMappings) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) - val str = writer.toString() + val str = writer.toString //System.err.println(str) assertTrue(str.contains("class QPerson(cl: Class[_ <: Person], md: PathMetadata) " + "extends EntityPathImpl[Person](cl, md) {")) @@ -67,7 +67,7 @@ class ScalaEntitySerializerTest { typeMappings.register(entityType, new QueryTypeFactoryImpl("Q", "", "").create(entityType)) val serializer = new ScalaEntitySerializer(typeMappings) serializer.serialize(entityType, SimpleSerializerConfig.DEFAULT, new ScalaWriter(writer)) - val str = writer.toString() + val str = writer.toString //System.err.println(str); CompileTestUtils.assertCompileSuccess(str) } From 6d6b266bee7e7cf1ab80c51b3f5347b495d065aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 14 Mar 2015 13:05:49 +0200 Subject: [PATCH 0792/1968] Minor fixes --- .../src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala | 2 +- .../scala/{TypeMappings.scala => ScalaTypeMappings.scala} | 0 .../test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename querydsl-scala/src/main/scala/com/querydsl/scala/{TypeMappings.scala => ScalaTypeMappings.scala} (100%) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala index 3d00a37bab..7424d600d2 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaBeanSerializer.scala @@ -47,7 +47,7 @@ object Serializer { */ def writeImports(model: EntityType, javaBeanSupport: Boolean, writer: ScalaWriter) { val importedClasses = getAnnotationTypes(model) - if (javaBeanSupport) importedClasses.add("scala.reflect.BeanProperty") + if (javaBeanSupport) importedClasses.add("scala.beans.BeanProperty") if (model.hasLists) importedClasses.add(classOf[List[_]].getName) if (model.hasMaps) importedClasses.add(classOf[Map[_, _]].getName) writer.importClasses(importedClasses.toArray: _*) diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/TypeMappings.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/ScalaTypeMappings.scala similarity index 100% rename from querydsl-scala/src/main/scala/com/querydsl/scala/TypeMappings.scala rename to querydsl-scala/src/main/scala/com/querydsl/scala/ScalaTypeMappings.scala diff --git a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala index c55563692a..cb119c6f8b 100644 --- a/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala +++ b/querydsl-scala/src/test/scala/com/querydsl/scala/ScalaBeanSerializerTest.scala @@ -29,7 +29,7 @@ class ScalaBeanSerializerTest { //println(writer.toString) var toMatch = """package com.querydsl - import scala.reflect.BeanProperty + import scala.beans.BeanProperty import java.util.List import java.util.Map /** From bb257c55c861e681bbcb40690ef1b49666e2683f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Fri, 13 Mar 2015 22:39:12 +0200 Subject: [PATCH 0793/1968] Remove ResourceCheck based test filtering --- .../core/testutil/FilteringTestRunner.java | 39 ------------------- .../querydsl/core/testutil/ResourceCheck.java | 30 -------------- .../core/testutil/ResourceCheckRule.java | 33 ---------------- querydsl-root/pom.xml | 1 + .../querydsl/sql/codegen/ExportBaseTest.java | 3 -- .../querydsl/sql/codegen/ExportMSSQLTest.java | 5 ++- .../sql/codegen/ExportTeradataTest.java | 1 - 7 files changed, 4 insertions(+), 108 deletions(-) delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/testutil/FilteringTestRunner.java delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheck.java delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheckRule.java diff --git a/querydsl-core/src/test/java/com/querydsl/core/testutil/FilteringTestRunner.java b/querydsl-core/src/test/java/com/querydsl/core/testutil/FilteringTestRunner.java deleted file mode 100644 index 601e32d9ca..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/testutil/FilteringTestRunner.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.testutil; - -import org.junit.runner.notification.RunNotifier; -import org.junit.runners.BlockJUnit4ClassRunner; -import org.junit.runners.model.InitializationError; - -public class FilteringTestRunner extends BlockJUnit4ClassRunner { - - private boolean run = true; - - public FilteringTestRunner(Class klass) throws InitializationError { - super(klass); - ResourceCheck rc = klass.getAnnotation(ResourceCheck.class); - if (rc != null) { - run = klass.getResourceAsStream(rc.value()) != null; - } - } - - @Override - public void run(RunNotifier notifier) { - if (run) { - super.run(notifier); - } - } - -} diff --git a/querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheck.java b/querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheck.java deleted file mode 100644 index 22e9368cd1..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheck.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.testutil; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Inherited; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.TYPE) -@Inherited -public @interface ResourceCheck { - /** - * @return - */ - public String value(); -} diff --git a/querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheckRule.java b/querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheckRule.java deleted file mode 100644 index e85355ba9b..0000000000 --- a/querydsl-core/src/test/java/com/querydsl/core/testutil/ResourceCheckRule.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.testutil; - -import org.junit.rules.MethodRule; -import org.junit.runners.model.FrameworkMethod; -import org.junit.runners.model.Statement; - -public class ResourceCheckRule implements MethodRule{ - - @Override - public Statement apply(Statement base, FrameworkMethod method, Object target) { - Class testClass = target.getClass(); - ResourceCheck rc = testClass.getAnnotation(ResourceCheck.class); - boolean run = true; - if (rc != null) { - run = testClass.getResourceAsStream(rc.value()) != null; - } - return run ? base : EmptyStatement.DEFAULT; - } - -} diff --git a/querydsl-root/pom.xml b/querydsl-root/pom.xml index 5b236d623f..108543c469 100644 --- a/querydsl-root/pom.xml +++ b/querydsl-root/pom.xml @@ -568,6 +568,7 @@ **/*$* **/DB2*SuiteTest.java + **/ExportMSSQLTest.java **/ExportOracleTest.java **/ExportTeradataTest.java **/Oracle*SuiteTest.java diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportBaseTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportBaseTest.java index 351ab851cc..f4a9e2cd50 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportBaseTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportBaseTest.java @@ -18,12 +18,9 @@ import org.junit.AfterClass; import org.junit.Test; -import org.junit.runner.RunWith; import com.querydsl.sql.Connections; -import com.querydsl.core.testutil.FilteringTestRunner; -@RunWith(FilteringTestRunner.class) public abstract class ExportBaseTest { @Test diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportMSSQLTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportMSSQLTest.java index 23d73c27b5..7692a67143 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportMSSQLTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportMSSQLTest.java @@ -14,11 +14,12 @@ package com.querydsl.sql.codegen; import org.junit.BeforeClass; +import org.junit.experimental.categories.Category; -import com.querydsl.core.testutil.ResourceCheck; +import com.querydsl.core.testutil.ExternalDB; import com.querydsl.sql.Connections; -@ResourceCheck("/sqlserver.run") +@Category(ExternalDB.class) public class ExportMSSQLTest extends ExportBaseTest{ @BeforeClass diff --git a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportTeradataTest.java b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportTeradataTest.java index 6189394947..f1a9c26700 100644 --- a/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportTeradataTest.java +++ b/querydsl-sql-codegen/src/test/java/com/querydsl/sql/codegen/ExportTeradataTest.java @@ -6,7 +6,6 @@ import com.querydsl.core.testutil.ExternalDB; import com.querydsl.sql.Connections; -//@Ignore @Category(ExternalDB.class) public class ExportTeradataTest extends ExportBaseTest { From d7409d5d4cc2d4c9f900ca84b14e1df6c1a3b9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 10 Mar 2015 17:47:32 +0200 Subject: [PATCH 0794/1968] Add serialization test utility --- .../core/QueryMetadaSerializationTest.java | 27 +++------------- .../querydsl/core/testutil/Serialization.java | 29 +++++++++++++++++ .../types/ExpressionSerializationTest.java | 15 ++------- .../core/types/SerializationTest.java | 31 ++++++------------- .../jpa/ExpressionSerializationTest.java | 22 ++----------- .../com/querydsl/jpa/SerializationBase.java | 28 ++--------------- .../com/querydsl/sql/RelationalPathTest.java | 11 +------ .../java/com/querydsl/sql/SelectBase.java | 13 ++------ 8 files changed, 54 insertions(+), 122 deletions(-) create mode 100644 querydsl-core/src/test/java/com/querydsl/core/testutil/Serialization.java diff --git a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java index 7259f98e21..8d7d7f1924 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java @@ -16,25 +16,16 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Modifier; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Stack; +import java.util.*; import org.junit.Test; import com.querydsl.core.QueryFlag.Position; +import com.querydsl.core.testutil.Serialization; import com.querydsl.core.types.expr.NumberOperation; import com.querydsl.core.types.path.BeanPath; import com.querydsl.core.types.path.NumberPath; @@ -58,18 +49,8 @@ public void Serialization() throws IOException, ClassNotFoundException{ metadata.addOrderBy(expr.asc()); metadata.setProjection(expr); metadata.addWhere(expr.isEmpty()); - - // serialize metadata - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(baos); - out.writeObject(metadata); - out.close(); - - // deserialize metadata - ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bain); - QueryMetadata metadata2 = (QueryMetadata) in.readObject(); - in.close(); + + QueryMetadata metadata2 = Serialization.serialize(metadata); assertEquals(metadata.getFlags(), metadata2.getFlags()); assertEquals(metadata.getGroupBy().get(0), metadata2.getGroupBy().get(0)); diff --git a/querydsl-core/src/test/java/com/querydsl/core/testutil/Serialization.java b/querydsl-core/src/test/java/com/querydsl/core/testutil/Serialization.java new file mode 100644 index 0000000000..34519c0d5f --- /dev/null +++ b/querydsl-core/src/test/java/com/querydsl/core/testutil/Serialization.java @@ -0,0 +1,29 @@ +package com.querydsl.core.testutil; + +import java.io.*; + +public final class Serialization { + + private Serialization() { } + + public static T serialize(T obj) { + try { + // serialize + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(baos); + out.writeObject(obj); + out.close(); + + // deserialize + ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); + ObjectInputStream in = new ObjectInputStream(bais); + T rv = (T) in.readObject(); + in.close(); + return rv; + } catch (IOException e) { + throw new RuntimeException(e); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } +} diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/ExpressionSerializationTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/ExpressionSerializationTest.java index 2c937606ab..73c8471606 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/ExpressionSerializationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/ExpressionSerializationTest.java @@ -1,13 +1,10 @@ package com.querydsl.core.types; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import org.junit.Test; +import com.querydsl.core.testutil.Serialization; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; @@ -21,15 +18,7 @@ public void Serialize() throws ClassNotFoundException, IOException { } private void serialize(Object obj) throws IOException, ClassNotFoundException{ - ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bytesOut); - out.writeObject(obj); - out.close(); - bytesOut.close(); - - ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytesOut.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bytesIn); - Object obj2 = in.readObject(); + Object obj2 = Serialization.serialize(obj); obj2.hashCode(); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/SerializationTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/SerializationTest.java index 5e96ece636..843518ca40 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/SerializationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/SerializationTest.java @@ -1,10 +1,11 @@ package com.querydsl.core.types; -import java.io.*; +import static com.querydsl.core.testutil.Serialization.serialize; +import static org.junit.Assert.assertEquals; -import com.querydsl.core.types.path.SimplePath; import org.junit.Test; -import static org.junit.Assert.assertEquals; + +import com.querydsl.core.types.path.SimplePath; public class SerializationTest { @@ -12,24 +13,12 @@ public class SerializationTest { public void roundtrip() throws Exception { PathImpl path = new PathImpl(Object.class, "entity"); SimplePath path2 = new SimplePath(Object.class, "entity"); - assertEquals(path, roundtrip(path)); - assertEquals(path2, roundtrip(path2)); - assertEquals(path2.isNull(), roundtrip(path2.isNull())); - assertEquals(path.hashCode(), roundtrip(path).hashCode()); - assertEquals(path2.hashCode(), roundtrip(path2).hashCode()); - assertEquals(path2.isNull().hashCode(), roundtrip(path2.isNull()).hashCode()); - } - - private T roundtrip(T obj) throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(baos); - out.writeObject(obj); - out.close(); - - // deserialize predicate - ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bain); - return (T) in.readObject(); + assertEquals(path, serialize(path)); + assertEquals(path2, serialize(path2)); + assertEquals(path2.isNull(), serialize(path2.isNull())); + assertEquals(path.hashCode(), serialize(path).hashCode()); + assertEquals(path2.hashCode(), serialize(path2).hashCode()); + assertEquals(path2.isNull().hashCode(), serialize(path2.isNull()).hashCode()); } } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java index 9f06d9c244..f0670029cb 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java @@ -1,36 +1,18 @@ package com.querydsl.jpa; +import static com.querydsl.core.testutil.Serialization.serialize; import static org.junit.Assert.assertEquals; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; import org.junit.Test; +import com.querydsl.core.types.Expression; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.impl.JPAQuery; -import com.querydsl.core.types.Expression; public class ExpressionSerializationTest { - private T serialize(T obj) throws ClassNotFoundException, IOException { - // serialize - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(baos); - out.writeObject(obj); - out.close(); - - // deserialize - ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bain); - T obj2 = (T) in.readObject(); - in.close(); - return obj2; - } - @Test public void Serialize() throws Exception { //QAdress.adress.name.eq("test" diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java index dddb4c30f5..94705bbb6c 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/SerializationBase.java @@ -23,6 +23,7 @@ import org.junit.runner.RunWith; import com.querydsl.core.QueryMetadata; +import com.querydsl.core.testutil.Serialization; import com.querydsl.core.types.Predicate; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.impl.JPAQuery; @@ -41,23 +42,11 @@ public void test() throws IOException, ClassNotFoundException{ JPAQuery query = query(); query.from(cat).where(cat.name.eq("Kate")).list(cat); - // get metadata QueryMetadata metadata = query.getMetadata(); assertFalse(metadata.getJoins().isEmpty()); assertTrue(metadata.getWhere() != null); assertTrue(metadata.getProjection() != null); - - // serialize metadata - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(baos); - out.writeObject(metadata); - out.close(); - - // deserialize metadata - ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bain); - QueryMetadata metadata2 = (QueryMetadata) in.readObject(); - in.close(); + QueryMetadata metadata2 = Serialization.serialize(metadata); // validate it assertEquals(metadata.getJoins(), metadata2.getJoins()); @@ -73,18 +62,7 @@ public void test() throws IOException, ClassNotFoundException{ @Test public void Any_Serialized() throws Exception { Predicate where = cat.kittens.any().name.eq("Ruth234"); - - // serialize predicate - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(baos); - out.writeObject(where); - out.close(); - - // deserialize predicate - ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bain); - Predicate where2 = (Predicate) in.readObject(); - in.close(); + Predicate where2 = Serialization.serialize(where); assertEquals(0, query().from(cat).where(where).count()); assertEquals(0, query().from(cat).where(where2).count()); diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java index 798809df7f..8d5fac130e 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathTest.java @@ -1,5 +1,6 @@ package com.querydsl.sql; +import static com.querydsl.core.testutil.Serialization.*; import static org.junit.Assert.assertEquals; import java.io.*; @@ -31,14 +32,4 @@ public void In_Tuple() throws ClassNotFoundException, IOException { serialize(tuple.newInstance(1, "a")); } - private Object serialize(Object obj) throws IOException, ClassNotFoundException{ - ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bytesOut); - out.writeObject(obj); - out.close(); - - ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytesOut.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bytesIn); - return in.readObject(); - } } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index 9012f23d6e..506558e7c8 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -43,6 +43,7 @@ import com.querydsl.core.support.Expressions; import com.querydsl.core.testutil.ExcludeIn; import com.querydsl.core.testutil.IncludeIn; +import com.querydsl.core.testutil.Serialization; import com.querydsl.core.types.*; import com.querydsl.core.types.expr.*; import com.querydsl.core.types.path.NumberPath; @@ -1392,16 +1393,8 @@ public void Serialization2() throws Exception { serialize(rows); } - private void serialize(Object obj) throws IOException, ClassNotFoundException{ - ByteArrayOutputStream bytesOut = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bytesOut); - out.writeObject(obj); - out.close(); - bytesOut.close(); - - ByteArrayInputStream bytesIn = new ByteArrayInputStream(bytesOut.toByteArray()); - ObjectInputStream in = new ObjectInputStream(bytesIn); - List rows = (List) in.readObject(); + private void serialize(List rows) throws IOException, ClassNotFoundException{ + rows = Serialization.serialize(rows); for (Tuple row : rows) { row.hashCode(); } From e2112080d1e711d4aa1eeac3987c29e1a43bda09 Mon Sep 17 00:00:00 2001 From: John Tims Date: Wed, 18 Mar 2015 19:33:39 -0400 Subject: [PATCH 0795/1968] Move querydsl-root to root directory --- .travis.yml | 4 +- querydsl-root/LICENSE.txt => LICENSE.txt | 0 querydsl-root/dist.sh => dist.sh | 8 +- querydsl-root/docs.sh => docs.sh | 3 +- querydsl-root/pom.xml => pom.xml | 162 +++++++++---------- querydsl-apt/pom.xml | 2 +- querydsl-codegen/pom.xml | 6 +- querydsl-collections/pom.xml | 2 +- querydsl-core/pom.xml | 6 +- querydsl-docs/pom.xml | 2 +- querydsl-hibernate-search/pom.xml | 6 +- querydsl-jdo/pom.xml | 2 +- querydsl-jpa-codegen/pom.xml | 6 +- querydsl-jpa/pom.xml | 2 +- querydsl-lucene3/pom.xml | 2 +- querydsl-lucene4/pom.xml | 2 +- querydsl-maven-plugin/pom.xml | 2 +- querydsl-mongodb/pom.xml | 2 +- querydsl-scala/pom.xml | 2 +- querydsl-spatial/pom.xml | 2 +- querydsl-sql-codegen/pom.xml | 4 +- querydsl-sql-codegen/src/main/assembly.xml | 2 +- querydsl-sql-spatial/pom.xml | 2 +- querydsl-sql-spring/pom.xml | 6 +- querydsl-sql/pom.xml | 2 +- {querydsl-root/src => src}/main/assembly.xml | 6 +- 26 files changed, 121 insertions(+), 124 deletions(-) rename querydsl-root/LICENSE.txt => LICENSE.txt (100%) rename querydsl-root/dist.sh => dist.sh (73%) rename querydsl-root/docs.sh => docs.sh (81%) rename querydsl-root/pom.xml => pom.xml (83%) rename {querydsl-root/src => src}/main/assembly.xml (87%) diff --git a/.travis.yml b/.travis.yml index cb7987c2e8..fa14bc45c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ services: addons: postgresql: "9.3" install: - - sh -c 'cd querydsl-root && mvn -B -q install -DskipTests=true' + - sh -c 'mvn -B -q install -DskipTests=true' before_script: - mysql -u root -e "source travis/mysql.sql" - psql -U postgres -f travis/postgresql.sql @@ -15,5 +15,5 @@ before_script: - ./travis/cubrid.sh - ./travis/firebird.sh script: - - sh -c 'cd querydsl-root && mvn -B test -Pall,travis' + - sh -c 'mvn -B test -Pall,travis' diff --git a/querydsl-root/LICENSE.txt b/LICENSE.txt similarity index 100% rename from querydsl-root/LICENSE.txt rename to LICENSE.txt diff --git a/querydsl-root/dist.sh b/dist.sh similarity index 73% rename from querydsl-root/dist.sh rename to dist.sh index 28fb0f7958..3c4ad088c3 100755 --- a/querydsl-root/dist.sh +++ b/dist.sh @@ -14,11 +14,11 @@ done echo "Creating reference documentation" cd ../querydsl-docs -mkdir -p ../querydsl-root/target/dist/reference +mkdir -p ../target/dist/reference mvn -Dxslthl.config=http://docbook.sourceforge.net/release/xsl/current/highlighting/xslthl-config.xml clean package -cp -R target/docbook/publish/en-US/* ../querydsl-root/target/dist/reference/ +cp -R target/docbook/publish/en-US/* ../target/dist/reference/ mvn -Dxslthl.config=http://docbook.sourceforge.net/release/xsl/current/highlighting/xslthl-config.xml -Dtranslation=ko-KR clean package -cp -R target/docbook/publish/ko-KR ../querydsl-root/target/dist/reference/ -cd ../querydsl-root +cp -R target/docbook/publish/ko-KR ../target/dist/reference/ +cd ../ echo "done." diff --git a/querydsl-root/docs.sh b/docs.sh similarity index 81% rename from querydsl-root/docs.sh rename to docs.sh index d25efa4868..c758b9b0f9 100755 --- a/querydsl-root/docs.sh +++ b/docs.sh @@ -1,6 +1,5 @@ #!/bin/sh echo "Creating reference documentation" -cd ../querydsl-docs +cd querydsl-docs mvn -Dxslthl.config=http://docbook.sourceforge.net/release/xsl/current/highlighting/xslthl-config.xml clean package -cd ../querydsl-root echo "done." diff --git a/querydsl-root/pom.xml b/pom.xml similarity index 83% rename from querydsl-root/pom.xml rename to pom.xml index 108543c469..08e9db78b4 100644 --- a/querydsl-root/pom.xml +++ b/pom.xml @@ -245,9 +245,9 @@ maven-assembly-plugin - ../querydsl-root/src/main/assembly.xml + ../src/main/assembly.xml - ../querydsl-root/target/dist + ../target/dist @@ -418,118 +418,118 @@ all true - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-collections - ../querydsl-sql - ../querydsl-sql-spatial - ../querydsl-sql-codegen - ../querydsl-sql-spring - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen - ../querydsl-jdo - + querydsl-core + querydsl-codegen + querydsl-spatial + querydsl-apt + querydsl-collections + querydsl-sql + querydsl-sql-spatial + querydsl-sql-codegen + querydsl-sql-spring + querydsl-maven-plugin + querydsl-jpa + querydsl-jpa-codegen + querydsl-jdo + - ../querydsl-lucene3 - ../querydsl-lucene4 - ../querydsl-hibernate-search - + querydsl-lucene3 + querydsl-lucene4 + querydsl-hibernate-search + - ../querydsl-mongodb - - - ../querydsl-scala + querydsl-mongodb + + + querydsl-scala - + hibernate-search - ../querydsl-core - ../querydsl-codegen - ../querydsl-lucene3 - ../querydsl-hibernate-search + querydsl-core + querydsl-codegen + querydsl-lucene3 + querydsl-hibernate-search - + jpa - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-spatial - ../querydsl-sql-codegen - ../querydsl-sql-spring - ../querydsl-maven-plugin - ../querydsl-jpa - ../querydsl-jpa-codegen + querydsl-core + querydsl-codegen + querydsl-spatial + querydsl-apt + querydsl-sql + querydsl-sql-spatial + querydsl-sql-codegen + querydsl-sql-spring + querydsl-maven-plugin + querydsl-jpa + querydsl-jpa-codegen - - + + jdo - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-apt - ../querydsl-sql - ../querydsl-sql-spatial - ../querydsl-sql-codegen - ../querydsl-sql-spring - ../querydsl-maven-plugin - ../querydsl-jdo + querydsl-core + querydsl-codegen + querydsl-spatial + querydsl-apt + querydsl-sql + querydsl-sql-spatial + querydsl-sql-codegen + querydsl-sql-spring + querydsl-maven-plugin + querydsl-jdo - - + + lucene - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-lucene3 - ../querydsl-lucene4 + querydsl-core + querydsl-codegen + querydsl-apt + querydsl-lucene3 + querydsl-lucene4 - - + + mongodb - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-mongodb + querydsl-core + querydsl-codegen + querydsl-apt + querydsl-mongodb - + sql - ../querydsl-core - ../querydsl-codegen - ../querydsl-spatial - ../querydsl-sql - ../querydsl-sql-spatial - ../querydsl-sql-codegen - ../querydsl-sql-spring - ../querydsl-maven-plugin + querydsl-core + querydsl-codegen + querydsl-spatial + querydsl-sql + querydsl-sql-spatial + querydsl-sql-codegen + querydsl-sql-spring + querydsl-maven-plugin - - + + collections - ../querydsl-core - ../querydsl-codegen - ../querydsl-apt - ../querydsl-collections + querydsl-core + querydsl-codegen + querydsl-apt + querydsl-collections diff --git a/querydsl-apt/pom.xml b/querydsl-apt/pom.xml index e970fc16c6..21bdc953de 100644 --- a/querydsl-apt/pom.xml +++ b/querydsl-apt/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-codegen/pom.xml b/querydsl-codegen/pom.xml index 4dd4908e8e..42238fac40 100644 --- a/querydsl-codegen/pom.xml +++ b/querydsl-codegen/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl @@ -83,4 +83,4 @@ - + diff --git a/querydsl-collections/pom.xml b/querydsl-collections/pom.xml index ef80c35594..e4af2ec547 100644 --- a/querydsl-collections/pom.xml +++ b/querydsl-collections/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-core/pom.xml b/querydsl-core/pom.xml index 89b8f4ec44..60e7ac6b47 100644 --- a/querydsl-core/pom.xml +++ b/querydsl-core/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl @@ -141,4 +141,4 @@ 1.13 - + diff --git a/querydsl-docs/pom.xml b/querydsl-docs/pom.xml index 2bf62d7661..bf5b64d5b2 100644 --- a/querydsl-docs/pom.xml +++ b/querydsl-docs/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-hibernate-search/pom.xml b/querydsl-hibernate-search/pom.xml index 6d7cf624cf..b6fdd14eb5 100644 --- a/querydsl-hibernate-search/pom.xml +++ b/querydsl-hibernate-search/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl @@ -143,4 +143,4 @@ - + diff --git a/querydsl-jdo/pom.xml b/querydsl-jdo/pom.xml index ac5e43c36d..4438a2b593 100644 --- a/querydsl-jdo/pom.xml +++ b/querydsl-jdo/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-jpa-codegen/pom.xml b/querydsl-jpa-codegen/pom.xml index ea0fd01e84..ee30a40511 100644 --- a/querydsl-jpa-codegen/pom.xml +++ b/querydsl-jpa-codegen/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl @@ -123,4 +123,4 @@ - + diff --git a/querydsl-jpa/pom.xml b/querydsl-jpa/pom.xml index 43bc78f07f..6325beed8a 100644 --- a/querydsl-jpa/pom.xml +++ b/querydsl-jpa/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-lucene3/pom.xml b/querydsl-lucene3/pom.xml index 88cd751c8c..2b0342da20 100644 --- a/querydsl-lucene3/pom.xml +++ b/querydsl-lucene3/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-lucene4/pom.xml b/querydsl-lucene4/pom.xml index 94f598dd85..32a0f3fe89 100644 --- a/querydsl-lucene4/pom.xml +++ b/querydsl-lucene4/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-maven-plugin/pom.xml b/querydsl-maven-plugin/pom.xml index 483c537ed5..c3d977ba39 100644 --- a/querydsl-maven-plugin/pom.xml +++ b/querydsl-maven-plugin/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-mongodb/pom.xml b/querydsl-mongodb/pom.xml index bac8f48696..f33711fec6 100644 --- a/querydsl-mongodb/pom.xml +++ b/querydsl-mongodb/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml index 76911afe03..9f4ae56f84 100644 --- a/querydsl-scala/pom.xml +++ b/querydsl-scala/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-spatial/pom.xml b/querydsl-spatial/pom.xml index 4d90405726..a00a9fdcba 100644 --- a/querydsl-spatial/pom.xml +++ b/querydsl-spatial/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-sql-codegen/pom.xml b/querydsl-sql-codegen/pom.xml index efd4955903..97b7ae1acf 100644 --- a/querydsl-sql-codegen/pom.xml +++ b/querydsl-sql-codegen/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl @@ -149,7 +149,7 @@ src/main/assembly.xml - ../querydsl-root/target/dist + ../target/dist diff --git a/querydsl-sql-codegen/src/main/assembly.xml b/querydsl-sql-codegen/src/main/assembly.xml index e14a926712..d0d3bf827a 100644 --- a/querydsl-sql-codegen/src/main/assembly.xml +++ b/querydsl-sql-codegen/src/main/assembly.xml @@ -8,7 +8,7 @@ - ../querydsl-root/LICENSE.txt + ../LICENSE.txt / diff --git a/querydsl-sql-spatial/pom.xml b/querydsl-sql-spatial/pom.xml index e8efcc394b..d3d7bccc69 100644 --- a/querydsl-sql-spatial/pom.xml +++ b/querydsl-sql-spatial/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-sql-spring/pom.xml b/querydsl-sql-spring/pom.xml index 31b6f19fe1..1dd87f20ef 100644 --- a/querydsl-sql-spring/pom.xml +++ b/querydsl-sql-spring/pom.xml @@ -1,4 +1,4 @@ - + 4.0.0 @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl @@ -43,4 +43,4 @@ - + diff --git a/querydsl-sql/pom.xml b/querydsl-sql/pom.xml index e0ab21871f..0b53cdc616 100644 --- a/querydsl-sql/pom.xml +++ b/querydsl-sql/pom.xml @@ -6,7 +6,7 @@ com.querydsl querydsl-root 4.0.0.BUILD-SNAPSHOT - ../querydsl-root/pom.xml + ../pom.xml com.querydsl diff --git a/querydsl-root/src/main/assembly.xml b/src/main/assembly.xml similarity index 87% rename from querydsl-root/src/main/assembly.xml rename to src/main/assembly.xml index 8fea4e7a7d..6e67e474d2 100644 --- a/querydsl-root/src/main/assembly.xml +++ b/src/main/assembly.xml @@ -8,7 +8,7 @@ - ../querydsl-root/LICENSE.txt + LICENSE.txt / @@ -45,7 +45,7 @@ - ../querydsl-core/target + querydsl-core/target *-sources.jar @@ -62,7 +62,5 @@ compile lib/all - From ae7f8cf32dc83003a89fe77e13ef757e2c5b2b85 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 19 Mar 2015 20:42:00 +0100 Subject: [PATCH 0796/1968] Keep documentation code snippets together withing the page --- querydsl-docs/src/main/styles/pdf/custom.xsl | 1 + 1 file changed, 1 insertion(+) diff --git a/querydsl-docs/src/main/styles/pdf/custom.xsl b/querydsl-docs/src/main/styles/pdf/custom.xsl index 27c742853a..7d928672b0 100644 --- a/querydsl-docs/src/main/styles/pdf/custom.xsl +++ b/querydsl-docs/src/main/styles/pdf/custom.xsl @@ -393,6 +393,7 @@ 0.5em 0.5em 0.5em + always From 32ff54c2a1baf1eb5b51b06c83a7c7e568f458d0 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 19 Mar 2015 20:45:14 +0100 Subject: [PATCH 0797/1968] Start each documentation chapter on a new page --- querydsl-docs/src/main/styles/pdf/custom.xsl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/querydsl-docs/src/main/styles/pdf/custom.xsl b/querydsl-docs/src/main/styles/pdf/custom.xsl index 7d928672b0..37b5d0c4ba 100644 --- a/querydsl-docs/src/main/styles/pdf/custom.xsl +++ b/querydsl-docs/src/main/styles/pdf/custom.xsl @@ -252,6 +252,11 @@ + + + page + + 0.8em From 71316d3f40507b9ba583946bbcb8da940c317ba5 Mon Sep 17 00:00:00 2001 From: John Tims Date: Fri, 20 Mar 2015 14:23:16 -0400 Subject: [PATCH 0798/1968] Fix typos --- .../com/querydsl/apt/ExtendedTypeFactory.java | 17 +++++++++-------- .../com/querydsl/apt/domain/CollectionTest.java | 2 +- .../querydsl/apt/domain/SecurableEntity.java | 6 +++--- .../querydsl/collections/PathComparator.java | 2 +- .../java/com/querydsl/core/EmptyMetadata.java | 2 +- .../com/querydsl/core/alias/AliasFactory.java | 2 +- .../com/querydsl/core/alias/ManagedObject.java | 2 +- .../core/support/DetachableAdapter.java | 2 +- .../querydsl/core/types/TemplateFactory.java | 8 ++++---- .../com/querydsl/core/types/expr/Wildcard.java | 6 +++--- .../core/QueryMetadaSerializationTest.java | 2 +- ...initeLoop.java => TemplateInfiniteLoop.java} | 2 +- .../querydsl/core/types/path/MapPathTest.java | 2 +- querydsl-docs/etc/jpa2_comparison.txt | 14 +++++++------- .../src/main/docbook/css/highlight.css | 4 ++-- .../en-US/content/general/creating-queries.xml | 2 +- .../docbook/en-US/content/tutorials/jpa.xml | 4 ++-- .../docbook/en-US/content/tutorials/scala.xml | 2 +- .../docbook/en-US/content/tutorials/spatial.xml | 4 ++-- .../docbook/en-US/content/tutorials/sql.xml | 10 +++++----- .../docbook/ko-KR/content/tutorials/mongodb.xml | 2 +- .../docbook/ko-KR/content/tutorials/scala.xml | 4 ++-- .../com/querydsl/jdo/models/company/Office.java | 2 +- .../com/querydsl/jdo/models/fitness/Gym.java | 4 ++-- .../querydsl/jdo/models/fitness/Wardrobe.java | 4 ++-- .../main/java/com/querydsl/jpa/Conversions.java | 16 ++++++++-------- .../jpa/ExpressionSerializationTest.java | 1 - .../com/querydsl/jpa/JPAQueryMixinTest.java | 2 +- .../querydsl/mongodb/MongodbExpressions.java | 2 +- .../main/java/com/querydsl/mongodb/Point.java | 2 +- .../querydsl/mongodb/GeoSpatialQueryTest.java | 2 +- .../com/querydsl/mongodb/MongodbQueryTest.java | 10 +++++----- .../spatial/jts/JTSPolygonExpression.java | 8 ++++---- .../com/querydsl/spatial/path/GeometryPath.java | 2 +- .../querydsl/spatial/path/GeometryPathTest.java | 2 +- .../sql/codegen/ExtendedBeanSerializer.java | 2 +- .../querydsl/sql/codegen/MetaDataExporter.java | 2 +- .../sql/codegen/ant/AntMetaDataExporter.java | 4 ++-- .../sql/spatial/AbstractConverterTest.java | 2 +- .../querydsl/sql/RelationalPathExtractor.java | 2 +- .../java/com/querydsl/sql/SQLExpressions.java | 2 +- .../java/com/querydsl/sql/SQLTemplates.java | 2 +- .../test/java/com/querydsl/sql/Connections.java | 4 ++-- .../test/java/com/querydsl/sql/MergeBase.java | 2 +- 44 files changed, 90 insertions(+), 90 deletions(-) rename querydsl-core/src/test/java/com/querydsl/core/types/{TermplateInfiniteLoop.java => TemplateInfiniteLoop.java} (96%) diff --git a/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java b/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java index 108ac21bcf..21529dfb20 100644 --- a/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java +++ b/querydsl-apt/src/main/java/com/querydsl/apt/ExtendedTypeFactory.java @@ -13,18 +13,19 @@ */ package com.querydsl.apt; +import java.lang.annotation.Annotation; +import java.util.*; + import javax.annotation.Nullable; import javax.annotation.processing.ProcessingEnvironment; import javax.lang.model.element.ElementKind; import javax.lang.model.element.Modifier; import javax.lang.model.element.TypeElement; import javax.lang.model.type.*; -import java.lang.annotation.Annotation; -import java.util.*; import com.mysema.codegen.model.*; -import com.querydsl.core.annotations.QueryExclude; import com.querydsl.codegen.*; +import com.querydsl.core.annotations.QueryExclude; /** * ExtendedTypeFactory is a factory for APT inspection based Type creation @@ -135,12 +136,12 @@ public Type visitTypeVariable(TypeVariable typeVariable, Boolean p) { } @Override - public Type visitWildcard(WildcardType wildardType, Boolean p) { - if (wildardType.getExtendsBound() != null) { - Type type = visit(wildardType.getExtendsBound(), p); + public Type visitWildcard(WildcardType wildcardType, Boolean p) { + if (wildcardType.getExtendsBound() != null) { + Type type = visit(wildcardType.getExtendsBound(), p); return new TypeExtends(type); - } else if (wildardType.getSuperBound() != null) { - Type type = visit(wildardType.getSuperBound(), p); + } else if (wildcardType.getSuperBound() != null) { + Type type = visit(wildcardType.getSuperBound(), p); return new TypeSuper(type); } else { return null; diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java index de858d9e65..fb4c276906 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java @@ -46,7 +46,7 @@ public static class Person { Collection collection2; - Collection> collectionOfCOllection; + Collection> collectionOfCollection; Collection> collectionOfSet; diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/SecurableEntity.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/SecurableEntity.java index 2c05bba3a2..a06b15f9d0 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/SecurableEntity.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/SecurableEntity.java @@ -8,8 +8,8 @@ import javax.persistence.TableGenerator; /** - * This is an example of using system ACL function. Note, field id is must, - * abstract function getId must also implemented. + * This is an example of using system ACL function. Note, field id is required, + * abstract function getId must also be implemented. */ @Entity public class SecurableEntity extends AbstractSecurable { @@ -28,4 +28,4 @@ public class SecurableEntity extends AbstractSecurable { // return getSecurableEntityId(); // } -} \ No newline at end of file +} diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/PathComparator.java b/querydsl-collections/src/main/java/com/querydsl/collections/PathComparator.java index c88d7897ff..5fbc6778d1 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/PathComparator.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/PathComparator.java @@ -46,7 +46,7 @@ public static > PathComparator pathComparator(P @Override public int compare(T leftBean, T rightBean) { if(leftBean == rightBean) { - return 0; // Reference to the seme object should always result in '0' + return 0; // Reference to the same object should always result in '0' } else if (leftBean == null) { return -1; // Whenever the reference varies and left is null, right is not null } else if (rightBean == null) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java b/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java index 2291fcda5b..5d00ebbf59 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java +++ b/querydsl-core/src/main/java/com/querydsl/core/EmptyMetadata.java @@ -24,7 +24,7 @@ import com.querydsl.core.types.Predicate; /** - * EmptyMetadata provides a immutable empty QueryMetadata instace + * EmptyMetadata provides an immutable empty QueryMetadata instance * * @author tiwe * diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java b/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java index 55a5d9fed5..a9b54180d6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java @@ -140,7 +140,7 @@ protected A createProxy(Class cl, Expression path) { } /** - * Get the current thread bound expression without reseting it + * Get the current thread bound expression without resetting it * * @param * @return diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/ManagedObject.java b/querydsl-core/src/main/java/com/querydsl/core/alias/ManagedObject.java index 2884f32e0c..7ed228f614 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/ManagedObject.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/ManagedObject.java @@ -16,7 +16,7 @@ import com.querydsl.core.types.EntityPath; /** - * MagagedObject is a tagging interface for CGLIB alias proxies + * ManagedObject is a tagging interface for CGLIB alias proxies * */ public interface ManagedObject { diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java index 109c917922..37418a5d5e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java @@ -37,7 +37,7 @@ import com.querydsl.core.types.query.TimeSubQuery; /** - * DetachableAdapter is an apadater implementation for the Detachable interface + * DetachableAdapter is an adapter implementation for the Detachable interface * * @author tiwe * diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java b/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java index c6fe53509a..6ce6a7a83d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/TemplateFactory.java @@ -123,8 +123,8 @@ public Object apply(Object arg) { if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { - Expression concated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); - return OperationImpl.create(String.class, Ops.LOWER, concated); + Expression concatenated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); + return OperationImpl.create(String.class, Ops.LOWER, concatenated); } else { return "%" + escapeForLike(String.valueOf(arg).toLowerCase(Locale.ENGLISH)); } @@ -138,8 +138,8 @@ public Object apply(Object arg) { if (arg instanceof Constant) { return ConstantImpl.create(apply(arg.toString()).toString()); } else if (arg instanceof Expression) { - Expression concated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); - return OperationImpl.create(String.class, Ops.CONCAT, concated, PERCENT); + Expression concatenated = OperationImpl.create(String.class, Ops.CONCAT, PERCENT, (Expression)arg); + return OperationImpl.create(String.class, Ops.CONCAT, concatenated, PERCENT); } else { return "%" + escapeForLike(String.valueOf(arg)) + "%"; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java b/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java index 401438a8b4..f03bf765b3 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/expr/Wildcard.java @@ -26,7 +26,7 @@ public final class Wildcard { /** - * Wilcard expression (*) for all columns + * Wildcard expression (*) for all columns */ public static final Expression all = TemplateExpressionImpl.create(Object[].class, "*"); @@ -36,12 +36,12 @@ public final class Wildcard { public static final NumberExpression count = NumberOperation.create(Long.class, Ops.AggOps.COUNT_ALL_AGG); /** - * Wilcard count distinct expression ((count(distinct *)) + * Wildcard count distinct expression (count(distinct *)) */ public static final NumberExpression countDistinct = NumberOperation.create(Long.class, Ops.AggOps.COUNT_DISTINCT_ALL_AGG); /** - * Wilcard count distinct expression ((count(distinct *)) + * Wildcard count expression (count(*)) */ public static final NumberExpression countAsInt = NumberOperation.create(Integer.class, Ops.AggOps.COUNT_ALL_AGG); diff --git a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java index 8d7d7f1924..d4529a22ab 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java @@ -65,7 +65,7 @@ public void Serialization() throws IOException, ClassNotFoundException{ } @Test - public void FullySerizable() { + public void FullySerializable() { Set> checked = new HashSet>(); checked.addAll(Arrays.>asList(Collection.class, List.class, Set.class, Map.class, Object.class, String.class, Class.class)); diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/TermplateInfiniteLoop.java b/querydsl-core/src/test/java/com/querydsl/core/types/TemplateInfiniteLoop.java similarity index 96% rename from querydsl-core/src/test/java/com/querydsl/core/types/TermplateInfiniteLoop.java rename to querydsl-core/src/test/java/com/querydsl/core/types/TemplateInfiniteLoop.java index 60aadd8e6e..2b5e73f05d 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/TermplateInfiniteLoop.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/TemplateInfiniteLoop.java @@ -3,7 +3,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -public class TermplateInfiniteLoop { +public class TemplateInfiniteLoop { static String templates[] = createTemplates(); diff --git a/querydsl-core/src/test/java/com/querydsl/core/types/path/MapPathTest.java b/querydsl-core/src/test/java/com/querydsl/core/types/path/MapPathTest.java index b354329229..c342f15e6a 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/types/path/MapPathTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/types/path/MapPathTest.java @@ -31,7 +31,7 @@ public void Get() { } @Test - public void GetKeytType() { + public void GetKeyType() { assertEquals(String.class, mapPath.getKeyType()); } diff --git a/querydsl-docs/etc/jpa2_comparison.txt b/querydsl-docs/etc/jpa2_comparison.txt index 2f4e47d4ab..562192a932 100644 --- a/querydsl-docs/etc/jpa2_comparison.txt +++ b/querydsl-docs/etc/jpa2_comparison.txt @@ -205,9 +205,9 @@ QPerson men = new QPerson("men"); QPerson women = new QPerson("women"); query.from(men, women).where( men.gender.eq(Gender.MALE), - men.relationshipStatus.eq(RelationshipStatsu.SINGLE), + men.relationshipStatus.eq(RelationshipStatus.SINGLE), women.gender.eq(Gender.FEMALE), - women.relationshipStatsu.eq(RelationshipStatsu.SINGLE)); + women.relationshipStatus.eq(RelationshipStatus.SINGLE)); [/code] [b]Fetch joins[/b] @@ -234,7 +234,7 @@ List employees = query.from(employee).join(employee.address).fetch() [code] CriteriaQuery query = builder.createQuery(Employee.class); Root emp = query.from(Employee.class); -emp.fetch(Empoyee_.phones, JoinType.LEFT); +emp.fetch(Employee_.phones, JoinType.LEFT); query.select(emp).distinct(true); List employees = em.createQuery( query).getResultList(); [/code] @@ -255,11 +255,11 @@ List employees = query.from(employee) CriteriaQuery query = builder.createQuery(Employee.class); Root emp = query.from(Employee.class); Subquery sq = query.subquery(Project.class); -Root projecti sq.from(Project.class); -Join sqEmp = project.join(Project_.employees); +Root project sq.from(Project.class); +Join sqEmp = project.join(Project_.employees); sq.select(project) .where(cb.equals(sqEmp, emp), - cb.eqauls(project.get(Project_.name), + cb.equals(project.get(Project_.name), cb.parameter(String.class,"project"))); criteria.add(cb.exists()); [/code] @@ -276,4 +276,4 @@ query.from(employee).where( .where(emp.eq(employee), project.name.eq("some name")) .list(project).exists() ).list(employee); -[/code] \ No newline at end of file +[/code] diff --git a/querydsl-docs/src/main/docbook/css/highlight.css b/querydsl-docs/src/main/docbook/css/highlight.css index 2c94b74073..b9db70d4a2 100644 --- a/querydsl-docs/src/main/docbook/css/highlight.css +++ b/querydsl-docs/src/main/docbook/css/highlight.css @@ -1,5 +1,5 @@ /* - code highlight CSS resemblign the Eclipse IDE default color schema + code highlight CSS resembling the Eclipse IDE default color schema @author Costin Leau */ @@ -36,4 +36,4 @@ .hl-annotation { font-style: normal; -} \ No newline at end of file +} diff --git a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml index 5588651ad3..374d87d14b 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/general/creating-queries.xml @@ -227,7 +227,7 @@ QBankAccount bankAccount = account.as(QBankAccount.class); Select literals - Literals can be selected by refering to them via Constant expressions. Here is a simple example + Literals can be selected by referring to them via Constant expressions. Here is a simple example For Hibernate based Delete usage, use the HibernateDeleteClause instead. DML clauses in JPA don't take JPA level cascade rules into account and don't provide - finegrained second level cache interaction. + fine-grained second level cache interaction. @@ -542,7 +542,7 @@ new JPAUpdateClause(session, customer).where(customer.name.eq("Bob")) For Hibernate based Update usage, use the HibernateUpdateClause instead. DML clauses in JPA don't take JPA level cascade rules into account and don't provide - finegrained second level cache interaction. + fine-grained second level cache interaction. diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml index 24266a95d4..39eb847c09 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/scala.xml @@ -38,7 +38,7 @@ expr eq "Ben" expr === "Ben" expr ne "Ben" expr !== "Ben" expr append "X" expr + "X" expr isEmpty expr is empty -expr isNotEmpoty expr not empty +expr isNotEmpty expr not empty // boolean left and right left && right diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml index b62eda16e3..fdb9b4195e 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/spatial.xml @@ -126,7 +126,7 @@ Geometry point = Wkt.fromWkt("Point(2 2)"); query.where(table.geo.distance(point).lt(5.0)); ]]> - In addition to straight distance between geometries spherical and spherodial distance are provided via + In addition to straight distance between geometries spherical and spheroidal distance are provided via distanceSphere and distanceSpheroid. @@ -183,4 +183,4 @@ NumberExpression pointX = point.x(); // x() is not available on Geometry - \ No newline at end of file + diff --git a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml index 697d02d3f5..4c10d85284 100644 --- a/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml +++ b/querydsl-docs/src/main/docbook/en-US/content/tutorials/sql.xml @@ -171,7 +171,7 @@ targetFolder - target folder where source filder should be generated + target folder where source folder should be generated namingStrategyClass @@ -929,7 +929,7 @@ new SQLUpdateClause(conn, configuration, survey) Without where @@ -1129,7 +1129,7 @@ configuration.register(new UtilDateType()); (Gender.class)); ]]> @@ -1151,7 +1151,7 @@ configuration.registerNumeric(5,2,Float.class); SQLListener is a listener interface that can be used to listen to queries and DML clause. SQLListener instances can be registered either on the configuration and on the query/clause level via the addListener method. - Use cases for listeners are data synchronization, logging, cacheing and validation. + Use cases for listeners are data synchronization, logging, caching and validation. diff --git a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml index a5c7c6b60b..7effd7e2bd 100644 --- a/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml +++ b/querydsl-docs/src/main/docbook/ko-KR/content/tutorials/mongodb.xml @@ -182,7 +182,7 @@ query 공간(Geospatial) 쿼리 - near(Douyble[]) 메서드를 이용해서 공간 검색을 할 수 있다. + near(Double[]) 메서드를 이용해서 공간 검색을 할 수 있다. - 다음과 같이 Employee 또는 QEmployee의 companio 객체를 사용할 수 있다. + 다음과 같이 Employee 또는 QEmployee의 companion 객체를 사용할 수 있다. wardrobes; // store Wardrobe in values private Map wardrobes2; // store Wardrobe in keys private Map wardrobesInverse; // store Wardrobe in values @@ -53,7 +53,7 @@ public class Gym { private String stringValue; public Gym() { - // this must be initialized in the constructor. dont change it + // this must be initialized in the constructor. don't change it wardrobes = new HashMap(); equipments = new HashMap(); partners = new HashMap(); diff --git a/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java index 6a94675a4d..be359d9836 100644 --- a/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java +++ b/querydsl-jdo/src/test/java/com/querydsl/jdo/models/fitness/Wardrobe.java @@ -25,7 +25,7 @@ */ @QueryEntity public class Wardrobe { - // this must be initialized in the constructor. dont change it + // this must be initialized in the constructor. don't change it private List clothes; private String model; private Gym gym; @@ -33,7 +33,7 @@ public class Wardrobe { private String stringValue; public Wardrobe() { - // this must be initialized in the constructor. dont change it + // this must be initialized in the constructor. don't change it clothes = new ArrayList(); } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/Conversions.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/Conversions.java index d48a452149..55b885deda 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/Conversions.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/Conversions.java @@ -45,10 +45,10 @@ public static Expression convert(Expression expr) { if (isAggSumWithConversion(expr) || isCountAggConversion(expr)) { return new NumberConversion(expr); } else if (expr instanceof FactoryExpression) { - FactoryExpression factorye = (FactoryExpression)expr; - for (Expression e : factorye.getArgs()) { + FactoryExpression factoryExpr = (FactoryExpression)expr; + for (Expression e : factoryExpr.getArgs()) { if (isAggSumWithConversion(e) || isCountAggConversion(expr)) { - return new NumberConversions(factorye); + return new NumberConversions(factoryExpr); } } } @@ -86,10 +86,10 @@ public static Expression convertForNativeQuery(Expression expr) { } else if (Enum.class.isAssignableFrom(expr.getType())) { return new EnumConversion(expr); } else if (expr instanceof FactoryExpression) { - FactoryExpression factorye = (FactoryExpression)expr; + FactoryExpression factoryExpr = (FactoryExpression)expr; boolean numberConversions = false; boolean hasEntityPath = false; - for (Expression e : factorye.getArgs()) { + for (Expression e : factoryExpr.getArgs()) { if (isEntityPathAndNeedsWrapping(e)) { hasEntityPath = true; } else if (Number.class.isAssignableFrom(e.getType())) { @@ -99,12 +99,12 @@ public static Expression convertForNativeQuery(Expression expr) { } } if (hasEntityPath) { - factorye = createEntityPathConversions(factorye); + factoryExpr = createEntityPathConversions(factoryExpr); } if (numberConversions) { - factorye = new NumberConversions(factorye); + factoryExpr = new NumberConversions(factoryExpr); } - return factorye; + return factoryExpr; } return expr; } diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java index f0670029cb..9dc9d26edd 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/ExpressionSerializationTest.java @@ -15,7 +15,6 @@ public class ExpressionSerializationTest { @Test public void Serialize() throws Exception { - //QAdress.adress.name.eq("test" Expression expr = QCat.cat.name.eq("test"); Expression expr2 = serialize(expr); diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java index efe0738dfb..aa7f9c942d 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMixinTest.java @@ -180,7 +180,7 @@ public void OrderBy_Embeddable2() { } @Test - public void OrderBy_Embeddable_Colllection() { + public void OrderBy_Embeddable_Collection() { QBookVersion bookVersion = QBookVersion.bookVersion; QBookMark bookMark = new QBookMark("bookVersion_definition_bookMarks"); mixin.from(bookVersion); diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java index 544eb6412f..bc3581a310 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java @@ -29,7 +29,7 @@ public final class MongodbExpressions { private MongodbExpressions() {} /** - * Finds the closest points relative to the given location and orders the results with decreasing promimity + * Finds the closest points relative to the given location and orders the results with decreasing proximity * * @param expr * @param latVal latitude diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java index b6055fd901..63a421da56 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java @@ -41,7 +41,7 @@ public Point(PathMetadata metadata) { } /** - * Finds the closest points relative to the given location and orders the results with decreasing promimity + * Finds the closest points relative to the given location and orders the results with decreasing proximity * * @param latVal latitude * @param longVal longitude diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/GeoSpatialQueryTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/GeoSpatialQueryTest.java index 9f5be428fb..0bcd67b67d 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/GeoSpatialQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/GeoSpatialQueryTest.java @@ -50,7 +50,7 @@ public GeoSpatialQueryTest() throws UnknownHostException, MongoException { @Before public void before() { ds.delete(ds.createQuery(GeoEntity.class)); - ds.getCollection(GeoEntity.class).ensureIndex(new BasicDBObject("location","2d"));; + ds.getCollection(GeoEntity.class).ensureIndex(new BasicDBObject("location","2d")); } @Test diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index 01d3a8bcbc..5cf9b9cde2 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -32,14 +32,14 @@ import com.mongodb.ReadPreference; import com.querydsl.core.NonUniqueResultException; import com.querydsl.core.SearchResults; -import com.querydsl.mongodb.domain.*; -import com.querydsl.mongodb.domain.User.Gender; -import com.querydsl.mongodb.morphia.MorphiaQuery; +import com.querydsl.core.testutil.ExternalDB; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.path.StringPath; -import com.querydsl.core.testutil.ExternalDB; +import com.querydsl.mongodb.domain.*; +import com.querydsl.mongodb.domain.User.Gender; +import com.querydsl.mongodb.morphia.MorphiaQuery; @Category(ExternalDB.class) public class MongodbQueryTest { @@ -287,7 +287,7 @@ public void EqInAndOrderByQueries() { assertQuery(user.lastName.eq("Jantunen"), user.firstName.desc(), u1, u2); assertQuery(user.firstName.eq("Jaana").and(user.lastName.eq("Aakkonen")), u3); - //This shoud produce 'and' also + //This should produce 'and' also assertQuery(where(user.firstName.eq("Jaana"), user.lastName.eq("Aakkonen")), u3); assertQuery(user.firstName.ne("Jaana"), u2, u1); diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java index b7f73309a6..589a62fb6b 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java @@ -40,7 +40,7 @@ public abstract class JTSPolygonExpression extends JTSSurface private volatile NumberExpression numInteriorRing; @Nullable - private volatile JTSLineStringExpression exterorRing; + private volatile JTSLineStringExpression exteriorRing; public JTSPolygonExpression(Expression mixin) { super(mixin); @@ -52,10 +52,10 @@ public JTSPolygonExpression(Expression mixin) { * @return */ public JTSLineStringExpression exteriorRing() { - if (exterorRing == null) { - exterorRing = JTSLineStringOperation.create(LineString.class, SpatialOps.EXTERIOR_RING, mixin); + if (exteriorRing == null) { + exteriorRing = JTSLineStringOperation.create(LineString.class, SpatialOps.EXTERIOR_RING, mixin); } - return exterorRing; + return exteriorRing; } /** diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java index aa4d6ed8bc..90fc415165 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/path/GeometryPath.java @@ -139,7 +139,7 @@ public PolygonPath asPolygon() { return polygon; } - public PolyhedralSurfacePath asPolygHedralSurface() { + public PolyhedralSurfacePath asPolyHedralSurface() { if (polyhedralSurface == null) { polyhedralSurface = new PolyhedralSurfacePath(pathMixin.getMetadata()); } diff --git a/querydsl-spatial/src/test/java/com/querydsl/spatial/path/GeometryPathTest.java b/querydsl-spatial/src/test/java/com/querydsl/spatial/path/GeometryPathTest.java index 290d3a4381..87bcdfa1a1 100644 --- a/querydsl-spatial/src/test/java/com/querydsl/spatial/path/GeometryPathTest.java +++ b/querydsl-spatial/src/test/java/com/querydsl/spatial/path/GeometryPathTest.java @@ -27,6 +27,6 @@ public void Convert() { assertEquals(new MultiPolygonPath("geometry"), geometry.asMultiPolygon()); assertEquals(new PointPath("geometry"), geometry.asPoint()); assertEquals(new PolygonPath("geometry"), geometry.asPolygon()); - assertEquals(new PolyhedralSurfacePath("geometry"), geometry.asPolygHedralSurface()); + assertEquals(new PolyhedralSurfacePath("geometry"), geometry.asPolyHedralSurface()); } } diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ExtendedBeanSerializer.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ExtendedBeanSerializer.java index 8552c6c9fa..972831e4f0 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ExtendedBeanSerializer.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ExtendedBeanSerializer.java @@ -30,7 +30,7 @@ import com.querydsl.sql.codegen.support.PrimaryKeyData; /** - * ExtendedBeanSerialzier outputs primary key based equals, hashCode and toString implementations + * ExtendedBeanSerializer outputs primary key based equals, hashCode and toString implementations * * @author tiwe * diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java index ba4c7f4e7b..9b09915247 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/MetaDataExporter.java @@ -517,7 +517,7 @@ public void setBeanSuffix(String beanSuffix) { /** * Override the NamingStrategy (default: new DefaultNamingStrategy()) * - * @param namingStrategy namingstrategy to override (default: new DefaultNamingStrategy()) + * @param namingStrategy naming strategy to override (default: new DefaultNamingStrategy()) */ public void setNamingStrategy(NamingStrategy namingStrategy) { module.bind(NamingStrategy.class, namingStrategy); diff --git a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java index 8c797e9e6d..305b99a9a0 100644 --- a/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java +++ b/querydsl-sql-codegen/src/main/java/com/querydsl/sql/codegen/ant/AntMetaDataExporter.java @@ -106,7 +106,7 @@ public class AntMetaDataExporter extends Task { private String targetFolder; /** - * namingstrategy class to override (default: DefaultNamingStrategy) + * naming strategy class to override (default: DefaultNamingStrategy) */ private String namingStrategyClass; @@ -638,4 +638,4 @@ public String getSourceEncoding() { public void setSourceEncoding(String sourceEncoding) { this.sourceEncoding = sourceEncoding; } -} \ No newline at end of file +} diff --git a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java index 0be2775b8a..fd17d8cf24 100644 --- a/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java +++ b/querydsl-sql-spatial/src/test/java/com/querydsl/sql/spatial/AbstractConverterTest.java @@ -48,7 +48,7 @@ protected List getGeometries() { data.add(new LineString(createSequence(crs, (Point)data.get(i), (Point)data.get(i)))); } - // polgyon + // polygon // TODO // multipoint diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java index 66dbe3cdbf..251382c276 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathExtractor.java @@ -32,7 +32,7 @@ import com.querydsl.core.types.Visitor; /** - * RelationalPathExtractor extracts RelationlPath instances from expressions and queries + * RelationalPathExtractor extracts RelationalPath instances from expressions and queries * * @author tiwe * diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java index a2e2fa3ddd..a2c3000f09 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java @@ -109,7 +109,7 @@ private static Expression[] convertToExpressions(Object... args) { public static final Expression all = Wildcard.all; /** - * Wilcard count expression + * Wildcard count expression */ public static final Expression countAll = Wildcard.count; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java index 445e44555b..59fe571e22 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLTemplates.java @@ -214,7 +214,7 @@ public SQLTemplates build() { private String leftJoin = "\nleft join "; - private String rightJoin = "\nright join ";; + private String rightJoin = "\nright join "; private String limitTemplate = "\nlimit {0}"; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java b/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java index e532e82775..7fcfb4b138 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/Connections.java @@ -966,7 +966,7 @@ public static void initSQLite() throws SQLException, ClassNotFoundException{ stmt.execute("create table SURVEY(ID int auto_increment, " + "NAME varchar(30)," + "NAME2 varchar(30)," + - "constraint suryey_pk primary key(ID))"); + "constraint survey_pk primary key(ID))"); stmt.execute("insert into SURVEY values (1,'Hello World','Hello');"); // test @@ -1195,4 +1195,4 @@ private static String quote(String sql, String... identifiers) { } private Connections() {} -} \ No newline at end of file +} diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java index c42c0f7508..0000e71590 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java @@ -190,7 +190,7 @@ public void MergeBatch_with_subquery() { @Test @IncludeIn(H2) - public void Merge_With_TempateExpression_In_Batch() { + public void Merge_With_TemplateExpression_In_Batch() { SQLMergeClause merge = merge(survey) .keys(survey.id) .set(survey.id, 5) From b958a2aa9c0f51406436554241c05d91f488c3fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 7 Mar 2015 12:18:30 +0200 Subject: [PATCH 0799/1968] Use deterministic path creation --- .../querydsl/collections/CollQueryMixin.java | 2 +- .../collections/DefaultEvaluatorFactory.java | 9 ++- .../core/support/CollectionAnyVisitor.java | 6 +- .../com/querydsl/core/support/QueryMixin.java | 4 +- .../querydsl/core/types/ExpressionUtils.java | 12 ++-- .../support/CollectionAnyVisitorTest.java | 40 ++++++------- .../java/com/querydsl/jdo/JDOQueryMixin.java | 10 +--- .../querydsl/jpa/JPACollectionAnyVisitor.java | 6 +- .../querydsl/jpa/JPAListAccessVisitor.java | 2 +- .../com/querydsl/jpa/JPAMapAccessVisitor.java | 4 +- .../java/com/querydsl/jpa/JPAQueryMixin.java | 7 ++- .../jpa/JPACollectionAnyVisitorTest.java | 56 +++++++++---------- 12 files changed, 75 insertions(+), 83 deletions(-) diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java index eb2e65ec4d..cc5ebd6bde 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java @@ -48,7 +48,7 @@ protected Predicate convert(Predicate predicate, Role role) { predicate = (Predicate)ExpressionUtils.extract(predicate); if (predicate != null) { Context context = new Context(); - Predicate transformed = (Predicate) predicate.accept(CollectionAnyVisitor.DEFAULT, context); + Predicate transformed = (Predicate) predicate.accept(collectionAnyVisitor, context); for (int i = 0; i < context.paths.size(); i++) { leftJoin( (Path)context.paths.get(i).getMetadata().getParent(), diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/DefaultEvaluatorFactory.java b/querydsl-collections/src/main/java/com/querydsl/collections/DefaultEvaluatorFactory.java index 1f92bc898e..b8c6f21886 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/DefaultEvaluatorFactory.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/DefaultEvaluatorFactory.java @@ -14,10 +14,7 @@ package com.querydsl.collections; import java.net.URLClassLoader; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import javax.annotation.Nullable; import javax.tools.JavaCompiler; @@ -57,6 +54,8 @@ public class DefaultEvaluatorFactory { private final CollQueryTemplates templates; + private final CollectionAnyVisitor collectionAnyVisitor = new CollectionAnyVisitor(); + public DefaultEvaluatorFactory(CollQueryTemplates templates) { this(templates, Thread.currentThread().getContextClassLoader()); @@ -215,7 +214,7 @@ public Evaluator> createEvaluator(QueryMetadata metadata, if (colAnyJoin) { Context context = new Context(); Expression replacement = alias.getArg(0) - .accept(CollectionAnyVisitor.DEFAULT, context); + .accept(collectionAnyVisitor, context); ser.handle(replacement); } else { ser.handle(alias.getArg(0)); diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java index 441a1b96ba..18320e7e36 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java @@ -31,7 +31,7 @@ @SuppressWarnings("unchecked") public class CollectionAnyVisitor implements Visitor,Context> { - public static final CollectionAnyVisitor DEFAULT = new CollectionAnyVisitor(); + private int replacedCounter; @SuppressWarnings("rawtypes") private static Path replaceParent(Path path, Path parent) { @@ -110,7 +110,7 @@ public Expression visit(Path expr, Context context) { Path parent = (Path) expr.getMetadata().getParent().accept(this, context); expr = new PathImpl(expr.getType(), PathMetadataFactory.forCollectionAny(parent)); EntityPath replacement = new EntityPathBase(expr.getType(), - ExpressionUtils.createRootVariable(expr)); + ExpressionUtils.createRootVariable(expr, replacedCounter++)); context.add(expr, replacement); return replacement; @@ -135,6 +135,4 @@ public Expression visit(ParamExpression expr, Context context) { return expr; } - protected CollectionAnyVisitor() {} - } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java index e9442392c6..69ea042c97 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/QueryMixin.java @@ -46,6 +46,8 @@ public Expression visit(Path expr, @Nullable Void context) { } }; + protected final CollectionAnyVisitor collectionAnyVisitor = new CollectionAnyVisitor(); + private T self; public QueryMixin() { @@ -123,7 +125,7 @@ private

> P assertRoot(P p) { private Path normalizePath(Path expr) { Context context = new Context(); - Path replaced = (Path)expr.accept(CollectionAnyVisitor.DEFAULT, context); + Path replaced = (Path)expr.accept(collectionAnyVisitor, context); if (!replaced.equals(expr)) { for (int i = 0; i < context.paths.size(); i++) { Path path = context.paths.get(i).getMetadata().getParent(); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java b/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java index 39b8b2d95e..07fce78089 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/ExpressionUtils.java @@ -13,10 +13,10 @@ */ package com.querydsl.core.types; -import javax.annotation.Nullable; - import java.util.*; +import javax.annotation.Nullable; + import com.google.common.collect.ImmutableList; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.QueryException; @@ -533,14 +533,14 @@ public static Expression extract(Expression expr) { } /** - * Create a new root variable based on the given path + * Create a new root variable based on the given path and suffix * * @param path + * @param suffix * @return */ - public static String createRootVariable(Path path) { - String variable = path.accept(ToStringVisitor.DEFAULT, TEMPLATES).replace('.', '_'); - String suffix = UUID.randomUUID().toString().replace("-", "").substring(0, 5); + public static String createRootVariable(Path path, int suffix) { + String variable = path.accept(ToStringVisitor.DEFAULT, TEMPLATES); return variable + "_" + suffix; } diff --git a/querydsl-core/src/test/java/com/querydsl/core/support/CollectionAnyVisitorTest.java b/querydsl-core/src/test/java/com/querydsl/core/support/CollectionAnyVisitorTest.java index 48ca5ede7f..6436f38504 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/support/CollectionAnyVisitorTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/support/CollectionAnyVisitorTest.java @@ -30,56 +30,58 @@ public class CollectionAnyVisitorTest { @Test public void Path() { - assertMatches("cat_kittens.*", serialize(cat.kittens.any())); + assertEquals("cat_kittens_0", serialize(cat.kittens.any())); } @Test public void Longer_Path() { - assertMatches("cat_kittens.*\\.name", serialize(cat.kittens.any().name)); + assertEquals("cat_kittens_0.name", serialize(cat.kittens.any().name)); + } + + @Test + public void Longer_Path2() { + CollectionAnyVisitor visitor = new CollectionAnyVisitor(); + assertEquals("cat_kittens_0.name", serialize(cat.kittens.any().name, visitor)); + assertEquals("cat_kittens_1.name", serialize(cat.kittens.any().name, visitor)); } @Test public void Very_Long_Path() { - assertMatches("cat_kittens.*_kittens.*\\.name", serialize(cat.kittens.any().kittens.any().name)); + assertEquals("cat_kittens_0_kittens_1.name", serialize(cat.kittens.any().kittens.any().name)); } @Test public void Simple_BooleanOperation() { - Predicate predicate = cat.kittens.any().name.eq("Ruth123"); - assertMatches("cat_kittens.*\\.name = Ruth123", serialize(predicate)); + Predicate predicate = cat.kittens.any().name.eq("Ruth123"); + assertEquals("cat_kittens_0.name = Ruth123", serialize(predicate)); } @Test public void Simple_StringOperation() { - Predicate predicate = cat.kittens.any().name.substring(1).eq("uth123"); - assertMatches("substring\\(cat_kittens.*\\.name,1\\) = uth123", serialize(predicate)); + Predicate predicate = cat.kittens.any().name.substring(1).eq("uth123"); + assertEquals("substring(cat_kittens_0.name,1) = uth123", serialize(predicate)); } @Test public void And_Operation() { Predicate predicate = cat.kittens.any().name.eq("Ruth123").and(cat.kittens.any().bodyWeight.gt(10.0)); - assertMatches("cat_kittens.*\\.name = Ruth123 && cat_kittens.*\\.bodyWeight > 10.0", serialize(predicate)); + assertEquals("cat_kittens_0.name = Ruth123 && cat_kittens_1.bodyWeight > 10.0", serialize(predicate)); } @Test public void Template() { Expression templateExpr = TemplateExpressionImpl.create(Boolean.class, "{0} = {1}", cat.kittens.any().name, ConstantImpl.create("Ruth123")); - assertMatches("cat_kittens.*\\.name = Ruth123", serialize(templateExpr)); + assertEquals("cat_kittens_0.name = Ruth123", serialize(templateExpr)); } private String serialize(Expression expression) { - CollectionAnyVisitor visitor = new CollectionAnyVisitor() { - @Override - protected Predicate exists(Context c, Predicate condition) { - return condition; - } - }; + return serialize(expression, new CollectionAnyVisitor()); + } + + private String serialize(Expression expression, CollectionAnyVisitor visitor) { Expression transformed = expression.accept(visitor, new Context()); return transformed.toString(); } - - private static void assertMatches(String str1, String str2) { - assertTrue(str2, str2.matches(str1)); - } + } diff --git a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java index 0163ed41f1..9be5179eba 100644 --- a/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java +++ b/querydsl-jdo/src/main/java/com/querydsl/jdo/JDOQueryMixin.java @@ -14,15 +14,9 @@ package com.querydsl.jdo; import com.querydsl.core.QueryMetadata; -import com.querydsl.core.support.CollectionAnyVisitor; import com.querydsl.core.support.Context; import com.querydsl.core.support.QueryMixin; -import com.querydsl.core.types.EntityPath; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.PredicateOperation; +import com.querydsl.core.types.*; /** * JDOQueryMixin extends {@link QueryMixin} to provide module specific extensions @@ -48,7 +42,7 @@ protected Predicate convert(Predicate predicate, Role role) { predicate = (Predicate)ExpressionUtils.extract(predicate); if (predicate != null) { Context context = new Context(); - Predicate transformed = (Predicate) predicate.accept(CollectionAnyVisitor.DEFAULT, context); + Predicate transformed = (Predicate) predicate.accept(collectionAnyVisitor, context); for (int i = 0; i < context.paths.size(); i++) { Path path = context.paths.get(i); addCondition(context, i, path, role); diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java index c81cdd2534..86fe241c53 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPACollectionAnyVisitor.java @@ -31,8 +31,6 @@ */ public final class JPACollectionAnyVisitor extends CollectionAnyVisitor { - public static final JPACollectionAnyVisitor DEFAULT = new JPACollectionAnyVisitor(); - @SuppressWarnings("unchecked") @Override protected Predicate exists(Context c, Predicate condition) { @@ -46,7 +44,7 @@ protected Predicate exists(Context c, Predicate condition) { // join via parent Path parent = child.getMetadata().getParent(); EntityPathBase newParent = new EntityPathBase(parent.getType(), - ExpressionUtils.createRootVariable(parent)); + ExpressionUtils.createRootVariable(parent, Math.abs(condition.hashCode()))); EntityPath newChild = new EntityPathBase(child.getType(), PathMetadataFactory.forProperty(newParent, child.getMetadata().getName())); query.from(newParent).innerJoin(newChild, replacement); @@ -58,6 +56,4 @@ protected Predicate exists(Context c, Predicate condition) { return query.exists(); } - private JPACollectionAnyVisitor() {} - } diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java index 6c1837d55f..dca8ef52d1 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java @@ -31,7 +31,7 @@ public Expression visit(Path expr, @Nullable Void context) { // join parent as path123 on index(path123) = ... Path parent = pathMetadata.getParent(); replacement = new PathImpl(expr.getType(), - ExpressionUtils.createRootVariable(parent)); + ExpressionUtils.createRootVariable(parent, replacements.size())); metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(parent, replacement)); metadata.addJoinCondition(ExpressionUtils.eq( (Expression)Expressions.operation(Integer.class, JPQLOps.INDEX, replacement), diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java index 4d92a9ec20..5150d2ec32 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java @@ -27,7 +27,7 @@ public Expression visit(Operation expr, @Nullable Void context) { ParameterizedExpression map = (ParameterizedExpression) expr.getArg(0); Expression key = expr.getArg(1); Path replacement = new PathImpl(map.getParameter(1), - ExpressionUtils.createRootVariable((Path)map)); + ExpressionUtils.createRootVariable((Path)map, Math.abs(expr.hashCode()))); metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(map, replacement)); metadata.addJoinCondition(ExpressionUtils.eq( Expressions.operation(map.getParameter(0), JPQLOps.KEY, replacement), @@ -54,7 +54,7 @@ public Expression visit(Path expr, @Nullable Void context) { Path parent = pathMetadata.getParent(); ParameterizedExpression parExpr = (ParameterizedExpression) parent; replacement = new PathImpl(parExpr.getParameter(1), - ExpressionUtils.createRootVariable(parent)); + ExpressionUtils.createRootVariable(parent, replacements.size())); metadata.addJoin(JoinType.LEFTJOIN, ExpressionUtils.as(parent, replacement)); metadata.addJoinCondition(ExpressionUtils.eq( Expressions.operation(parExpr.getParameter(0), JPQLOps.KEY, replacement), diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java index 38483ced98..04d901f1ba 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAQueryMixin.java @@ -49,6 +49,8 @@ public class JPAQueryMixin extends QueryMixin { private final JPAListAccessVisitor listAccessVisitor; + private final JPACollectionAnyVisitor collectionAnyVisitor; + private final ReplaceVisitor replaceVisitor = new ReplaceVisitor() { public Expression visit(Path expr, Void context) { return convertPathForOrder(expr); @@ -67,18 +69,21 @@ public Expression visit(SubQueryExpression expr, @Nullable Void context) { public JPAQueryMixin() { mapAccessVisitor = new JPAMapAccessVisitor(getMetadata()); listAccessVisitor = new JPAListAccessVisitor(getMetadata()); + collectionAnyVisitor = new JPACollectionAnyVisitor(); } public JPAQueryMixin(QueryMetadata metadata) { super(metadata); mapAccessVisitor = new JPAMapAccessVisitor(metadata); listAccessVisitor = new JPAListAccessVisitor(metadata); + collectionAnyVisitor = new JPACollectionAnyVisitor(); } public JPAQueryMixin(T self, QueryMetadata metadata) { super(self, metadata); mapAccessVisitor = new JPAMapAccessVisitor(metadata); listAccessVisitor = new JPAListAccessVisitor(metadata); + collectionAnyVisitor = new JPACollectionAnyVisitor(); } public T fetch() { @@ -196,7 +201,7 @@ protected Predicate convert(Predicate predicate, Role role) { } if (predicate != null) { // transform any usage - predicate = (Predicate) predicate.accept(JPACollectionAnyVisitor.DEFAULT, new Context()); + predicate = (Predicate) predicate.accept(collectionAnyVisitor, new Context()); return predicate; } else { return null; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java index 47284936f9..171bb0845a 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPACollectionAnyVisitorTest.java @@ -13,7 +13,7 @@ */ package com.querydsl.jpa; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertEquals; import org.junit.Test; @@ -22,7 +22,6 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.jpa.domain.JobFunction; import com.querydsl.jpa.domain.QCat; import com.querydsl.jpa.domain.QDomesticCat; import com.querydsl.jpa.domain.QEmployee; @@ -34,57 +33,57 @@ public class JPACollectionAnyVisitorTest { @Test public void Path() { - assertMatches("cat_kittens.*", serialize(cat.kittens.any())); + assertEquals("cat_kittens_0", serialize(cat.kittens.any())); } @Test public void Longer_Path() { - assertMatches("cat_kittens.*\\.name", serialize(cat.kittens.any().name)); + assertEquals("cat_kittens_0.name", serialize(cat.kittens.any().name)); } @Test public void Simple_BooleanOperation() { Predicate predicate = cat.kittens.any().name.eq("Ruth123"); - assertMatches("exists \\(select 1\n" + - "from cat.kittens as cat_kittens.*\n" + - "where cat_kittens.*\\.name = \\?1\\)", serialize(predicate)); + assertEquals("exists (select 1\n" + + "from cat.kittens as cat_kittens_0\n" + + "where cat_kittens_0.name = ?1)", serialize(predicate)); } @Test public void Simple_BooleanOperation_ElementCollection() { QEmployee employee = QEmployee.employee; - Predicate predicate = employee.jobFunctions.any().eq(JobFunction.CODER); - assertMatches("exists \\(select 1\n" + - "from Employee employee.*\n" + - " inner join employee.*.jobFunctions as employee_jobFunctions.*\n" + - "where employee.* = employee and employee_jobFunctions.* = \\?1\\)", serialize(predicate)); + Predicate predicate = employee.jobFunctions.any().stringValue().eq("CODER"); + assertEquals("exists (select 1\n" + + "from Employee employee_1463394548\n" + + " inner join employee_1463394548.jobFunctions as employee_jobFunctions_0\n" + + "where employee_1463394548 = employee and str(employee_jobFunctions_0) = ?1)", serialize(predicate)); } @Test public void Simple_StringOperation() { Predicate predicate = cat.kittens.any().name.substring(1).eq("uth123"); - assertMatches("exists \\(select 1\n"+ - "from cat.kittens as cat_kittens.*\n" + - "where substring\\(cat_kittens.*\\.name,2\\) = \\?1\\)", serialize(predicate)); + assertEquals("exists (select 1\n" + + "from cat.kittens as cat_kittens_0\n" + + "where substring(cat_kittens_0.name,2) = ?1)", serialize(predicate)); } @Test public void And_Operation() { Predicate predicate = cat.kittens.any().name.eq("Ruth123").and(cat.kittens.any().bodyWeight.gt(10.0)); - assertMatches("exists \\(select 1\n"+ - "from cat.kittens as cat_kittens.*\n" + - "where cat_kittens.*\\.name = \\?1\\) and exists \\(select 1\n" + - "from cat.kittens as cat_kittens.*\n" + - "where cat_kittens.*\\.bodyWeight > \\?2\\)", serialize(predicate)); + assertEquals("exists (select 1\n" + + "from cat.kittens as cat_kittens_0\n" + + "where cat_kittens_0.name = ?1) and exists (select 1\n" + + "from cat.kittens as cat_kittens_1\n" + + "where cat_kittens_1.bodyWeight > ?2)", serialize(predicate)); } @Test public void Template() { Expression templateExpr = TemplateExpressionImpl.create(Boolean.class, "{0} = {1}", cat.kittens.any().name, ConstantImpl.create("Ruth123")); - assertMatches("exists \\(select 1\n" + - "from cat.kittens as cat_kittens.*\n" + - "where cat_kittens.*\\.name = \\?1\\)", serialize(templateExpr)); + assertEquals("exists (select 1\n" + + "from cat.kittens as cat_kittens_0\n" + + "where cat_kittens_0.name = ?1)", serialize(templateExpr)); } @Test @@ -97,19 +96,16 @@ public void Cast() { QDomesticCat anyCat = QCat.cat.kittens.any().as(QDomesticCat.class); Predicate predicate = anyCat.name.eq("X"); - assertMatches("exists \\(select 1\n" + - "from cat.kittens as cat_kittens.*\n" + - "where cat_kittens.*\\.name = \\?1\\)", serialize(predicate)); + assertEquals("exists (select 1\n" + + "from cat.kittens as cat_kittens_0\n" + + "where cat_kittens_0.name = ?1)", serialize(predicate)); } private String serialize(Expression expression) { - Expression transformed = expression.accept(JPACollectionAnyVisitor.DEFAULT, new Context()); + Expression transformed = expression.accept(new JPACollectionAnyVisitor(), new Context()); JPQLSerializer serializer = new JPQLSerializer(HQLTemplates.DEFAULT, null); serializer.handle(transformed); return serializer.toString(); } - private static void assertMatches(String str1, String str2) { - assertTrue(str2, str2.matches(str1)); - } } From fbf2d23c62d490085dc6089559a286dd3b4782a6 Mon Sep 17 00:00:00 2001 From: John Tims Date: Wed, 18 Mar 2015 15:08:26 -0400 Subject: [PATCH 0800/1968] Fix isNotEmpty bug in mongodb serialization --- .../querydsl/mongodb/MongodbSerializer.java | 7 ++++- .../mongodb/MongodbSerializerTest.java | 28 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 8075d4652f..09a84acf1d 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -127,6 +127,11 @@ public Object visit(Operation expr, Void context) { if (subOp == Ops.IN) { return visit(OperationImpl.create(Boolean.class, Ops.NOT_IN, subOperation.getArg(0), subOperation.getArg(1)), context); + } else if (subOp == Ops.COL_IS_EMPTY) { + DBObject visit = (DBObject)visit(OperationImpl.create(Boolean.class, Ops.COL_IS_EMPTY, subOperation.getArg(0)), context); + Object existingOperator = visit.removeField("$or"); + visit.put("$nor", existingOperator); + return visit; } else if (subOp != Ops.EQ && subOp != Ops.STRING_IS_EMPTY) { return asDBObject(key, asDBObject("$not", arg.get(key))); } else { @@ -309,4 +314,4 @@ public Object visit(ParamExpression expr, Void context) { throw new UnsupportedOperationException(); } -} \ No newline at end of file +} diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 194795a41d..6aa606f0ee 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -97,6 +97,26 @@ public void CollectionAny() { assertQuery(user.addresses.any().street.eq("Aakatu"), dbo("addresses.street","Aakatu")); } + @Test + public void CollectionIsEmpty() { + BasicDBObject expected = dbo("$or", + dblist( + dbo("addresses", dblist()), + dbo("addresses", + dbo("$exists", false)))); + assertQuery(QUser.user.addresses.isEmpty(), expected); + } + + @Test + public void CollectionIsNotEmpty() { + BasicDBObject expected = dbo("$nor", + dblist( + dbo("addresses", dblist()), + dbo("addresses", + dbo("$exists", false)))); + assertQuery(QUser.user.addresses.isNotEmpty(), expected); + } + @Test public void Equals() { assertQuery(title.eq("A"), dbo("title","A")); @@ -131,7 +151,6 @@ public void NotEq() { @Test public void Between() { - System.err.println(dbo("year", dbo("$gte", 1).append("$lte", 10))); assertQuery(year.between(1, 10), dbo("year", dbo("$gte", 1).append("$lte", 10))); } @@ -161,6 +180,12 @@ public void In() { assertQuery(year.in(1,2,3), dbo("year", dbo("$in", 1,2,3))); } + @Test + public void NotIn() { + assertQuery(year.in(1,2,3).not(), dbo("year", dbo("$nin", 1,2,3))); + assertQuery(year.notIn(1,2,3), dbo("year", dbo("$nin", 1,2,3))); + } + @Test public void OrderBy() { DBObject orderBy = serializer.toSort(sortList(year.asc())); @@ -242,7 +267,6 @@ public static BasicDBObject dbo(String key, Object... value) { } return new BasicDBObject(key, value); } - public static BasicDBList dblist(Object... contents) { BasicDBList list = new BasicDBList(); list.addAll(Arrays.asList(contents)); From 126258f2c4ffa42826a307c7c20557e0e8d79b92 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Fri, 20 Mar 2015 16:08:20 +0100 Subject: [PATCH 0801/1968] Change $or to $nor in serialization of Ops.NOT in MongodbSerializer --- .../main/java/com/querydsl/mongodb/MongodbSerializer.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index 09a84acf1d..c7eb777322 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -127,11 +127,9 @@ public Object visit(Operation expr, Void context) { if (subOp == Ops.IN) { return visit(OperationImpl.create(Boolean.class, Ops.NOT_IN, subOperation.getArg(0), subOperation.getArg(1)), context); - } else if (subOp == Ops.COL_IS_EMPTY) { - DBObject visit = (DBObject)visit(OperationImpl.create(Boolean.class, Ops.COL_IS_EMPTY, subOperation.getArg(0)), context); - Object existingOperator = visit.removeField("$or"); - visit.put("$nor", existingOperator); - return visit; + } else if (key.equals("$or")) { + return asDBObject("$nor", arg.get(key)); + } else if (subOp != Ops.EQ && subOp != Ops.STRING_IS_EMPTY) { return asDBObject(key, asDBObject("$not", arg.get(key))); } else { From e46ab61d685bc1445fdd7428b2b077d116d49784 Mon Sep 17 00:00:00 2001 From: John Tims Date: Sat, 21 Mar 2015 08:45:46 -0400 Subject: [PATCH 0802/1968] Add mongo integration tests --- .../querydsl/mongodb/MongodbSerializer.java | 2 +- .../querydsl/mongodb/MongodbQueryTest.java | 23 +++++-------------- .../mongodb/MongodbSerializerTest.java | 2 +- 3 files changed, 8 insertions(+), 19 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index c7eb777322..ae81a98582 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -127,7 +127,7 @@ public Object visit(Operation expr, Void context) { if (subOp == Ops.IN) { return visit(OperationImpl.create(Boolean.class, Ops.NOT_IN, subOperation.getArg(0), subOperation.getArg(1)), context); - } else if (key.equals("$or")) { + } else if ("$or".equals(key)) { return asDBObject("$nor", arg.get(key)); } else if (subOp != Ops.EQ && subOp != Ops.STRING_IS_EMPTY) { diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index 5cf9b9cde2..13014c80f7 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -36,6 +36,7 @@ import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.Predicate; +import com.querydsl.core.types.path.ListPath; import com.querydsl.core.types.path.StringPath; import com.querydsl.mongodb.domain.*; import com.querydsl.mongodb.domain.User.Gender; @@ -332,10 +333,6 @@ public void IsNull() { @Test public void IsEmpty() { assertQuery(user.firstName.isEmpty()); - } - - @Test - public void isEmpty2() { assertQuery(user.friends.isEmpty(), u1); } @@ -344,6 +341,7 @@ public void Not() { assertQuery(user.firstName.eq("Jaakko").not(), u3, u4, u2); assertQuery(user.firstName.ne("Jaakko").not(), u1); assertQuery(user.firstName.matches("Jaakko").not(), u3, u4, u2); + assertQuery(user.friends.isNotEmpty(), u3, u4, u2); } @Test @@ -351,18 +349,6 @@ public void Or() { assertQuery(user.lastName.eq("Aakkonen").or(user.lastName.eq("BeekkoNen")), u3, u4); } - //This is not supported yet -// @Test -// public void UniqueResult() { -// -// addUser("Dille", "Duplikaatti"); -// addUser("Dille", "Duplikaatti"); -// -// assertEquals(2, where(user.firstName.eq("Dille")).count()); -// assertEquals(1, where(user.firstName.eq("Dille")).countDistinct()); -// -// } - @Test public void Iterate() { User a = addUser("A", "A"); @@ -398,6 +384,7 @@ public void References() { @Test public void Various() { + ListPath list = user.addresses; StringPath str = user.lastName; List predicates = new ArrayList(); predicates.add(str.between("a", "b")); @@ -413,7 +400,7 @@ public void Various() { predicates.add(str.isEmpty()); predicates.add(str.isNotNull()); predicates.add(str.isNull()); -// predicates.add(str.like("a")); + predicates.add(str.like("a")); predicates.add(str.loe("a")); predicates.add(str.lt("a")); predicates.add(str.matches("a")); @@ -422,6 +409,8 @@ public void Various() { predicates.add(str.notIn("a","b","c")); predicates.add(str.startsWith("a")); predicates.add(str.startsWithIgnoreCase("a")); + predicates.add(list.isEmpty()); + predicates.add(list.isNotEmpty()); for (Predicate predicate : predicates) { where(predicate).count(); diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java index 6aa606f0ee..3ee8379585 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbSerializerTest.java @@ -199,7 +199,7 @@ public void OrderBy() { } @Test - public void Regexcases() { + public void RegexCases() { assertQuery(title.startsWith("A"), dbo("title", dbo("$regex", "^\\QA\\E"))); assertQuery(title.startsWithIgnoreCase("A"), From 7294ff77615e6eaad590f5824e173913ab60c83d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 21 Mar 2015 21:13:29 +0200 Subject: [PATCH 0803/1968] Add more tests --- .../querydsl/mongodb/MongodbQueryTest.java | 82 ++++++++++++++++++- 1 file changed, 79 insertions(+), 3 deletions(-) diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index 13014c80f7..a41666a55b 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -143,18 +143,43 @@ public void Contains_Key() { assertFalse(query(mapEntity).where(mapEntity.properties.containsKey("key2")).exists()); } + @Test + public void Contains_Key_Not() { + MapEntity entity = new MapEntity(); + entity.getProperties().put("key", "value"); + ds.save(entity); + + assertFalse(query(mapEntity).where(mapEntity.properties.get("key").isNotNull().not()).exists()); + assertTrue(query(mapEntity).where(mapEntity.properties.get("key2").isNotNull().not()).exists()); + + assertFalse(query(mapEntity).where(mapEntity.properties.containsKey("key").not()).exists()); + assertTrue(query(mapEntity).where(mapEntity.properties.containsKey("key2").not()).exists()); + } + @Test public void Equals_Ignore_Case() { assertTrue(where(user.firstName.equalsIgnoreCase("jAaKko")).exists()); assertFalse(where(user.firstName.equalsIgnoreCase("AaKk")).exists()); } + @Test + public void Equals_Ignore_Case_Not() { + assertTrue(where(user.firstName.equalsIgnoreCase("jAaKko").not()).exists()); + assertTrue(where(user.firstName.equalsIgnoreCase("AaKk").not()).exists()); + } + @Test public void Equals_and_Between() { assertQuery(user.firstName.startsWith("Jaa").and(user.age.between(20, 30)), u2, u1); assertQuery(user.firstName.startsWith("Jaa").and(user.age.goe(20).and(user.age.loe(30))), u2, u1); } + @Test + public void Equals_and_Between_Not() { + assertQuery(user.firstName.startsWith("Jaa").and(user.age.between(20, 30)).not(), u3, u4); + assertQuery(user.firstName.startsWith("Jaa").and(user.age.goe(20).and(user.age.loe(30))).not(), u3, u4); + } + @Test public void Exists() { assertTrue(where(user.firstName.eq("Jaakko")).exists()); @@ -292,7 +317,6 @@ public void EqInAndOrderByQueries() { assertQuery(where(user.firstName.eq("Jaana"), user.lastName.eq("Aakkonen")), u3); assertQuery(user.firstName.ne("Jaana"), u2, u1); - } @Test @@ -311,6 +335,22 @@ public void RegexQueries() { assertQuery(user.firstName.matches(".*aa.*[^i]$"), u3, u4, u1); } + @Test + public void RegexQueries_Not() { + assertQuery(user.firstName.startsWith("Jaan").not(), u2, u1); + assertQuery(user.firstName.startsWith("jaan").not(), u3, u4, u2, u1); + assertQuery(user.firstName.startsWithIgnoreCase("jaan").not(), u2, u1); + + assertQuery(user.lastName.endsWith("unen").not(), u3, u4); + + assertQuery(user.lastName.endsWithIgnoreCase("onen").not(), u2, u1); + + assertQuery(user.lastName.contains("oN").not(), u3, u2, u1); + assertQuery(user.lastName.containsIgnoreCase("on").not(), u2, u1); + + assertQuery(user.firstName.matches(".*aa.*[^i]$").not(), u2); + } + @Test public void Like() { assertQuery(user.firstName.like("Jaan")); @@ -320,22 +360,47 @@ public void Like() { assertQuery(user.lastName.like("%unen"), u2, u1); } + @Test + public void Like_Not() { + assertQuery(user.firstName.like("Jaan").not(), u3, u4, u2, u1); + assertQuery(user.firstName.like("Jaan%").not(), u2, u1); + assertQuery(user.firstName.like("jaan%").not(), u3, u4, u2, u1); + + assertQuery(user.lastName.like("%unen").not(), u3, u4); + } + @Test public void IsNotNull() { assertQuery(user.firstName.isNotNull(), u3, u4, u2, u1); } + @Test + public void IsNotNull_Not() { + assertQuery(user.firstName.isNotNull().not()); + } + @Test public void IsNull() { assertQuery(user.firstName.isNull()); } + @Test + public void IsNull_Not() { + assertQuery(user.firstName.isNull().not(), u3, u4, u2, u1); + } + @Test public void IsEmpty() { assertQuery(user.firstName.isEmpty()); assertQuery(user.friends.isEmpty(), u1); } + @Test + public void IsEmpty_Not() { + assertQuery(user.firstName.isEmpty().not(), u3, u4, u2, u1); + assertQuery(user.friends.isEmpty().not(), u3, u4, u2); + } + @Test public void Not() { assertQuery(user.firstName.eq("Jaakko").not(), u3, u4, u2); @@ -349,6 +414,11 @@ public void Or() { assertQuery(user.lastName.eq("Aakkonen").or(user.lastName.eq("BeekkoNen")), u3, u4); } + @Test + public void Or_Not() { + assertQuery(user.lastName.eq("Aakkonen").or(user.lastName.eq("BeekkoNen")).not(), u2, u1); + } + @Test public void Iterate() { User a = addUser("A", "A"); @@ -413,8 +483,9 @@ public void Various() { predicates.add(list.isNotEmpty()); for (Predicate predicate : predicates) { - where(predicate).count(); - where(predicate.not()).count(); + long count1 = where(predicate).count(); + long count2 = where(predicate.not()).count(); + assertEquals(predicate.toString(), 4, count1 + count2); } } @@ -453,6 +524,11 @@ public void Size() { assertQuery(user.addresses.size().eq(2), u1); } + @Test + public void Size_Not() { + assertQuery(user.addresses.size().eq(2).not(), u3, u4, u2); + } + @Test public void ReadPreference() { MorphiaQuery query = query(); From cabc1d02fcf88be0ba2defcf3903d29e0ebbbc10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 22 Mar 2015 22:28:27 +0200 Subject: [PATCH 0804/1968] Generalize negation --- .../querydsl/mongodb/MongodbSerializer.java | 54 +++++++++++++++---- .../querydsl/mongodb/MongodbQueryTest.java | 20 +++++-- 2 files changed, 59 insertions(+), 15 deletions(-) diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java index ae81a98582..78d60a84e3 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbSerializer.java @@ -15,6 +15,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.regex.Pattern; import org.bson.BSONObject; @@ -117,23 +118,14 @@ public Object visit(Operation expr, Void context) { } else if (op == Ops.NOT) { //Handle the not's child - BasicDBObject arg = (BasicDBObject) handle(expr.getArg(0)); - - //Only support the first key, let's see if there - //is cases where this will get broken - String key = arg.keySet().iterator().next(); Operation subOperation = (Operation) expr.getArg(0); Operator subOp = subOperation.getOperator(); if (subOp == Ops.IN) { return visit(OperationImpl.create(Boolean.class, Ops.NOT_IN, subOperation.getArg(0), subOperation.getArg(1)), context); - } else if ("$or".equals(key)) { - return asDBObject("$nor", arg.get(key)); - - } else if (subOp != Ops.EQ && subOp != Ops.STRING_IS_EMPTY) { - return asDBObject(key, asDBObject("$not", arg.get(key))); } else { - return asDBObject(key, asDBObject("$ne", arg.get(key))); + BasicDBObject arg = (BasicDBObject) handle(expr.getArg(0)); + return negate(arg); } } else if (op == Ops.OR) { @@ -267,6 +259,46 @@ public Object visit(Operation expr, Void context) { throw new UnsupportedOperationException("Illegal operation " + expr); } + private Object negate(BasicDBObject arg) { + BasicDBList list = new BasicDBList(); + for (Map.Entry entry : arg.entrySet()) { + if (entry.getKey().equals("$or")) { + list.add(asDBObject("$nor", entry.getValue())); + + } else if (entry.getKey().equals("$and")) { + BasicDBList list2 = new BasicDBList(); + for (Object o : ((BasicDBList)entry.getValue())) { + list2.add(negate((BasicDBObject)o)); + } + list.add(asDBObject("$or", list2)); + + } else if (entry.getValue() instanceof Pattern) { + list.add(asDBObject(entry.getKey(), asDBObject("$not", entry.getValue()))); + + } else if (entry.getValue() instanceof BasicDBObject) { + list.add(negate(entry.getKey(), (BasicDBObject) entry.getValue())); + + } else { + list.add(asDBObject(entry.getKey(), asDBObject("$ne", entry.getValue()))); + } + } + return list.size() == 1 ? list.get(0) : asDBObject("$or", list); + } + + private Object negate(String key, BasicDBObject value) { + if (value.size() == 1) { + return asDBObject(key, asDBObject("$not", value)); + + } else { + BasicDBList list2 = new BasicDBList(); + for (Map.Entry entry2 : value.entrySet()) { + list2.add(asDBObject(key, + asDBObject("$not", asDBObject(entry2.getKey(), entry2.getValue())))); + } + return asDBObject("$or", list2); + } + } + protected DBRef asReference(Operation expr, int constIndex) { return asReference(((Constant)expr.getArg(constIndex)).getConstant()); } diff --git a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java index a41666a55b..1a21064ca2 100644 --- a/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java +++ b/querydsl-mongodb/src/test/java/com/querydsl/mongodb/MongodbQueryTest.java @@ -115,6 +115,18 @@ public void List_Deep_Keys() { } } + @Test + public void Between() { + assertQuery(user.age.between(20, 30), u2, u1); + assertQuery(user.age.goe(20).and(user.age.loe(30)), u2, u1); + } + + @Test + public void Between_Not() { + assertQuery(user.age.between(20, 30).not(), u3, u4); + assertQuery(user.age.goe(20).and(user.age.loe(30)).not(), u3, u4); + } + @Test public void Contains() { assertQuery(user.friends.contains(u1), u3, u4, u2); @@ -567,18 +579,18 @@ private MorphiaQuery query(EntityPath path) { } private void assertQuery(MorphiaQuery query, User ... expected ) { - //System.out.println(query.toString()); + String toString = query.toString(); List results = query.list(); - assertNotNull(results); + assertNotNull(toString, results); if (expected == null ) { assertEquals("Should get empty result", 0, results.size()); return; } - assertEquals(expected.length, results.size()); + assertEquals(toString, expected.length, results.size()); int i = 0; for (User u : expected) { - assertEquals(u, results.get(i++)); + assertEquals(toString, u, results.get(i++)); } } From 8fc93e930cb16b50ddf83c28a8d3f0397b9c4358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Mon, 23 Mar 2015 23:06:08 +0200 Subject: [PATCH 0805/1968] Fix paths --- dist.sh | 7 ++++--- docs.sh | 1 + src/main/assembly.xml | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dist.sh b/dist.sh index 3c4ad088c3..43e429be67 100755 --- a/dist.sh +++ b/dist.sh @@ -8,17 +8,18 @@ mvn javadoc:aggregate echo "Creating release bundles" for module in apt collections hibernate-search jpa jdo lucene3 lucene4 sql sql-codegen do - cd ../querydsl-$module + cd querydsl-$module mvn -Dtest=X clean assembly:assembly + cd .. done echo "Creating reference documentation" -cd ../querydsl-docs +cd querydsl-docs mkdir -p ../target/dist/reference mvn -Dxslthl.config=http://docbook.sourceforge.net/release/xsl/current/highlighting/xslthl-config.xml clean package cp -R target/docbook/publish/en-US/* ../target/dist/reference/ mvn -Dxslthl.config=http://docbook.sourceforge.net/release/xsl/current/highlighting/xslthl-config.xml -Dtranslation=ko-KR clean package cp -R target/docbook/publish/ko-KR ../target/dist/reference/ -cd ../ +cd .. echo "done." diff --git a/docs.sh b/docs.sh index c758b9b0f9..a2eacacb6c 100755 --- a/docs.sh +++ b/docs.sh @@ -2,4 +2,5 @@ echo "Creating reference documentation" cd querydsl-docs mvn -Dxslthl.config=http://docbook.sourceforge.net/release/xsl/current/highlighting/xslthl-config.xml clean package +cd .. echo "done." diff --git a/src/main/assembly.xml b/src/main/assembly.xml index 6e67e474d2..ececdf6bad 100644 --- a/src/main/assembly.xml +++ b/src/main/assembly.xml @@ -8,7 +8,7 @@ - LICENSE.txt + ../LICENSE.txt / From fa07c83658110f9a8ca651f402d208657901ff00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sat, 14 Mar 2015 21:26:38 +0200 Subject: [PATCH 0806/1968] Changes to Expression instance creation --- .../java/com/querydsl/apt/DateExtensions.java | 2 +- .../com/querydsl/apt/domain/AnyPathTest.java | 2 +- .../com/querydsl/apt/domain/AnyUsageTest.java | 2 +- .../querydsl/apt/domain/Delegate2Test.java | 2 +- .../querydsl/apt/domain/Delegate3Test.java | 2 +- .../querydsl/apt/domain/Embeddable3Test.java | 2 +- .../querydsl/apt/domain/ExpressionTest.java | 5 +- .../querydsl/apt/domain/JodaMoneyHelpers.java | 6 +- .../querydsl/apt/domain/JodaMoneyTest.java | 2 +- .../querydsl/apt/domain/PathMetadataTest.java | 2 +- .../apt/domain/QueryProjectionTest.java | 4 +- .../querydsl/codegen/EntitySerializer.java | 4 +- .../querydsl/codegen/JavaTypeMappings.java | 2 +- .../codegen/ProjectionSerializer.java | 2 +- .../com/querydsl/codegen/ScalaTypeDump.java | 2 +- .../collections/CollQueryStandardTest.java | 2 +- .../querydsl/collections/CollQueryTest.java | 2 +- .../collections/CompilationOverheadTest.java | 2 +- .../com/querydsl/collections/MathTest.java | 2 +- .../java/com/querydsl/core/Detachable.java | 14 +-- .../java/com/querydsl/core/alias/Alias.java | 2 +- .../core/group/AbstractGroupExpression.java | 12 +-- .../core/support/DetachableAdapter.java | 14 +-- .../core/support/DetachableMixin.java | 2 +- .../core/support/DetachableQuery.java | 14 +-- .../types/{expr => dsl}/ArrayExpression.java | 2 +- .../{expr => dsl}/BooleanExpression.java | 17 ++-- .../types/{expr => dsl}/BooleanOperation.java | 14 +-- .../core/types/{expr => dsl}/CaseBuilder.java | 24 ++--- .../types/{expr => dsl}/CaseForEqBuilder.java | 12 +-- .../core/types/{expr => dsl}/Coalesce.java | 20 ++-- .../CollectionExpressionBase.java | 10 +- .../{expr => dsl}/CollectionOperation.java | 20 +--- .../{expr => dsl}/ComparableExpression.java | 26 ++--- .../ComparableExpressionBase.java | 6 +- .../{expr => dsl}/ComparableOperation.java | 6 +- .../types/{expr => dsl}/DateExpression.java | 26 ++--- .../types/{expr => dsl}/DateOperation.java | 14 +-- .../{expr => dsl}/DateTimeExpression.java | 36 +++---- .../{expr => dsl}/DateTimeOperation.java | 14 +-- .../types/{expr => dsl}/DslExpression.java | 4 +- .../types/{expr => dsl}/DslOperation.java | 14 +-- .../types/{expr => dsl}/EnumExpression.java | 6 +- .../types/{expr => dsl}/EnumOperation.java | 14 +-- .../{support => types/dsl}/Expressions.java | 99 +++++++++---------- .../types/{expr => dsl}/ListExpression.java | 2 +- .../{expr => dsl}/MapExpressionBase.java | 14 +-- .../types/{expr => dsl}/MathExpressions.java | 44 ++++----- .../types/{expr => dsl}/NumberExpression.java | 72 +++++++------- .../types/{expr => dsl}/NumberOperation.java | 14 +-- .../core/types/{expr => dsl}/Param.java | 2 +- .../types/{expr => dsl}/SimpleExpression.java | 30 +++--- .../types/{expr => dsl}/SimpleOperation.java | 14 +-- .../types/{expr => dsl}/StringExpression.java | 72 +++++++------- .../{expr => dsl}/StringExpressions.java | 22 ++--- .../types/{expr => dsl}/StringOperation.java | 14 +-- .../{expr => dsl}/TemporalExpression.java | 2 +- .../types/{expr => dsl}/TimeExpression.java | 14 +-- .../types/{expr => dsl}/TimeOperation.java | 14 +-- .../core/types/{expr => dsl}/Wildcard.java | 8 +- .../types/{expr => dsl}/package-info.java | 2 +- .../querydsl/core/types/path/ArrayPath.java | 18 ++-- .../querydsl/core/types/path/BeanPath.java | 9 +- .../querydsl/core/types/path/BooleanPath.java | 2 +- .../core/types/path/CollectionPath.java | 2 +- .../core/types/path/CollectionPathBase.java | 4 +- .../core/types/path/ComparablePath.java | 2 +- .../querydsl/core/types/path/DatePath.java | 2 +- .../core/types/path/DateTimePath.java | 2 +- .../com/querydsl/core/types/path/DslPath.java | 2 +- .../querydsl/core/types/path/EnumPath.java | 2 +- .../querydsl/core/types/path/ListPath.java | 4 +- .../com/querydsl/core/types/path/MapPath.java | 4 +- .../querydsl/core/types/path/NumberPath.java | 2 +- .../querydsl/core/types/path/PathBuilder.java | 2 +- .../com/querydsl/core/types/path/SetPath.java | 2 +- .../querydsl/core/types/path/SimplePath.java | 2 +- .../querydsl/core/types/path/StringPath.java | 2 +- .../querydsl/core/types/path/TimePath.java | 2 +- .../core/types/query/BooleanSubQuery.java | 6 +- .../core/types/query/ComparableSubQuery.java | 8 +- .../core/types/query/DateSubQuery.java | 8 +- .../core/types/query/DateTimeSubQuery.java | 8 +- .../query/ExtendedSubQueryExpression.java | 2 +- .../core/types/query/ListSubQuery.java | 6 +- .../core/types/query/NumberSubQuery.java | 8 +- .../core/types/query/SimpleSubQuery.java | 8 +- .../core/types/query/StringSubQuery.java | 8 +- .../core/types/query/TimeSubQuery.java | 8 +- .../core/types/template/BooleanTemplate.java | 2 +- .../types/template/ComparableTemplate.java | 2 +- .../core/types/template/DateTemplate.java | 2 +- .../core/types/template/DateTimeTemplate.java | 2 +- .../core/types/template/DslTemplate.java | 2 +- .../core/types/template/EnumTemplate.java | 2 +- .../core/types/template/NumberTemplate.java | 2 +- .../core/types/template/SimpleTemplate.java | 2 +- .../core/types/template/StringTemplate.java | 2 +- .../core/types/template/TimeTemplate.java | 2 +- .../com/querydsl/core/BooleanBuilderTest.java | 2 +- .../com/querydsl/core/BooleanConstant.java | 2 +- .../java/com/querydsl/core/DateConstant.java | 4 +- .../com/querydsl/core/DateConstantTest.java | 2 +- .../com/querydsl/core/DateTimeConstant.java | 4 +- .../querydsl/core/DateTimeConstantTest.java | 2 +- .../core/DefaultQueryMetadataTest.java | 2 +- .../com/querydsl/core/DependenciesTest.java | 2 +- .../java/com/querydsl/core/FilterFactory.java | 28 +++--- .../querydsl/core/MatchingFiltersFactory.java | 2 +- .../com/querydsl/core/NumberConstant.java | 4 +- .../com/querydsl/core/ProjectionsFactory.java | 22 ++--- .../com/querydsl/core/QueryExecution.java | 22 ++--- .../core/QueryMetadaSerializationTest.java | 2 +- .../com/querydsl/core/SimpleConstant.java | 4 +- .../com/querydsl/core/StringConstant.java | 8 +- .../com/querydsl/core/StringConstantTest.java | 2 +- .../java/com/querydsl/core/TimeConstant.java | 4 +- .../com/querydsl/core/TimeConstantTest.java | 2 +- .../core/group/AbstractGroupByTest.java | 4 +- .../core/support/DetachableMixinTest.java | 1 + .../querydsl/core/support/QueryMixinTest.java | 2 +- .../core/support/ReplaceVisitorTest.java | 1 + .../querydsl/core/types/CaseBuilderTest.java | 2 +- .../core/types/CaseForEqBuilderTest.java | 4 +- .../querydsl/core/types/ExpressivityTest.java | 12 +-- .../com/querydsl/core/types/ParamTest.java | 2 +- .../com/querydsl/core/types/QBeanTest.java | 2 +- .../querydsl/core/types/SignatureTest.java | 16 ++- .../core/types/ToStringVisitorTest.java | 2 +- .../core/types/ValidatingVisitorTest.java | 2 +- .../ArrayConstructorExpressionTest.java | 2 +- .../{expr => dsl}/BooleanExpressionTest.java | 2 +- .../types/{expr => dsl}/CoalesceTest.java | 2 +- .../ComparableExpressionTest.java | 2 +- .../dsl}/ExpressionsTest.java | 3 +- .../{expr => dsl}/NumberExpressionTest.java | 2 +- .../types/{expr => dsl}/OperationTest.java | 2 +- .../core/types/{expr => dsl}/QTupleTest.java | 2 +- .../{expr => dsl}/SimpleExpressionTest.java | 2 +- .../core/types/path/BeanPathTest.java | 2 +- .../core/util/ReflectionUtilsTest.java | 2 +- .../content/general/creating-queries.xml | 2 +- .../docbook/en-US/content/tutorials/sql.xml | 2 +- .../content/general/creating-queries.xml | 2 +- .../docbook/ko-KR/content/tutorials/sql.xml | 2 +- .../hibernate/search/SearchQueryTest.java | 2 +- .../com/querydsl/jdo/JDOQLSerializer.java | 2 +- .../java/com/querydsl/jdo/JDOSubQuery.java | 6 +- .../com/querydsl/jdo/dml/JDOUpdateClause.java | 2 +- .../com/querydsl/jdo/JDOQLMethodsTest.java | 6 +- .../querydsl/jdo/JDOQueryStandardTest.java | 2 +- .../com/querydsl/jdo/JDOSQLQueryTest.java | 2 +- .../com/querydsl/jpa/AbstractJPASubQuery.java | 2 +- .../java/com/querydsl/jpa/JPAExpressions.java | 15 ++- .../querydsl/jpa/JPAListAccessVisitor.java | 2 +- .../com/querydsl/jpa/JPAMapAccessVisitor.java | 2 +- .../jpa/hibernate/HibernateUpdateClause.java | 2 +- .../querydsl/jpa/hibernate/HibernateUtil.java | 2 +- .../querydsl/jpa/impl/JPAUpdateClause.java | 2 +- .../java/com/querydsl/jpa/impl/JPAUtil.java | 2 +- .../com/querydsl/jpa/AbstractJPATest.java | 4 +- .../com/querydsl/jpa/AbstractSQLTest.java | 4 +- .../test/java/com/querydsl/jpa/CastTest.java | 2 +- .../java/com/querydsl/jpa/DateTimeTest.java | 6 +- .../test/java/com/querydsl/jpa/JPABase.java | 2 +- .../querydsl/jpa/JPAQueryMutability2Test.java | 2 +- .../com/querydsl/jpa/JPQLSerializerTest.java | 2 +- .../java/com/querydsl/jpa/ParsingTest.java | 6 +- .../java/com/querydsl/jpa/QProjection.java | 2 +- .../querydsl/jpa/StringOperationsTest.java | 10 +- .../querydsl/lucene3/LuceneExpressions.java | 2 +- .../com/querydsl/lucene3/PhraseElement.java | 2 +- .../com/querydsl/lucene3/QueryElement.java | 2 +- .../com/querydsl/lucene3/TermElement.java | 2 +- .../com/querydsl/lucene3/LuceneQueryTest.java | 2 +- .../lucene3/LuceneSerializerTest.java | 2 +- .../querydsl/lucene4/LuceneExpressions.java | 2 +- .../com/querydsl/lucene4/PhraseElement.java | 2 +- .../com/querydsl/lucene4/QueryElement.java | 2 +- .../com/querydsl/lucene4/TermElement.java | 2 +- .../com/querydsl/lucene4/LuceneQueryTest.java | 2 +- .../lucene4/LuceneSerializerTest.java | 2 +- .../querydsl/mongodb/MongodbExpressions.java | 6 +- .../main/java/com/querydsl/mongodb/Point.java | 2 +- .../com/querydsl/scala/Expressions.scala | 2 +- .../com/querydsl/spatial/CurveExpression.java | 13 ++- .../spatial/GeometryCollectionExpression.java | 6 +- .../querydsl/spatial/GeometryExpression.java | 51 +++++----- .../querydsl/spatial/GeometryExpressions.java | 16 +-- .../spatial/LineStringExpression.java | 6 +- .../spatial/MultiCurveExpression.java | 11 +-- .../spatial/MultiSurfaceExpression.java | 6 +- .../com/querydsl/spatial/PointExpression.java | 12 +-- .../querydsl/spatial/PolygonExpression.java | 6 +- .../spatial/PolyhedralSurfaceExpression.java | 11 +-- .../querydsl/spatial/SurfaceExpression.java | 6 +- .../spatial/jts/JTSCurveExpression.java | 15 ++- .../jts/JTSGeometryCollectionExpression.java | 8 +- .../spatial/jts/JTSGeometryExpression.java | 53 +++++----- .../spatial/jts/JTSGeometryExpressions.java | 26 +++-- .../spatial/jts/JTSLineStringExpression.java | 8 +- .../spatial/jts/JTSMultiCurveExpression.java | 13 ++- .../jts/JTSMultiSurfaceExpression.java | 8 +- .../spatial/jts/JTSPointExpression.java | 14 +-- .../spatial/jts/JTSPolygonExpression.java | 8 +- .../spatial/jts/JTSSurfaceExpression.java | 8 +- .../com/querydsl/sql/AbstractSQLQuery.java | 2 +- .../com/querydsl/sql/DetachableSQLQuery.java | 9 +- .../java/com/querydsl/sql/ForeignKey.java | 15 +-- .../java/com/querydsl/sql/PrimaryKey.java | 13 +-- .../com/querydsl/sql/ProjectableSQLQuery.java | 4 +- .../querydsl/sql/RelationalFunctionCall.java | 2 +- .../com/querydsl/sql/RelationalPathBase.java | 19 ++-- .../java/com/querydsl/sql/SQLExpressions.java | 70 ++++++------- .../java/com/querydsl/sql/SQLSerializer.java | 2 +- .../querydsl/sql/SQLServer2005Templates.java | 2 +- .../querydsl/sql/SQLServer2012Templates.java | 2 +- .../com/querydsl/sql/SQLServerTemplates.java | 2 +- .../com/querydsl/sql/WindowFirstLast.java | 4 +- .../java/com/querydsl/sql/WindowFunction.java | 20 ++-- .../java/com/querydsl/sql/WindowOver.java | 2 +- .../java/com/querydsl/sql/WithinGroup.java | 6 +- .../querydsl/sql/oracle/OracleGrammar.java | 4 +- .../sql/AbstractSQLTemplatesTest.java | 4 +- .../java/com/querydsl/sql/DeleteBase.java | 4 +- .../com/querydsl/sql/ExtendedSQLTest.java | 2 +- .../querydsl/sql/FirebirdTemplatesTest.java | 2 +- .../java/com/querydsl/sql/InsertBase.java | 4 +- .../test/java/com/querydsl/sql/MergeBase.java | 2 +- .../com/querydsl/sql/OracleTemplatesTest.java | 2 +- .../querydsl/sql/PostgreSQLTemplatesTest.java | 2 +- .../java/com/querydsl/sql/PrecedenceTest.java | 2 +- .../sql/RelationalPathExtractorTest.java | 2 +- .../com/querydsl/sql/SQLBindingsTest.java | 2 +- .../com/querydsl/sql/SQLSerializerTest.java | 4 +- .../sql/SQLServer2005TemplatesTest.java | 2 +- .../sql/SQLServer2012TemplatesTest.java | 2 +- .../querydsl/sql/SQLServerTemplatesTest.java | 2 +- .../com/querydsl/sql/SQLSubQueryTest.java | 6 +- .../com/querydsl/sql/SQLTemplatesTest.java | 2 +- .../com/querydsl/sql/SQLiteTemplatesTest.java | 2 +- .../java/com/querydsl/sql/SelectBase.java | 4 +- .../sql/SelectWindowFunctionsBase.java | 2 +- .../java/com/querydsl/sql/SubqueriesBase.java | 6 +- .../java/com/querydsl/sql/TemplateTest.java | 4 +- .../test/java/com/querydsl/sql/TypesBase.java | 2 +- .../java/com/querydsl/sql/UpdateBase.java | 4 +- .../com/querydsl/sql/WindowFunctionTest.java | 2 +- .../com/querydsl/sql/WithinGroupTest.java | 2 +- 249 files changed, 833 insertions(+), 1036 deletions(-) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/ArrayExpression.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/BooleanExpression.java (88%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/BooleanOperation.java (80%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/CaseBuilder.java (93%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/CaseForEqBuilder.java (92%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/Coalesce.java (80%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/CollectionExpressionBase.java (85%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/CollectionOperation.java (67%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/ComparableExpression.java (86%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/ComparableExpressionBase.java (93%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/ComparableOperation.java (89%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/DateExpression.java (79%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/DateOperation.java (74%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/DateTimeExpression.java (78%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/DateTimeOperation.java (74%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/DslExpression.java (94%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/DslOperation.java (76%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/EnumExpression.java (87%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/EnumOperation.java (74%) rename querydsl-core/src/main/java/com/querydsl/core/{support => types/dsl}/Expressions.java (84%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/ListExpression.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/MapExpressionBase.java (81%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/MathExpressions.java (74%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/NumberExpression.java (83%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/NumberOperation.java (76%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/Param.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/SimpleExpression.java (85%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/SimpleOperation.java (76%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/StringExpression.java (83%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/StringExpressions.java (72%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/StringOperation.java (79%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/TemporalExpression.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/TimeExpression.java (82%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/TimeOperation.java (74%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/Wildcard.java (74%) rename querydsl-core/src/main/java/com/querydsl/core/types/{expr => dsl}/package-info.java (94%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/ArrayConstructorExpressionTest.java (97%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/BooleanExpressionTest.java (98%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/CoalesceTest.java (98%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/ComparableExpressionTest.java (96%) rename querydsl-core/src/test/java/com/querydsl/core/{support => types/dsl}/ExpressionsTest.java (98%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/NumberExpressionTest.java (96%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/OperationTest.java (98%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/QTupleTest.java (97%) rename querydsl-core/src/test/java/com/querydsl/core/types/{expr => dsl}/SimpleExpressionTest.java (99%) diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java b/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java index 396b047558..69ac92fbf1 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java @@ -17,7 +17,7 @@ import com.querydsl.core.annotations.QueryDelegate; import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.expr.DateExpression; +import com.querydsl.core.types.dsl.DateExpression; import com.querydsl.core.types.path.BooleanPath; public class DateExtensions { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyPathTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyPathTest.java index c1035a029a..3647d2651e 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyPathTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyPathTest.java @@ -10,7 +10,7 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryInit; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; public class AnyPathTest { @Entity diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyUsageTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyUsageTest.java index f35a5ff640..e7010a2ef7 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyUsageTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AnyUsageTest.java @@ -24,7 +24,7 @@ import org.junit.Test; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; public class AnyUsageTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java index 7907cfb32c..0e3b9f6bd3 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java @@ -21,7 +21,7 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.template.NumberTemplate; public class Delegate2Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java index 13f937142b..1fc760c278 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java @@ -3,7 +3,7 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryDelegate; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.path.ComparablePath; import com.querydsl.core.types.template.BooleanTemplate; diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable3Test.java index 93d8890a05..317b1f2a81 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable3Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable3Test.java @@ -4,7 +4,7 @@ import com.querydsl.core.annotations.QueryEmbeddable; import com.querydsl.core.annotations.QueryProjection; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; public class Embeddable3Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/ExpressionTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/ExpressionTest.java index 3663033d72..8960d091db 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/ExpressionTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/ExpressionTest.java @@ -23,11 +23,10 @@ import org.junit.Test; -import com.querydsl.core.domain.*; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.StringExpression; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.StringExpression; public class ExpressionTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyHelpers.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyHelpers.java index 4f5f133f1b..60cb46a8f2 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyHelpers.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyHelpers.java @@ -7,14 +7,14 @@ import com.querydsl.core.annotations.QueryDelegate; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; public class JodaMoneyHelpers { @QueryDelegate(Money.class) public static NumberExpression sum(QMoney money) { - return NumberOperation.create(BigDecimal.class, Ops.AggOps.SUM_AGG, money); + return Expressions.numberOperation(BigDecimal.class, Ops.AggOps.SUM_AGG, money); } } diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyTest.java index aa311e3cc4..0863132af0 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaMoneyTest.java @@ -7,7 +7,7 @@ import org.joda.money.QMoney; import org.junit.Test; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; public class JodaMoneyTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/PathMetadataTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/PathMetadataTest.java index e56f9c4d3d..7fd9abbfba 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/PathMetadataTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/PathMetadataTest.java @@ -24,7 +24,7 @@ import org.junit.Test; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.StringExpression; +import com.querydsl.core.types.dsl.StringExpression; @Ignore public class PathMetadataTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java index d9791c1e85..66fc934a7a 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java @@ -24,8 +24,8 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QueryProjection; import com.querydsl.core.annotations.QueryType; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.StringExpression; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java index fa7c146261..798c7df910 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java @@ -30,8 +30,8 @@ import com.mysema.codegen.CodeWriter; import com.mysema.codegen.model.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.ComparableExpression; -import com.querydsl.core.types.expr.SimpleExpression; +import com.querydsl.core.types.dsl.ComparableExpression; +import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.path.*; /** diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java index 7c8789f667..a4d09ec0b1 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java @@ -16,7 +16,7 @@ import com.mysema.codegen.model.TypeCategory; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.*; +import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.path.*; import com.querydsl.core.types.template.*; diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/ProjectionSerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/ProjectionSerializer.java index 80a1539d1c..f058dd38a0 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/ProjectionSerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/ProjectionSerializer.java @@ -24,7 +24,7 @@ import com.mysema.codegen.model.*; import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; /** * ProjectionSerializer is a {@link Serializer} implementation for projection types diff --git a/querydsl-codegen/src/test/java/com/querydsl/codegen/ScalaTypeDump.java b/querydsl-codegen/src/test/java/com/querydsl/codegen/ScalaTypeDump.java index 2ea95a1bc2..19de518bfe 100644 --- a/querydsl-codegen/src/test/java/com/querydsl/codegen/ScalaTypeDump.java +++ b/querydsl-codegen/src/test/java/com/querydsl/codegen/ScalaTypeDump.java @@ -27,7 +27,7 @@ import com.mysema.codegen.model.Parameter; import com.mysema.codegen.model.Type; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.*; +import com.querydsl.core.types.dsl.*; public class ScalaTypeDump { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java index 78bcfa3eda..ff7a496416 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryStandardTest.java @@ -24,7 +24,7 @@ import com.mysema.commons.lang.Pair; import com.querydsl.core.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; public class CollQueryStandardTest { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java index 2cb855f59c..8c316e151d 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java @@ -22,7 +22,7 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; import org.junit.Test; diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CompilationOverheadTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CompilationOverheadTest.java index be5148a07b..2b765b5451 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CompilationOverheadTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CompilationOverheadTest.java @@ -19,7 +19,7 @@ import org.junit.Test; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; public class CompilationOverheadTest { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java index ca3aaae6b5..08cfa4ca63 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java @@ -7,7 +7,7 @@ import org.junit.Test; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.MathExpressions; +import com.querydsl.core.types.dsl.MathExpressions; import com.querydsl.core.types.path.NumberPath; public class MathTest { diff --git a/querydsl-core/src/main/java/com/querydsl/core/Detachable.java b/querydsl-core/src/main/java/com/querydsl/core/Detachable.java index 9a7fa20771..daad712f36 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/Detachable.java +++ b/querydsl-core/src/main/java/com/querydsl/core/Detachable.java @@ -15,13 +15,13 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.ComparableExpression; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.DateTimeExpression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.TimeExpression; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.ComparableExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.DateTimeExpression; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.core.types.dsl.TimeExpression; import com.querydsl.core.types.query.BooleanSubQuery; import com.querydsl.core.types.query.ComparableSubQuery; import com.querydsl.core.types.query.DateSubQuery; diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java b/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java index 2013344c85..1333453648 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java @@ -29,7 +29,7 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.expr.SimpleExpression; +import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.path.ArrayPath; import com.querydsl.core.types.path.BooleanPath; import com.querydsl.core.types.path.CollectionPath; diff --git a/querydsl-core/src/main/java/com/querydsl/core/group/AbstractGroupExpression.java b/querydsl-core/src/main/java/com/querydsl/core/group/AbstractGroupExpression.java index 1e6cfb02d4..192ae0af26 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/group/AbstractGroupExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/group/AbstractGroupExpression.java @@ -13,13 +13,9 @@ */ package com.querydsl.core.group; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.expr.DslExpression; -import com.querydsl.core.types.expr.DslOperation; +import com.querydsl.core.types.*; +import com.querydsl.core.types.dsl.DslExpression; +import com.querydsl.core.types.dsl.Expressions; /** * A base class for GroupExpressions @@ -49,7 +45,7 @@ public AbstractGroupExpression(Class type, Expression expr) { */ @SuppressWarnings("unchecked") public DslExpression as(Path alias) { - return DslOperation.create((Class)getType(), Ops.ALIAS, this, alias); + return Expressions.dslOperation((Class) getType(), Ops.ALIAS, this, alias); } /** diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java index 37418a5d5e..20b0a3b4fc 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java @@ -19,13 +19,13 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.ComparableExpression; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.DateTimeExpression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.TimeExpression; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.ComparableExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.DateTimeExpression; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.core.types.dsl.TimeExpression; import com.querydsl.core.types.query.BooleanSubQuery; import com.querydsl.core.types.query.ComparableSubQuery; import com.querydsl.core.types.query.DateSubQuery; diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java index 857388001b..8e952ccec3 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java @@ -19,7 +19,7 @@ import com.querydsl.core.QueryMetadata; import com.querydsl.core.Tuple; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.*; +import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.query.*; /** diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java index f9d8963f26..cf1d93c57c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java @@ -17,13 +17,13 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.ComparableExpression; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.DateTimeExpression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.TimeExpression; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.ComparableExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.DateTimeExpression; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.core.types.dsl.TimeExpression; import com.querydsl.core.types.query.BooleanSubQuery; import com.querydsl.core.types.query.ComparableSubQuery; import com.querydsl.core.types.query.DateSubQuery; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ArrayExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ArrayExpression.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/ArrayExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ArrayExpression.java index 7348bdf2fb..1522c64982 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ArrayExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ArrayExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import javax.annotation.Nonnegative; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanExpression.java similarity index 88% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanExpression.java index d89b4d1e71..c024f2f976 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanExpression.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.Predicate; +import com.querydsl.core.types.*; /** * BooleanExpression represents {@link java.lang.Boolean} expressions @@ -75,7 +70,7 @@ public BooleanExpression(Expression mixin) { @Override public BooleanExpression as(Path alias) { - return BooleanOperation.create(Ops.ALIAS, mixin, alias); + return Expressions.booleanOperation(Ops.ALIAS, mixin, alias); } @Override @@ -92,7 +87,7 @@ public BooleanExpression as(String alias) { public BooleanExpression and(@Nullable Predicate right) { right = (Predicate) ExpressionUtils.extract(right); if (right != null) { - return BooleanOperation.create(Ops.AND, mixin, right); + return Expressions.booleanOperation(Ops.AND, mixin, right); } else { return this; } @@ -117,7 +112,7 @@ public BooleanExpression andAnyOf(Predicate... predicates) { public BooleanExpression not() { if (not == null) { // uses this, because it makes unwrapping easier - not = BooleanOperation.create(Ops.NOT, this); + not = Expressions.booleanOperation(Ops.NOT, this); } return not; } @@ -131,7 +126,7 @@ public BooleanExpression not() { public BooleanExpression or(@Nullable Predicate right) { right = (Predicate) ExpressionUtils.extract(right); if (right != null) { - return BooleanOperation.create(Ops.OR, mixin, right); + return Expressions.booleanOperation(Ops.OR, mixin, right); } else { return this; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanOperation.java similarity index 80% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanOperation.java index 7051c78e3d..9c7eb64955 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/BooleanOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -33,18 +33,6 @@ public class BooleanOperation extends BooleanExpression implements Operation one) { - return new BooleanOperation(op, ImmutableList.>of(one)); - } - - public static BooleanExpression create(Operator op, Expression one, Expression two) { - return new BooleanOperation(op, ImmutableList.of(one, two)); - } - - public static BooleanExpression create(Operator op, Expression... args) { - return new BooleanOperation(op, args); - } - private final PredicateOperation opMixin; protected BooleanOperation(Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CaseBuilder.java similarity index 93% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/CaseBuilder.java index c54b29462f..22b91f3238 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseBuilder.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CaseBuilder.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.sql.Time; import java.sql.Timestamp; @@ -102,10 +102,10 @@ public Q otherwise(Expression expr) { Expression last = null; for (CaseElement element : cases) { if (last == null) { - last = SimpleOperation.create(type, Ops.CASE_ELSE, + last = Expressions.operation(type, Ops.CASE_ELSE, element.getTarget()); } else { - last = SimpleOperation.create(type, Ops.CASE_WHEN, + last = Expressions.operation(type, Ops.CASE_WHEN, element.getCondition(), element.getTarget(), last); @@ -186,7 +186,7 @@ private Cases> thenSimple(Expression expr) { return new Cases>((Class)expr.getType()) { @Override protected SimpleExpression createResult(Class type, Expression last) { - return SimpleOperation.create(type, Ops.CASE, last); + return Expressions.operation(type, Ops.CASE, last); } }.addCase(when, expr); @@ -207,7 +207,7 @@ private Cases thenBoolean(Expression expr) @SuppressWarnings("unchecked") @Override protected BooleanExpression createResult(Class type, Expression last) { - return BooleanOperation.create(Ops.CASE, last); + return Expressions.booleanOperation(Ops.CASE, last); } }.addCase(when, expr); @@ -227,7 +227,7 @@ private Cases> thenComparable( return new Cases>((Class)expr.getType()) { @Override protected ComparableExpression createResult(Class type, Expression last) { - return ComparableOperation.create(type, Ops.CASE, last); + return Expressions.comparableOperation(type, Ops.CASE, last); } }.addCase(when, expr); @@ -247,7 +247,7 @@ private Cases> thenDate(Expression>((Class)expr.getType()) { @Override protected DateExpression createResult(Class type, Expression last) { - return DateOperation.create(type, Ops.CASE, last); + return Expressions.dateOperation(type, Ops.CASE, last); } }.addCase(when, expr); @@ -267,7 +267,7 @@ private Cases> thenDateTime(Expr return new Cases>((Class)expr.getType()) { @Override protected DateTimeExpression createResult(Class type, Expression last) { - return DateTimeOperation.create(type, Ops.CASE, last); + return Expressions.dateTimeOperation(type, Ops.CASE, last); } }.addCase(when, expr); @@ -292,7 +292,7 @@ private > Cases> thenEnum(Expression ex return new Cases>((Class)expr.getType()) { @Override protected EnumExpression createResult(Class type, Expression last) { - return EnumOperation.create(type, Ops.CASE, last); + return Expressions.enumOperation(type, Ops.CASE, last); } }.addCase(when, expr); } @@ -312,7 +312,7 @@ private > Cases> thenNum return new Cases>((Class)expr.getType()) { @Override protected NumberExpression createResult(Class type, Expression last) { - return NumberOperation.create(type, Ops.CASE, last); + return Expressions.numberOperation(type, Ops.CASE, last); } }.addCase(when, expr); @@ -333,7 +333,7 @@ private Cases thenString(Expression expr) { @SuppressWarnings("unchecked") @Override protected StringExpression createResult(Class type, Expression last) { - return StringOperation.create(Ops.CASE, last); + return Expressions.stringOperation(Ops.CASE, last); } }.addCase(when, expr); @@ -353,7 +353,7 @@ private Cases> thenTime(Expression>((Class)expr.getType()) { @Override protected TimeExpression createResult(Class type, Expression last) { - return TimeOperation.create(type, Ops.CASE, last); + return Expressions.timeOperation(type, Ops.CASE, last); } }.addCase(when, expr); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseForEqBuilder.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CaseForEqBuilder.java similarity index 92% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseForEqBuilder.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/CaseForEqBuilder.java index 2e48bd5423..f9b9702957 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CaseForEqBuilder.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CaseForEqBuilder.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.ArrayList; import java.util.List; @@ -83,7 +83,7 @@ public Cases> then(Expression then) { return new Cases>() { @Override protected Expression createResult(Class type, Expression last) { - return SimpleOperation.create(type, Ops.CASE_EQ, base, last); + return Expressions.operation(type, Ops.CASE_EQ, base, last); } }.when(other).then(then); } @@ -110,7 +110,7 @@ public > Cases> thenNumbe @SuppressWarnings("unchecked") @Override protected NumberExpression createResult(Class type, Expression last) { - return NumberOperation.create(type, Ops.CASE_EQ, base, last); + return Expressions.numberOperation(type, Ops.CASE_EQ, base, last); } }.when(other).then(then); @@ -130,7 +130,7 @@ private Cases thenString(Expression then) { @SuppressWarnings("unchecked") @Override protected StringExpression createResult(Class type, Expression last) { - return StringOperation.create(Ops.CASE_EQ, base, last); + return Expressions.stringOperation(Ops.CASE_EQ, base, last); } }.when(other).then(then); @@ -152,10 +152,10 @@ public Q otherwise(Expression otherwise) { Expression last = null; for (CaseElement element : caseElements) { if (last == null) { - last = SimpleOperation.create((Class)type, Ops.CASE_EQ_ELSE, + last = Expressions.operation((Class)type, Ops.CASE_EQ_ELSE, element.getTarget()); } else { - last = SimpleOperation.create((Class)type, Ops.CASE_EQ_WHEN, + last = Expressions.operation((Class)type, Ops.CASE_EQ_WHEN, base, element.getEq(), element.getTarget(), diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Coalesce.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Coalesce.java similarity index 80% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/Coalesce.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/Coalesce.java index 80e6c8c78d..436006a5da 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Coalesce.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Coalesce.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.ArrayList; import java.util.List; @@ -67,7 +67,7 @@ public R accept(Visitor v, C context) { public ComparableExpression getValue() { if (value == null) { - value = (ComparableExpression)ComparableOperation.create(getType(), Ops.COALESCE, getExpressionList()); + value = (ComparableExpression)Expressions.comparableOperation(getType(), Ops.COALESCE, getExpressionList()); } return value; } @@ -78,7 +78,7 @@ public ComparableExpression getValue() { * @return */ public DslExpression as(Path alias) { - return DslOperation.create((Class)getType(),Ops.ALIAS, this, alias); + return Expressions.dslOperation((Class)getType(),Ops.ALIAS, this, alias); } /** @@ -109,31 +109,31 @@ public final Coalesce add(T constant) { } public BooleanExpression asBoolean() { - return BooleanOperation.create(Ops.COALESCE, getExpressionList()); + return Expressions.booleanOperation(Ops.COALESCE, getExpressionList()); } public DateExpression asDate() { - return (DateExpression) DateOperation.create(getType(), Ops.COALESCE, getExpressionList()); + return (DateExpression) Expressions.dateOperation(getType(), Ops.COALESCE, getExpressionList()); } public DateTimeExpression asDateTime() { - return (DateTimeExpression) DateTimeOperation.create(getType(), Ops.COALESCE, getExpressionList()); + return (DateTimeExpression) Expressions.dateTimeOperation(getType(), Ops.COALESCE, getExpressionList()); } public EnumExpression asEnum() { - return EnumOperation.create((Class)getType(), Ops.COALESCE, getExpressionList()); + return Expressions.enumOperation((Class)getType(), Ops.COALESCE, getExpressionList()); } public NumberExpression asNumber() { - return NumberOperation.create((Class)getType(), Ops.COALESCE, getExpressionList()); + return Expressions.numberOperation((Class)getType(), Ops.COALESCE, getExpressionList()); } public StringExpression asString() { - return StringOperation.create(Ops.COALESCE, getExpressionList()); + return Expressions.stringOperation(Ops.COALESCE, getExpressionList()); } public TimeExpression asTime() { - return (TimeExpression) TimeOperation.create(getType(), Ops.COALESCE, getExpressionList()); + return (TimeExpression) Expressions.timeOperation(getType(), Ops.COALESCE, getExpressionList()); } private Expression getExpressionList() { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionExpressionBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionExpressionBase.java similarity index 85% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionExpressionBase.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionExpressionBase.java index 2c1ea09af5..ff4b074b42 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionExpressionBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionExpressionBase.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.Collection; @@ -46,7 +46,7 @@ public CollectionExpressionBase(Expression mixin) { } public DslExpression as(EntityPath alias) { - return DslOperation.create(getElementType(), Ops.ALIAS, mixin, alias); + return Expressions.dslOperation(getElementType(), Ops.ALIAS, mixin, alias); } public final BooleanExpression contains(E child) { @@ -54,14 +54,14 @@ public final BooleanExpression contains(E child) { } public final BooleanExpression contains(Expression child) { - return BooleanOperation.create(Ops.IN, child, mixin); + return Expressions.booleanOperation(Ops.IN, child, mixin); } public abstract Class getElementType(); public final BooleanExpression isEmpty() { if (empty == null) { - empty = BooleanOperation.create(Ops.COL_IS_EMPTY, mixin); + empty = Expressions.booleanOperation(Ops.COL_IS_EMPTY, mixin); } return empty; } @@ -72,7 +72,7 @@ public final BooleanExpression isNotEmpty() { public final NumberExpression size() { if (size == null) { - size = NumberOperation.create(Integer.class, Ops.COL_SIZE, mixin); + size = Expressions.numberOperation(Integer.class, Ops.COL_SIZE, mixin); } return size; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java similarity index 67% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java index d9f23bddde..e91b4d2553 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/CollectionOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.Collection; @@ -35,23 +35,11 @@ public class CollectionOperation extends CollectionExpressionBase> opMixin; - public static CollectionOperation create(Operator op, Class type, Expression one) { - return new CollectionOperation(op, type, ImmutableList.>of(one)); + public CollectionOperation(Class type, Operator op, Expression... args) { + this(type, op, ImmutableList.copyOf(args)); } - public static CollectionOperation create(Operator op, Class type, Expression one, Expression two) { - return new CollectionOperation(op, type, ImmutableList.of(one, two)); - } - - public static CollectionOperation create(Operator op, Class type, Expression... args) { - return new CollectionOperation(op, type, args); - } - - public CollectionOperation(Operator op, Class type, Expression... args) { - this(op, type, ImmutableList.copyOf(args)); - } - - public CollectionOperation(Operator op, Class type, ImmutableList> args) { + public CollectionOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(Collection.class, op, args)); this.opMixin = (OperationImpl)super.mixin; this.elementType = (Class)type; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableExpression.java similarity index 86% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableExpression.java index ebad158e73..85b781dfc6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -35,7 +35,7 @@ public ComparableExpression(Expression mixin) { @Override public ComparableExpression as(Path alias) { - return ComparableOperation.create((Class)getType(), Ops.ALIAS, mixin, alias); + return Expressions.comparableOperation((Class)getType(), Ops.ALIAS, mixin, alias); } @Override @@ -53,14 +53,14 @@ public ComparableExpression as(String alias) { public final BooleanExpression between(@Nullable T from, @Nullable T to) { if (from == null) { if (to != null) { - return BooleanOperation.create(Ops.LOE, mixin, ConstantImpl.create(to)); + return Expressions.booleanOperation(Ops.LOE, mixin, ConstantImpl.create(to)); } else { throw new IllegalArgumentException("Either from or to needs to be non-null"); } } else if (to == null) { - return BooleanOperation.create(Ops.GOE, mixin, ConstantImpl.create(from)); + return Expressions.booleanOperation(Ops.GOE, mixin, ConstantImpl.create(from)); } else { - return BooleanOperation.create(Ops.BETWEEN, mixin, ConstantImpl.create(from), ConstantImpl.create(to)); + return Expressions.booleanOperation(Ops.BETWEEN, mixin, ConstantImpl.create(from), ConstantImpl.create(to)); } } @@ -74,14 +74,14 @@ public final BooleanExpression between(@Nullable T from, @Nullable T to) { public final BooleanExpression between(@Nullable Expression from, @Nullable Expression to) { if (from == null) { if (to != null) { - return BooleanOperation.create(Ops.LOE, mixin, to); + return Expressions.booleanOperation(Ops.LOE, mixin, to); } else { throw new IllegalArgumentException("Either from or to needs to be non-null"); } } else if (to == null) { - return BooleanOperation.create(Ops.GOE, mixin, from); + return Expressions.booleanOperation(Ops.GOE, mixin, from); } else { - return BooleanOperation.create(Ops.BETWEEN, mixin, from, to); + return Expressions.booleanOperation(Ops.BETWEEN, mixin, from, to); } } @@ -127,7 +127,7 @@ public BooleanExpression gt(T right) { * @see java.lang.Comparable#compareTo(Object) */ public BooleanExpression gt(Expression right) { - return BooleanOperation.create(Ops.GT, mixin, right); + return Expressions.booleanOperation(Ops.GT, mixin, right); } /** @@ -166,7 +166,7 @@ public BooleanExpression goe(T right) { * @see java.lang.Comparable#compareTo(Object) */ public BooleanExpression goe(Expression right) { - return BooleanOperation.create(Ops.GOE, mixin, right); + return Expressions.booleanOperation(Ops.GOE, mixin, right); } /** @@ -204,7 +204,7 @@ public final BooleanExpression lt(T right) { * @see java.lang.Comparable#compareTo(Object) */ public final BooleanExpression lt(Expression right) { - return BooleanOperation.create(Ops.LT, mixin, right); + return Expressions.booleanOperation(Ops.LT, mixin, right); } /** @@ -232,7 +232,7 @@ public BooleanExpression ltAny(CollectionExpression right) { * @see java.lang.Comparable#compareTo(Object) */ public final BooleanExpression loe(T right) { - return BooleanOperation.create(Ops.LOE, mixin, ConstantImpl.create(right)); + return Expressions.booleanOperation(Ops.LOE, mixin, ConstantImpl.create(right)); } /** @@ -243,7 +243,7 @@ public final BooleanExpression loe(T right) { * @see java.lang.Comparable#compareTo(Object) */ public final BooleanExpression loe(Expression right) { - return BooleanOperation.create(Ops.LOE, mixin, right); + return Expressions.booleanOperation(Ops.LOE, mixin, right); } /** diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpressionBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableExpressionBase.java similarity index 93% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpressionBase.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableExpressionBase.java index f662034b63..54718e3fbe 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableExpressionBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableExpressionBase.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -80,7 +80,7 @@ public final Coalesce coalesce(T... args) { * @return */ public > NumberExpression castToNum(Class type) { - return NumberOperation.create(type, Ops.NUMCAST, mixin, ConstantImpl.create(type)); + return Expressions.numberOperation(type, Ops.NUMCAST, mixin, ConstantImpl.create(type)); } /** @@ -103,7 +103,7 @@ public final OrderSpecifier desc() { */ public StringExpression stringValue() { if (stringCast == null) { - stringCast = StringOperation.create(Ops.STRING_CAST, mixin); + stringCast = Expressions.stringOperation(Ops.STRING_CAST, mixin); } return stringCast; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableOperation.java similarity index 89% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableOperation.java index 122b0e86ba..630189da7d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ComparableOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -34,10 +34,6 @@ public class ComparableOperation> extends private static final long serialVersionUID = 1129243977606098865L; - public static > ComparableExpression create(Class type, Operator op, Expression... args) { - return new ComparableOperation(type, op, args); - } - private final OperationImpl opMixin; protected ComparableOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateExpression.java similarity index 79% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/DateExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateExpression.java index 6d4a29fac9..736cadaee5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.Date; @@ -53,7 +53,7 @@ public static DateExpression currentDate() { * @return */ public static DateExpression currentDate(Class cl) { - return DateOperation.create(cl, Ops.DateTimeOps.CURRENT_DATE); + return Expressions.dateOperation(cl, Ops.DateTimeOps.CURRENT_DATE); } @Nullable @@ -71,7 +71,7 @@ public DateExpression(Expression mixin) { @Override public DateExpression as(Path alias) { - return DateOperation.create((Class)getType(), Ops.ALIAS, mixin, alias); + return Expressions.dateOperation((Class)getType(), Ops.ALIAS, mixin, alias); } @Override @@ -86,7 +86,7 @@ public DateExpression as(String alias) { */ public NumberExpression dayOfMonth() { if (dayOfMonth == null) { - dayOfMonth = NumberOperation.create(Integer.class, Ops.DateTimeOps.DAY_OF_MONTH, mixin); + dayOfMonth = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DAY_OF_MONTH, mixin); } return dayOfMonth; } @@ -99,7 +99,7 @@ public NumberExpression dayOfMonth() { */ public NumberExpression dayOfWeek() { if (dayOfWeek == null) { - dayOfWeek = NumberOperation.create(Integer.class, Ops.DateTimeOps.DAY_OF_WEEK, mixin); + dayOfWeek = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DAY_OF_WEEK, mixin); } return dayOfWeek; } @@ -112,7 +112,7 @@ public NumberExpression dayOfWeek() { */ public NumberExpression dayOfYear() { if (dayOfYear == null) { - dayOfYear = NumberOperation.create(Integer.class, Ops.DateTimeOps.DAY_OF_YEAR, mixin); + dayOfYear = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DAY_OF_YEAR, mixin); } return dayOfYear; } @@ -124,7 +124,7 @@ public NumberExpression dayOfYear() { */ public DateExpression max() { if (max == null) { - max = DateOperation.create(getType(), Ops.AggOps.MAX_AGG, mixin); + max = Expressions.dateOperation(getType(), Ops.AggOps.MAX_AGG, mixin); } return max; } @@ -136,7 +136,7 @@ public DateExpression max() { */ public DateExpression min() { if (min == null) { - min = DateOperation.create(getType(), Ops.AggOps.MIN_AGG, mixin); + min = Expressions.dateOperation(getType(), Ops.AggOps.MIN_AGG, mixin); } return min; } @@ -148,7 +148,7 @@ public DateExpression min() { */ public NumberExpression month() { if (month == null) { - month = NumberOperation.create(Integer.class, Ops.DateTimeOps.MONTH, mixin); + month = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.MONTH, mixin); } return month; } @@ -160,7 +160,7 @@ public NumberExpression month() { */ public NumberExpression week() { if (week == null) { - week = NumberOperation.create(Integer.class, Ops.DateTimeOps.WEEK, mixin); + week = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.WEEK, mixin); } return week; } @@ -172,7 +172,7 @@ public NumberExpression week() { */ public NumberExpression year() { if (year == null) { - year = NumberOperation.create(Integer.class, Ops.DateTimeOps.YEAR, mixin); + year = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.YEAR, mixin); } return year; } @@ -184,7 +184,7 @@ public NumberExpression year() { */ public NumberExpression yearMonth() { if (yearMonth == null) { - yearMonth = NumberOperation.create(Integer.class, Ops.DateTimeOps.YEAR_MONTH, mixin); + yearMonth = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.YEAR_MONTH, mixin); } return yearMonth; } @@ -196,7 +196,7 @@ public NumberExpression yearMonth() { */ public NumberExpression yearWeek() { if (yearWeek == null) { - yearWeek = NumberOperation.create(Integer.class, Ops.DateTimeOps.YEAR_WEEK, mixin); + yearWeek = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.YEAR_WEEK, mixin); } return yearWeek; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateOperation.java similarity index 74% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateOperation.java index ccb6f1133c..2ea55bbbe8 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -34,18 +34,6 @@ public class DateOperation> extends private static final long serialVersionUID = -7859020164194396995L; - public static > DateExpression create(Class type, Operator op, Expression one) { - return new DateOperation(type, op, ImmutableList.>of(one)); - } - - public static > DateExpression create(Class type, Operator op, Expression one, Expression two) { - return new DateOperation(type, op, ImmutableList.of(one, two)); - } - - public static > DateExpression create(Class type, Operator op, Expression... args) { - return new DateOperation(type, op, args); - } - private final OperationImpl opMixin; protected DateOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeExpression.java similarity index 78% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeExpression.java index 45051a1ce6..61904eca55 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.Date; @@ -55,7 +55,7 @@ public static DateTimeExpression currentDate() { * @return */ public static DateTimeExpression currentDate(Class cl) { - return DateTimeOperation.create(cl, Ops.DateTimeOps.CURRENT_DATE); + return Expressions.dateTimeOperation(cl, Ops.DateTimeOps.CURRENT_DATE); } /** @@ -73,7 +73,7 @@ public static DateTimeExpression currentTimestamp() { * @return */ public static DateTimeExpression currentTimestamp(Class cl) { - return DateTimeOperation.create(cl, Ops.DateTimeOps.CURRENT_TIMESTAMP); + return Expressions.dateTimeOperation(cl, Ops.DateTimeOps.CURRENT_TIMESTAMP); } @@ -96,7 +96,7 @@ public DateTimeExpression(Expression mixin) { @Override public DateTimeExpression as(Path alias) { - return DateTimeOperation.create((Class)getType(), Ops.ALIAS, mixin, alias); + return Expressions.dateTimeOperation((Class)getType(), Ops.ALIAS, mixin, alias); } @Override @@ -111,7 +111,7 @@ public DateTimeExpression as(String alias) { */ public NumberExpression dayOfMonth() { if (dayOfMonth == null) { - dayOfMonth = NumberOperation.create(Integer.class, Ops.DateTimeOps.DAY_OF_MONTH, mixin); + dayOfMonth = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DAY_OF_MONTH, mixin); } return dayOfMonth; } @@ -124,7 +124,7 @@ public NumberExpression dayOfMonth() { */ public NumberExpression dayOfWeek() { if (dayOfWeek == null) { - dayOfWeek = NumberOperation.create(Integer.class, Ops.DateTimeOps.DAY_OF_WEEK, mixin); + dayOfWeek = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DAY_OF_WEEK, mixin); } return dayOfWeek; } @@ -137,7 +137,7 @@ public NumberExpression dayOfWeek() { */ public NumberExpression dayOfYear() { if (dayOfYear == null) { - dayOfYear = NumberOperation.create(Integer.class, Ops.DateTimeOps.DAY_OF_YEAR, mixin); + dayOfYear = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.DAY_OF_YEAR, mixin); } return dayOfYear; } @@ -149,7 +149,7 @@ public NumberExpression dayOfYear() { */ public NumberExpression hour() { if (hours == null) { - hours = NumberOperation.create(Integer.class, Ops.DateTimeOps.HOUR, mixin); + hours = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.HOUR, mixin); } return hours; } @@ -161,7 +161,7 @@ public NumberExpression hour() { */ public DateTimeExpression max() { if (max == null) { - max = DateTimeOperation.create((Class)getType(), Ops.AggOps.MAX_AGG, mixin); + max = Expressions.dateTimeOperation((Class)getType(), Ops.AggOps.MAX_AGG, mixin); } return max; } @@ -174,7 +174,7 @@ public DateTimeExpression max() { */ public NumberExpression milliSecond() { if (milliseconds == null) { - milliseconds = NumberOperation.create(Integer.class, Ops.DateTimeOps.MILLISECOND, mixin); + milliseconds = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.MILLISECOND, mixin); } return milliseconds; } @@ -186,7 +186,7 @@ public NumberExpression milliSecond() { */ public DateTimeExpression min() { if (min == null) { - min = DateTimeOperation.create((Class)getType(), Ops.AggOps.MIN_AGG, mixin); + min = Expressions.dateTimeOperation((Class)getType(), Ops.AggOps.MIN_AGG, mixin); } return min; } @@ -198,7 +198,7 @@ public DateTimeExpression min() { */ public NumberExpression minute() { if (minutes == null) { - minutes = NumberOperation.create(Integer.class, Ops.DateTimeOps.MINUTE, mixin); + minutes = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.MINUTE, mixin); } return minutes; } @@ -210,7 +210,7 @@ public NumberExpression minute() { */ public NumberExpression month() { if (month == null) { - month = NumberOperation.create(Integer.class, Ops.DateTimeOps.MONTH, mixin); + month = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.MONTH, mixin); } return month; } @@ -222,7 +222,7 @@ public NumberExpression month() { */ public NumberExpression second() { if (seconds == null) { - seconds = NumberOperation.create(Integer.class, Ops.DateTimeOps.SECOND, mixin); + seconds = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.SECOND, mixin); } return seconds; } @@ -234,7 +234,7 @@ public NumberExpression second() { */ public NumberExpression week() { if (week == null) { - week = NumberOperation.create(Integer.class, Ops.DateTimeOps.WEEK, mixin); + week = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.WEEK, mixin); } return week; } @@ -246,7 +246,7 @@ public NumberExpression week() { */ public NumberExpression year() { if (year == null) { - year = NumberOperation.create(Integer.class, Ops.DateTimeOps.YEAR, mixin); + year = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.YEAR, mixin); } return year; } @@ -258,7 +258,7 @@ public NumberExpression year() { */ public NumberExpression yearMonth() { if (yearMonth == null) { - yearMonth = NumberOperation.create(Integer.class, Ops.DateTimeOps.YEAR_MONTH, mixin); + yearMonth = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.YEAR_MONTH, mixin); } return yearMonth; } @@ -270,7 +270,7 @@ public NumberExpression yearMonth() { */ public NumberExpression yearWeek() { if (yearWeek == null) { - yearWeek = NumberOperation.create(Integer.class, Ops.DateTimeOps.YEAR_WEEK, mixin); + yearWeek = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.YEAR_WEEK, mixin); } return yearWeek; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeOperation.java similarity index 74% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeOperation.java index 8e7448e295..73e33e6dae 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DateTimeOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -33,18 +33,6 @@ public class DateTimeOperation> extends DateTimeExpressi private static final long serialVersionUID = 6523293814317168556L; - public static > DateTimeExpression create(Class type, Operator op, Expression one) { - return new DateTimeOperation(type, op, ImmutableList.>of(one)); - } - - public static > DateTimeExpression create(Class type, Operator op, Expression one, Expression two) { - return new DateTimeOperation(type, op, ImmutableList.of(one, two)); - } - - public static > DateTimeExpression create(Class type, Operator op, Expression... args) { - return new DateTimeOperation(type, op, args); - } - private final OperationImpl opMixin; protected DateTimeOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslExpression.java similarity index 94% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/DslExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslExpression.java index 5737143974..113eab8f74 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Ops; @@ -50,7 +50,7 @@ public final Class getType() { */ @SuppressWarnings("unchecked") public DslExpression as(Path alias) { - return DslOperation.create((Class)getType(),Ops.ALIAS, mixin, alias); + return Expressions.dslOperation((Class)getType(),Ops.ALIAS, mixin, alias); } /** diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslOperation.java similarity index 76% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslOperation.java index 4469a2ff8f..6249fb731e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/DslOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -33,18 +33,6 @@ public class DslOperation extends DslExpression implements Operation { private static final long serialVersionUID = -285668548371034230L; - public static DslExpression create(Class type, Operator op, Expression one) { - return new DslOperation(type, op, ImmutableList.>of(one)); - } - - public static DslExpression create(Class type, Operator op, Expression one, Expression two) { - return new DslOperation(type, op, ImmutableList.of(one, two)); - } - - public static DslExpression create(Class type, Operator op, Expression... args) { - return new DslOperation(type, op, args); - } - private final OperationImpl opMixin; protected DslOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumExpression.java similarity index 87% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumExpression.java index d256e92a52..92913e6660 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Ops; @@ -35,7 +35,7 @@ public EnumExpression(Expression mixin) { @Override public EnumExpression as(Path alias) { - return EnumOperation.create(getType(),Ops.ALIAS, mixin, alias); + return Expressions.enumOperation((Class)getType(),Ops.ALIAS, mixin, alias); } @Override @@ -47,7 +47,7 @@ public EnumExpression as(String alias) { * @return */ public NumberExpression ordinal() { - return NumberOperation.create(Integer.class, Ops.ORDINAL, mixin); + return Expressions.numberOperation(Integer.class, Ops.ORDINAL, mixin); } } \ No newline at end of file diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumOperation.java similarity index 74% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumOperation.java index 067c606afb..2120a8db18 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/EnumOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -33,18 +33,6 @@ public class EnumOperation> extends EnumExpression implemen private static final long serialVersionUID = -3593040852095778453L; - public static > EnumExpression create(Class type, Operator op, Expression one) { - return new EnumOperation(type, op, ImmutableList.>of(one)); - } - - public static > EnumExpression create(Class type, Operator op, Expression one, Expression two) { - return new EnumOperation(type, op, ImmutableList.>of(one, two)); - } - - public static > EnumExpression create(Class type, Operator op, Expression... args) { - return new EnumOperation(type, op, args); - } - private final OperationImpl opMixin; protected EnumOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java similarity index 84% rename from querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java index e16407dad0..b4292564c4 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/Expressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java @@ -11,60 +11,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.support; +package com.querydsl.core.types.dsl; import java.sql.Time; +import java.util.Collection; import java.util.Date; import javax.annotation.Nullable; import com.querydsl.core.QueryMetadata; import com.querydsl.core.Tuple; -import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.NullExpression; -import com.querydsl.core.types.Operator; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Template; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.CaseBuilder; -import com.querydsl.core.types.expr.ComparableExpression; -import com.querydsl.core.types.expr.ComparableOperation; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.DateOperation; -import com.querydsl.core.types.expr.DateTimeExpression; -import com.querydsl.core.types.expr.DateTimeOperation; -import com.querydsl.core.types.expr.DslExpression; -import com.querydsl.core.types.expr.DslOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.StringOperation; -import com.querydsl.core.types.expr.TimeExpression; -import com.querydsl.core.types.expr.TimeOperation; -import com.querydsl.core.types.path.BooleanPath; -import com.querydsl.core.types.path.ComparablePath; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.DateTimePath; -import com.querydsl.core.types.path.DslPath; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.SimplePath; -import com.querydsl.core.types.path.StringPath; -import com.querydsl.core.types.path.TimePath; +import com.querydsl.core.types.*; +import com.querydsl.core.types.path.*; import com.querydsl.core.types.query.ExtendedSubQueryExpression; import com.querydsl.core.types.query.SimpleSubQuery; -import com.querydsl.core.types.template.BooleanTemplate; -import com.querydsl.core.types.template.ComparableTemplate; -import com.querydsl.core.types.template.DslTemplate; -import com.querydsl.core.types.template.NumberTemplate; -import com.querydsl.core.types.template.SimpleTemplate; -import com.querydsl.core.types.template.StringTemplate; +import com.querydsl.core.types.template.*; /** * Expression factory class @@ -79,7 +40,7 @@ public static SimpleExpression as(Expression source, Path alias) { if (source == null) { return as((Expression)nullExpression(), alias); } else { - return SimpleOperation.create((Class)alias.getType(), Ops.ALIAS, source, alias); + return Expressions.operation((Class) alias.getType(), Ops.ALIAS, source, alias); } } @@ -272,7 +233,7 @@ public static ExtendedSubQueryExpression subQuery(Class type, QueryMet * @return */ public static BooleanExpression predicate(Operator operation, Expression... args) { - return BooleanOperation.create(operation, args); + return new BooleanOperation(operation, args); } /** @@ -285,7 +246,7 @@ public static BooleanExpression predicate(Operator operation, Expression... a */ public static SimpleExpression operation(Class type, Operator operator, Expression... args) { - return SimpleOperation.create(type, operator, args); + return new SimpleOperation(type, operator, args); } /** @@ -298,7 +259,7 @@ public static SimpleExpression operation(Class type, Operator operator */ public static DslExpression dslOperation(Class type, Operator operator, Expression... args) { - return DslOperation.create(type, operator, args); + return new DslOperation(type, operator, args); } /** @@ -322,7 +283,7 @@ public static BooleanExpression booleanOperation(Operator operation, Expression< */ public static > ComparableExpression comparableOperation(Class type, Operator operator, Expression... args) { - return ComparableOperation.create(type, operator, args); + return new ComparableOperation(type, operator, args); } /** @@ -335,7 +296,7 @@ public static > ComparableExpression comparableOperat */ public static > DateExpression dateOperation(Class type, Operator operator, Expression... args) { - return DateOperation.create(type, operator, args); + return new DateOperation(type, operator, args); } /** @@ -348,7 +309,7 @@ public static > DateExpression dateOperation(Class */ public static > DateTimeExpression dateTimeOperation(Class type, Operator operator, Expression... args) { - return DateTimeOperation.create(type, operator, args); + return new DateTimeOperation(type, operator, args); } /** @@ -361,7 +322,7 @@ public static > DateTimeExpression dateTimeOperation( */ public static > TimeExpression timeOperation(Class type, Operator operator, Expression... args) { - return TimeOperation.create(type, operator, args); + return new TimeOperation(type, operator, args); } /** @@ -374,7 +335,7 @@ public static > TimeExpression timeOperation(Class */ public static > NumberExpression numberOperation(Class type, Operator operator, Expression... args) { - return NumberOperation.create(type, operator, args); + return new NumberOperation(type, operator, args); } /** @@ -385,7 +346,7 @@ public static > NumberExpression numberOpera * @return */ public static StringExpression stringOperation(Operator operator, Expression... args) { - return StringOperation.create(operator, args); + return new StringOperation(operator, args); } /** @@ -627,7 +588,7 @@ public static SimpleExpression list(SimpleExpression... exprs) { public static SimpleExpression list(Class clazz, SimpleExpression... exprs) { SimpleExpression rv = (SimpleExpression)exprs[0]; for (int i = 1; i < exprs.length; i++) { - rv = SimpleOperation.create(clazz, Ops.LIST, rv, exprs[i]); + rv = new SimpleOperation(clazz, Ops.LIST, rv, exprs[i]); } return rv; } @@ -664,6 +625,34 @@ public static NullExpression nullExpression(Path path) { return nullExpression(); } + /** + * Create a new Enum operation expression + * + * @param type + * @param operator + * @param args + * @param + * @return + */ + public static > EnumExpression enumOperation(Class type, Operator operator, + Expression... args) { + return new EnumOperation(type, operator, args); + } + + /** + * Create a new Collection operation expression + * + * @param elementType + * @param operator + * @param args + * @param + * @return + */ + public static CollectionExpression, T> collectionOperation(Class elementType, Operator operator, + Expression... args) { + return new CollectionOperation(elementType, operator, args); + } + private Expressions() {} } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ListExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListExpression.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/ListExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListExpression.java index 096256d0ed..aab5065bab 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/ListExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/MapExpressionBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/MapExpressionBase.java similarity index 81% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/MapExpressionBase.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/MapExpressionBase.java index 4d5d26a779..5b980f52fe 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/MapExpressionBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/MapExpressionBase.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.Map; @@ -54,19 +54,19 @@ public final BooleanExpression contains(Expression key, Expression value) } public final BooleanExpression containsKey(Expression key) { - return BooleanOperation.create(Ops.CONTAINS_KEY, mixin, key); + return Expressions.booleanOperation(Ops.CONTAINS_KEY, mixin, key); } public final BooleanExpression containsKey(K key) { - return BooleanOperation.create(Ops.CONTAINS_KEY, mixin, ConstantImpl.create(key)); + return Expressions.booleanOperation(Ops.CONTAINS_KEY, mixin, ConstantImpl.create(key)); } public final BooleanExpression containsValue(Expression value) { - return BooleanOperation.create(Ops.CONTAINS_VALUE, mixin, value); + return Expressions.booleanOperation(Ops.CONTAINS_VALUE, mixin, value); } public final BooleanExpression containsValue(V value) { - return BooleanOperation.create(Ops.CONTAINS_VALUE, mixin, ConstantImpl.create(value)); + return Expressions.booleanOperation(Ops.CONTAINS_VALUE, mixin, ConstantImpl.create(value)); } public abstract Q get(Expression key); @@ -75,7 +75,7 @@ public final BooleanExpression containsValue(V value) { public final BooleanExpression isEmpty() { if (empty == null) { - empty = BooleanOperation.create(Ops.MAP_IS_EMPTY, mixin); + empty = Expressions.booleanOperation(Ops.MAP_IS_EMPTY, mixin); } return empty; } @@ -86,7 +86,7 @@ public final BooleanExpression isNotEmpty() { public final NumberExpression size() { if (size == null) { - size = NumberOperation.create(Integer.class, Ops.MAP_SIZE, mixin); + size = Expressions.numberOperation(Integer.class, Ops.MAP_SIZE, mixin); } return size; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/MathExpressions.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/MathExpressions.java similarity index 74% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/MathExpressions.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/MathExpressions.java index 525b210832..93de7a5c9d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/MathExpressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/MathExpressions.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; @@ -31,7 +31,7 @@ public final class MathExpressions { * @return acos(num) */ public static > NumberExpression acos(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.ACOS, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.ACOS, num); } /** @@ -39,7 +39,7 @@ public static > NumberExpression acos(E * @return asin(num) */ public static > NumberExpression asin(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.ASIN, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.ASIN, num); } /** @@ -47,7 +47,7 @@ public static > NumberExpression asin(E * @return atan(num) */ public static > NumberExpression atan(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.ATAN, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.ATAN, num); } /** @@ -55,7 +55,7 @@ public static > NumberExpression atan(E * @return cos(num) */ public static > NumberExpression cos(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.COS, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.COS, num); } /** @@ -63,7 +63,7 @@ public static > NumberExpression cos(Ex * @return cosh(num) */ public static > NumberExpression cosh(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.COSH, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.COSH, num); } /** @@ -71,7 +71,7 @@ public static > NumberExpression cosh(E * @return cot(num) */ public static > NumberExpression cot(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.COT, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.COT, num); } /** @@ -79,7 +79,7 @@ public static > NumberExpression cot(Ex * @return coth(num) */ public static > NumberExpression coth(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.COTH, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.COTH, num); } /** @@ -87,7 +87,7 @@ public static > NumberExpression coth(E * @return deg(num) */ public static > NumberExpression degrees(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.DEG, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.DEG, num); } /** @@ -95,7 +95,7 @@ public static > NumberExpression degree * @return exp(num) */ public static > NumberExpression exp(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.EXP, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.EXP, num); } /** @@ -103,7 +103,7 @@ public static > NumberExpression exp(Ex * @return ln(num) */ public static > NumberExpression ln(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.LN, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.LN, num); } /** @@ -112,7 +112,7 @@ public static > NumberExpression ln(Exp * @return log(num, base) */ public static > NumberExpression log(Expression num, int base) { - return NumberOperation.create(Double.class, Ops.MathOps.LOG, num, ConstantImpl.create(base)); + return Expressions.numberOperation(Double.class, Ops.MathOps.LOG, num, ConstantImpl.create(base)); } /** @@ -139,7 +139,7 @@ public static > NumberExpression min(Express * @return power(num, exponent) */ public static > NumberExpression power(Expression num, int exponent) { - return NumberOperation.create(Double.class, Ops.MathOps.POWER, num, ConstantImpl.create(exponent)); + return Expressions.numberOperation(Double.class, Ops.MathOps.POWER, num, ConstantImpl.create(exponent)); } /** @@ -147,7 +147,7 @@ public static > NumberExpression power( * @return rad(num) */ public static > NumberExpression radians(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.RAD, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.RAD, num); } /** @@ -165,7 +165,7 @@ public static NumberExpression random() { * @return */ public static NumberExpression random(int seed) { - return NumberOperation.create(Double.class, MathOps.RANDOM2, ConstantImpl.create(seed)); + return Expressions.numberOperation(Double.class, MathOps.RANDOM2, ConstantImpl.create(seed)); } /** @@ -175,7 +175,7 @@ public static NumberExpression random(int seed) { * @return */ public static > NumberExpression round(Expression num) { - return NumberOperation.create(num.getType(), MathOps.ROUND, num); + return Expressions.numberOperation((Class) num.getType(), MathOps.ROUND, num); } /** @@ -186,7 +186,7 @@ public static > NumberExpression round(Expre * @return */ public static > NumberExpression round(Expression num, int s) { - return NumberOperation.create(num.getType(), MathOps.ROUND2, num, ConstantImpl.create(s)); + return Expressions.numberOperation((Class) num.getType(), MathOps.ROUND2, num, ConstantImpl.create(s)); } /** @@ -194,7 +194,7 @@ public static > NumberExpression round(Expre * @return sign(num) */ public static > NumberExpression sign(Expression num) { - return NumberOperation.create(Integer.class, Ops.MathOps.SIGN, num); + return Expressions.numberOperation(Integer.class, Ops.MathOps.SIGN, num); } /** @@ -202,7 +202,7 @@ public static > NumberExpression sign( * @return sin(num) */ public static > NumberExpression sin(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.SIN, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.SIN, num); } /** @@ -210,7 +210,7 @@ public static > NumberExpression sin(Ex * @return sinh(num) */ public static > NumberExpression sinh(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.SINH, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.SINH, num); } /** @@ -218,7 +218,7 @@ public static > NumberExpression sinh(E * @return tan(num) */ public static > NumberExpression tan(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.TAN, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.TAN, num); } /** @@ -226,7 +226,7 @@ public static > NumberExpression tan(Ex * @return tanh(num) */ public static > NumberExpression tanh(Expression num) { - return NumberOperation.create(Double.class, Ops.MathOps.TANH, num); + return Expressions.numberOperation(Double.class, Ops.MathOps.TANH, num); } private MathExpressions() {} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberExpression.java similarity index 83% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberExpression.java index 1027472966..fcbe796766 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.ArrayList; import java.util.List; @@ -41,7 +41,7 @@ public abstract class NumberExpression> extends private static final long serialVersionUID = -5485902768703364888L; @Nullable - private static final NumberExpression random = NumberOperation.create(Double.class, MathOps.RANDOM); + private static final NumberExpression random = Expressions.numberOperation(Double.class, MathOps.RANDOM); /** * Return the greater of the given values @@ -49,7 +49,7 @@ public abstract class NumberExpression> extends * @return max(left, right) */ public static > NumberExpression max(Expression left, Expression right) { - return NumberOperation.create(left.getType(), MathOps.MAX, left, right); + return Expressions.numberOperation((Class) left.getType(), MathOps.MAX, left, right); } /** @@ -58,7 +58,7 @@ public static > NumberExpression max(Express * @return min(left, right) */ public static > NumberExpression min(Expression left, Expression right) { - return NumberOperation.create(left.getType(), MathOps.MIN, left, right); + return Expressions.numberOperation((Class) left.getType(), MathOps.MIN, left, right); } /** @@ -84,12 +84,12 @@ public NumberExpression(Expression mixin) { @Override public NumberExpression as(Path alias) { - return NumberOperation.create(getType(),Ops.ALIAS, mixin, alias); + return Expressions.numberOperation((Class)getType(), Ops.ALIAS, mixin, alias); } @Override public NumberExpression as(String alias) { - return NumberOperation.create(getType(),Ops.ALIAS, mixin, new PathImpl(getType(), alias)); + return Expressions.numberOperation((Class)getType(), Ops.ALIAS, mixin, new PathImpl(getType(), alias)); } /** @@ -99,7 +99,7 @@ public NumberExpression as(String alias) { */ public NumberExpression abs() { if (abs == null) { - abs = NumberOperation.create(getType(), MathOps.ABS, mixin); + abs = Expressions.numberOperation((Class)getType(), MathOps.ABS, mixin); } return abs; } @@ -111,7 +111,7 @@ public NumberExpression abs() { * @return this + right */ public > NumberExpression add(Expression right) { - return NumberOperation.create(getType(), Ops.ADD, mixin, right); + return Expressions.numberOperation((Class)getType(), Ops.ADD, mixin, right); } /** @@ -121,7 +121,7 @@ public > NumberExpression add(Expression * @return this + right */ public > NumberExpression add(N right) { - return NumberOperation.create(getType(), Ops.ADD, mixin, ConstantImpl.create(right)); + return Expressions.numberOperation((Class)getType(), Ops.ADD, mixin, ConstantImpl.create(right)); } /** @@ -131,7 +131,7 @@ public > NumberExpression add(N right) { */ public NumberExpression avg() { if (avg == null) { - avg = NumberOperation.create(Double.class, Ops.AggOps.AVG_AGG, mixin); + avg = Expressions.numberOperation(Double.class, Ops.AggOps.AVG_AGG, mixin); } return avg; } @@ -156,7 +156,7 @@ public > NumberExpression castToNum( if (type.equals(getType())) { return (NumberExpression) this; } else { - return NumberOperation.create(type, Ops.NUMCAST, mixin, ConstantImpl.create(type)); + return Expressions.numberOperation(type, Ops.NUMCAST, mixin, ConstantImpl.create(type)); } } @@ -170,7 +170,7 @@ public > NumberExpression castToNum( */ public NumberExpression ceil() { if (ceil == null) { - ceil = NumberOperation.create(getType(), MathOps.CEIL, mixin); + ceil = Expressions.numberOperation((Class)getType(), MathOps.CEIL, mixin); } return ceil; } @@ -191,7 +191,7 @@ private Class getDivisionType(Class left, Class right) { */ public > NumberExpression divide(Expression right) { Class type = getDivisionType(getType(), right.getType()); - return NumberOperation.create((Class)type, Ops.DIV, mixin, right); + return Expressions.numberOperation((Class) type, Ops.DIV, mixin, right); } /** @@ -202,7 +202,7 @@ public > NumberExpression divide(Expression< */ public > NumberExpression divide(N right) { Class type = getDivisionType(getType(), right.getClass()); - return NumberOperation.create((Class)type, Ops.DIV, mixin, ConstantImpl.create(right)); + return Expressions.numberOperation((Class) type, Ops.DIV, mixin, ConstantImpl.create(right)); } /** @@ -235,7 +235,7 @@ public NumberExpression floatValue() { */ public NumberExpression floor() { if (floor == null) { - floor = NumberOperation.create(getType(), MathOps.FLOOR, mixin); + floor = Expressions.numberOperation((Class)getType(), MathOps.FLOOR, mixin); } return floor; } @@ -261,7 +261,7 @@ public final > BooleanExpression goe(A right) { * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression goe(Expression right) { - return BooleanOperation.create(Ops.GOE, mixin, right); + return Expressions.booleanOperation(Ops.GOE, mixin, right); } /** @@ -301,7 +301,7 @@ public final > BooleanExpression gt(A right) { * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression gt(Expression right) { - return BooleanOperation.create(Ops.GT, mixin, right); + return Expressions.booleanOperation(Ops.GT, mixin, right); } /** @@ -353,14 +353,14 @@ public final > BooleanExpression between(@Nulla public final > BooleanExpression between(@Nullable Expression from, @Nullable Expression to) { if (from == null) { if (to != null) { - return BooleanOperation.create(Ops.LOE, mixin, to); + return Expressions.booleanOperation(Ops.LOE, mixin, to); } else { throw new IllegalArgumentException("Either from or to needs to be non-null"); } } else if (to == null) { - return BooleanOperation.create(Ops.GOE, mixin, from); + return Expressions.booleanOperation(Ops.GOE, mixin, from); } else { - return BooleanOperation.create(Ops.BETWEEN, mixin, from, to); + return Expressions.booleanOperation(Ops.BETWEEN, mixin, from, to); } } @@ -399,7 +399,7 @@ public NumberExpression intValue() { * @return */ public BooleanExpression like(String str) { - return BooleanOperation.create(Ops.LIKE, stringValue(), ConstantImpl.create(str)); + return Expressions.booleanOperation(Ops.LIKE, stringValue(), ConstantImpl.create(str)); } /** @@ -409,7 +409,7 @@ public BooleanExpression like(String str) { * @return */ public BooleanExpression like(Expression str) { - return BooleanOperation.create(Ops.LIKE, stringValue(), str); + return Expressions.booleanOperation(Ops.LIKE, stringValue(), str); } /** @@ -433,7 +433,7 @@ public final > BooleanExpression loe(A right) { * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression loe(Expression right) { - return BooleanOperation.create(Ops.LOE, mixin, right); + return Expressions.booleanOperation(Ops.LOE, mixin, right); } /** @@ -483,7 +483,7 @@ public final > BooleanExpression lt(A right) { * @see java.lang.Comparable#compareTo(Object) */ public final > BooleanExpression lt(Expression right) { - return BooleanOperation.create(Ops.LT, this, right); + return Expressions.booleanOperation(Ops.LT, this, right); } /** @@ -510,7 +510,7 @@ public BooleanExpression ltAny(CollectionExpression right) { @SuppressWarnings("unchecked") public NumberExpression max() { if (max == null) { - max = NumberOperation.create(getType(), Ops.AggOps.MAX_AGG, mixin); + max = Expressions.numberOperation((Class)getType(), Ops.AggOps.MAX_AGG, mixin); } return max; } @@ -523,7 +523,7 @@ public NumberExpression max() { @SuppressWarnings("unchecked") public NumberExpression min() { if (min == null) { - min = NumberOperation.create(getType(), Ops.AggOps.MIN_AGG, mixin); + min = Expressions.numberOperation((Class)getType(), Ops.AggOps.MIN_AGG, mixin); } return min; } @@ -533,7 +533,7 @@ public NumberExpression min() { * @return */ public NumberExpression mod(Expression num) { - return NumberOperation.create(getType(), Ops.MOD, mixin, num); + return Expressions.numberOperation((Class)getType(), Ops.MOD, mixin, num); } /** @@ -541,7 +541,7 @@ public NumberExpression mod(Expression num) { * @return */ public NumberExpression mod(T num) { - return NumberOperation.create(getType(), Ops.MOD, mixin, ConstantImpl.create(num)); + return Expressions.numberOperation((Class)getType(), Ops.MOD, mixin, ConstantImpl.create(num)); } /** @@ -551,7 +551,7 @@ public NumberExpression mod(T num) { * @return this * right */ public > NumberExpression multiply(Expression right) { - return NumberOperation.create(getType(), Ops.MULT, mixin, right); + return Expressions.numberOperation((Class)getType(), Ops.MULT, mixin, right); } /** @@ -561,7 +561,7 @@ public > NumberExpression multiply(Expressio * @return this * right */ public > NumberExpression multiply(N right) { - return NumberOperation.create(getType(), Ops.MULT, mixin, ConstantImpl.create(right)); + return Expressions.numberOperation((Class)getType(), Ops.MULT, mixin, ConstantImpl.create(right)); } /** @@ -571,7 +571,7 @@ public > NumberExpression multiply(N right) */ public NumberExpression negate() { if (negation == null) { - negation = NumberOperation.create(getType(), Ops.NEGATE, mixin); + negation = Expressions.numberOperation((Class)getType(), Ops.NEGATE, mixin); } return negation; } @@ -585,7 +585,7 @@ public NumberExpression negate() { */ public NumberExpression round() { if (round == null) { - round = NumberOperation.create(getType(), MathOps.ROUND, mixin); + round = Expressions.numberOperation((Class)getType(), MathOps.ROUND, mixin); } return round; } @@ -607,7 +607,7 @@ public NumberExpression shortValue() { */ public NumberExpression sqrt() { if (sqrt == null) { - sqrt = NumberOperation.create(Double.class, MathOps.SQRT, mixin); + sqrt = Expressions.numberOperation(Double.class, MathOps.SQRT, mixin); } return sqrt; } @@ -619,7 +619,7 @@ public NumberExpression sqrt() { * @return this - right */ public > NumberExpression subtract(Expression right) { - return NumberOperation.create(getType(), Ops.SUB, mixin, right); + return Expressions.numberOperation((Class)getType(), Ops.SUB, mixin, right); } /** @@ -629,7 +629,7 @@ public > NumberExpression subtract(Expressio * @return this - right */ public > NumberExpression subtract(N right) { - return NumberOperation.create(getType(), Ops.SUB, mixin, ConstantImpl.create(right)); + return Expressions.numberOperation((Class)getType(), Ops.SUB, mixin, ConstantImpl.create(right)); } /** @@ -639,7 +639,7 @@ public > NumberExpression subtract(N right) */ public NumberExpression sum() { if (sum == null) { - sum = NumberOperation.create(getType(), Ops.AggOps.SUM_AGG, mixin); + sum = Expressions.numberOperation((Class)getType(), Ops.AggOps.SUM_AGG, mixin); } return sum; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberOperation.java similarity index 76% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberOperation.java index b8bc82de00..1e5882a18a 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/NumberOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -35,18 +35,6 @@ public class NumberOperation> private static final long serialVersionUID = -3593040852095778453L; - public static > NumberExpression create(Class type, Operator op, Expression one) { - return new NumberOperation(type, op, ImmutableList.>of(one)); - } - - public static > NumberExpression create(Class type, Operator op, Expression one, Expression two) { - return new NumberOperation(type, op, ImmutableList.of(one, two)); - } - - public static > NumberExpression create(Class type, Operator op, Expression... args) { - return new NumberOperation(type, op, args); - } - private final OperationImpl opMixin; protected NumberOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Param.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Param.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/Param.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/Param.java index 9b09e9472c..1464f20427 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/Param.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Param.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.ParamExpression; import com.querydsl.core.types.ParamExpressionImpl; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleExpression.java similarity index 85% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleExpression.java index bac8c3d639..46d240dae7 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.Collection; @@ -59,7 +59,7 @@ public SimpleExpression(Expression mixin) { @Override @SuppressWarnings("unchecked") public SimpleExpression as(Path alias) { - return SimpleOperation.create((Class)getType(),Ops.ALIAS, mixin, alias); + return Expressions.operation((Class)getType(),Ops.ALIAS, mixin, alias); } /** @@ -79,7 +79,7 @@ public SimpleExpression as(String alias) { */ public BooleanExpression isNotNull() { if (isnotnull == null) { - isnotnull = BooleanOperation.create(Ops.IS_NOT_NULL, mixin); + isnotnull = Expressions.booleanOperation(Ops.IS_NOT_NULL, mixin); } return isnotnull; } @@ -91,7 +91,7 @@ public BooleanExpression isNotNull() { */ public BooleanExpression isNull() { if (isnull == null) { - isnull = BooleanOperation.create(Ops.IS_NULL, mixin); + isnull = Expressions.booleanOperation(Ops.IS_NULL, mixin); } return isnull; } @@ -103,7 +103,7 @@ public BooleanExpression isNull() { */ public NumberExpression count() { if (count == null) { - count = NumberOperation.create(Long.class, Ops.AggOps.COUNT_AGG, mixin); + count = Expressions.numberOperation(Long.class, Ops.AggOps.COUNT_AGG, mixin); } return count; } @@ -116,7 +116,7 @@ public NumberExpression count() { */ public NumberExpression countDistinct() { if (countDistinct == null) { - countDistinct = NumberOperation.create(Long.class, Ops.AggOps.COUNT_DISTINCT_AGG, mixin); + countDistinct = Expressions.numberOperation(Long.class, Ops.AggOps.COUNT_DISTINCT_AGG, mixin); } return countDistinct; } @@ -144,7 +144,7 @@ public BooleanExpression eq(T right) { * @return */ public BooleanExpression eq(Expression right) { - return BooleanOperation.create(Ops.EQ, mixin, right); + return Expressions.booleanOperation(Ops.EQ, mixin, right); } /** @@ -173,7 +173,7 @@ public BooleanExpression in(Collection right) { if (right.size() == 1) { return eq(right.iterator().next()); } else { - return BooleanOperation.create(Ops.IN, mixin, ConstantImpl.create(right)); + return Expressions.booleanOperation(Ops.IN, mixin, ConstantImpl.create(right)); } } @@ -187,7 +187,7 @@ public BooleanExpression in(T... right) { if (right.length == 1) { return eq(right[0]); } else { - return BooleanOperation.create(Ops.IN, mixin, ConstantImpl.create(ImmutableList.copyOf(right))); + return Expressions.booleanOperation(Ops.IN, mixin, ConstantImpl.create(ImmutableList.copyOf(right))); } } @@ -199,7 +199,7 @@ public BooleanExpression in(T... right) { * @return */ public BooleanExpression in(CollectionExpression right) { - return BooleanOperation.create(Ops.IN, mixin, right); + return Expressions.booleanOperation(Ops.IN, mixin, right); } /** @@ -223,7 +223,7 @@ public BooleanExpression ne(T right) { * @return */ public BooleanExpression ne(Expression right) { - return BooleanOperation.create(Ops.NE, mixin, right); + return Expressions.booleanOperation(Ops.NE, mixin, right); } /** @@ -252,7 +252,7 @@ public BooleanExpression notIn(Collection right) { if (right.size() == 1) { return ne(right.iterator().next()); } else { - return BooleanOperation.create(Ops.NOT_IN, mixin, ConstantImpl.create(right)); + return Expressions.booleanOperation(Ops.NOT_IN, mixin, ConstantImpl.create(right)); } } @@ -266,7 +266,7 @@ public BooleanExpression notIn(T... right) { if (right.length == 1) { return ne(right[0]); } else { - return BooleanOperation.create(Ops.NOT_IN, mixin, ConstantImpl.create(ImmutableList.copyOf(right))); + return Expressions.booleanOperation(Ops.NOT_IN, mixin, ConstantImpl.create(ImmutableList.copyOf(right))); } } @@ -277,7 +277,7 @@ public BooleanExpression notIn(T... right) { * @return */ public final BooleanExpression notIn(CollectionExpression right) { - return BooleanOperation.create(Ops.NOT_IN, mixin, right); + return Expressions.booleanOperation(Ops.NOT_IN, mixin, right); } @@ -289,7 +289,7 @@ public final BooleanExpression notIn(CollectionExpression right) */ @SuppressWarnings("unchecked") public SimpleExpression nullif(Expression other) { - return SimpleOperation.create((Class)this.getType(), Ops.NULLIF, this, other); + return Expressions.operation((Class)this.getType(), Ops.NULLIF, this, other); } /** diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleOperation.java similarity index 76% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleOperation.java index 8873ab30c7..c94f685712 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/SimpleOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -33,18 +33,6 @@ public class SimpleOperation extends SimpleExpression implements Operation private static final long serialVersionUID = -285668548371034230L; - public static SimpleExpression create(Class type, Operator op, Expression one) { - return new SimpleOperation(type, op, ImmutableList.>of(one)); - } - - public static SimpleExpression create(Class type, Operator op, Expression one, Expression two) { - return new SimpleOperation(type, op, ImmutableList.of(one, two)); - } - - public static SimpleExpression create(Class type, Operator op, Expression... args) { - return new SimpleOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected SimpleOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringExpression.java similarity index 83% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringExpression.java index 39c948266b..300db0a2a7 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -49,7 +49,7 @@ public StringExpression(Expression mixin) { @Override public StringExpression as(Path alias) { - return StringOperation.create(Ops.ALIAS, mixin, alias); + return Expressions.stringOperation(Ops.ALIAS, mixin, alias); } @Override @@ -64,7 +64,7 @@ public StringExpression as(String alias) { * @return this + str */ public StringExpression append(Expression str) { - return StringOperation.create(Ops.CONCAT, mixin, str); + return Expressions.stringOperation(Ops.CONCAT, mixin, str); } /** @@ -85,7 +85,7 @@ public StringExpression append(String str) { * @see java.lang.String#charAt(int) */ public SimpleExpression charAt(Expression i) { - return ComparableOperation.create(Character.class, Ops.CHAR_AT, mixin, i); + return Expressions.comparableOperation(Character.class, Ops.CHAR_AT, mixin, i); } /** @@ -127,7 +127,7 @@ public StringExpression concat(String str) { * @see java.lang.String#contains(CharSequence) */ public BooleanExpression contains(Expression str) { - return BooleanOperation.create(Ops.STRING_CONTAINS, mixin, str); + return Expressions.booleanOperation(Ops.STRING_CONTAINS, mixin, str); } /** @@ -146,7 +146,7 @@ public BooleanExpression contains(String str) { * @return */ public BooleanExpression containsIgnoreCase(Expression str) { - return BooleanOperation.create(Ops.STRING_CONTAINS_IC, mixin, str); + return Expressions.booleanOperation(Ops.STRING_CONTAINS_IC, mixin, str); } /** @@ -165,7 +165,7 @@ public BooleanExpression containsIgnoreCase(String str) { * @see java.lang.String#endsWith(String) */ public BooleanExpression endsWith(Expression str) { - return BooleanOperation.create(Ops.ENDS_WITH, mixin, str); + return Expressions.booleanOperation(Ops.ENDS_WITH, mixin, str); } /** @@ -173,7 +173,7 @@ public BooleanExpression endsWith(Expression str) { * @return */ public BooleanExpression endsWithIgnoreCase(Expression str) { - return BooleanOperation.create(Ops.ENDS_WITH_IC, mixin, str); + return Expressions.booleanOperation(Ops.ENDS_WITH_IC, mixin, str); } /** @@ -204,7 +204,7 @@ public BooleanExpression endsWithIgnoreCase(String str) { * @see java.lang.String#equalsIgnoreCase(String) */ public BooleanExpression equalsIgnoreCase(Expression str) { - return BooleanOperation.create(Ops.EQ_IGNORE_CASE, mixin, str); + return Expressions.booleanOperation(Ops.EQ_IGNORE_CASE, mixin, str); } /** @@ -227,7 +227,7 @@ public BooleanExpression equalsIgnoreCase(String str) { * @see java.lang.String#indexOf(String) */ public NumberExpression indexOf(Expression str) { - return NumberOperation.create(Integer.class, Ops.INDEX_OF, mixin, str); + return Expressions.numberOperation(Integer.class, Ops.INDEX_OF, mixin, str); } /** @@ -261,7 +261,7 @@ public NumberExpression indexOf(String str, int i) { * @return */ public NumberExpression indexOf(Expression str, int i) { - return NumberOperation.create(Integer.class, Ops.INDEX_OF_2ARGS, mixin, str, ConstantImpl.create(i)); + return Expressions.numberOperation(Integer.class, Ops.INDEX_OF_2ARGS, mixin, str, ConstantImpl.create(i)); } /** @@ -272,7 +272,7 @@ public NumberExpression indexOf(Expression str, int i) { */ public BooleanExpression isEmpty() { if (isempty == null) { - isempty = BooleanOperation.create(Ops.STRING_IS_EMPTY, mixin); + isempty = Expressions.booleanOperation(Ops.STRING_IS_EMPTY, mixin); } return isempty; } @@ -295,7 +295,7 @@ public BooleanExpression isNotEmpty() { */ public NumberExpression length() { if (length == null) { - length = NumberOperation.create(Integer.class, Ops.STRING_LENGTH, mixin); + length = Expressions.numberOperation(Integer.class, Ops.STRING_LENGTH, mixin); } return length; } @@ -307,7 +307,7 @@ public NumberExpression length() { * @return */ public BooleanExpression like(String str) { - return BooleanOperation.create(Ops.LIKE, this, ConstantImpl.create(str)); + return Expressions.booleanOperation(Ops.LIKE, this, ConstantImpl.create(str)); } /** @@ -317,7 +317,7 @@ public BooleanExpression like(String str) { * @return */ public BooleanExpression like(Expression str) { - return BooleanOperation.create(Ops.LIKE, mixin, str); + return Expressions.booleanOperation(Ops.LIKE, mixin, str); } /** @@ -327,7 +327,7 @@ public BooleanExpression like(Expression str) { * @return */ public BooleanExpression like(String str, char escape) { - return BooleanOperation.create(Ops.LIKE_ESCAPE, mixin, ConstantImpl.create(str), ConstantImpl.create(escape)); + return Expressions.booleanOperation(Ops.LIKE_ESCAPE, mixin, ConstantImpl.create(str), ConstantImpl.create(escape)); } /** @@ -337,7 +337,7 @@ public BooleanExpression like(String str, char escape) { * @return */ public BooleanExpression like(Expression str, char escape) { - return BooleanOperation.create(Ops.LIKE_ESCAPE, mixin, str, ConstantImpl.create(escape)); + return Expressions.booleanOperation(Ops.LIKE_ESCAPE, mixin, str, ConstantImpl.create(escape)); } /** @@ -347,7 +347,7 @@ public BooleanExpression like(Expression str, char escape) { * @return locate(str, this) */ public NumberExpression locate(Expression str) { - return NumberOperation.create(Integer.class, Ops.StringOps.LOCATE, str, mixin); + return Expressions.numberOperation(Integer.class, Ops.StringOps.LOCATE, str, mixin); } /** @@ -357,7 +357,7 @@ public NumberExpression locate(Expression str) { * @return locate(str, this) */ public NumberExpression locate(String str) { - return NumberOperation.create(Integer.class, Ops.StringOps.LOCATE, ConstantImpl.create(str), mixin); + return Expressions.numberOperation(Integer.class, Ops.StringOps.LOCATE, ConstantImpl.create(str), mixin); } /** @@ -367,7 +367,7 @@ public NumberExpression locate(String str) { * @return locate(str, this, start) */ public NumberExpression locate(Expression str, NumberExpression start) { - return NumberOperation.create(Integer.class, Ops.StringOps.LOCATE2, str, mixin, start); + return Expressions.numberOperation(Integer.class, Ops.StringOps.LOCATE2, str, mixin, start); } /** @@ -377,7 +377,7 @@ public NumberExpression locate(Expression str, NumberExpression * @return locate(str, this, start) */ public NumberExpression locate(String str, int start) { - return NumberOperation.create(Integer.class, Ops.StringOps.LOCATE2, ConstantImpl.create(str), mixin, ConstantImpl.create(start)); + return Expressions.numberOperation(Integer.class, Ops.StringOps.LOCATE2, ConstantImpl.create(str), mixin, ConstantImpl.create(start)); } /** @@ -388,7 +388,7 @@ public NumberExpression locate(String str, int start) { */ public StringExpression lower() { if (lower == null) { - lower = StringOperation.create(Ops.LOWER, mixin); + lower = Expressions.stringOperation(Ops.LOWER, mixin); } return lower; } @@ -404,7 +404,7 @@ public StringExpression lower() { * @see java.lang.String#matches(String) */ public BooleanExpression matches(Expression regex) { - return BooleanOperation.create(Ops.MATCHES, mixin, regex); + return Expressions.booleanOperation(Ops.MATCHES, mixin, regex); } /** @@ -428,7 +428,7 @@ public BooleanExpression matches(String regex) { */ public StringExpression max() { if (max == null) { - max = StringOperation.create(Ops.AggOps.MAX_AGG, mixin); + max = Expressions.stringOperation(Ops.AggOps.MAX_AGG, mixin); } return max; } @@ -440,7 +440,7 @@ public StringExpression max() { */ public StringExpression min() { if (min == null) { - min = StringOperation.create(Ops.AggOps.MIN_AGG, mixin); + min = Expressions.stringOperation(Ops.AggOps.MIN_AGG, mixin); } return min; } @@ -517,7 +517,7 @@ public BooleanExpression notLike(Expression str, char escape) { * @return str + this */ public StringExpression prepend(Expression str) { - return StringOperation.create(Ops.CONCAT, str, mixin); + return Expressions.stringOperation(Ops.CONCAT, str, mixin); } /** @@ -538,7 +538,7 @@ public StringExpression prepend(String str) { * @see java.lang.String#startsWith(String) */ public BooleanExpression startsWith(Expression str) { - return BooleanOperation.create(Ops.STARTS_WITH, mixin, str); + return Expressions.booleanOperation(Ops.STARTS_WITH, mixin, str); } /** @@ -546,7 +546,7 @@ public BooleanExpression startsWith(Expression str) { * @return */ public BooleanExpression startsWithIgnoreCase(Expression str) { - return BooleanOperation.create(Ops.STARTS_WITH_IC, mixin, str); + return Expressions.booleanOperation(Ops.STARTS_WITH_IC, mixin, str); } /** @@ -581,7 +581,7 @@ public StringExpression stringValue() { * @see java.lang.String#substring(int) */ public StringExpression substring(int beginIndex) { - return StringOperation.create(Ops.SUBSTR_1ARG, mixin, ConstantImpl.create(beginIndex)); + return Expressions.stringOperation(Ops.SUBSTR_1ARG, mixin, ConstantImpl.create(beginIndex)); } /** @@ -593,7 +593,7 @@ public StringExpression substring(int beginIndex) { * @see java.lang.String#substring(int, int) */ public StringExpression substring(int beginIndex, int endIndex) { - return StringOperation.create(Ops.SUBSTR_2ARGS, mixin, ConstantImpl.create(beginIndex), ConstantImpl.create(endIndex)); + return Expressions.stringOperation(Ops.SUBSTR_2ARGS, mixin, ConstantImpl.create(beginIndex), ConstantImpl.create(endIndex)); } /** @@ -605,7 +605,7 @@ public StringExpression substring(int beginIndex, int endIndex) { * @see java.lang.String#substring(int, int) */ public StringExpression substring(Expression beginIndex, int endIndex) { - return StringOperation.create(Ops.SUBSTR_2ARGS, mixin, beginIndex, ConstantImpl.create(endIndex)); + return Expressions.stringOperation(Ops.SUBSTR_2ARGS, mixin, beginIndex, ConstantImpl.create(endIndex)); } /** @@ -617,7 +617,7 @@ public StringExpression substring(Expression beginIndex, int endIndex) * @see java.lang.String#substring(int, int) */ public StringExpression substring(int beginIndex, Expression endIndex) { - return StringOperation.create(Ops.SUBSTR_2ARGS, mixin, ConstantImpl.create(beginIndex), endIndex); + return Expressions.stringOperation(Ops.SUBSTR_2ARGS, mixin, ConstantImpl.create(beginIndex), endIndex); } /** @@ -628,7 +628,7 @@ public StringExpression substring(int beginIndex, Expression endIndex) * @see java.lang.String#substring(int) */ public StringExpression substring(Expression beginIndex) { - return StringOperation.create(Ops.SUBSTR_1ARG, mixin, beginIndex); + return Expressions.stringOperation(Ops.SUBSTR_1ARG, mixin, beginIndex); } /** @@ -640,7 +640,7 @@ public StringExpression substring(Expression beginIndex) { * @see java.lang.String#substring(int, int) */ public StringExpression substring(Expression beginIndex, Expression endIndex) { - return StringOperation.create(Ops.SUBSTR_2ARGS, mixin, beginIndex, endIndex); + return Expressions.stringOperation(Ops.SUBSTR_2ARGS, mixin, beginIndex, endIndex); } /** @@ -672,7 +672,7 @@ public StringExpression toUpperCase() { */ public StringExpression trim() { if (trim == null) { - trim = StringOperation.create(Ops.TRIM, mixin); + trim = Expressions.stringOperation(Ops.TRIM, mixin); } return trim; } @@ -685,7 +685,7 @@ public StringExpression trim() { */ public StringExpression upper() { if (upper == null) { - upper = StringOperation.create(Ops.UPPER, mixin); + upper = Expressions.stringOperation(Ops.UPPER, mixin); } return upper; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpressions.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringExpressions.java similarity index 72% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpressions.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringExpressions.java index d28a508846..4912eeb7bd 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringExpressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringExpressions.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; @@ -30,7 +30,7 @@ public final class StringExpressions { * @return ltrim(str) */ public static StringExpression ltrim(Expression str) { - return StringOperation.create(Ops.StringOps.LTRIM, str); + return Expressions.stringOperation(Ops.StringOps.LTRIM, str); } /** @@ -38,7 +38,7 @@ public static StringExpression ltrim(Expression str) { * @return rtrim(str) */ public static StringExpression rtrim(Expression str) { - return StringOperation.create(Ops.StringOps.RTRIM, str); + return Expressions.stringOperation(Ops.StringOps.RTRIM, str); } /** @@ -47,7 +47,7 @@ public static StringExpression rtrim(Expression str) { * @return */ public static StringExpression lpad(Expression in, int length) { - return StringOperation.create(Ops.StringOps.LPAD, in, ConstantImpl.create(length)); + return Expressions.stringOperation(Ops.StringOps.LPAD, in, ConstantImpl.create(length)); } /** @@ -56,7 +56,7 @@ public static StringExpression lpad(Expression in, int length) { * @return */ public static StringExpression lpad(Expression in, Expression length) { - return StringOperation.create(Ops.StringOps.LPAD, in, length); + return Expressions.stringOperation(Ops.StringOps.LPAD, in, length); } /** @@ -65,7 +65,7 @@ public static StringExpression lpad(Expression in, Expression l * @return */ public static StringExpression rpad(Expression in, int length) { - return StringOperation.create(Ops.StringOps.RPAD, in, ConstantImpl.create(length)); + return Expressions.stringOperation(Ops.StringOps.RPAD, in, ConstantImpl.create(length)); } /** @@ -74,7 +74,7 @@ public static StringExpression rpad(Expression in, int length) { * @return */ public static StringExpression rpad(Expression in, Expression length) { - return StringOperation.create(Ops.StringOps.RPAD, in, length); + return Expressions.stringOperation(Ops.StringOps.RPAD, in, length); } /** @@ -84,7 +84,7 @@ public static StringExpression rpad(Expression in, Expression l * @return */ public static StringExpression lpad(Expression in, NumberExpression length, char c) { - return StringOperation.create(Ops.StringOps.LPAD2, in, length, ConstantImpl.create(c)); + return Expressions.stringOperation(Ops.StringOps.LPAD2, in, length, ConstantImpl.create(c)); } /** @@ -94,7 +94,7 @@ public static StringExpression lpad(Expression in, NumberExpression in, int length, char c) { - return StringOperation.create(Ops.StringOps.LPAD2, in, ConstantImpl.create(length), ConstantImpl.create(c)); + return Expressions.stringOperation(Ops.StringOps.LPAD2, in, ConstantImpl.create(length), ConstantImpl.create(c)); } /** @@ -104,7 +104,7 @@ public static StringExpression lpad(Expression in, int length, char c) { * @return */ public static StringExpression rpad(Expression in, NumberExpression length, char c) { - return StringOperation.create(Ops.StringOps.RPAD2, in, length, ConstantImpl.create(c)); + return Expressions.stringOperation(Ops.StringOps.RPAD2, in, length, ConstantImpl.create(c)); } /** @@ -114,7 +114,7 @@ public static StringExpression rpad(Expression in, NumberExpression in, int length, char c) { - return StringOperation.create(Ops.StringOps.RPAD2, in, ConstantImpl.create(length), ConstantImpl.create(c)); + return Expressions.stringOperation(Ops.StringOps.RPAD2, in, ConstantImpl.create(length), ConstantImpl.create(c)); } private StringExpressions() {} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringOperation.java similarity index 79% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringOperation.java index 456daeba63..77698b6157 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/StringOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringOperation.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.util.List; @@ -32,18 +32,6 @@ public class StringOperation extends StringExpression implements Operation one) { - return new StringOperation(op, ImmutableList.>of(one)); - } - - public static StringExpression create(Operator op, Expression one, Expression two) { - return new StringOperation(op, ImmutableList.of(one, two)); - } - - public static StringExpression create(Operator op, Expression... args) { - return new StringOperation(op, args); - } - private final OperationImpl opMixin; protected StringOperation(Operator op, Expression... args) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/TemporalExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TemporalExpression.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/TemporalExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/TemporalExpression.java index de6ac29b98..359c741d5f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/TemporalExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TemporalExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.Expression; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeExpression.java similarity index 82% rename from querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeExpression.java index 4e533e5a9f..8de90f31f3 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/expr/TimeExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.expr; +package com.querydsl.core.types.dsl; import java.sql.Time; @@ -45,7 +45,7 @@ public TimeExpression(Expression mixin) { @Override public TimeExpression as(Path alias) { - return TimeOperation.create((Class)getType(),Ops.ALIAS, mixin, alias); + return Expressions.timeOperation((Class)getType(),Ops.ALIAS, mixin, alias); } @Override @@ -60,7 +60,7 @@ public TimeExpression as(String alias) { */ public NumberExpression hour() { if (hours == null) { - hours = NumberOperation.create(Integer.class, Ops.DateTimeOps.HOUR, mixin); + hours = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.HOUR, mixin); } return hours; } @@ -72,7 +72,7 @@ public NumberExpression hour() { */ public NumberExpression minute() { if (minutes == null) { - minutes = NumberOperation.create(Integer.class, Ops.DateTimeOps.MINUTE, mixin); + minutes = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.MINUTE, mixin); } return minutes; } @@ -84,7 +84,7 @@ public NumberExpression minute() { */ public NumberExpression second() { if (seconds == null) { - seconds = NumberOperation.create(Integer.class, Ops.DateTimeOps.SECOND, mixin); + seconds = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.SECOND, mixin); } return seconds; } @@ -97,7 +97,7 @@ public NumberExpression second() { */ public NumberExpression milliSecond() { if (milliseconds == null) { - milliseconds = NumberOperation.create(Integer.class, Ops.DateTimeOps.MILLISECOND, mixin); + milliseconds = Expressions.numberOperation(Integer.class, Ops.DateTimeOps.MILLISECOND, mixin); } return milliseconds; } @@ -117,7 +117,7 @@ public static TimeExpression> ComparableExpression avg(CollectionExpression col) { - return ComparableOperation.create((Class)col.getParameter(0), Ops.QuantOps.AVG_IN_COL, (Expression)col); + return Expressions.comparableOperation((Class) col.getParameter(0), Ops.QuantOps.AVG_IN_COL, (Expression) col); } /** @@ -48,7 +47,7 @@ public static > ComparableExpression avg(Coll * @return */ public static > ComparableExpression max(CollectionExpression left) { - return ComparableOperation.create((Class)left.getParameter(0), Ops.QuantOps.MAX_IN_COL, (Expression)left); + return Expressions.comparableOperation((Class) left.getParameter(0), Ops.QuantOps.MAX_IN_COL, (Expression) left); } /** @@ -58,7 +57,7 @@ public static > ComparableExpression max(Coll * @return */ public static > ComparableExpression min(CollectionExpression left) { - return ComparableOperation.create((Class)left.getParameter(0), Ops.QuantOps.MIN_IN_COL, (Expression)left); + return Expressions.comparableOperation((Class) left.getParameter(0), Ops.QuantOps.MIN_IN_COL, (Expression) left); } /** @@ -68,7 +67,7 @@ public static > ComparableExpression min(Coll * @return */ public static StringExpression type(EntityPath path) { - return StringOperation.create(JPQLOps.TYPE, path); + return Expressions.stringOperation(JPQLOps.TYPE, path); } private JPAExpressions() {} diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java index dca8ef52d1..715233021e 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAListAccessVisitor.java @@ -7,7 +7,7 @@ import com.google.common.collect.Maps; import com.querydsl.core.JoinType; import com.querydsl.core.QueryMetadata; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.support.ReplaceVisitor; import com.querydsl.core.types.*; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java index 5150d2ec32..b3083a2ab6 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/JPAMapAccessVisitor.java @@ -7,7 +7,7 @@ import com.google.common.collect.Maps; import com.querydsl.core.JoinType; import com.querydsl.core.QueryMetadata; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.support.ReplaceVisitor; import com.querydsl.core.types.*; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java index 9500529252..51ff14e59b 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUpdateClause.java @@ -25,7 +25,7 @@ import com.google.common.collect.Maps; import com.querydsl.core.JoinType; import com.querydsl.core.dml.UpdateClause; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.*; import com.querydsl.jpa.HQLTemplates; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUtil.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUtil.java index 761e927b0d..e85988feff 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUtil.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/hibernate/HibernateUtil.java @@ -32,7 +32,7 @@ import com.querydsl.core.types.ParamExpression; import com.querydsl.core.types.ParamNotSetException; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; /** * HibernateUtil provides static utility methods for Hibernate diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java index 1a29a90d5f..7fcde9f3fd 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUpdateClause.java @@ -24,7 +24,7 @@ import com.google.common.collect.Maps; import com.querydsl.core.JoinType; import com.querydsl.core.dml.UpdateClause; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.*; import com.querydsl.jpa.JPAQueryMixin; diff --git a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUtil.java b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUtil.java index 981428231f..bc6f705f35 100644 --- a/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUtil.java +++ b/querydsl-jpa/src/main/java/com/querydsl/jpa/impl/JPAUtil.java @@ -19,7 +19,7 @@ import com.querydsl.core.types.ParamExpression; import com.querydsl.core.types.ParamNotSetException; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; import com.querydsl.core.util.MathUtils; /** diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java index 2700f51b89..51bc30888b 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractJPATest.java @@ -38,9 +38,9 @@ import com.querydsl.jpa.domain4.QBookMark; import com.querydsl.jpa.domain4.QBookVersion; import com.querydsl.jpa.hibernate.HibernateSubQuery; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.*; +import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.path.*; import com.querydsl.core.types.template.NumberTemplate; import com.querydsl.core.testutil.ExcludeIn; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java index 78fc56b57a..cc0e86ef94 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/AbstractSQLTest.java @@ -18,8 +18,8 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.Projections; import com.querydsl.core.types.SubQueryExpression; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.jpa.domain.Cat; import com.querydsl.jpa.domain.Color; import com.querydsl.jpa.domain.QCat; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/CastTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/CastTest.java index e6c7208720..aac7aa365f 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/CastTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/CastTest.java @@ -17,7 +17,7 @@ import org.junit.Test; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.NumberPath; public class CastTest extends AbstractQueryTest { diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/DateTimeTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/DateTimeTest.java index 031395a771..1e1bd6d93b 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/DateTimeTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/DateTimeTest.java @@ -17,9 +17,9 @@ import org.junit.Test; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.DateTimeExpression; -import com.querydsl.core.types.expr.TimeExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.DateTimeExpression; +import com.querydsl.core.types.dsl.TimeExpression; import com.querydsl.core.types.path.DatePath; import com.querydsl.core.types.path.DateTimePath; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java index 8b3ae67ac4..0d5330fa94 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPABase.java @@ -36,7 +36,7 @@ import com.querydsl.core.testutil.ExcludeIn; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.domain.*; import com.querydsl.jpa.impl.JPADeleteClause; import com.querydsl.jpa.impl.JPAQuery; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java index d97f59e95a..0fdeed97e2 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPAQueryMutability2Test.java @@ -13,7 +13,7 @@ */ package com.querydsl.jpa; -import static com.querydsl.core.support.Expressions.numberOperation; +import static com.querydsl.core.types.dsl.Expressions.numberOperation; import static org.junit.Assert.assertEquals; import javax.persistence.EntityManager; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java index 71efdf2e49..35f2c150be 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java @@ -23,7 +23,7 @@ import com.querydsl.core.JoinType; import com.querydsl.core.QueryMetadata; import com.querydsl.core.domain.QCat; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java index 7a01d1f38f..3cdd3d5ace 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/ParsingTest.java @@ -22,9 +22,9 @@ import org.junit.Test; import com.querydsl.jpa.domain.*; -import com.querydsl.core.types.expr.ComparableExpression; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.ComparableExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.testutil.ExcludeIn; import antlr.RecognitionException; diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/QProjection.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/QProjection.java index 4fe7c16826..66e40b5fc1 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/QProjection.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/QProjection.java @@ -4,7 +4,7 @@ import com.querydsl.jpa.domain.QCat; import com.querydsl.core.types.ConstructorExpression; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.StringExpression; +import com.querydsl.core.types.dsl.StringExpression; public class QProjection extends ConstructorExpression{ diff --git a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java index e680375602..26ef6ff29c 100644 --- a/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java +++ b/querydsl-jpa/src/test/java/com/querydsl/jpa/StringOperationsTest.java @@ -16,12 +16,12 @@ import org.junit.Test; import com.querydsl.core.domain.QCat; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberOperation; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.NumberOperation; +import com.querydsl.core.types.dsl.StringOperation; import com.querydsl.core.types.path.StringPath; public class StringOperationsTest extends AbstractQueryTest{ @@ -47,8 +47,8 @@ public void StringOperationsInFunctionalWay() { public void IndexOf() { Path path = QCat.cat.name; Expression startIndex = Expressions.constant(0); - Expression endIndex = NumberOperation.create(Integer.class, Ops.INDEX_OF, path, Expressions.constant("x")); - Expression substr = StringOperation.create(Ops.SUBSTR_2ARGS, path, startIndex, endIndex); + Expression endIndex = Expressions.numberOperation(Integer.class, Ops.INDEX_OF, path, Expressions.constant("x")); + Expression substr = Expressions.stringOperation(Ops.SUBSTR_2ARGS, path, startIndex, endIndex); assertToString("substring(cat.name,1,(locate(?1,cat.name)-1)-0)", substr); } diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneExpressions.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneExpressions.java index b1a0f6635f..8b5100fadb 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneExpressions.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/LuceneExpressions.java @@ -17,7 +17,7 @@ import org.apache.lucene.search.FuzzyQuery; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; /** * Utility methods to create filter expressions for Lucene queries that are not covered by the diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/PhraseElement.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/PhraseElement.java index 1f1ae8057e..412644342d 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/PhraseElement.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/PhraseElement.java @@ -14,7 +14,7 @@ package com.querydsl.lucene3; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.StringOperation; /** * PhraseElement represents the embedded String as a phrase diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/QueryElement.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/QueryElement.java index 531111eed3..993d528556 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/QueryElement.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/QueryElement.java @@ -16,7 +16,7 @@ import org.apache.lucene.search.Query; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.BooleanOperation; +import com.querydsl.core.types.dsl.BooleanOperation; /** * QueryElement wraps a Lucene Query diff --git a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/TermElement.java b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/TermElement.java index a86f502030..d2df89da61 100644 --- a/querydsl-lucene3/src/main/java/com/querydsl/lucene3/TermElement.java +++ b/querydsl-lucene3/src/main/java/com/querydsl/lucene3/TermElement.java @@ -14,7 +14,7 @@ package com.querydsl.lucene3; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.StringOperation; /** * TermElement represents the embedded String as a term diff --git a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java index 87726c1e2a..7a45328b1c 100644 --- a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java +++ b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneQueryTest.java @@ -55,7 +55,7 @@ import com.querydsl.core.QueryModifiers; import com.querydsl.core.SearchResults; import com.querydsl.core.types.ParamNotSetException; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; diff --git a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java index 747092643a..15a6b27f07 100644 --- a/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java +++ b/querydsl-lucene3/src/test/java/com/querydsl/lucene3/LuceneSerializerTest.java @@ -41,7 +41,7 @@ import com.querydsl.core.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.path.CollectionPath; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.PathBuilder; diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneExpressions.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneExpressions.java index 40ed821516..462e9c2b27 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneExpressions.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/LuceneExpressions.java @@ -17,7 +17,7 @@ import org.apache.lucene.search.FuzzyQuery; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; /** * Utility methods to create filter expressions for Lucene queries that are not covered by the diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/PhraseElement.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/PhraseElement.java index f6d8993fd3..3b10569016 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/PhraseElement.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/PhraseElement.java @@ -14,7 +14,7 @@ package com.querydsl.lucene4; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.StringOperation; /** * PhraseElement represents the embedded String as a phrase diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/QueryElement.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/QueryElement.java index 3a574aa75a..2f43f9df3d 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/QueryElement.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/QueryElement.java @@ -16,7 +16,7 @@ import org.apache.lucene.search.Query; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.BooleanOperation; +import com.querydsl.core.types.dsl.BooleanOperation; /** * QueryElement wraps a Lucene Query diff --git a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/TermElement.java b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/TermElement.java index 2999fb9239..73b5f73cb8 100644 --- a/querydsl-lucene4/src/main/java/com/querydsl/lucene4/TermElement.java +++ b/querydsl-lucene4/src/main/java/com/querydsl/lucene4/TermElement.java @@ -14,7 +14,7 @@ package com.querydsl.lucene4; import com.querydsl.core.types.ConstantImpl; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.StringOperation; /** * TermElement represents the embedded String as a term diff --git a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java index 0f4769946c..e523cf8be7 100644 --- a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java +++ b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneQueryTest.java @@ -57,7 +57,7 @@ import com.querydsl.core.QueryModifiers; import com.querydsl.core.SearchResults; import com.querydsl.core.types.ParamNotSetException; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; diff --git a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java index 0dd1a2f7a3..4b94ef3319 100644 --- a/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java +++ b/querydsl-lucene4/src/test/java/com/querydsl/lucene4/LuceneSerializerTest.java @@ -38,7 +38,7 @@ import com.querydsl.core.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.path.CollectionPath; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.PathBuilder; diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java index bc3581a310..34beedb769 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/MongodbExpressions.java @@ -15,8 +15,8 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; /** * Mongodb specific operations @@ -37,7 +37,7 @@ private MongodbExpressions() {} * @return */ public static BooleanExpression near(Expression expr, double latVal, double longVal) { - return BooleanOperation.create(MongodbOps.NEAR, expr, ConstantImpl.create(new Double[]{latVal, longVal})); + return Expressions.booleanOperation(MongodbOps.NEAR, expr, ConstantImpl.create(new Double[]{latVal, longVal})); } } diff --git a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java index 63a421da56..9d6505e046 100644 --- a/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java +++ b/querydsl-mongodb/src/main/java/com/querydsl/mongodb/Point.java @@ -15,7 +15,7 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.path.ArrayPath; /** diff --git a/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala b/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala index 5df8efa68c..85e6ccdcb8 100644 --- a/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala +++ b/querydsl-scala/src/main/scala/com/querydsl/scala/Expressions.scala @@ -39,7 +39,7 @@ object Constants { trait DslExpression[T] extends Expression[T] { - def as(right: Path[T]): DslExpression[T] = dsl(getType, ALIAS, this, right) + def as(right: Path[T]): DslExpression[T] = Operations.dsl(getType, ALIAS, this, right) def as(alias: String): DslExpression[T] = as(new PathImpl[T](getType, alias)) diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java index f66fcfc523..eab3cf92dd 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java @@ -19,10 +19,9 @@ import org.geolatte.geom.Point; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A Curve is a 1-dimensional geometric object usually stored as a sequence of Points, with the subtype of Curve @@ -57,7 +56,7 @@ public CurveExpression(Expression mixin) { */ public NumberExpression length() { if (length == null) { - length = NumberOperation.create(Double.class, SpatialOps.LENGTH, mixin); + length = Expressions.numberOperation(Double.class, SpatialOps.LENGTH, mixin); } return length; } @@ -93,7 +92,7 @@ public PointExpression endPoint() { */ public BooleanExpression isClosed() { if (closed == null) { - closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + closed = Expressions.booleanOperation(SpatialOps.IS_CLOSED, mixin); } return closed; } @@ -106,7 +105,7 @@ public BooleanExpression isClosed() { */ public BooleanExpression isRing() { if (ring == null) { - ring = BooleanOperation.create(SpatialOps.IS_RING, mixin); + ring = Expressions.booleanOperation(SpatialOps.IS_RING, mixin); } return ring; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java index bad8d2de34..db015b9d10 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java @@ -20,8 +20,8 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A GeometryCollection is a geometric object that is a collection of some number of geometric objects. @@ -48,7 +48,7 @@ public GeometryCollectionExpression(Expression mixin) { */ public NumberExpression numGeometries() { if (numGeometries == null) { - numGeometries = NumberOperation.create(Integer.class, SpatialOps.NUM_GEOMETRIES, mixin); + numGeometries = Expressions.numberOperation(Integer.class, SpatialOps.NUM_GEOMETRIES, mixin); } return numGeometries; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java index 3451ddfb06..b471a97d09 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java @@ -19,14 +19,7 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.*; /** * Geometry is the root class of the hierarchy. Geometry is an abstract (non-instantiable) class. @@ -69,7 +62,7 @@ public GeometryExpression(Expression mixin) { */ public NumberExpression dimension() { if (dimension == null) { - dimension = NumberOperation.create(Integer.class, SpatialOps.DIMENSION, mixin); + dimension = Expressions.numberOperation(Integer.class, SpatialOps.DIMENSION, mixin); } return dimension; } @@ -82,7 +75,7 @@ public NumberExpression dimension() { */ public StringExpression geometryType() { if (geometryType == null) { - geometryType = StringOperation.create(SpatialOps.GEOMETRY_TYPE, mixin); + geometryType = Expressions.stringOperation(SpatialOps.GEOMETRY_TYPE, mixin); } return geometryType; } @@ -95,7 +88,7 @@ public StringExpression geometryType() { */ public NumberExpression srid() { if (srid == null) { - srid = NumberOperation.create(Integer.class, SpatialOps.SRID, mixin); + srid = Expressions.numberOperation(Integer.class, SpatialOps.SRID, mixin); } return srid; } @@ -123,7 +116,7 @@ public GeometryExpression envelope() { */ public StringExpression asText() { if (text == null) { - text = StringOperation.create(SpatialOps.AS_TEXT, mixin); + text = Expressions.stringOperation(SpatialOps.AS_TEXT, mixin); } return text; } @@ -136,7 +129,7 @@ public StringExpression asText() { */ public SimpleExpression asBinary() { if (binary == null) { - binary = SimpleOperation.create(byte[].class, SpatialOps.AS_BINARY, mixin); + binary = Expressions.operation(byte[].class, SpatialOps.AS_BINARY, mixin); } return binary; } @@ -149,7 +142,7 @@ public SimpleExpression asBinary() { */ public BooleanExpression isEmpty() { if (empty == null) { - empty = BooleanOperation.create(SpatialOps.IS_EMPTY, mixin); + empty = Expressions.booleanOperation(SpatialOps.IS_EMPTY, mixin); } return empty; } @@ -163,7 +156,7 @@ public BooleanExpression isEmpty() { */ public BooleanExpression isSimple() { if (simple == null) { - simple = BooleanOperation.create(SpatialOps.IS_SIMPLE, mixin); + simple = Expressions.booleanOperation(SpatialOps.IS_SIMPLE, mixin); } return simple; } @@ -183,7 +176,7 @@ public GeometryExpression boundary() { // query /* (non-Javadoc) - * @see com.querydsl.core.types.expr.SimpleExpression#eq(java.lang.Object) + * @see com.querydsl.core.types.dsl.SimpleExpression#eq(java.lang.Object) */ @Override public BooleanExpression eq(Geometry right) { @@ -191,11 +184,11 @@ public BooleanExpression eq(Geometry right) { } /* (non-Javadoc) - * @see com.querydsl.core.types.expr.SimpleExpression#eq(com.querydsl.core.types.Expression) + * @see com.querydsl.core.types.dsl.SimpleExpression#eq(com.querydsl.core.types.Expression) */ @Override public BooleanExpression eq(Expression right) { - return BooleanOperation.create(SpatialOps.EQUALS, mixin, right); + return Expressions.booleanOperation(SpatialOps.EQUALS, mixin, right); } /** @@ -215,7 +208,7 @@ public BooleanExpression disjoint(Geometry geometry) { * @return */ public BooleanExpression disjoint(Expression geometry) { - return BooleanOperation.create(SpatialOps.DISJOINT, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.DISJOINT, mixin, geometry); } /** @@ -235,7 +228,7 @@ public BooleanExpression intersects(Geometry geometry) { * @return */ public BooleanExpression intersects(Expression geometry) { - return BooleanOperation.create(SpatialOps.INTERSECTS, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.INTERSECTS, mixin, geometry); } /** @@ -255,7 +248,7 @@ public BooleanExpression touches(Geometry geometry) { * @return */ public BooleanExpression touches(Expression geometry) { - return BooleanOperation.create(SpatialOps.TOUCHES, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.TOUCHES, mixin, geometry); } /** @@ -275,7 +268,7 @@ public BooleanExpression crosses(Geometry geometry) { * @return */ public BooleanExpression crosses(Expression geometry) { - return BooleanOperation.create(SpatialOps.CROSSES, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.CROSSES, mixin, geometry); } /** @@ -295,7 +288,7 @@ public BooleanExpression within(Geometry geometry) { * @return */ public BooleanExpression within(Expression geometry) { - return BooleanOperation.create(SpatialOps.WITHIN, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.WITHIN, mixin, geometry); } /** @@ -315,7 +308,7 @@ public BooleanExpression contains(Geometry geometry) { * @return */ public BooleanExpression contains(Expression geometry) { - return BooleanOperation.create(SpatialOps.CONTAINS, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.CONTAINS, mixin, geometry); } /** @@ -335,7 +328,7 @@ public BooleanExpression overlaps(Geometry geometry) { * @return */ public BooleanExpression overlaps(Expression geometry) { - return BooleanOperation.create(SpatialOps.OVERLAPS, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.OVERLAPS, mixin, geometry); } /** @@ -363,7 +356,7 @@ public BooleanExpression relate(Geometry geometry, String matrix) { * @return */ public BooleanExpression relate(Expression geometry, String matrix) { - return BooleanOperation.create(SpatialOps.RELATE, mixin, geometry, ConstantImpl.create(matrix)); + return Expressions.booleanOperation(SpatialOps.RELATE, mixin, geometry, ConstantImpl.create(matrix)); } // analysis @@ -391,17 +384,17 @@ public NumberExpression distance(Geometry geometry) { * @return */ public NumberExpression distance(Expression geometry) { - return NumberOperation.create(Double.class, SpatialOps.DISTANCE, mixin, geometry); + return Expressions.numberOperation(Double.class, SpatialOps.DISTANCE, mixin, geometry); } // TODO maybe move out public NumberExpression distanceSphere(Expression geometry) { - return NumberOperation.create(Double.class, SpatialOps.DISTANCE_SPHERE, mixin, geometry); + return Expressions.numberOperation(Double.class, SpatialOps.DISTANCE_SPHERE, mixin, geometry); } // TODO maybe move out public NumberExpression distanceSpheroid(Expression geometry) { - return NumberOperation.create(Double.class, SpatialOps.DISTANCE_SPHEROID, mixin, geometry); + return Expressions.numberOperation(Double.class, SpatialOps.DISTANCE_SPHEROID, mixin, geometry); } /** diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java index a46f802fbc..1406307ea6 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java @@ -2,7 +2,7 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.*; +import com.querydsl.core.types.dsl.*; import org.geolatte.geom.Geometry; import org.geolatte.geom.GeometryCollection; @@ -18,7 +18,7 @@ public final class GeometryExpressions { * @return */ public static StringExpression asEWKT(GeometryExpression expr) { - return StringOperation.create(SpatialOps.AS_EWKT, expr); + return Expressions.stringOperation(SpatialOps.AS_EWKT, expr); } /** @@ -61,7 +61,7 @@ public static GeometryExpression setSRID(Expression e * @return */ public static NumberExpression xmin(GeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.XMIN, expr); + return Expressions.numberOperation(Double.class, SpatialOps.XMIN, expr); } /** @@ -71,7 +71,7 @@ public static NumberExpression xmin(GeometryExpression expr) { * @return */ public static NumberExpression xmax(GeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.XMAX, expr); + return Expressions.numberOperation(Double.class, SpatialOps.XMAX, expr); } /** @@ -81,7 +81,7 @@ public static NumberExpression xmax(GeometryExpression expr) { * @return */ public static NumberExpression ymin(GeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.YMIN, expr); + return Expressions.numberOperation(Double.class, SpatialOps.YMIN, expr); } /** @@ -91,7 +91,7 @@ public static NumberExpression ymin(GeometryExpression expr) { * @return */ public static NumberExpression ymax(GeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.YMAX, expr); + return Expressions.numberOperation(Double.class, SpatialOps.YMAX, expr); } /** @@ -105,7 +105,7 @@ public static NumberExpression ymax(GeometryExpression expr) { */ public static BooleanExpression dwithin(Expression expr1, Expression expr2, Expression distance) { - return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, distance); + return Expressions.booleanOperation(SpatialOps.DWITHIN, expr1, expr2, distance); } /** @@ -119,7 +119,7 @@ public static BooleanExpression dwithin(Expression expr1, */ public static BooleanExpression dwithin(Expression expr1, Expression expr2, double distance) { - return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, ConstantImpl.create(distance)); + return Expressions.booleanOperation(SpatialOps.DWITHIN, expr1, expr2, ConstantImpl.create(distance)); } /** diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java index 47ad2c272f..84559c56b8 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java @@ -20,8 +20,8 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A LineString is a Curve with linear interpolation between Points. Each consecutive pair of Points defines a Line @@ -49,7 +49,7 @@ public LineStringExpression(Expression mixin) { */ public NumberExpression numPoints() { if (numPoints == null) { - numPoints = NumberOperation.create(Integer.class, SpatialOps.NUM_POINTS, mixin); + numPoints = Expressions.numberOperation(Integer.class, SpatialOps.NUM_POINTS, mixin); } return numPoints; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiCurveExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiCurveExpression.java index 074dd03d83..0c7245e30f 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiCurveExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiCurveExpression.java @@ -18,10 +18,9 @@ import org.geolatte.geom.GeometryCollection; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A MultiCurve is a 1-dimensional GeometryCollection whose elements are Curves. @@ -52,7 +51,7 @@ public MultiCurveExpression(Expression mixin) { */ public BooleanExpression isClosed() { if (closed == null) { - closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + closed = Expressions.booleanOperation(SpatialOps.IS_CLOSED, mixin); } return closed; } @@ -65,7 +64,7 @@ public BooleanExpression isClosed() { */ public NumberExpression length() { if (length == null) { - length = NumberOperation.create(Double.class, SpatialOps.LENGTH, mixin); + length = Expressions.numberOperation(Double.class, SpatialOps.LENGTH, mixin); } return length; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java index 82e8a2e0d9..605c28ff78 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java @@ -19,8 +19,8 @@ import org.geolatte.geom.Point; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A MultiSurface is a 2-dimensional GeometryCollection whose elements are Surfaces, all using coordinates from @@ -54,7 +54,7 @@ public MultiSurfaceExpression(Expression mixin) { */ public NumberExpression area() { if (area == null) { - area = NumberOperation.create(Double.class, SpatialOps.AREA, mixin); + area = Expressions.numberOperation(Double.class, SpatialOps.AREA, mixin); } return area; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PointExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PointExpression.java index 4177dea532..d503d36685 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PointExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PointExpression.java @@ -18,8 +18,8 @@ import org.geolatte.geom.Point; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A Point is a 0-dimensional geometric object and represents a single location in coordinate space. A Point has an @@ -48,7 +48,7 @@ public PointExpression(Expression mixin) { */ public NumberExpression x() { if (x == null) { - x = NumberOperation.create(Double.class, SpatialOps.X, mixin); + x = Expressions.numberOperation(Double.class, SpatialOps.X, mixin); } return x; } @@ -60,7 +60,7 @@ public NumberExpression x() { */ public NumberExpression y() { if (y == null) { - y = NumberOperation.create(Double.class, SpatialOps.Y, mixin); + y = Expressions.numberOperation(Double.class, SpatialOps.Y, mixin); } return y; } @@ -72,7 +72,7 @@ public NumberExpression y() { */ public NumberExpression z() { if (z == null) { - z = NumberOperation.create(Double.class, SpatialOps.Z, mixin); + z = Expressions.numberOperation(Double.class, SpatialOps.Z, mixin); } return z; } @@ -84,7 +84,7 @@ public NumberExpression z() { */ public NumberExpression m() { if (m == null) { - m = NumberOperation.create(Double.class, SpatialOps.M, mixin); + m = Expressions.numberOperation(Double.class, SpatialOps.M, mixin); } return m; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java index ea9d8a7576..6941a78b12 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java @@ -20,8 +20,8 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A Polygon is a planar Surface defined by 1 exterior boundary and 0 or more interior boundaries. Each interior @@ -65,7 +65,7 @@ public LineStringExpression exteriorRing() { */ public NumberExpression numInteriorRing() { if (numInteriorRing == null) { - numInteriorRing = NumberOperation.create(Integer.class, SpatialOps.NUM_INTERIOR_RING, mixin); + numInteriorRing = Expressions.numberOperation(Integer.class, SpatialOps.NUM_INTERIOR_RING, mixin); } return numInteriorRing; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java index 577a548f3d..f0cd24e89d 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java @@ -20,10 +20,9 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A PolyhedralSurface is a contiguous collection of polygons, which share common boundary segments. @@ -56,7 +55,7 @@ public PolyhedralSurfaceExpression(Expression mixin) { */ public NumberExpression numPatches() { if (numPatches == null) { - numPatches = NumberOperation.create(Integer.class, SpatialOps.NUM_SURFACES, mixin); + numPatches = Expressions.numberOperation(Integer.class, SpatialOps.NUM_SURFACES, mixin); } return numPatches; } @@ -79,7 +78,7 @@ public PolygonExpression patchN(int n) { */ public BooleanExpression isClosed() { if (closed == null) { - closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + closed = Expressions.booleanOperation(SpatialOps.IS_CLOSED, mixin); } return closed; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java index ac6715a23e..9e33f5c4ea 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java @@ -19,8 +19,8 @@ import org.geolatte.geom.Point; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; /** * A Surface is a 2-dimensional geometric object. @@ -50,7 +50,7 @@ public SurfaceExpression(Expression mixin) { */ public NumberExpression area() { if (area == null) { - area = NumberOperation.create(Double.class, SpatialOps.AREA, mixin); + area = Expressions.numberOperation(Double.class, SpatialOps.AREA, mixin); } return area; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java index 8761ded9a5..0f8e9b2f04 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java @@ -15,12 +15,11 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; @@ -57,7 +56,7 @@ public JTSCurveExpression(Expression mixin) { */ public NumberExpression length() { if (length == null) { - length = NumberOperation.create(Double.class, SpatialOps.LENGTH, mixin); + length = Expressions.numberOperation(Double.class, SpatialOps.LENGTH, mixin); } return length; } @@ -93,7 +92,7 @@ public JTSPointExpression endPoint() { */ public BooleanExpression isClosed() { if (closed == null) { - closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + closed = Expressions.booleanOperation(SpatialOps.IS_CLOSED, mixin); } return closed; } @@ -106,7 +105,7 @@ public BooleanExpression isClosed() { */ public BooleanExpression isRing() { if (ring == null) { - ring = BooleanOperation.create(SpatialOps.IS_RING, mixin); + ring = Expressions.booleanOperation(SpatialOps.IS_RING, mixin); } return ring; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java index 50c6b14f41..9a3c69b0ab 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java @@ -15,11 +15,11 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; @@ -48,7 +48,7 @@ public JTSGeometryCollectionExpression(Expression mixin) { */ public NumberExpression numGeometries() { if (numGeometries == null) { - numGeometries = NumberOperation.create(Integer.class, SpatialOps.NUM_GEOMETRIES, mixin); + numGeometries = Expressions.numberOperation(Integer.class, SpatialOps.NUM_GEOMETRIES, mixin); } return numGeometries; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java index b23af1d534..fcde7c4c8c 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java @@ -15,17 +15,10 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.*; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.Geometry; /** @@ -69,7 +62,7 @@ public JTSGeometryExpression(Expression mixin) { */ public NumberExpression dimension() { if (dimension == null) { - dimension = NumberOperation.create(Integer.class, SpatialOps.DIMENSION, mixin); + dimension = Expressions.numberOperation(Integer.class, SpatialOps.DIMENSION, mixin); } return dimension; } @@ -82,7 +75,7 @@ public NumberExpression dimension() { */ public StringExpression geometryType() { if (geometryType == null) { - geometryType = StringOperation.create(SpatialOps.GEOMETRY_TYPE, mixin); + geometryType = Expressions.stringOperation(SpatialOps.GEOMETRY_TYPE, mixin); } return geometryType; } @@ -95,7 +88,7 @@ public StringExpression geometryType() { */ public NumberExpression srid() { if (srid == null) { - srid = NumberOperation.create(Integer.class, SpatialOps.SRID, mixin); + srid = Expressions.numberOperation(Integer.class, SpatialOps.SRID, mixin); } return srid; } @@ -123,7 +116,7 @@ public JTSGeometryExpression envelope() { */ public StringExpression asText() { if (text == null) { - text = StringOperation.create(SpatialOps.AS_TEXT, mixin); + text = Expressions.stringOperation(SpatialOps.AS_TEXT, mixin); } return text; } @@ -136,7 +129,7 @@ public StringExpression asText() { */ public SimpleExpression asBinary() { if (binary == null) { - binary = SimpleOperation.create(byte[].class, SpatialOps.AS_BINARY, mixin); + binary = Expressions.operation(byte[].class, SpatialOps.AS_BINARY, mixin); } return binary; } @@ -149,7 +142,7 @@ public SimpleExpression asBinary() { */ public BooleanExpression isEmpty() { if (empty == null) { - empty = BooleanOperation.create(SpatialOps.IS_EMPTY, mixin); + empty = Expressions.booleanOperation(SpatialOps.IS_EMPTY, mixin); } return empty; } @@ -163,7 +156,7 @@ public BooleanExpression isEmpty() { */ public BooleanExpression isSimple() { if (simple == null) { - simple = BooleanOperation.create(SpatialOps.IS_SIMPLE, mixin); + simple = Expressions.booleanOperation(SpatialOps.IS_SIMPLE, mixin); } return simple; } @@ -183,7 +176,7 @@ public JTSGeometryExpression boundary() { // query /* (non-Javadoc) - * @see com.querydsl.core.types.expr.SimpleExpression#eq(java.lang.Object) + * @see com.querydsl.core.types.dsl.SimpleExpression#eq(java.lang.Object) */ @Override public BooleanExpression eq(Geometry right) { @@ -191,11 +184,11 @@ public BooleanExpression eq(Geometry right) { } /* (non-Javadoc) - * @see com.querydsl.core.types.expr.SimpleExpression#eq(com.querydsl.core.types.Expression) + * @see com.querydsl.core.types.dsl.SimpleExpression#eq(com.querydsl.core.types.Expression) */ @Override public BooleanExpression eq(Expression right) { - return BooleanOperation.create(SpatialOps.EQUALS, mixin, right); + return Expressions.booleanOperation(SpatialOps.EQUALS, mixin, right); } /** @@ -215,7 +208,7 @@ public BooleanExpression disjoint(Geometry geometry) { * @return */ public BooleanExpression disjoint(Expression geometry) { - return BooleanOperation.create(SpatialOps.DISJOINT, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.DISJOINT, mixin, geometry); } /** @@ -235,7 +228,7 @@ public BooleanExpression intersects(Geometry geometry) { * @return */ public BooleanExpression intersects(Expression geometry) { - return BooleanOperation.create(SpatialOps.INTERSECTS, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.INTERSECTS, mixin, geometry); } /** @@ -255,7 +248,7 @@ public BooleanExpression touches(Geometry geometry) { * @return */ public BooleanExpression touches(Expression geometry) { - return BooleanOperation.create(SpatialOps.TOUCHES, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.TOUCHES, mixin, geometry); } /** @@ -275,7 +268,7 @@ public BooleanExpression crosses(Geometry geometry) { * @return */ public BooleanExpression crosses(Expression geometry) { - return BooleanOperation.create(SpatialOps.CROSSES, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.CROSSES, mixin, geometry); } /** @@ -295,7 +288,7 @@ public BooleanExpression within(Geometry geometry) { * @return */ public BooleanExpression within(Expression geometry) { - return BooleanOperation.create(SpatialOps.WITHIN, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.WITHIN, mixin, geometry); } /** @@ -315,7 +308,7 @@ public BooleanExpression contains(Geometry geometry) { * @return */ public BooleanExpression contains(Expression geometry) { - return BooleanOperation.create(SpatialOps.CONTAINS, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.CONTAINS, mixin, geometry); } /** @@ -335,7 +328,7 @@ public BooleanExpression overlaps(Geometry geometry) { * @return */ public BooleanExpression overlaps(Expression geometry) { - return BooleanOperation.create(SpatialOps.OVERLAPS, mixin, geometry); + return Expressions.booleanOperation(SpatialOps.OVERLAPS, mixin, geometry); } /** @@ -363,7 +356,7 @@ public BooleanExpression relate(Geometry geometry, String matrix) { * @return */ public BooleanExpression relate(Expression geometry, String matrix) { - return BooleanOperation.create(SpatialOps.RELATE, mixin, geometry, ConstantImpl.create(matrix)); + return Expressions.booleanOperation(SpatialOps.RELATE, mixin, geometry, ConstantImpl.create(matrix)); } // analysis @@ -391,17 +384,17 @@ public NumberExpression distance(Geometry geometry) { * @return */ public NumberExpression distance(Expression geometry) { - return NumberOperation.create(Double.class, SpatialOps.DISTANCE, mixin, geometry); + return Expressions.numberOperation(Double.class, SpatialOps.DISTANCE, mixin, geometry); } // TODO maybe move out public NumberExpression distanceSphere(Expression geometry) { - return NumberOperation.create(Double.class, SpatialOps.DISTANCE_SPHERE, mixin, geometry); + return Expressions.numberOperation(Double.class, SpatialOps.DISTANCE_SPHERE, mixin, geometry); } // TODO maybe move out public NumberExpression distanceSpheroid(Expression geometry) { - return NumberOperation.create(Double.class, SpatialOps.DISTANCE_SPHEROID, mixin, geometry); + return Expressions.numberOperation(Double.class, SpatialOps.DISTANCE_SPHEROID, mixin, geometry); } /** diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java index 3d92a91736..812a240a25 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java @@ -1,14 +1,12 @@ package com.querydsl.spatial.jts; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.StringOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.GeometryCollection; @@ -24,7 +22,7 @@ public final class JTSGeometryExpressions { * @return */ public static StringExpression asEWKT(JTSGeometryExpression expr) { - return StringOperation.create(SpatialOps.AS_EWKT, expr); + return Expressions.stringOperation(SpatialOps.AS_EWKT, expr); } /** @@ -67,7 +65,7 @@ public static JTSGeometryExpression setSRID(Expression xmin(JTSGeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.XMIN, expr); + return Expressions.numberOperation(Double.class, SpatialOps.XMIN, expr); } /** @@ -77,7 +75,7 @@ public static NumberExpression xmin(JTSGeometryExpression expr) { * @return */ public static NumberExpression xmax(JTSGeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.XMAX, expr); + return Expressions.numberOperation(Double.class, SpatialOps.XMAX, expr); } /** @@ -87,7 +85,7 @@ public static NumberExpression xmax(JTSGeometryExpression expr) { * @return */ public static NumberExpression ymin(JTSGeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.YMIN, expr); + return Expressions.numberOperation(Double.class, SpatialOps.YMIN, expr); } /** @@ -97,7 +95,7 @@ public static NumberExpression ymin(JTSGeometryExpression expr) { * @return */ public static NumberExpression ymax(JTSGeometryExpression expr) { - return NumberOperation.create(Double.class, SpatialOps.YMAX, expr); + return Expressions.numberOperation(Double.class, SpatialOps.YMAX, expr); } /** @@ -111,7 +109,7 @@ public static NumberExpression ymax(JTSGeometryExpression expr) { */ public static BooleanExpression dwithin(Expression expr1, Expression expr2, Expression distance) { - return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, distance); + return Expressions.booleanOperation(SpatialOps.DWITHIN, expr1, expr2, distance); } /** @@ -125,7 +123,7 @@ public static BooleanExpression dwithin(Expression expr1, */ public static BooleanExpression dwithin(Expression expr1, Expression expr2, double distance) { - return BooleanOperation.create(SpatialOps.DWITHIN, expr1, expr2, ConstantImpl.create(distance)); + return Expressions.booleanOperation(SpatialOps.DWITHIN, expr1, expr2, ConstantImpl.create(distance)); } /** diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java index 8979688194..39a2c979fc 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java @@ -15,11 +15,11 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.Point; @@ -49,7 +49,7 @@ public JTSLineStringExpression(Expression mixin) { */ public NumberExpression numPoints() { if (numPoints == null) { - numPoints = NumberOperation.create(Integer.class, SpatialOps.NUM_POINTS, mixin); + numPoints = Expressions.numberOperation(Integer.class, SpatialOps.NUM_POINTS, mixin); } return numPoints; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiCurveExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiCurveExpression.java index 95f1b7a5ad..dce9589f2e 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiCurveExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiCurveExpression.java @@ -15,12 +15,11 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.GeometryCollection; /** @@ -52,7 +51,7 @@ public JTSMultiCurveExpression(Expression mixin) { */ public BooleanExpression isClosed() { if (closed == null) { - closed = BooleanOperation.create(SpatialOps.IS_CLOSED, mixin); + closed = Expressions.booleanOperation(SpatialOps.IS_CLOSED, mixin); } return closed; } @@ -65,7 +64,7 @@ public BooleanExpression isClosed() { */ public NumberExpression length() { if (length == null) { - length = NumberOperation.create(Double.class, SpatialOps.LENGTH, mixin); + length = Expressions.numberOperation(Double.class, SpatialOps.LENGTH, mixin); } return length; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java index 772391e847..d6d2e3b617 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java @@ -15,10 +15,10 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.GeometryCollection; import com.vividsolutions.jts.geom.Point; @@ -54,7 +54,7 @@ public JTSMultiSurfaceExpression(Expression mixin) { */ public NumberExpression area() { if (area == null) { - area = NumberOperation.create(Double.class, SpatialOps.AREA, mixin); + area = Expressions.numberOperation(Double.class, SpatialOps.AREA, mixin); } return area; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointExpression.java index f1873a10bf..d4a0e7dace 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointExpression.java @@ -15,10 +15,10 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.Point; /** @@ -48,7 +48,7 @@ public JTSPointExpression(Expression mixin) { */ public NumberExpression x() { if (x == null) { - x = NumberOperation.create(Double.class, SpatialOps.X, mixin); + x = Expressions.numberOperation(Double.class, SpatialOps.X, mixin); } return x; } @@ -60,7 +60,7 @@ public NumberExpression x() { */ public NumberExpression y() { if (y == null) { - y = NumberOperation.create(Double.class, SpatialOps.Y, mixin); + y = Expressions.numberOperation(Double.class, SpatialOps.Y, mixin); } return y; } @@ -72,7 +72,7 @@ public NumberExpression y() { */ public NumberExpression z() { if (z == null) { - z = NumberOperation.create(Double.class, SpatialOps.Z, mixin); + z = Expressions.numberOperation(Double.class, SpatialOps.Z, mixin); } return z; } @@ -84,7 +84,7 @@ public NumberExpression z() { */ public NumberExpression m() { if (m == null) { - m = NumberOperation.create(Double.class, SpatialOps.M, mixin); + m = Expressions.numberOperation(Double.class, SpatialOps.M, mixin); } return m; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java index 589a62fb6b..b10481343e 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java @@ -15,11 +15,11 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.Polygon; @@ -65,7 +65,7 @@ public JTSLineStringExpression exteriorRing() { */ public NumberExpression numInteriorRing() { if (numInteriorRing == null) { - numInteriorRing = NumberOperation.create(Integer.class, SpatialOps.NUM_INTERIOR_RING, mixin); + numInteriorRing = Expressions.numberOperation(Integer.class, SpatialOps.NUM_INTERIOR_RING, mixin); } return numInteriorRing; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java index 7d088feb0f..995d948abf 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java @@ -15,10 +15,10 @@ import javax.annotation.Nullable; -import com.querydsl.spatial.SpatialOps; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.spatial.SpatialOps; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.geom.Point; @@ -50,7 +50,7 @@ public JTSSurfaceExpression(Expression mixin) { */ public NumberExpression area() { if (area == null) { - area = NumberOperation.create(Double.class, SpatialOps.AREA, mixin); + area = Expressions.numberOperation(Double.class, SpatialOps.AREA, mixin); } return area; } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java index e08e8e5b49..25b382e230 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/AbstractSQLQuery.java @@ -34,7 +34,7 @@ import com.querydsl.core.*; import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.util.ResultSetAdapter; /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java index 053a990ee7..8d3bc75220 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/DetachableSQLQuery.java @@ -24,12 +24,11 @@ import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; import com.querydsl.core.support.DetachableQuery; -import com.querydsl.core.support.Expressions; import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.CollectionExpressionBase; -import com.querydsl.core.types.expr.CollectionOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.CollectionExpressionBase; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.query.ListSubQuery; import com.querydsl.core.types.template.NumberTemplate; @@ -267,7 +266,7 @@ private CollectionExpressionBase union(Operator op, List)rv; } diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/ForeignKey.java b/querydsl-sql/src/main/java/com/querydsl/sql/ForeignKey.java index 7c205a44ea..4673ff5b14 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/ForeignKey.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/ForeignKey.java @@ -22,16 +22,9 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.BooleanBuilder; import com.querydsl.core.Tuple; -import com.querydsl.core.types.CollectionExpression; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.ProjectionRole; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; +import com.querydsl.core.types.*; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; /** * ForeignKey defines a foreign key on a table to another table @@ -89,7 +82,7 @@ public Predicate on(RelationalPath entity) { } public BooleanExpression in(CollectionExpression coll) { - return BooleanOperation.create(Ops.IN, getProjection(), coll); + return Expressions.booleanOperation(Ops.IN, getProjection(), coll); } @Override diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/PrimaryKey.java b/querydsl-sql/src/main/java/com/querydsl/sql/PrimaryKey.java index 9dea3ef4ff..5d661efb01 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/PrimaryKey.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/PrimaryKey.java @@ -21,14 +21,9 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.Tuple; -import com.querydsl.core.types.CollectionExpression; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.ExpressionUtils; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.ProjectionRole; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; +import com.querydsl.core.types.*; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; /** * PrimaryKey defines a primary key on table @@ -66,7 +61,7 @@ public List> getLocalColumns() { } public BooleanExpression in(CollectionExpression coll) { - return BooleanOperation.create(Ops.IN, getProjection(), coll); + return Expressions.booleanOperation(Ops.IN, getProjection(), coll); } @Override diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java index ec908b3616..9c8276b221 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/ProjectableSQLQuery.java @@ -25,11 +25,11 @@ import com.mysema.commons.lang.CloseableIterator; import com.querydsl.core.*; import com.querydsl.core.QueryFlag.Position; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.support.ProjectableQuery; import com.querydsl.core.support.QueryMixin; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.types.query.ListSubQuery; import com.querydsl.core.types.template.NumberTemplate; import com.querydsl.core.types.template.SimpleTemplate; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalFunctionCall.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalFunctionCall.java index b179067230..244050f9b1 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalFunctionCall.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalFunctionCall.java @@ -20,7 +20,7 @@ import com.querydsl.core.types.TemplateExpressionImpl; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.expr.SimpleExpression; +import com.querydsl.core.types.dsl.SimpleExpression; /** * Represents a table valued function call diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java index ccab510ca1..525b85deaf 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/RelationalPathBase.java @@ -13,20 +13,21 @@ */ package com.querydsl.sql; -import javax.annotation.Nullable; +import static com.google.common.collect.ImmutableList.copyOf; + import java.util.Collection; import java.util.List; import java.util.Map; +import javax.annotation.Nullable; + import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.BeanPath; -import static com.google.common.collect.ImmutableList.copyOf; /** * RelationalPathBase is a base class for {@link RelationalPath} implementations @@ -108,7 +109,7 @@ protected

> P addMetadata(P path, ColumnMetadata metadata) { public NumberExpression count() { if (count == null) { if (primaryKey != null) { - count = NumberOperation.create(Long.class, Ops.AggOps.COUNT_AGG, + count = Expressions.numberOperation(Long.class, Ops.AggOps.COUNT_AGG, primaryKey.getLocalColumns().get(0)); } else { throw new IllegalStateException("No count expression can be created"); @@ -122,7 +123,7 @@ public NumberExpression countDistinct() { if (countDistinct == null) { if (primaryKey != null) { // TODO handle multiple column primary keys properly - countDistinct = NumberOperation.create(Long.class, Ops.AggOps.COUNT_DISTINCT_AGG, + countDistinct = Expressions.numberOperation(Long.class, Ops.AggOps.COUNT_DISTINCT_AGG, primaryKey.getLocalColumns().get(0)); } else { throw new IllegalStateException("No count distinct expression can be created"); @@ -200,7 +201,7 @@ private BooleanExpression primaryKeyOperation(Operator op, PrimaryKey pk1, Pr } BooleanExpression rv = null; for (int i = 0; i < pk1.getLocalColumns().size(); i++) { - BooleanExpression pred = BooleanOperation.create(op, pk1.getLocalColumns().get(i), pk2.getLocalColumns().get(i)); + BooleanExpression pred = Expressions.booleanOperation(op, pk1.getLocalColumns().get(i), pk2.getLocalColumns().get(i)); rv = rv != null ? rv.and(pred) : pred; } return rv; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java index a2c3000f09..2c6869cb50 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLExpressions.java @@ -20,19 +20,7 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.Operator; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.DateOperation; -import com.querydsl.core.types.expr.DateTimeExpression; -import com.querydsl.core.types.expr.DateTimeOperation; -import com.querydsl.core.types.expr.NumberExpression; -import com.querydsl.core.types.expr.NumberOperation; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; -import com.querydsl.core.types.expr.StringExpression; -import com.querydsl.core.types.expr.StringOperation; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.*; /** * Common SQL expressions @@ -117,14 +105,14 @@ private static Expression[] convertToExpressions(Object... args) { * Get an aggregate any expression for the given boolean expression */ public static BooleanExpression any(BooleanExpression expr) { - return BooleanOperation.create(Ops.AggOps.BOOLEAN_ANY, expr); + return Expressions.booleanOperation(Ops.AggOps.BOOLEAN_ANY, expr); } /** * Get an aggregate all expression for the given boolean expression */ public static BooleanExpression all(BooleanExpression expr) { - return BooleanOperation.create(Ops.AggOps.BOOLEAN_ALL, expr); + return Expressions.booleanOperation(Ops.AggOps.BOOLEAN_ALL, expr); } /** @@ -145,7 +133,7 @@ public static SimpleExpression nextval(String sequence) { * @return */ public static SimpleExpression nextval(Class type, String sequence) { - return SimpleOperation.create(type, SQLOps.NEXTVAL, ConstantImpl.create(sequence)); + return Expressions.operation(type, SQLOps.NEXTVAL, ConstantImpl.create(sequence)); } /** @@ -155,7 +143,7 @@ public static SimpleExpression nextval(Class type, Stri * @return */ public static DateExpression date(DateTimeExpression dateTime) { - return DateOperation.create((Class)dateTime.getType(), Ops.DateTimeOps.DATE, dateTime); + return Expressions.dateOperation((Class) dateTime.getType(), Ops.DateTimeOps.DATE, dateTime); } /** @@ -166,7 +154,7 @@ public static DateExpression date(DateTimeExpression DateExpression date(Class type, DateTimeExpression dateTime) { - return DateOperation.create(type, Ops.DateTimeOps.DATE, dateTime); + return Expressions.dateOperation(type, Ops.DateTimeOps.DATE, dateTime); } /** @@ -178,7 +166,7 @@ public static DateExpression date(Class type, DateT * @return */ public static DateTimeExpression dateadd(DatePart unit, DateTimeExpression date, int amount) { - return DateTimeOperation.create((Class)date.getType(), DATE_ADD_OPS.get(unit), date, ConstantImpl.create(amount)); + return Expressions.dateTimeOperation((Class) date.getType(), DATE_ADD_OPS.get(unit), date, ConstantImpl.create(amount)); } /** @@ -190,7 +178,7 @@ public static DateTimeExpression dateadd(DatePart unit * @return */ public static DateExpression dateadd(DatePart unit, DateExpression date, int amount) { - return DateOperation.create((Class)date.getType(), DATE_ADD_OPS.get(unit), date, ConstantImpl.create(amount)); + return Expressions.dateOperation((Class) date.getType(), DATE_ADD_OPS.get(unit), date, ConstantImpl.create(amount)); } /** @@ -203,7 +191,7 @@ public static DateExpression dateadd(DatePart unit, Da */ public static NumberExpression datediff(DatePart unit, DateExpression start, DateExpression end) { - return NumberOperation.create(Integer.class, DATE_DIFF_OPS.get(unit), start, end); + return Expressions.numberOperation(Integer.class, DATE_DIFF_OPS.get(unit), start, end); } /** @@ -216,7 +204,7 @@ public static NumberExpression datediff(DatePart */ public static NumberExpression datediff(DatePart unit, D start, DateExpression end) { - return NumberOperation.create(Integer.class, DATE_DIFF_OPS.get(unit), ConstantImpl.create(start), end); + return Expressions.numberOperation(Integer.class, DATE_DIFF_OPS.get(unit), ConstantImpl.create(start), end); } /** @@ -229,7 +217,7 @@ public static NumberExpression datediff(DatePart */ public static NumberExpression datediff(DatePart unit, DateExpression start, D end) { - return NumberOperation.create(Integer.class, DATE_DIFF_OPS.get(unit), start, ConstantImpl.create(end)); + return Expressions.numberOperation(Integer.class, DATE_DIFF_OPS.get(unit), start, ConstantImpl.create(end)); } /** @@ -242,7 +230,7 @@ public static NumberExpression datediff(DatePart */ public static NumberExpression datediff(DatePart unit, DateTimeExpression start, DateTimeExpression end) { - return NumberOperation.create(Integer.class, DATE_DIFF_OPS.get(unit), start, end); + return Expressions.numberOperation(Integer.class, DATE_DIFF_OPS.get(unit), start, end); } /** @@ -255,7 +243,7 @@ public static NumberExpression datediff(DatePart */ public static NumberExpression datediff(DatePart unit, D start, DateTimeExpression end) { - return NumberOperation.create(Integer.class, DATE_DIFF_OPS.get(unit), ConstantImpl.create(start), end); + return Expressions.numberOperation(Integer.class, DATE_DIFF_OPS.get(unit), ConstantImpl.create(start), end); } /** @@ -268,7 +256,7 @@ public static NumberExpression datediff(DatePart */ public static NumberExpression datediff(DatePart unit, DateTimeExpression start, D end) { - return NumberOperation.create(Integer.class, DATE_DIFF_OPS.get(unit), start, ConstantImpl.create(end)); + return Expressions.numberOperation(Integer.class, DATE_DIFF_OPS.get(unit), start, ConstantImpl.create(end)); } /** @@ -278,7 +266,7 @@ public static NumberExpression datediff(DatePart * @param expr */ public static DateExpression datetrunc(DatePart unit, DateExpression expr) { - return DateOperation.create((Class)expr.getType(), DATE_TRUNC_OPS.get(unit), expr); + return Expressions.dateOperation((Class) expr.getType(), DATE_TRUNC_OPS.get(unit), expr); } /** @@ -288,7 +276,7 @@ public static DateExpression datetrunc(DatePart unit, * @param expr */ public static DateTimeExpression datetrunc(DatePart unit, DateTimeExpression expr) { - return DateTimeOperation.create((Class)expr.getType(), DATE_TRUNC_OPS.get(unit), expr); + return Expressions.dateTimeOperation((Class) expr.getType(), DATE_TRUNC_OPS.get(unit), expr); } /** @@ -299,7 +287,7 @@ public static DateTimeExpression datetrunc(DatePart un * @return */ public static DateTimeExpression addYears(DateTimeExpression date, int years) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_YEARS, date, ConstantImpl.create(years)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_YEARS, date, ConstantImpl.create(years)); } /** @@ -310,7 +298,7 @@ public static DateTimeExpression addYears(DateTimeExpr * @return */ public static DateTimeExpression addMonths(DateTimeExpression date, int months) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_MONTHS, date, ConstantImpl.create(months)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_MONTHS, date, ConstantImpl.create(months)); } /** @@ -321,7 +309,7 @@ public static DateTimeExpression addMonths(DateTimeExp * @return */ public static DateTimeExpression addWeeks(DateTimeExpression date, int weeks) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_WEEKS, date, ConstantImpl.create(weeks)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_WEEKS, date, ConstantImpl.create(weeks)); } /** @@ -332,7 +320,7 @@ public static DateTimeExpression addWeeks(DateTimeExpr * @return */ public static DateTimeExpression addDays(DateTimeExpression date, int days) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_DAYS, date, ConstantImpl.create(days)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_DAYS, date, ConstantImpl.create(days)); } /** @@ -343,7 +331,7 @@ public static DateTimeExpression addDays(DateTimeExpre * @return */ public static DateTimeExpression addHours(DateTimeExpression date, int hours) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_HOURS, date, ConstantImpl.create(hours)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_HOURS, date, ConstantImpl.create(hours)); } /** @@ -354,7 +342,7 @@ public static DateTimeExpression addHours(DateTimeExpr * @return */ public static DateTimeExpression addMinutes(DateTimeExpression date, int minutes) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_MINUTES, date, ConstantImpl.create(minutes)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_MINUTES, date, ConstantImpl.create(minutes)); } /** @@ -365,7 +353,7 @@ public static DateTimeExpression addMinutes(DateTimeEx * @return */ public static DateTimeExpression addSeconds(DateTimeExpression date, int seconds) { - return DateTimeOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_SECONDS, date, ConstantImpl.create(seconds)); + return Expressions.dateTimeOperation((Class) date.getType(), Ops.DateTimeOps.ADD_SECONDS, date, ConstantImpl.create(seconds)); } /** @@ -376,7 +364,7 @@ public static DateTimeExpression addSeconds(DateTimeEx * @return */ public static DateExpression addYears(DateExpression date, int years) { - return DateOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_YEARS, date, ConstantImpl.create(years)); + return Expressions.dateOperation((Class) date.getType(), Ops.DateTimeOps.ADD_YEARS, date, ConstantImpl.create(years)); } /** @@ -387,7 +375,7 @@ public static DateExpression addYears(DateExpression DateExpression addMonths(DateExpression date, int months) { - return DateOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_MONTHS, date, ConstantImpl.create(months)); + return Expressions.dateOperation((Class) date.getType(), Ops.DateTimeOps.ADD_MONTHS, date, ConstantImpl.create(months)); } /** @@ -398,7 +386,7 @@ public static DateExpression addMonths(DateExpression< * @return */ public static DateExpression addWeeks(DateExpression date, int weeks) { - return DateOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_WEEKS, date, ConstantImpl.create(weeks)); + return Expressions.dateOperation((Class) date.getType(), Ops.DateTimeOps.ADD_WEEKS, date, ConstantImpl.create(weeks)); } /** @@ -409,7 +397,7 @@ public static DateExpression addWeeks(DateExpression DateExpression addDays(DateExpression date, int days) { - return DateOperation.create((Class)date.getType(), Ops.DateTimeOps.ADD_DAYS, date, ConstantImpl.create(days)); + return Expressions.dateOperation((Class) date.getType(), Ops.DateTimeOps.ADD_DAYS, date, ConstantImpl.create(days)); } /** @@ -918,7 +906,7 @@ public static StringExpression right(Expression lhs, int rhs) { * @return */ public static StringExpression left(Expression lhs, Expression rhs) { - return StringOperation.create(Ops.StringOps.LEFT, lhs, rhs); + return Expressions.stringOperation(Ops.StringOps.LEFT, lhs, rhs); } /** @@ -929,7 +917,7 @@ public static StringExpression left(Expression lhs, Expression * @return */ public static StringExpression right(Expression lhs, Expression rhs) { - return StringOperation.create(Ops.StringOps.RIGHT, lhs, rhs); + return Expressions.stringOperation(Ops.StringOps.RIGHT, lhs, rhs); } private SQLExpressions() {} diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java index 08054a7e42..a5ff200801 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLSerializer.java @@ -26,7 +26,7 @@ import com.querydsl.core.QueryFlag; import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.support.SerializerBase; import com.querydsl.core.types.*; import com.querydsl.core.types.Template.Element; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java index 99c4956379..46c4a34067 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2005Templates.java @@ -19,7 +19,7 @@ import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.*; diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2012Templates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2012Templates.java index fa1dd92e64..c08b77891d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2012Templates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServer2012Templates.java @@ -17,7 +17,7 @@ import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; /** * SQLServer2012Templates is an SQL dialect for Microsoft SQL Server 2012 and later diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java index 1b040667de..fed6d3c0d7 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/SQLServerTemplates.java @@ -19,7 +19,7 @@ import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.QueryMetadata; import com.querydsl.core.QueryModifiers; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Ops; /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/WindowFirstLast.java b/querydsl-sql/src/main/java/com/querydsl/sql/WindowFirstLast.java index 173541eaef..442b30f21b 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/WindowFirstLast.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/WindowFirstLast.java @@ -23,8 +23,8 @@ import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.expr.ComparableExpressionBase; -import com.querydsl.core.types.expr.SimpleExpression; +import com.querydsl.core.types.dsl.ComparableExpressionBase; +import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.template.SimpleTemplate; /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/WindowFunction.java b/querydsl-sql/src/main/java/com/querydsl/sql/WindowFunction.java index 5d56c2c7f0..60f3f20226 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/WindowFunction.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/WindowFunction.java @@ -18,17 +18,11 @@ import java.util.List; import com.google.common.collect.ImmutableList; -import com.querydsl.core.types.Expression; -import com.querydsl.core.types.MutableExpressionBase; -import com.querydsl.core.types.Ops; -import com.querydsl.core.types.OrderSpecifier; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.TemplateFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.expr.BooleanExpression; -import com.querydsl.core.types.expr.ComparableExpressionBase; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; +import com.querydsl.core.types.*; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.ComparableExpressionBase; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.template.SimpleTemplate; /** @@ -116,11 +110,11 @@ public SimpleExpression getValue() { @SuppressWarnings("unchecked") public SimpleExpression as(Expression alias) { - return SimpleOperation.create((Class)getType(),Ops.ALIAS, this, alias); + return Expressions.operation((Class) getType(), Ops.ALIAS, this, alias); } public SimpleExpression as(String alias) { - return SimpleOperation.create((Class)getType(),Ops.ALIAS, this, new PathImpl(getType(), alias)); + return Expressions.operation((Class) getType(), Ops.ALIAS, this, new PathImpl(getType(), alias)); } @Override diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java b/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java index ee8557a7d3..f427e11605 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/WindowOver.java @@ -16,7 +16,7 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Operator; -import com.querydsl.core.types.expr.SimpleOperation; +import com.querydsl.core.types.dsl.SimpleOperation; /** * WindowOver is the first part of a WindowFunction construction diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java b/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java index ee649628f9..e15e82a70d 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/WithinGroup.java @@ -24,9 +24,9 @@ import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.expr.ComparableExpressionBase; -import com.querydsl.core.types.expr.SimpleExpression; -import com.querydsl.core.types.expr.SimpleOperation; +import com.querydsl.core.types.dsl.ComparableExpressionBase; +import com.querydsl.core.types.dsl.SimpleExpression; +import com.querydsl.core.types.dsl.SimpleOperation; import com.querydsl.core.types.template.SimpleTemplate; /** diff --git a/querydsl-sql/src/main/java/com/querydsl/sql/oracle/OracleGrammar.java b/querydsl-sql/src/main/java/com/querydsl/sql/oracle/OracleGrammar.java index 9322b7c79f..e12d131788 100644 --- a/querydsl-sql/src/main/java/com/querydsl/sql/oracle/OracleGrammar.java +++ b/querydsl-sql/src/main/java/com/querydsl/sql/oracle/OracleGrammar.java @@ -15,8 +15,8 @@ import java.util.Date; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.template.DateTemplate; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java index 9d84b9571f..6bf374d544 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/AbstractSQLTemplatesTest.java @@ -18,12 +18,12 @@ import org.junit.Before; import org.junit.Test; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Operator; import com.querydsl.core.types.Path; import com.querydsl.core.types.TemplatesTestUtils; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; import com.querydsl.sql.domain.QSurvey; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/DeleteBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/DeleteBase.java index 09447d770e..8e0904bbc3 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/DeleteBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/DeleteBase.java @@ -18,8 +18,8 @@ import com.querydsl.sql.dml.SQLDeleteClause; import com.querydsl.sql.domain.QEmployee; import com.querydsl.sql.domain.QSurvey; -import com.querydsl.core.support.Expressions; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.Param; import com.querydsl.core.testutil.ExcludeIn; import com.querydsl.core.testutil.IncludeIn; import org.junit.After; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java index d669599787..011fc8a7c6 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/ExtendedSQLTest.java @@ -8,7 +8,7 @@ import com.querydsl.core.types.PathMetadataFactory; import com.querydsl.core.types.Projections; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.types.path.DatePath; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.StringPath; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java index 60ff1e8a7c..713695b5c9 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/FirebirdTemplatesTest.java @@ -20,7 +20,7 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java index 77270ace45..0749cbda2b 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/InsertBase.java @@ -35,10 +35,10 @@ import com.querydsl.sql.dml.Mapper; import com.querydsl.sql.dml.SQLInsertClause; import com.querydsl.sql.domain.*; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; import com.querydsl.core.testutil.ExcludeIn; import com.querydsl.core.testutil.IncludeIn; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java index 0000e71590..419916c860 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/MergeBase.java @@ -27,7 +27,7 @@ import com.querydsl.sql.dml.SQLMergeClause; import com.querydsl.sql.domain.QSurvey; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathImpl; import com.querydsl.core.testutil.ExcludeIn; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java index 6a43677a1b..ce0ba4b2f1 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/OracleTemplatesTest.java @@ -23,7 +23,7 @@ import com.querydsl.core.types.Operation; import com.querydsl.core.types.OperationImpl; import com.querydsl.core.types.Ops; -import com.querydsl.core.types.expr.SimpleExpression; +import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.template.SimpleTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java index a2e296583a..4b854de2b8 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PostgreSQLTemplatesTest.java @@ -20,7 +20,7 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/PrecedenceTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/PrecedenceTest.java index 7f4abab6cc..cd73e785b3 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/PrecedenceTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/PrecedenceTest.java @@ -4,7 +4,7 @@ import org.junit.Test; -import com.querydsl.core.types.expr.BooleanExpression; +import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.path.StringPath; public class PrecedenceTest { diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathExtractorTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathExtractorTest.java index 01b85f69f0..c76d7349d2 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathExtractorTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/RelationalPathExtractorTest.java @@ -8,7 +8,7 @@ import com.google.common.collect.ImmutableSet; import com.querydsl.sql.domain.QEmployee; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; public class RelationalPathExtractorTest { diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLBindingsTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLBindingsTest.java index 1c19155243..921409310f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLBindingsTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLBindingsTest.java @@ -8,7 +8,7 @@ import org.junit.Test; import com.querydsl.sql.domain.QSurvey; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; public class SQLBindingsTest { diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java index a481da99a9..5aeff4afe5 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSerializerTest.java @@ -26,12 +26,12 @@ import com.querydsl.core.BooleanBuilder; import com.querydsl.core.QueryMetadata; import com.querydsl.core.Tuple; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Expression; import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.Path; import com.querydsl.core.types.SubQueryExpression; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.PathBuilder; import com.querydsl.core.types.path.StringPath; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java index c502287702..d094e3125f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2005TemplatesTest.java @@ -19,7 +19,7 @@ import org.junit.Test; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java index da866de307..615ce57a1c 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServer2012TemplatesTest.java @@ -21,7 +21,7 @@ import com.querydsl.core.types.Operation; import com.querydsl.core.types.OperationImpl; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java index 7a8fd7723b..ab0363e945 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLServerTemplatesTest.java @@ -21,7 +21,7 @@ import com.querydsl.core.types.Operation; import com.querydsl.core.types.OperationImpl; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java index 9a75695fce..0d7771884a 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLSubQueryTest.java @@ -21,8 +21,8 @@ import com.querydsl.core.DefaultQueryMetadata; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.BooleanOperation; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.query.ListSubQuery; import com.querydsl.core.types.query.NumberSubQuery; @@ -42,7 +42,7 @@ public void UnknownOperator() { }; SQLSubQuery query = new SQLSubQuery(); query.from(employee) - .where(BooleanOperation.create(op, employee.id)); + .where(Expressions.booleanOperation(op, employee.id)); assertEquals("from EMPLOYEE EMPLOYEE\nwhere unknownfn(EMPLOYEE.ID)", query.toString()); } diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java index b19a406ecc..4a56514461 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLTemplatesTest.java @@ -13,7 +13,7 @@ */ package com.querydsl.sql; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.*; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.template.SimpleTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java index 6061de1061..6808b0ef63 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SQLiteTemplatesTest.java @@ -20,7 +20,7 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.NumberExpression; +import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.template.NumberTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java index 179f124178..09138a6ed2 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectBase.java @@ -40,12 +40,12 @@ import com.querydsl.core.*; import com.querydsl.core.group.Group; import com.querydsl.core.group.GroupBy; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.testutil.ExcludeIn; import com.querydsl.core.testutil.IncludeIn; import com.querydsl.core.testutil.Serialization; import com.querydsl.core.types.*; -import com.querydsl.core.types.expr.*; +import com.querydsl.core.types.dsl.*; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.PathBuilder; import com.querydsl.core.types.path.StringPath; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SelectWindowFunctionsBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SelectWindowFunctionsBase.java index ffd9746c00..2b531622d9 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SelectWindowFunctionsBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SelectWindowFunctionsBase.java @@ -16,7 +16,7 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.SimplePath; import com.querydsl.core.types.query.ListSubQuery; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java index 42460f0c3e..8a02e6d9f3 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/SubqueriesBase.java @@ -14,9 +14,9 @@ import com.google.common.collect.ImmutableList; import com.querydsl.sql.domain.Employee; import com.querydsl.sql.domain.QEmployee; -import com.querydsl.core.support.Expressions; -import com.querydsl.core.types.expr.Param; -import com.querydsl.core.types.expr.Wildcard; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.Param; +import com.querydsl.core.types.dsl.Wildcard; import com.querydsl.core.types.path.NumberPath; import com.querydsl.core.types.path.PathBuilder; import com.querydsl.core.types.query.ListSubQuery; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/TemplateTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/TemplateTest.java index 72b719ff45..d4d08c7c77 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/TemplateTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/TemplateTest.java @@ -21,8 +21,8 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.expr.DateExpression; -import com.querydsl.core.types.expr.StringExpression; +import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.path.DatePath; import com.querydsl.core.types.path.StringPath; import com.querydsl.core.types.template.DateTemplate; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java index bec86771a0..458a198881 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/TypesBase.java @@ -15,7 +15,7 @@ import com.google.common.collect.Maps; import com.querydsl.sql.ddl.CreateTableClause; import com.querydsl.sql.ddl.DropTableClause; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Path; import com.querydsl.core.testutil.ExcludeIn; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java b/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java index f810c0070f..862bb43a12 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/UpdateBase.java @@ -20,9 +20,9 @@ import com.querydsl.sql.dml.SQLUpdateClause; import com.querydsl.sql.domain.QEmployee; import com.querydsl.sql.domain.QSurvey; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Path; -import com.querydsl.core.types.expr.Param; +import com.querydsl.core.types.dsl.Param; import com.querydsl.core.testutil.IncludeIn; import org.junit.After; import org.junit.Before; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/WindowFunctionTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/WindowFunctionTest.java index e4b007e77b..b8f388158f 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/WindowFunctionTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/WindowFunctionTest.java @@ -4,7 +4,7 @@ import org.junit.Test; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Expression; import com.querydsl.core.types.path.NumberPath; diff --git a/querydsl-sql/src/test/java/com/querydsl/sql/WithinGroupTest.java b/querydsl-sql/src/test/java/com/querydsl/sql/WithinGroupTest.java index 11b42035b4..cee052d106 100644 --- a/querydsl-sql/src/test/java/com/querydsl/sql/WithinGroupTest.java +++ b/querydsl-sql/src/test/java/com/querydsl/sql/WithinGroupTest.java @@ -4,7 +4,7 @@ import org.junit.Test; -import com.querydsl.core.support.Expressions; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.Expression; import com.querydsl.core.types.path.NumberPath; From f7dc65a124f3e85ef6148b014f457d7f9899aed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Sun, 15 Mar 2015 00:46:57 +0200 Subject: [PATCH 0807/1968] Move expression creation to central factory classes --- .../com/querydsl/spatial/CurveExpression.java | 4 +- .../spatial/GeometryCollectionExpression.java | 2 +- .../querydsl/spatial/GeometryExpression.java | 18 ++--- .../querydsl/spatial/GeometryExpressions.java | 81 ++++++++++++++++--- .../querydsl/spatial/GeometryOperation.java | 12 --- .../spatial/LineStringExpression.java | 2 +- .../querydsl/spatial/LineStringOperation.java | 12 --- .../spatial/MultiSurfaceExpression.java | 4 +- .../com/querydsl/spatial/PointOperation.java | 12 --- .../querydsl/spatial/PolygonExpression.java | 4 +- .../querydsl/spatial/PolygonOperation.java | 12 --- .../spatial/PolyhedralSurfaceExpression.java | 3 +- .../querydsl/spatial/SurfaceExpression.java | 4 +- .../spatial/jts/JTSCurveExpression.java | 4 +- .../jts/JTSGeometryCollectionExpression.java | 2 +- .../spatial/jts/JTSGeometryExpression.java | 18 ++--- .../spatial/jts/JTSGeometryExpressions.java | 75 ++++++++++++++--- .../spatial/jts/JTSGeometryOperation.java | 12 --- .../spatial/jts/JTSLineStringExpression.java | 2 +- .../spatial/jts/JTSLineStringOperation.java | 12 --- .../jts/JTSMultiSurfaceExpression.java | 4 +- .../spatial/jts/JTSPointOperation.java | 12 --- .../spatial/jts/JTSPolygonExpression.java | 4 +- .../spatial/jts/JTSPolygonOperation.java | 12 --- .../spatial/jts/JTSSurfaceExpression.java | 4 +- 25 files changed, 174 insertions(+), 157 deletions(-) diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java index eab3cf92dd..125daa43c8 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/CurveExpression.java @@ -68,7 +68,7 @@ public NumberExpression length() { */ public PointExpression startPoint() { if (startPoint == null) { - startPoint = PointOperation.create(Point.class, SpatialOps.START_POINT, mixin); + startPoint = GeometryExpressions.pointOperation(SpatialOps.START_POINT, mixin); } return startPoint; } @@ -80,7 +80,7 @@ public PointExpression startPoint() { */ public PointExpression endPoint() { if (endPoint == null) { - endPoint = PointOperation.create(Point.class, SpatialOps.END_POINT, mixin); + endPoint = GeometryExpressions.pointOperation(SpatialOps.END_POINT, mixin); } return endPoint; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java index db015b9d10..71b5111562 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryCollectionExpression.java @@ -60,7 +60,7 @@ public NumberExpression numGeometries() { * @return */ public GeometryExpression geometryN(Integer n) { - return GeometryOperation.create(Geometry.class, SpatialOps.GEOMETRYN, mixin, ConstantImpl.create(n)); + return GeometryExpressions.geometryOperation(SpatialOps.GEOMETRYN, mixin, ConstantImpl.create(n)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java index b471a97d09..215cd38c20 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpression.java @@ -104,7 +104,7 @@ public NumberExpression srid() { */ public GeometryExpression envelope() { if (envelope == null) { - envelope = GeometryOperation.create(Geometry.class, SpatialOps.ENVELOPE, mixin); + envelope = GeometryExpressions.geometryOperation(SpatialOps.ENVELOPE, mixin); } return envelope; } @@ -168,7 +168,7 @@ public BooleanExpression isSimple() { */ public GeometryExpression boundary() { if (boundary == null) { - boundary = GeometryOperation.create(Geometry.class, SpatialOps.BOUNDARY, mixin); + boundary = GeometryExpressions.geometryOperation(SpatialOps.BOUNDARY, mixin); } return boundary; } @@ -408,7 +408,7 @@ public NumberExpression distanceSpheroid(Expression * @return */ public GeometryExpression buffer(double distance) { - return GeometryOperation.create(Geometry.class, SpatialOps.BUFFER, mixin, ConstantImpl.create(distance)); + return GeometryExpressions.geometryOperation(SpatialOps.BUFFER, mixin, ConstantImpl.create(distance)); } /** @@ -420,7 +420,7 @@ public GeometryExpression buffer(double distance) { */ public GeometryExpression convexHull() { if (convexHull == null) { - convexHull = GeometryOperation.create(Geometry.class, SpatialOps.CONVEXHULL, mixin); + convexHull = GeometryExpressions.geometryOperation(SpatialOps.CONVEXHULL, mixin); } return convexHull; } @@ -444,7 +444,7 @@ public GeometryExpression intersection(Geometry geometry) { * @return */ public GeometryExpression intersection(Expression geometry) { - return GeometryOperation.create(Geometry.class, SpatialOps.INTERSECTION, mixin, geometry); + return GeometryExpressions.geometryOperation(SpatialOps.INTERSECTION, mixin, geometry); } /** @@ -466,7 +466,7 @@ public GeometryExpression union(Geometry geometry) { * @return */ public GeometryExpression union(Expression geometry) { - return GeometryOperation.create(Geometry.class, SpatialOps.UNION, mixin, geometry); + return GeometryExpressions.geometryOperation(SpatialOps.UNION, mixin, geometry); } /** @@ -488,7 +488,7 @@ public GeometryExpression difference(Geometry geometry) { * @return */ public GeometryExpression difference(Expression geometry) { - return GeometryOperation.create(Geometry.class, SpatialOps.DIFFERENCE, mixin, geometry); + return GeometryExpressions.geometryOperation(SpatialOps.DIFFERENCE, mixin, geometry); } /** @@ -510,11 +510,11 @@ public GeometryExpression symDifference(Geometry geometry) { * @return */ public GeometryExpression symDifference(Expression geometry) { - return GeometryOperation.create(Geometry.class, SpatialOps.SYMDIFFERENCE, mixin, geometry); + return GeometryExpressions.geometryOperation(SpatialOps.SYMDIFFERENCE, mixin, geometry); } public GeometryExpression transform(int srid) { - return GeometryOperation.create(Geometry.class, SpatialOps.TRANSFORM, mixin, ConstantImpl.create(srid)); + return GeometryExpressions.geometryOperation(SpatialOps.TRANSFORM, mixin, ConstantImpl.create(srid)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java index 1406307ea6..f4400dfadc 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryExpressions.java @@ -1,10 +1,14 @@ package com.querydsl.spatial; +import org.geolatte.geom.*; + import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.dsl.*; -import org.geolatte.geom.Geometry; -import org.geolatte.geom.GeometryCollection; +import com.querydsl.core.types.Operator; +import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.dsl.StringExpression; /** * GeometryExpressions contains static functions for GEO operations @@ -28,7 +32,7 @@ public static StringExpression asEWKT(GeometryExpression expr) { * @return */ public static GeometryExpression fromText(String text) { - return GeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, ConstantImpl.create(text)); + return geometryOperation(SpatialOps.GEOM_FROM_TEXT, ConstantImpl.create(text)); } /** @@ -38,7 +42,7 @@ public static GeometryExpression fromText(String text) { * @return */ public static GeometryExpression fromText(Expression text) { - return GeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, text); + return geometryOperation(SpatialOps.GEOM_FROM_TEXT, text); } /** @@ -50,7 +54,7 @@ public static GeometryExpression fromText(Expression text) { * @return */ public static GeometryExpression setSRID(Expression expr, int srid) { - return (GeometryExpression)GeometryOperation.create(expr.getType(), SpatialOps.SET_SRID, + return (GeometryExpression)geometryOperation(expr.getType(), SpatialOps.SET_SRID, expr, ConstantImpl.create(srid)); } @@ -129,7 +133,7 @@ public static BooleanExpression dwithin(Expression expr1, * @return */ public static GeometryExpression extent(Expression collection) { - return GeometryOperation.create(Geometry.class, SpatialOps.EXTENT, collection); + return geometryOperation(SpatialOps.EXTENT, collection); } /** @@ -139,7 +143,7 @@ public static GeometryExpression extent(Expression collect(Expression collection) { - return GeometryOperation.create(Geometry.class, SpatialOps.COLLECT, collection); + return geometryOperation(SpatialOps.COLLECT, collection); } /** @@ -150,7 +154,7 @@ public static GeometryExpression collect(Expression collect(Expression expr1, Expression expr2) { - return GeometryOperation.create(Geometry.class, SpatialOps.COLLECT2, expr1, expr2); + return geometryOperation(SpatialOps.COLLECT2, expr1, expr2); } /** @@ -163,7 +167,7 @@ public static GeometryExpression collect(Expression expr1 * @return */ public static GeometryExpression translate(Expression expr, float deltax, float deltay) { - return (GeometryExpression)GeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE, + return (GeometryExpression)geometryOperation(expr.getType(), SpatialOps.TRANSLATE, expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay)); } @@ -178,9 +182,64 @@ public static GeometryExpression translate(Expression * @return */ public static GeometryExpression translate(Expression expr, float deltax, float deltay, float deltaz) { - return (GeometryExpression)GeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE2, + return (GeometryExpression)geometryOperation(expr.getType(), SpatialOps.TRANSLATE2, expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay), ConstantImpl.create(deltaz)); } + /** + * Create a new Geometry operation expression + * + * @param op + * @param args + * @return + */ + public static GeometryExpression geometryOperation(Operator op, Expression... args) { + return new GeometryOperation(Geometry.class, op, args); + } + + /** + * Create a new Geometry operation expression + * + * @param op + * @param args + * @return + */ + public static GeometryExpression geometryOperation(Class type, Operator op, Expression... args) { + return new GeometryOperation(type, op, args); + } + + /** + * Create a new LineString operation expression + * + * @param op + * @param args + * @return + */ + public static LineStringExpression lineStringOperation(Operator op, Expression... args) { + return new LineStringOperation(LineString.class, op, args); + } + + /** + * Create a new Point operation expression + * + * @param op + * @param args + * @return + */ + public static PointExpression pointOperation(Operator op, Expression... args) { + return new PointOperation(Point.class, op, args); + } + + /** + * Create a new Polygon operation expression + * + * @param op + * @param args + * @return + */ + public static PolygonExpression polygonOperation(Operator op, Expression... args) { + return new PolygonOperation(Polygon.class, op, args); + } + private GeometryExpressions() {} } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java index 2878040fe8..856701a2bc 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/GeometryOperation.java @@ -33,18 +33,6 @@ public class GeometryOperation extends GeometryExpression private static final long serialVersionUID = 3433471874808633698L; - public static GeometryOperation create(Class type, Operator op, Expression one) { - return new GeometryOperation(type, op, ImmutableList.>of(one)); - } - - public static GeometryOperation create(Class type, Operator op, Expression one, Expression two) { - return new GeometryOperation(type, op, ImmutableList.of(one, two)); - } - - public static GeometryOperation create(Class type, Operator op, Expression... args) { - return new GeometryOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected GeometryOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java index 84559c56b8..6ce11635ea 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringExpression.java @@ -61,7 +61,7 @@ public NumberExpression numPoints() { * @return */ public PointExpression pointN(int idx) { - return PointOperation.create(Point.class, SpatialOps.POINTN, mixin, ConstantImpl.create(idx)); + return GeometryExpressions.pointOperation(SpatialOps.POINTN, mixin, ConstantImpl.create(idx)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java index c16a863ca8..fd7fad9f6f 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/LineStringOperation.java @@ -33,18 +33,6 @@ public class LineStringOperation extends LineStringExpress private static final long serialVersionUID = 3433471874808633698L; - public static LineStringOperation create(Class type, Operator op, Expression one) { - return new LineStringOperation(type, op, ImmutableList.>of(one)); - } - - public static LineStringOperation create(Class type, Operator op, Expression one, Expression two) { - return new LineStringOperation(type, op, ImmutableList.of(one, two)); - } - - public static LineStringOperation create(Class type, Operator op, Expression... args) { - return new LineStringOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected LineStringOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java index 605c28ff78..e65118fff9 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/MultiSurfaceExpression.java @@ -67,7 +67,7 @@ public NumberExpression area() { */ public PointExpression centroid() { if (centroid == null) { - centroid = PointOperation.create(Point.class, SpatialOps.CENTROID, mixin); + centroid = GeometryExpressions.pointOperation(SpatialOps.CENTROID, mixin); } return centroid; } @@ -79,7 +79,7 @@ public PointExpression centroid() { */ public PointExpression pointOnSurface() { if (pointOnSurface == null) { - pointOnSurface = PointOperation.create(Point.class, SpatialOps.POINT_ON_SURFACE, mixin); + pointOnSurface = GeometryExpressions.pointOperation(SpatialOps.POINT_ON_SURFACE, mixin); } return pointOnSurface; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java index 55b1b3a4a9..a1c0b5ae51 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PointOperation.java @@ -33,18 +33,6 @@ public class PointOperation extends PointExpression implemen private static final long serialVersionUID = 3433471874808633698L; - public static PointOperation create(Class type, Operator op, Expression one) { - return new PointOperation(type, op, ImmutableList.>of(one)); - } - - public static PointOperation create(Class type, Operator op, Expression one, Expression two) { - return new PointOperation(type, op, ImmutableList.of(one, two)); - } - - public static PointOperation create(Class type, Operator op, Expression... args) { - return new PointOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected PointOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java index 6941a78b12..38843b027b 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonExpression.java @@ -53,7 +53,7 @@ public PolygonExpression(Expression mixin) { */ public LineStringExpression exteriorRing() { if (exterorRing == null) { - exterorRing = LineStringOperation.create(LineString.class, SpatialOps.EXTERIOR_RING, mixin); + exterorRing = GeometryExpressions.lineStringOperation(SpatialOps.EXTERIOR_RING, mixin); } return exterorRing; } @@ -77,6 +77,6 @@ public NumberExpression numInteriorRing() { * @return */ public LineStringExpression interiorRingN(int idx) { - return LineStringOperation.create(LineString.class, SpatialOps.INTERIOR_RINGN, mixin, ConstantImpl.create(idx)); + return GeometryExpressions.lineStringOperation(SpatialOps.INTERIOR_RINGN, mixin, ConstantImpl.create(idx)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java index ec83364429..88238199ce 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolygonOperation.java @@ -33,18 +33,6 @@ public class PolygonOperation extends PolygonExpression im private static final long serialVersionUID = 3433471874808633698L; - public static PolygonOperation create(Class type, Operator op, Expression one) { - return new PolygonOperation(type, op, ImmutableList.>of(one)); - } - - public static PolygonOperation create(Class type, Operator op, Expression one, Expression two) { - return new PolygonOperation(type, op, ImmutableList.of(one, two)); - } - - public static PolygonOperation create(Class type, Operator op, Expression... args) { - return new PolygonOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected PolygonOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java index f0cd24e89d..8b6970bb6b 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/PolyhedralSurfaceExpression.java @@ -16,7 +16,6 @@ import javax.annotation.Nullable; import org.geolatte.geom.PolyHedralSurface; -import org.geolatte.geom.Polygon; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; @@ -67,7 +66,7 @@ public NumberExpression numPatches() { * @return */ public PolygonExpression patchN(int n) { - return PolygonOperation.create(Polygon.class, SpatialOps.SURFACE, mixin, ConstantImpl.create(n)); + return GeometryExpressions.polygonOperation(SpatialOps.SURFACE, mixin, ConstantImpl.create(n)); } /** diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java index 9e33f5c4ea..96231b177f 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/SurfaceExpression.java @@ -63,7 +63,7 @@ public NumberExpression area() { */ public PointExpression centroid() { if (centroid == null) { - centroid = PointOperation.create(Point.class, SpatialOps.CENTROID, mixin); + centroid = GeometryExpressions.pointOperation(SpatialOps.CENTROID, mixin); } return centroid; } @@ -75,7 +75,7 @@ public PointExpression centroid() { */ public PointExpression pointOnSurface() { if (pointOnSurface == null) { - pointOnSurface = PointOperation.create(Point.class, SpatialOps.POINT_ON_SURFACE, mixin); + pointOnSurface = GeometryExpressions.pointOperation(SpatialOps.POINT_ON_SURFACE, mixin); } return pointOnSurface; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java index 0f8e9b2f04..0accdf1bf5 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSCurveExpression.java @@ -68,7 +68,7 @@ public NumberExpression length() { */ public JTSPointExpression startPoint() { if (startPoint == null) { - startPoint = JTSPointOperation.create(Point.class, SpatialOps.START_POINT, mixin); + startPoint = JTSGeometryExpressions.pointOperation(SpatialOps.START_POINT, mixin); } return startPoint; } @@ -80,7 +80,7 @@ public JTSPointExpression startPoint() { */ public JTSPointExpression endPoint() { if (endPoint == null) { - endPoint = JTSPointOperation.create(Point.class, SpatialOps.END_POINT, mixin); + endPoint = JTSGeometryExpressions.pointOperation(SpatialOps.END_POINT, mixin); } return endPoint; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java index 9a3c69b0ab..76b4167f84 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryCollectionExpression.java @@ -60,7 +60,7 @@ public NumberExpression numGeometries() { * @return */ public JTSGeometryExpression geometryN(Integer n) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.GEOMETRYN, mixin, ConstantImpl.create(n)); + return JTSGeometryExpressions.geometryOperation(SpatialOps.GEOMETRYN, mixin, ConstantImpl.create(n)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java index fcde7c4c8c..fcde8fa8e6 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpression.java @@ -104,7 +104,7 @@ public NumberExpression srid() { */ public JTSGeometryExpression envelope() { if (envelope == null) { - envelope = JTSGeometryOperation.create(Geometry.class, SpatialOps.ENVELOPE, mixin); + envelope = JTSGeometryExpressions.geometryOperation(SpatialOps.ENVELOPE, mixin); } return envelope; } @@ -168,7 +168,7 @@ public BooleanExpression isSimple() { */ public JTSGeometryExpression boundary() { if (boundary == null) { - boundary = JTSGeometryOperation.create(Geometry.class, SpatialOps.BOUNDARY, mixin); + boundary = JTSGeometryExpressions.geometryOperation(SpatialOps.BOUNDARY, mixin); } return boundary; } @@ -408,7 +408,7 @@ public NumberExpression distanceSpheroid(Expression * @return */ public JTSGeometryExpression buffer(double distance) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.BUFFER, mixin, ConstantImpl.create(distance)); + return JTSGeometryExpressions.geometryOperation(SpatialOps.BUFFER, mixin, ConstantImpl.create(distance)); } /** @@ -420,7 +420,7 @@ public JTSGeometryExpression buffer(double distance) { */ public JTSGeometryExpression convexHull() { if (convexHull == null) { - convexHull = JTSGeometryOperation.create(Geometry.class, SpatialOps.CONVEXHULL, mixin); + convexHull = JTSGeometryExpressions.geometryOperation(SpatialOps.CONVEXHULL, mixin); } return convexHull; } @@ -444,7 +444,7 @@ public JTSGeometryExpression intersection(Geometry geometry) { * @return */ public JTSGeometryExpression intersection(Expression geometry) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.INTERSECTION, mixin, geometry); + return JTSGeometryExpressions.geometryOperation(SpatialOps.INTERSECTION, mixin, geometry); } /** @@ -466,7 +466,7 @@ public JTSGeometryExpression union(Geometry geometry) { * @return */ public JTSGeometryExpression union(Expression geometry) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.UNION, mixin, geometry); + return JTSGeometryExpressions.geometryOperation(SpatialOps.UNION, mixin, geometry); } /** @@ -488,7 +488,7 @@ public JTSGeometryExpression difference(Geometry geometry) { * @return */ public JTSGeometryExpression difference(Expression geometry) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.DIFFERENCE, mixin, geometry); + return JTSGeometryExpressions.geometryOperation(SpatialOps.DIFFERENCE, mixin, geometry); } /** @@ -510,11 +510,11 @@ public JTSGeometryExpression symDifference(Geometry geometry) { * @return */ public JTSGeometryExpression symDifference(Expression geometry) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.SYMDIFFERENCE, mixin, geometry); + return JTSGeometryExpressions.geometryOperation(SpatialOps.SYMDIFFERENCE, mixin, geometry); } public JTSGeometryExpression transform(int srid) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.TRANSFORM, mixin, ConstantImpl.create(srid)); + return JTSGeometryExpressions.geometryOperation(SpatialOps.TRANSFORM, mixin, ConstantImpl.create(srid)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java index 812a240a25..28e9994920 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryExpressions.java @@ -2,13 +2,13 @@ import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; +import com.querydsl.core.types.Operator; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.spatial.SpatialOps; -import com.vividsolutions.jts.geom.Geometry; -import com.vividsolutions.jts.geom.GeometryCollection; +import com.vividsolutions.jts.geom.*; /** * GeometryExpressions contains static functions for GEO operations @@ -32,7 +32,7 @@ public static StringExpression asEWKT(JTSGeometryExpression expr) { * @return */ public static JTSGeometryExpression fromText(String text) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, ConstantImpl.create(text)); + return geometryOperation(SpatialOps.GEOM_FROM_TEXT, ConstantImpl.create(text)); } /** @@ -42,7 +42,7 @@ public static JTSGeometryExpression fromText(String text) { * @return */ public static JTSGeometryExpression fromText(Expression text) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.GEOM_FROM_TEXT, text); + return geometryOperation(SpatialOps.GEOM_FROM_TEXT, text); } /** @@ -54,7 +54,7 @@ public static JTSGeometryExpression fromText(Expression text) { * @return */ public static JTSGeometryExpression setSRID(Expression expr, int srid) { - return (JTSGeometryExpression)JTSGeometryOperation.create(expr.getType(), SpatialOps.SET_SRID, + return (JTSGeometryExpression)geometryOperation(expr.getType(), SpatialOps.SET_SRID, expr, ConstantImpl.create(srid)); } @@ -133,7 +133,7 @@ public static BooleanExpression dwithin(Expression expr1, * @return */ public static JTSGeometryExpression extent(Expression collection) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.EXTENT, collection); + return geometryOperation(SpatialOps.EXTENT, collection); } /** @@ -143,7 +143,7 @@ public static JTSGeometryExpression extent(Expression collect(Expression collection) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.COLLECT, collection); + return geometryOperation(SpatialOps.COLLECT, collection); } /** @@ -154,7 +154,7 @@ public static JTSGeometryExpression collect(Expression collect(Expression expr1, Expression expr2) { - return JTSGeometryOperation.create(Geometry.class, SpatialOps.COLLECT2, expr1, expr2); + return geometryOperation(SpatialOps.COLLECT2, expr1, expr2); } /** @@ -167,7 +167,7 @@ public static JTSGeometryExpression collect(Expression ex * @return */ public static JTSGeometryExpression translate(Expression expr, float deltax, float deltay) { - return (JTSGeometryExpression)JTSGeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE, + return (JTSGeometryExpression)geometryOperation(expr.getType(), SpatialOps.TRANSLATE, expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay)); } @@ -182,9 +182,64 @@ public static JTSGeometryExpression translate(Expression * @return */ public static JTSGeometryExpression translate(Expression expr, float deltax, float deltay, float deltaz) { - return (JTSGeometryExpression)JTSGeometryOperation.create(expr.getType(), SpatialOps.TRANSLATE2, + return (JTSGeometryExpression)geometryOperation(expr.getType(), SpatialOps.TRANSLATE2, expr, ConstantImpl.create(deltax), ConstantImpl.create(deltay), ConstantImpl.create(deltaz)); } + /** + * Create a new Geometry operation expression + * + * @param op + * @param args + * @return + */ + public static JTSGeometryExpression geometryOperation(Operator op, Expression... args) { + return new JTSGeometryOperation(Geometry.class, op, args); + } + + /** + * Create a new Geometry operation expression + * + * @param op + * @param args + * @return + */ + public static JTSGeometryExpression geometryOperation(Class type, Operator op, Expression... args) { + return new JTSGeometryOperation(type, op, args); + } + + /** + * Create a new LineString operation expression + * + * @param op + * @param args + * @return + */ + public static JTSLineStringExpression lineStringOperation(Operator op, Expression... args) { + return new JTSLineStringOperation(LineString.class, op, args); + } + + /** + * Create a new Point operation expression + * + * @param op + * @param args + * @return + */ + public static JTSPointExpression pointOperation(Operator op, Expression... args) { + return new JTSPointOperation(Point.class, op, args); + } + + /** + * Create a new Polygon operation expression + * + * @param op + * @param args + * @return + */ + public static JTSPolygonExpression polygonOperation(Operator op, Expression... args) { + return new JTSPolygonOperation(Polygon.class, op, args); + } + private JTSGeometryExpressions() {} } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java index 2081365898..e90a652ce7 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSGeometryOperation.java @@ -33,18 +33,6 @@ public class JTSGeometryOperation extends JTSGeometryExpress private static final long serialVersionUID = 3433471874808633698L; - public static JTSGeometryOperation create(Class type, Operator op, Expression one) { - return new JTSGeometryOperation(type, op, ImmutableList.>of(one)); - } - - public static JTSGeometryOperation create(Class type, Operator op, Expression one, Expression two) { - return new JTSGeometryOperation(type, op, ImmutableList.of(one, two)); - } - - public static JTSGeometryOperation create(Class type, Operator op, Expression... args) { - return new JTSGeometryOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected JTSGeometryOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java index 39a2c979fc..2571ff1452 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringExpression.java @@ -61,7 +61,7 @@ public NumberExpression numPoints() { * @return */ public JTSPointExpression pointN(int idx) { - return JTSPointOperation.create(Point.class, SpatialOps.POINTN, mixin, ConstantImpl.create(idx)); + return JTSGeometryExpressions.pointOperation(SpatialOps.POINTN, mixin, ConstantImpl.create(idx)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java index 4b7138eabd..f1304ecbf9 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSLineStringOperation.java @@ -33,18 +33,6 @@ public class JTSLineStringOperation extends JTSLineStringE private static final long serialVersionUID = 3433471874808633698L; - public static JTSLineStringOperation create(Class type, Operator op, Expression one) { - return new JTSLineStringOperation(type, op, ImmutableList.>of(one)); - } - - public static JTSLineStringOperation create(Class type, Operator op, Expression one, Expression two) { - return new JTSLineStringOperation(type, op, ImmutableList.of(one, two)); - } - - public static JTSLineStringOperation create(Class type, Operator op, Expression... args) { - return new JTSLineStringOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected JTSLineStringOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java index d6d2e3b617..6d95878ff7 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSMultiSurfaceExpression.java @@ -67,7 +67,7 @@ public NumberExpression area() { */ public JTSPointExpression centroid() { if (centroid == null) { - centroid = JTSPointOperation.create(Point.class, SpatialOps.CENTROID, mixin); + centroid = JTSGeometryExpressions.pointOperation(SpatialOps.CENTROID, mixin); } return centroid; } @@ -79,7 +79,7 @@ public JTSPointExpression centroid() { */ public JTSPointExpression pointOnSurface() { if (pointOnSurface == null) { - pointOnSurface = JTSPointOperation.create(Point.class, SpatialOps.POINT_ON_SURFACE, mixin); + pointOnSurface = JTSGeometryExpressions.pointOperation(SpatialOps.POINT_ON_SURFACE, mixin); } return pointOnSurface; } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java index fbe4271565..49aa97316f 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPointOperation.java @@ -33,18 +33,6 @@ public class JTSPointOperation extends JTSPointExpression im private static final long serialVersionUID = 3433471874808633698L; - public static JTSPointOperation create(Class type, Operator op, Expression one) { - return new JTSPointOperation(type, op, ImmutableList.>of(one)); - } - - public static JTSPointOperation create(Class type, Operator op, Expression one, Expression two) { - return new JTSPointOperation(type, op, ImmutableList.of(one, two)); - } - - public static JTSPointOperation create(Class type, Operator op, Expression... args) { - return new JTSPointOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected JTSPointOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java index b10481343e..90244dec4e 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonExpression.java @@ -53,7 +53,7 @@ public JTSPolygonExpression(Expression mixin) { */ public JTSLineStringExpression exteriorRing() { if (exteriorRing == null) { - exteriorRing = JTSLineStringOperation.create(LineString.class, SpatialOps.EXTERIOR_RING, mixin); + exteriorRing = JTSGeometryExpressions.lineStringOperation(SpatialOps.EXTERIOR_RING, mixin); } return exteriorRing; } @@ -77,6 +77,6 @@ public NumberExpression numInteriorRing() { * @return */ public JTSLineStringExpression interiorRingN(int idx) { - return JTSLineStringOperation.create(LineString.class, SpatialOps.INTERIOR_RINGN, mixin, ConstantImpl.create(idx)); + return JTSGeometryExpressions.lineStringOperation(SpatialOps.INTERIOR_RINGN, mixin, ConstantImpl.create(idx)); } } diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java index d9849dce0c..e76155d815 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSPolygonOperation.java @@ -33,18 +33,6 @@ public class JTSPolygonOperation extends JTSPolygonExpression private static final long serialVersionUID = 3433471874808633698L; - public static JTSPolygonOperation create(Class type, Operator op, Expression one) { - return new JTSPolygonOperation(type, op, ImmutableList.>of(one)); - } - - public static JTSPolygonOperation create(Class type, Operator op, Expression one, Expression two) { - return new JTSPolygonOperation(type, op, ImmutableList.of(one, two)); - } - - public static JTSPolygonOperation create(Class type, Operator op, Expression... args) { - return new JTSPolygonOperation(type, op, args); - } - private final OperationImpl< T> opMixin; protected JTSPolygonOperation(Class type, Operator op, Expression... args) { diff --git a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java index 995d948abf..e8c93f8e87 100644 --- a/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java +++ b/querydsl-spatial/src/main/java/com/querydsl/spatial/jts/JTSSurfaceExpression.java @@ -63,7 +63,7 @@ public NumberExpression area() { */ public JTSPointExpression centroid() { if (centroid == null) { - centroid = JTSPointOperation.create(Point.class, SpatialOps.CENTROID, mixin); + centroid = JTSGeometryExpressions.pointOperation(SpatialOps.CENTROID, mixin); } return centroid; } @@ -75,7 +75,7 @@ public JTSPointExpression centroid() { */ public JTSPointExpression pointOnSurface() { if (pointOnSurface == null) { - pointOnSurface = JTSPointOperation.create(Point.class, SpatialOps.POINT_ON_SURFACE, mixin); + pointOnSurface = JTSGeometryExpressions.pointOperation(SpatialOps.POINT_ON_SURFACE, mixin); } return pointOnSurface; } From 1ed736b46856dcfeaed3f4163061500e0845602f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Tue, 17 Mar 2015 22:05:53 +0200 Subject: [PATCH 0808/1968] Combine package contents --- .../java/com/querydsl/apt/SpatialSupport.java | 4 +- .../apt/com/querydsl/BooleanExtensions.java | 2 +- .../apt/com/querydsl/BooleanExtensions2.java | 2 +- .../java/com/querydsl/apt/DateExtensions.java | 4 +- .../com/querydsl/apt/EntityExtensions.java | 4 +- .../apt/domain/AbstractClasses2Test.java | 2 +- .../apt/domain/AbstractClassesTest.java | 2 +- .../com/querydsl/apt/domain/Array2Test.java | 4 +- .../com/querydsl/apt/domain/ArrayExtTest.java | 2 +- .../querydsl/apt/domain/CollectionTest.java | 6 +- .../querydsl/apt/domain/Delegate2Test.java | 4 +- .../querydsl/apt/domain/Delegate3Test.java | 6 +- .../com/querydsl/apt/domain/DelegateTest.java | 2 +- .../querydsl/apt/domain/Embeddable2Test.java | 2 +- .../com/querydsl/apt/domain/EntityTest.java | 3 +- .../com/querydsl/apt/domain/Generic3Test.java | 2 +- .../apt/domain/InterfaceTypeTest.java | 4 +- .../java/com/querydsl/apt/domain/JDOTest.java | 4 +- .../java/com/querydsl/apt/domain/JPATest.java | 2 +- .../apt/domain/JodaTimeSupportTest.java | 8 +- .../apt/domain/LiteralEntityTest.java | 2 +- .../querydsl/apt/domain/Properties3Test.java | 2 +- .../apt/domain/QueryEmbedded6Test.java | 2 +- .../apt/domain/QueryEmbedded7Test.java | 4 +- .../querydsl/apt/domain/QueryExcludeTest.java | 2 +- .../apt/domain/QueryProjectionTest.java | 13 +- .../querydsl/apt/domain/QueryTypeTest.java | 2 +- .../com/querydsl/apt/domain/RelationTest.java | 2 +- .../querydsl/apt/domain/SignatureTest.java | 2 +- .../querydsl/apt/domain/SimpleTypesTest.java | 2 +- .../querydsl/apt/domain/Temporal2Test.java | 9 +- .../com/querydsl/apt/domain/TemporalTest.java | 4 +- .../com/querydsl/apt/domain/UserUtils.java | 2 +- .../apt/inheritance/Inheritance3Test.java | 4 +- .../apt/inheritance/Inheritance4Test.java | 6 +- .../apt/inheritance/Inheritance5Test.java | 2 +- .../apt/inheritance/Inheritance6Test.java | 4 +- .../apt/inheritance/Inheritance8Test.java | 2 +- .../codegen/EmbeddableSerializer.java | 3 +- .../querydsl/codegen/EntitySerializer.java | 14 +- .../querydsl/codegen/JavaTypeMappings.java | 2 - .../test/java/com/querydsl/codegen/Point.java | 2 +- .../querydsl/collections/CollQueryMixin.java | 4 +- .../com/querydsl/collections/AliasTest.java | 18 +- .../com/querydsl/collections/AnimalTest.java | 2 +- .../querydsl/collections/BigDecimalTest.java | 5 +- .../com/querydsl/collections/CatTest.java | 2 +- .../querydsl/collections/CollQueryTest.java | 21 +- .../querydsl/collections/DistinctTest.java | 7 +- .../com/querydsl/collections/JacocoTest.java | 2 +- .../collections/JodaTimeTemplatesTest.java | 13 +- .../com/querydsl/collections/MathTest.java | 5 +- .../com/querydsl/collections/MockTest.java | 7 +- .../com/querydsl/collections/NumberTest.java | 9 +- .../com/querydsl/collections/PagingTest.java | 5 +- .../java/com/querydsl/collections/QCar.java | 6 +- .../com/querydsl/collections/QPerson.java | 4 +- .../collections/StringHandlingTest.java | 7 +- .../querydsl/collections/TypeCastTest.java | 2 +- .../java/com/querydsl/core/Detachable.java | 18 +- .../java/com/querydsl/core/alias/Alias.java | 27 +- .../core/alias/DefaultPathFactory.java | 47 +- .../core/support/CollectionAnyVisitor.java | 9 +- .../core/support/DetachableAdapter.java | 18 +- .../core/support/DetachableMixin.java | 1 - .../core/support/DetachableQuery.java | 18 +- .../querydsl/core/support/ReplaceVisitor.java | 4 +- .../core/types/{path => dsl}/ArrayPath.java | 14 +- .../core/types/{path => dsl}/BeanPath.java | 6 +- .../core/types/{path => dsl}/BooleanPath.java | 15 +- .../types/{query => dsl}/BooleanSubQuery.java | 4 +- .../{template => dsl}/BooleanTemplate.java | 30 +- .../core/types/dsl/CollectionOperation.java | 4 +- .../types/{path => dsl}/CollectionPath.java | 17 +- .../{path => dsl}/CollectionPathBase.java | 13 +- .../{path => dsl}/ComparableEntityPath.java | 8 +- .../types/{path => dsl}/ComparablePath.java | 15 +- .../{query => dsl}/ComparableSubQuery.java | 5 +- .../{template => dsl}/ComparableTemplate.java | 25 +- .../core/types/{path => dsl}/Constants.java | 2 +- .../core/types/{path => dsl}/DatePath.java | 15 +- .../types/{query => dsl}/DateSubQuery.java | 5 +- .../types/{template => dsl}/DateTemplate.java | 25 +- .../types/{path => dsl}/DateTimePath.java | 15 +- .../{query => dsl}/DateTimeSubQuery.java | 5 +- .../{template => dsl}/DateTimeTemplate.java | 26 +- .../core/types/{path => dsl}/DslPath.java | 8 +- .../types/{template => dsl}/DslTemplate.java | 25 +- .../types/{path => dsl}/EntityPathBase.java | 2 +- .../core/types/{path => dsl}/EnumPath.java | 15 +- .../types/{template => dsl}/EnumTemplate.java | 25 +- .../querydsl/core/types/dsl/Expressions.java | 466 +++++++++++++++++- .../ExtendedSubQueryExpression.java | 2 +- .../core/types/{path => dsl}/ListPath.java | 18 +- .../types/{query => dsl}/ListSubQuery.java | 3 +- .../core/types/{path => dsl}/MapPath.java | 17 +- .../core/types/{path => dsl}/NumberPath.java | 15 +- .../types/{query => dsl}/NumberSubQuery.java | 5 +- .../core/types/dsl/NumberTemplate.java | 62 +++ .../core/types/{path => dsl}/PathBuilder.java | 3 +- .../{path => dsl}/PathBuilderFactory.java | 2 +- .../{path => dsl}/PathBuilderValidator.java | 2 +- .../core/types/{path => dsl}/PathInits.java | 2 +- .../core/types/{path => dsl}/SetPath.java | 15 +- .../core/types/{path => dsl}/SimplePath.java | 23 +- .../types/{query => dsl}/SimpleSubQuery.java | 5 +- .../{template => dsl}/SimpleTemplate.java | 26 +- .../core/types/{path => dsl}/StringPath.java | 15 +- .../types/{query => dsl}/StringSubQuery.java | 5 +- .../{template => dsl}/StringTemplate.java | 26 +- .../core/types/{path => dsl}/TimePath.java | 15 +- .../types/{query => dsl}/TimeSubQuery.java | 5 +- .../types/{template => dsl}/TimeTemplate.java | 26 +- .../core/types/path/package-info.java | 18 - .../core/types/query/package-info.java | 18 - .../core/types/template/NumberTemplate.java | 94 ---- .../core/types/template/package-info.java | 19 - .../com/querydsl/core/BooleanBuilderTest.java | 10 +- .../core/DefaultQueryMetadataTest.java | 7 +- .../java/com/querydsl/core/FilterFactory.java | 2 +- .../querydsl/core/MatchingFiltersFactory.java | 2 +- .../com/querydsl/core/ProjectionsFactory.java | 2 +- .../querydsl/core/QDefaultQueryMetadata.java | 16 +- .../com/querydsl/core/QueryExecution.java | 2 +- .../core/QueryMetadaSerializationTest.java | 8 +- .../querydsl/core/domain/QAbstractEntity.java | 6 +- .../com/querydsl/core/domain/QAnimal.java | 6 +- .../java/com/querydsl/core/domain/QCat.java | 6 +- .../core/domain/QCommonIdentifiable.java | 13 +- .../core/domain/QCommonPersistence.java | 4 +- .../com/querydsl/core/domain/QCompany.java | 3 +- .../querydsl/core/domain/QCompanyGroup.java | 3 +- .../querydsl/core/domain/QCompanyGroupPK.java | 4 +- .../com/querydsl/core/domain/QCompanyPK.java | 3 +- .../com/querydsl/core/domain/QIdNamePair.java | 4 +- .../querydsl/core/domain/QMyEmbeddable.java | 3 +- .../querydsl/core/domain/QSuperSupertype.java | 4 +- .../com/querydsl/core/domain/QSuperclass.java | 4 +- .../core/domain/query/QAbstractEntity.java | 6 +- .../querydsl/core/domain/query/QAnimal.java | 9 +- .../com/querydsl/core/domain/query/QCat.java | 6 +- .../domain/query/QCommonIdentifiable.java | 9 +- .../core/domain/query/QCommonPersistence.java | 4 +- .../querydsl/core/domain/query/QCompany.java | 3 +- .../core/domain/query/QCompanyGroup.java | 3 +- .../core/domain/query/QCompanyGroupPK.java | 4 +- .../core/domain/query/QCompanyPK.java | 3 +- .../core/domain/query/QIdNamePair.java | 6 +- .../core/domain/query/QMyEmbeddable.java | 4 +- .../core/domain/query/QSuperSupertype.java | 4 +- .../core/domain/query/QSuperclass.java | 4 +- .../domain/query2/QAbstractEntityType.java | 6 +- .../core/domain/query2/QAnimalType.java | 9 +- .../querydsl/core/domain/query2/QCatType.java | 6 +- .../query2/QCommonIdentifiableType.java | 8 +- .../domain/query2/QCommonPersistenceType.java | 4 +- .../domain/query2/QCompanyGroupPKType.java | 6 +- .../core/domain/query2/QCompanyGroupType.java | 4 +- .../core/domain/query2/QCompanyPKType.java | 4 +- .../core/domain/query2/QCompanyType.java | 4 +- .../core/domain/query2/QIdNamePairType.java | 6 +- .../core/domain/query2/QMyEmbeddableType.java | 4 +- .../domain/query2/QSuperSupertypeType.java | 6 +- .../core/domain/query2/QSuperclassType.java | 6 +- .../core/domain/query3/QTAbstractEntity.java | 6 +- .../querydsl/core/domain/query3/QTAnimal.java | 6 +- .../querydsl/core/domain/query3/QTCat.java | 6 +- .../domain/query3/QTCommonIdentifiable.java | 8 +- .../domain/query3/QTCommonPersistence.java | 4 +- .../core/domain/query3/QTCompany.java | 4 +- .../core/domain/query3/QTCompanyGroup.java | 4 +- .../core/domain/query3/QTCompanyGroupPK.java | 6 +- .../core/domain/query3/QTCompanyPK.java | 4 +- .../core/domain/query3/QTIdNamePair.java | 6 +- .../core/domain/query3/QTMyEmbeddable.java | 4 +- .../core/domain/query3/QTSuperSupertype.java | 6 +- .../core/domain/query3/QTSuperclass.java | 6 +- .../com/querydsl/core/domain2/QABase.java | 4 +- .../com/querydsl/core/domain2/QAImpl.java | 4 +- .../querydsl/core/domain2/QTenantImpl.java | 2 +- .../core/group/AbstractGroupByTest.java | 22 +- .../serialization/SerializerBaseTest.java | 7 +- .../core/support/DetachableMixinTest.java | 2 +- .../core/support/EnumConversionTest.java | 13 +- .../core/support/NumberConversionsTest.java | 19 +- .../support/QueryMixinPerformanceTest.java | 2 +- .../core/support/ReplaceVisitorTest.java | 9 +- .../support/SimpleProjectableAdapterTest.java | 4 +- .../querydsl/core/types/CaseBuilderTest.java | 9 +- .../core/types/ConstructorExpressionTest.java | 9 +- .../core/types/DeepPopulationTest.java | 11 +- .../types/ExpressionSerializationTest.java | 5 +- .../core/types/ExpressionUtilsTest.java | 18 +- .../querydsl/core/types/ExpressivityTest.java | 16 +- .../core/types/MappingProjectionTest.java | 7 +- .../core/types/NestedExpressionTest.java | 11 +- .../querydsl/core/types/ProjectionsTest.java | 2 +- .../core/types/QBeanFieldAccessTest.java | 8 +- .../core/types/QBeanPropertyTest.java | 2 +- .../com/querydsl/core/types/QBeanTest.java | 9 +- .../com/querydsl/core/types/QListTest.java | 4 +- .../com/querydsl/core/types/QMapTest.java | 17 +- .../com/querydsl/core/types/QTupleTest.java | 23 +- .../core/types/SerializationTest.java | 5 +- .../querydsl/core/types/SignatureTest.java | 6 +- .../core/types/ToStringVisitorTest.java | 2 +- .../core/types/ValidatingVisitorTest.java | 7 +- .../dsl/ArrayConstructorExpressionTest.java | 1 - .../types/{path => dsl}/ArrayPathTest.java | 3 +- .../types/{path => dsl}/BeanPathTest.java | 7 +- .../core/types/dsl/BooleanExpressionTest.java | 2 - .../BooleanTemplateTest.java | 6 +- .../querydsl/core/types/dsl/CoalesceTest.java | 2 - .../{path => dsl}/CollectionPathTest.java | 4 +- .../types/dsl/ComparableExpressionTest.java | 2 - .../core/types/dsl/ExpressionsTest.java | 33 +- .../com/querydsl/core/types/dsl/Gender.java | 5 + .../types/{path => dsl}/ListPathTest.java | 6 +- .../{query => dsl}/ListSubQueryTest.java | 5 +- .../core/types/{path => dsl}/MapPathTest.java | 4 +- .../core/types/dsl/NumberExpressionTest.java | 2 - .../types/{path => dsl}/NumberPathTest.java | 3 +- .../core/types/dsl/OperationTest.java | 1 - .../{path => dsl}/PathBuilderFactoryTest.java | 5 +- .../types/{path => dsl}/PathBuilderTest.java | 2 +- .../PathBuilderValidatorTest.java | 4 +- .../types/{path => dsl}/PathInitsTest.java | 4 +- .../core/types/{path => dsl}/PathTest.java | 3 +- .../querydsl/core/types/dsl/QTupleTest.java | 3 - .../core/types/{path => dsl}/SetPathTest.java | 4 +- .../core/types/dsl/SimpleExpressionTest.java | 15 - .../types/{query => dsl}/SubQueryTest.java | 3 +- .../TemplateExpressionTest.java | 40 +- .../core/types/{path => dsl}/User.java | 2 +- .../com/querydsl/core/types/path/Gender.java | 5 - .../content/general/creating-queries.xml | 6 +- .../content/general/creating-queries.xml | 4 +- .../com/querydsl/hibernate/search/QUser.java | 4 +- .../java/com/querydsl/jdo/JDOSubQuery.java | 2 +- .../com/querydsl/jdo/JDOQLMethodsTest.java | 4 +- .../com/querydsl/jdo/test/domain/QBook.java | 8 +- .../querydsl/jdo/test/domain/QProduct.java | 12 +- .../com/querydsl/jdo/test/domain/QStore.java | 10 +- .../querydsl/jdo/test/domain/sql/SBook.java | 6 +- .../jdo/test/domain/sql/SProduct.java | 10 +- .../querydsl/jdo/test/domain/sql/SStore.java | 6 +- .../jdo/test/domain/sql/SStoreProducts.java | 4 +- .../test/domain/sql/SStoreProductsbyname.java | 6 +- .../com/querydsl/jpa/AbstractJPASubQuery.java | 7 +- .../querydsl/jpa/JPACollectionAnyVisitor.java | 8 +- .../java/com/querydsl/jpa/JPAQueryBase.java | 11 +- .../java/com/querydsl/jpa/JPAQueryMixin.java | 2 +- .../java/com/querydsl/jpa/JPQLSerializer.java | 5 +- .../jpa/support/JPAPathBuilderValidator.java | 2 +- .../src/test/java/PackagelessEntityTest.java | 2 +- .../com/querydsl/jpa/AbstractJPATest.java | 21 +- .../test/java/com/querydsl/jpa/CastTest.java | 4 +- .../querydsl/jpa/CustomExpressionsTest.java | 2 +- .../java/com/querydsl/jpa/CustomFinder.java | 13 +- .../java/com/querydsl/jpa/DateTimeTest.java | 10 +- .../java/com/querydsl/jpa/FeaturesTest.java | 9 +- .../com/querydsl/jpa/JPAQueryMixinTest.java | 14 +- .../com/querydsl/jpa/JPQLSerializerTest.java | 17 +- .../test/java/com/querydsl/jpa/JoinTest.java | 5 +- .../test/java/com/querydsl/jpa/MathTest.java | 2 +- .../querydsl/jpa/NativeSQLSerializerTest.java | 2 +- .../java/com/querydsl/jpa/OrderHelper.java | 2 +- .../com/querydsl/jpa/OrderHelperTest.java | 2 +- .../test/java/com/querydsl/jpa/QArticle.java | 5 +- .../test/java/com/querydsl/jpa/QContent.java | 4 +- .../test/java/com/querydsl/jpa/QPerson.java | 3 +- .../jpa/RelationalFunctionCallTest.java | 4 +- .../querydsl/jpa/StringOperationsTest.java | 4 +- .../java/com/querydsl/jpa/SubQueryTest.java | 2 +- .../com/querydsl/jpa/domain/sql/SAccount.java | 4 +- .../com/querydsl/jpa/domain/sql/SAnimal.java | 13 +- .../querydsl/jpa/domain/sql/SAuditlog.java | 2 +- .../com/querydsl/jpa/domain/sql/SAuthor.java | 4 +- .../com/querydsl/jpa/domain/sql/SBar.java | 4 +- .../com/querydsl/jpa/domain/sql/SBook.java | 4 +- .../jpa/domain/sql/SBookBookmarks.java | 4 +- .../com/querydsl/jpa/domain/sql/SBookid.java | 2 +- .../querydsl/jpa/domain/sql/SBookversion.java | 4 +- .../querydsl/jpa/domain/sql/SCalendar.java | 2 +- .../jpa/domain/sql/SCalendarHolidays.java | 6 +- .../com/querydsl/jpa/domain/sql/SCatalog.java | 4 +- .../jpa/domain/sql/SCatalog_price.java | 2 +- .../querydsl/jpa/domain/sql/SCategory.java | 6 +- .../jpa/domain/sql/SCategory_category.java | 2 +- .../domain/sql/SCategory_categoryprop.java | 2 +- .../jpa/domain/sql/SCategoryprop.java | 4 +- .../com/querydsl/jpa/domain/sql/SChild2.java | 2 +- .../com/querydsl/jpa/domain/sql/SCompany.java | 4 +- .../jpa/domain/sql/SCompany_department.java | 2 +- .../querydsl/jpa/domain/sql/SCustomer.java | 2 +- .../querydsl/jpa/domain/sql/SDateTest.java | 2 +- .../querydsl/jpa/domain/sql/SDepartment.java | 4 +- .../jpa/domain/sql/SDepartment_employee.java | 2 +- .../querydsl/jpa/domain/sql/SDocument.java | 6 +- .../querydsl/jpa/domain/sql/SDocument2.java | 6 +- .../jpa/domain/sql/SDocumentprop.java | 4 +- .../querydsl/jpa/domain/sql/SEmployee.java | 4 +- .../jpa/domain/sql/SEmployeeJobFunctions.java | 4 +- .../com/querydsl/jpa/domain/sql/SEntity1.java | 4 +- .../querydsl/jpa/domain/sql/SEviltype.java | 2 +- .../com/querydsl/jpa/domain/sql/SFoo.java | 6 +- .../querydsl/jpa/domain/sql/SFooNames.java | 4 +- .../com/querydsl/jpa/domain/sql/SFormula.java | 2 +- .../jpa/domain/sql/SGeneratedKeys.java | 4 +- .../querydsl/jpa/domain/sql/SHumanHairs.java | 2 +- .../jpa/domain/sql/SInheritedproperties.java | 4 +- .../com/querydsl/jpa/domain/sql/SItem.java | 4 +- .../jpa/domain/sql/SItem_statuschange.java | 2 +- .../com/querydsl/jpa/domain/sql/SKittens.java | 2 +- .../querydsl/jpa/domain/sql/SKittensSet.java | 2 +- .../com/querydsl/jpa/domain/sql/SLibrary.java | 2 +- .../querydsl/jpa/domain/sql/SLineItems.java | 2 +- .../querydsl/jpa/domain/sql/SLocation.java | 4 +- .../com/querydsl/jpa/domain/sql/SMammal.java | 4 +- .../com/querydsl/jpa/domain/sql/SName.java | 4 +- .../jpa/domain/sql/SNameListNames.java | 4 +- .../com/querydsl/jpa/domain/sql/SNamed.java | 4 +- .../querydsl/jpa/domain/sql/SNamelist.java | 2 +- .../querydsl/jpa/domain/sql/SNationality.java | 2 +- .../com/querydsl/jpa/domain/sql/SNumeric.java | 2 +- .../com/querydsl/jpa/domain/sql/SOrder.java | 4 +- .../sql/SOrderDeliveredItemIndices.java | 2 +- .../querydsl/jpa/domain/sql/SOrder_item.java | 2 +- .../querydsl/jpa/domain/sql/SParameter.java | 2 +- .../com/querydsl/jpa/domain/sql/SParent.java | 4 +- .../com/querydsl/jpa/domain/sql/SParent2.java | 2 +- .../com/querydsl/jpa/domain/sql/SPerson.java | 6 +- .../querydsl/jpa/domain/sql/SPersonid.java | 4 +- .../com/querydsl/jpa/domain/sql/SPlayer.java | 2 +- .../jpa/domain/sql/SPlayerScores.java | 2 +- .../com/querydsl/jpa/domain/sql/SPrice.java | 2 +- .../com/querydsl/jpa/domain/sql/SShapes.java | 4 +- .../com/querydsl/jpa/domain/sql/SShow.java | 2 +- .../querydsl/jpa/domain/sql/SShowActs.java | 4 +- .../querydsl/jpa/domain/sql/SSimpletypes.java | 13 +- .../com/querydsl/jpa/domain/sql/SStatus.java | 4 +- .../jpa/domain/sql/SStatuschange.java | 4 +- .../com/querydsl/jpa/domain/sql/SStore.java | 2 +- .../jpa/domain/sql/SStore_customer.java | 2 +- .../com/querydsl/jpa/domain/sql/SSurvey.java | 4 +- .../com/querydsl/jpa/domain/sql/STest.java | 2 +- .../querydsl/jpa/domain/sql/STimeTest.java | 2 +- .../com/querydsl/jpa/domain/sql/SUser.java | 4 +- .../com/querydsl/jpa/domain/sql/SUser2.java | 6 +- .../jpa/domain/sql/SUser2_userprop.java | 2 +- .../querydsl/jpa/domain/sql/SUserprop.java | 6 +- .../jpa/domain/sql/SUserprop_category.java | 2 +- .../domain/sql/SUserprop_categoryprop.java | 2 +- .../com/querydsl/jpa/domain/sql/SWorld.java | 2 +- .../querydsl/jpa/domain/sql/SWorldMammal.java | 2 +- .../com/querydsl/lucene3/LuceneQueryTest.java | 18 +- .../LuceneSerializerNotTokenizedTest.java | 5 +- .../lucene3/LuceneSerializerTest.java | 8 +- .../querydsl/lucene3/PhraseElementTest.java | 5 +- .../java/com/querydsl/lucene3/QDocument.java | 6 +- .../com/querydsl/lucene3/TermElementTest.java | 5 +- .../com/querydsl/lucene4/LuceneQueryTest.java | 24 +- .../LuceneSerializerNotTokenizedTest.java | 5 +- .../lucene4/LuceneSerializerTest.java | 8 +- .../querydsl/lucene4/PhraseElementTest.java | 5 +- .../java/com/querydsl/lucene4/QDocument.java | 6 +- .../com/querydsl/lucene4/TermElementTest.java | 5 +- .../mongodb/AbstractMongodbQuery.java | 2 +- .../main/java/com/querydsl/mongodb/Point.java | 2 +- .../querydsl/mongodb/MongodbQueryTest.java | 4 +- .../mongodb/MongodbSerializerTest.java | 2 +- .../querydsl/scala/sql/ExampleSchema.scala | 2 +- .../scala/sql/JDBCIntegrationTest.scala | 2 +- .../{path => }/GeometryCollectionPath.java | 9 +- .../spatial/{path => }/GeometryPath.java | 3 +- .../spatial/{path => }/GeometryPaths.java | 2 +- .../spatial/{path => }/LineStringPath.java | 2 +- .../spatial/{path => }/LinearRingPath.java | 2 +- .../{path => }/MultiLineStringPath.java | 2 +- .../spatial/{path => }/MultiPointPath.java | 2 +- .../spatial/{path => }/MultiPolygonPath.java | 2 +- .../spatial/{path => }/PointPath.java | 2 +- .../spatial/{path => }/PolygonPath.java | 2 +- .../{path => }/PolyhedralSurfacePath.java | 2 +- .../{path => }/JTSGeometryCollectionPath.java | 2 +- .../jts/{path => }/JTSGeometryPath.java | 3 +- .../jts/{path => }/JTSGeometryPaths.java | 2 +- .../jts/{path => }/JTSLineStringPath.java | 2 +- .../jts/{path => }/JTSLinearRingPath.java | 2 +- .../{path => }/JTSMultiLineStringPath.java | 2 +- .../jts/{path => }/JTSMultiPointPath.java | 2 +- .../jts/{path => }/JTSMultiPolygonPath.java | 2 +- .../spatial/jts/{path => }/JTSPointPath.java | 2 +- .../jts/{path => }/JTSPolygonPath.java | 2 +- .../spatial/{path => }/GeometryPathTest.java | 2 +- .../jts/{path => }/JTSGeometryPathTest.java | 2 +- .../querydsl/sql/codegen/SpatialSupport.java | 20 +- .../querydsl/sql/spatial/QSpatialRefSys.java | 4 +- .../sql/spatial/RelationalPathSpatial.java | 22 +- .../com/querydsl/sql/spatial/QShapes.java | 4 +- .../com/querydsl/sql/spatial/SpatialBase.java | 5 +- .../com/querydsl/sql/DetachableSQLQuery.java | 5 +- .../com/querydsl/sql/ProjectableSQLQuery.java | 10 +- .../com/querydsl/sql/RelationalPathBase.java | 2 +- .../java/com/querydsl/sql/SQLSerializer.java | 5 +- .../com/querydsl/sql/WindowFirstLast.java | 13 +- .../java/com/querydsl/sql/WindowFunction.java | 6 +- .../java/com/querydsl/sql/WithinGroup.java | 15 +- .../querydsl/sql/oracle/OracleGrammar.java | 13 +- .../sql/AbstractSQLTemplatesTest.java | 14 +- .../com/querydsl/sql/DateArithmeticTest.java | 5 +- .../com/querydsl/sql/ExtendedSQLTest.java | 6 +- .../querydsl/sql/FirebirdTemplatesTest.java | 11 +- .../com/querydsl/sql/KeyAccessorsTest.java | 2 +- .../test/java/com/querydsl/sql/KeyTest.java | 2 +- .../com/querydsl/sql/KeywordQuotingBase.java | 4 +- .../com/querydsl/sql/ListSubQueryTest.java | 2 +- .../com/querydsl/sql/OracleTemplatesTest.java | 12 +- .../querydsl/sql/PostgreSQLTemplatesTest.java | 13 +- .../java/com/querydsl/sql/PrecedenceTest.java | 7 +- .../java/com/querydsl/sql/QBean2Test.java | 6 +- .../java/com/querydsl/sql/QCompanies.java | 4 +- .../querydsl/sql/QGeneratedKeysEntity.java | 4 +- .../test/java/com/querydsl/sql/QPerson.java | 8 +- .../sql/RelationalFunctionCallTest.java | 11 +- .../com/querydsl/sql/SQLSerializerTest.java | 6 +- .../sql/SQLServer2005TemplatesTest.java | 13 +- .../sql/SQLServer2012TemplatesTest.java | 13 +- .../querydsl/sql/SQLServerTemplatesTest.java | 13 +- .../com/querydsl/sql/SQLSubQueryTest.java | 8 +- .../com/querydsl/sql/SQLTemplatesTest.java | 22 +- .../com/querydsl/sql/SQLiteTemplatesTest.java | 11 +- .../java/com/querydsl/sql/SelectBase.java | 92 ++-- .../sql/SelectWindowFunctionsBase.java | 21 +- .../com/querydsl/sql/SerializationTest.java | 2 +- .../java/com/querydsl/sql/SubqueriesBase.java | 8 +- .../java/com/querydsl/sql/TemplateTest.java | 15 +- .../test/java/com/querydsl/sql/UnionBase.java | 27 +- .../com/querydsl/sql/UnionSubQueryTest.java | 27 +- .../com/querydsl/sql/WindowFunctionTest.java | 2 +- .../com/querydsl/sql/WithinGroupTest.java | 2 +- .../com/querydsl/sql/domain/QDateTest.java | 2 +- .../com/querydsl/sql/domain/QEmployee.java | 8 +- .../querydsl/sql/domain/QEmployeeNoPK.java | 8 +- .../com/querydsl/sql/domain/QNumberTest.java | 4 +- .../java/com/querydsl/sql/domain/QSurvey.java | 4 +- .../com/querydsl/sql/domain/QSurveyNoPK.java | 4 +- .../java/com/querydsl/sql/domain/QTest_.java | 4 +- .../java/com/querydsl/sql/domain/QUuids.java | 2 +- .../com/querydsl/sql/domain/QXmlTest.java | 2 +- 450 files changed, 1836 insertions(+), 1815 deletions(-) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/ArrayPath.java (86%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/BeanPath.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/BooleanPath.java (78%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/BooleanSubQuery.java (92%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/BooleanTemplate.java (57%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/CollectionPath.java (84%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/CollectionPathBase.java (85%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/ComparableEntityPath.java (81%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/ComparablePath.java (75%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/ComparableSubQuery.java (90%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/ComparableTemplate.java (56%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/Constants.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/DatePath.java (76%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/DateSubQuery.java (90%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/DateTemplate.java (57%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/DateTimePath.java (75%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/DateTimeSubQuery.java (90%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/DateTimeTemplate.java (55%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/DslPath.java (88%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/DslTemplate.java (58%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/EntityPathBase.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/EnumPath.java (75%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/EnumTemplate.java (58%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/ExtendedSubQueryExpression.java (96%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/ListPath.java (85%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/ListSubQuery.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/MapPath.java (87%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/NumberPath.java (75%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/NumberSubQuery.java (90%) create mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberTemplate.java rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/PathBuilder.java (99%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/PathBuilderFactory.java (97%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/PathBuilderValidator.java (98%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/PathInits.java (98%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/SetPath.java (84%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/SimplePath.java (75%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/SimpleSubQuery.java (90%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/SimpleTemplate.java (56%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/StringPath.java (78%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/StringSubQuery.java (90%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/StringTemplate.java (61%) rename querydsl-core/src/main/java/com/querydsl/core/types/{path => dsl}/TimePath.java (75%) rename querydsl-core/src/main/java/com/querydsl/core/types/{query => dsl}/TimeSubQuery.java (90%) rename querydsl-core/src/main/java/com/querydsl/core/types/{template => dsl}/TimeTemplate.java (56%) delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/path/package-info.java delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/query/package-info.java delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java delete mode 100644 querydsl-core/src/main/java/com/querydsl/core/types/template/package-info.java rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/ArrayPathTest.java (91%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/BeanPathTest.java (94%) rename querydsl-core/src/test/java/com/querydsl/core/types/{template => dsl}/BooleanTemplateTest.java (82%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/CollectionPathTest.java (91%) create mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/dsl/Gender.java rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/ListPathTest.java (90%) rename querydsl-core/src/test/java/com/querydsl/core/types/{query => dsl}/ListSubQueryTest.java (93%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/MapPathTest.java (91%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/NumberPathTest.java (95%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/PathBuilderFactoryTest.java (88%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/PathBuilderTest.java (99%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/PathBuilderValidatorTest.java (96%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/PathInitsTest.java (94%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/PathTest.java (99%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/SetPathTest.java (91%) rename querydsl-core/src/test/java/com/querydsl/core/types/{query => dsl}/SubQueryTest.java (96%) rename querydsl-core/src/test/java/com/querydsl/core/types/{template => dsl}/TemplateExpressionTest.java (73%) rename querydsl-core/src/test/java/com/querydsl/core/types/{path => dsl}/User.java (94%) delete mode 100644 querydsl-core/src/test/java/com/querydsl/core/types/path/Gender.java rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/GeometryCollectionPath.java (88%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/GeometryPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/GeometryPaths.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/LineStringPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/LinearRingPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/MultiLineStringPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/MultiPointPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/MultiPolygonPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/PointPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/PolygonPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/{path => }/PolyhedralSurfacePath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSGeometryCollectionPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSGeometryPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSGeometryPaths.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSLineStringPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSLinearRingPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSMultiLineStringPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSMultiPointPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSMultiPolygonPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSPointPath.java (98%) rename querydsl-spatial/src/main/java/com/querydsl/spatial/jts/{path => }/JTSPolygonPath.java (98%) rename querydsl-spatial/src/test/java/com/querydsl/spatial/{path => }/GeometryPathTest.java (97%) rename querydsl-spatial/src/test/java/com/querydsl/spatial/jts/{path => }/JTSGeometryPathTest.java (97%) diff --git a/querydsl-apt/src/main/java/com/querydsl/apt/SpatialSupport.java b/querydsl-apt/src/main/java/com/querydsl/apt/SpatialSupport.java index 07f65917e2..94eed31e62 100644 --- a/querydsl-apt/src/main/java/com/querydsl/apt/SpatialSupport.java +++ b/querydsl-apt/src/main/java/com/querydsl/apt/SpatialSupport.java @@ -28,7 +28,7 @@ private static void registerTypes(TypeMappings typeMappings) { for (Map.Entry entry : additions.entrySet()) { typeMappings.register( new SimpleType("org.geolatte.geom."+ entry.getKey()), - new SimpleType("com.querydsl.spatial.path." + entry.getValue())); + new SimpleType("com.querydsl.spatial." + entry.getValue())); } } @@ -46,7 +46,7 @@ private static void registerJTSTypes(TypeMappings typeMappings) { for (Map.Entry entry : additions.entrySet()) { typeMappings.register( new SimpleType("com.vividsolutions.jts.geom."+ entry.getKey()), - new SimpleType("com.querydsl.spatial.jts.path." + entry.getValue())); + new SimpleType("com.querydsl.spatial.jts." + entry.getValue())); } } diff --git a/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions.java b/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions.java index 402f120b03..bea086d9d7 100644 --- a/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions.java +++ b/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions.java @@ -2,7 +2,7 @@ import com.querydsl.core.annotations.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BooleanPath; public class BooleanExtensions { diff --git a/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions2.java b/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions2.java index 202ce572c0..68b97467d6 100644 --- a/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions2.java +++ b/querydsl-apt/src/test/apt/com/querydsl/BooleanExtensions2.java @@ -2,7 +2,7 @@ import com.querydsl.core.annotations.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BooleanPath; public class BooleanExtensions2 { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java b/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java index 69ac92fbf1..162955e79c 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/DateExtensions.java @@ -18,13 +18,13 @@ import com.querydsl.core.annotations.QueryDelegate; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.dsl.DateExpression; -import com.querydsl.core.types.path.BooleanPath; +import com.querydsl.core.types.dsl.Expressions; public class DateExtensions { @QueryDelegate(Date.class) public static Predicate extension(DateExpression date) { - return new BooleanPath("b"); + return Expressions.booleanPath("b"); } } diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/EntityExtensions.java b/querydsl-apt/src/test/java/com/querydsl/apt/EntityExtensions.java index f3b66055c4..cb447ee750 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/EntityExtensions.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/EntityExtensions.java @@ -15,13 +15,13 @@ import com.querydsl.core.annotations.QueryDelegate; import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.path.BooleanPath; +import com.querydsl.core.types.dsl.Expressions; public class EntityExtensions { @QueryDelegate(EntityWithExtensions.class) public static Predicate extension(QEntityWithExtensions entity) { - return new BooleanPath("b"); + return Expressions.booleanPath("b"); } } diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClasses2Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClasses2Test.java index 945a9b9f6b..2b265c2b5c 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClasses2Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClasses2Test.java @@ -24,7 +24,7 @@ import org.junit.Assert; import org.junit.Test; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.NumberPath; @SuppressWarnings("serial") public class AbstractClasses2Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClassesTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClassesTest.java index fa175cce38..51b8858810 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClassesTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/AbstractClassesTest.java @@ -25,7 +25,7 @@ import org.junit.Assert; import org.junit.Test; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.NumberPath; @SuppressWarnings("serial") public class AbstractClassesTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Array2Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Array2Test.java index bffa2440bd..512ce3c659 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Array2Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Array2Test.java @@ -3,7 +3,7 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryProjection; -import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.dsl.Expressions; public class Array2Test { @@ -19,7 +19,7 @@ public Example(byte[] param0) { @Test public void test() { - new QArray2Test_Example(new SimplePath(byte[].class, "bytes")).newInstance(new byte[0]); + new QArray2Test_Example(Expressions.path(byte[].class, "bytes")).newInstance(new byte[0]); } } diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/ArrayExtTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/ArrayExtTest.java index a31eeaf487..81f42d8330 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/ArrayExtTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/ArrayExtTest.java @@ -21,7 +21,7 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; public class ArrayExtTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java index fb4c276906..4dd8d5aaed 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/CollectionTest.java @@ -21,9 +21,9 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.ListPath; -import com.querydsl.core.types.path.MapPath; -import com.querydsl.core.types.path.SetPath; +import com.querydsl.core.types.dsl.ListPath; +import com.querydsl.core.types.dsl.MapPath; +import com.querydsl.core.types.dsl.SetPath; public class CollectionTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java index 0e3b9f6bd3..1d85ed6e26 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate2Test.java @@ -21,8 +21,8 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Path; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; -import com.querydsl.core.types.template.NumberTemplate; public class Delegate2Test { @@ -38,7 +38,7 @@ public static class Point { @QueryDelegate(Point.class) public static NumberExpression geoDistance(Path point, Point other) { - return NumberTemplate.create(Integer.class, "geo_distance({0},{1})", point, ConstantImpl.create(other)); + return Expressions.numberTemplate(Integer.class, "geo_distance({0},{1})", point, ConstantImpl.create(other)); } @Test diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java index 1fc760c278..c4a0fece16 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Delegate3Test.java @@ -4,8 +4,8 @@ import com.querydsl.core.annotations.QueryDelegate; import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.path.ComparablePath; -import com.querydsl.core.types.template.BooleanTemplate; +import com.querydsl.core.types.dsl.ComparablePath; +import com.querydsl.core.types.dsl.Expressions; public class Delegate3Test { @@ -28,7 +28,7 @@ public static class Polygon extends Geometry { @QueryDelegate(Geometry.class) public static BooleanExpression isWithin( ComparablePath geo1, ComparablePath geo2){ - return BooleanTemplate.TRUE; + return Expressions.TRUE; } @Test diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/DelegateTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/DelegateTest.java index e2815d3561..d5f37c69dc 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/DelegateTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/DelegateTest.java @@ -23,7 +23,7 @@ import com.querydsl.core.annotations.QuerySupertype; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Expression; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.StringPath; public class DelegateTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable2Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable2Test.java index 45ddeba065..b838a04adc 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable2Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Embeddable2Test.java @@ -23,7 +23,7 @@ import com.querydsl.core.annotations.QuerySupertype; import com.querydsl.core.domain.MyEmbeddable; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.PathInits; +import com.querydsl.core.types.dsl.PathInits; public class Embeddable2Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/EntityTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/EntityTest.java index eb67c57bfe..0bf23ed7b1 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/EntityTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/EntityTest.java @@ -20,9 +20,8 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QueryInit; import com.querydsl.core.annotations.QuerySupertype; -import com.querydsl.core.domain.*; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.PathInits; +import com.querydsl.core.types.dsl.PathInits; public class EntityTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Generic3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Generic3Test.java index ccab1a03a7..16453ff5aa 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Generic3Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Generic3Test.java @@ -5,7 +5,7 @@ import org.junit.Test; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.StringPath; public class Generic3Test extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/InterfaceTypeTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/InterfaceTypeTest.java index e36d941288..81c86350b5 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/InterfaceTypeTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/InterfaceTypeTest.java @@ -18,8 +18,8 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.ListPath; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.ListPath; +import com.querydsl.core.types.dsl.NumberPath; public class InterfaceTypeTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JDOTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JDOTest.java index 929cac14b8..3c542cd013 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JDOTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JDOTest.java @@ -20,8 +20,8 @@ import org.junit.Test; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringPath; public class JDOTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JPATest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JPATest.java index 433a2bcf9b..e6fa4d98b7 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JPATest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JPATest.java @@ -18,7 +18,7 @@ import org.junit.Test; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.StringPath; public class JPATest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaTimeSupportTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaTimeSupportTest.java index d1819b155c..0f8df84c3b 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaTimeSupportTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/JodaTimeSupportTest.java @@ -17,10 +17,10 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.ComparablePath; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.DateTimePath; -import com.querydsl.core.types.path.TimePath; +import com.querydsl.core.types.dsl.ComparablePath; +import com.querydsl.core.types.dsl.DatePath; +import com.querydsl.core.types.dsl.DateTimePath; +import com.querydsl.core.types.dsl.TimePath; public class JodaTimeSupportTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/LiteralEntityTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/LiteralEntityTest.java index 6c30d494f0..d8b8474bfd 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/LiteralEntityTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/LiteralEntityTest.java @@ -19,7 +19,7 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.EnumPath; +import com.querydsl.core.types.dsl.EnumPath; public class LiteralEntityTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java index 78365ddfe1..4b1b0094ee 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties3Test.java @@ -8,7 +8,7 @@ import org.joda.time.LocalDateTime; import org.junit.Test; -import com.querydsl.core.types.path.DateTimePath; +import com.querydsl.core.types.dsl.DateTimePath; public class Properties3Test extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded6Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded6Test.java index 9b9b4c6f1d..09a2164028 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded6Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded6Test.java @@ -21,7 +21,7 @@ import com.querydsl.core.annotations.QueryEmbedded; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.dsl.EntityPathBase; public class QueryEmbedded6Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded7Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded7Test.java index 1caa03dac9..ad0b89ae08 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded7Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryEmbedded7Test.java @@ -11,8 +11,8 @@ import com.querydsl.core.annotations.QueryEmbedded; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringPath; public class QueryEmbedded7Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryExcludeTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryExcludeTest.java index dad17c254f..ca957a3cc4 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryExcludeTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryExcludeTest.java @@ -19,7 +19,7 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QueryExclude; -import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.dsl.EntityPathBase; public class QueryExcludeTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java index 66fc934a7a..cd8a63a25f 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryProjectionTest.java @@ -24,10 +24,7 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QueryProjection; import com.querydsl.core.annotations.QueryType; -import com.querydsl.core.types.dsl.NumberExpression; -import com.querydsl.core.types.dsl.StringExpression; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.*; public class QueryProjectionTest { @@ -65,8 +62,8 @@ public EntityWithProjection(String param0, CharSequence param1) { @Test public void Entity_Case() { - NumberExpression longExpr = new NumberPath(Long.class, "x"); - StringExpression stringExpr = new StringPath("x"); + NumberExpression longExpr = Expressions.numberPath(Long.class, "x"); + StringExpression stringExpr = Expressions.stringPath("x"); QQueryProjectionTest_EntityWithProjection.create(longExpr).newInstance(0l); QQueryProjectionTest_EntityWithProjection.create(stringExpr).newInstance(""); @@ -118,8 +115,8 @@ public DTOWithProjection(String param0, CharSequence param1, Map pa @Test public void Dto_Case() throws SecurityException, NoSuchMethodException{ - NumberExpression longExpr = new NumberPath(Long.class, "x"); - StringExpression stringExpr = new StringPath("x"); + NumberExpression longExpr = Expressions.numberPath(Long.class, "x"); + StringExpression stringExpr = Expressions.stringPath("x"); new QQueryProjectionTest_DTOWithProjection(longExpr).newInstance(0l); new QQueryProjectionTest_DTOWithProjection(stringExpr).newInstance(""); diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryTypeTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryTypeTest.java index c7739c4e42..06e3a3a7b4 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryTypeTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/QueryTypeTest.java @@ -18,7 +18,7 @@ import com.querydsl.core.annotations.PropertyType; import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QueryType; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; public class QueryTypeTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/RelationTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/RelationTest.java index 192db4c909..fe327f9537 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/RelationTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/RelationTest.java @@ -22,7 +22,7 @@ import com.querydsl.apt.domain.rel.RelationType2; import com.querydsl.core.annotations.Config; import com.querydsl.core.annotations.QueryEntity; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; public class RelationTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/SignatureTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/SignatureTest.java index 43e1e0f43d..d202aa030c 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/SignatureTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/SignatureTest.java @@ -20,7 +20,7 @@ import org.junit.Test; import com.querydsl.core.annotations.QuerySupertype; -import com.querydsl.core.types.path.ComparablePath; +import com.querydsl.core.types.dsl.ComparablePath; public class SignatureTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/SimpleTypesTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/SimpleTypesTest.java index 83c33a25e0..cb4d4df75c 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/SimpleTypesTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/SimpleTypesTest.java @@ -27,7 +27,7 @@ import org.junit.Test; import com.querydsl.core.annotations.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; public class SimpleTypesTest extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Temporal2Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Temporal2Test.java index 87ecf23f61..65b05e8c01 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Temporal2Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Temporal2Test.java @@ -11,8 +11,9 @@ import org.junit.Test; import com.querydsl.core.annotations.QueryProjection; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.DatePath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberPath; public class Temporal2Test { @@ -34,8 +35,8 @@ public Cheque(Date param0, BigDecimal param1) { @Test public void test() { - DatePath datePath = new DatePath(Date.class, "date"); - NumberPath numberPath = new NumberPath(BigDecimal.class, "num"); + DatePath datePath = Expressions.datePath(Date.class, "date"); + NumberPath numberPath = Expressions.numberPath(BigDecimal.class, "num"); new QTemporal2Test_Cheque(datePath, numberPath); } diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/TemporalTest.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/TemporalTest.java index 132bdae5d2..be239a004c 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/TemporalTest.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/TemporalTest.java @@ -10,8 +10,8 @@ import org.junit.Test; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.TimePath; +import com.querydsl.core.types.dsl.DatePath; +import com.querydsl.core.types.dsl.TimePath; public class TemporalTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/UserUtils.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/UserUtils.java index 018317d9d1..d1f61460d6 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/domain/UserUtils.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/UserUtils.java @@ -14,7 +14,7 @@ package com.querydsl.apt.domain; import com.querydsl.core.annotations.QueryDelegate; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.StringPath; public final class UserUtils { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance3Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance3Test.java index 44c999db75..d6669e1161 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance3Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance3Test.java @@ -22,8 +22,8 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.apt.domain.AbstractTest; -import com.querydsl.core.types.path.SimplePath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.SimplePath; +import com.querydsl.core.types.dsl.StringPath; public class Inheritance3Test extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance4Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance4Test.java index f6c23c14fd..401b7a5568 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance4Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance4Test.java @@ -17,9 +17,9 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.apt.domain.AbstractTest; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.SimplePath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.SimplePath; +import com.querydsl.core.types.dsl.StringPath; public class Inheritance4Test extends AbstractTest { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance5Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance5Test.java index 8c320064ce..fa7fdb0f96 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance5Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance5Test.java @@ -22,7 +22,7 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QuerySupertype; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.NumberPath; public class Inheritance5Test { diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance6Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance6Test.java index 977fa85e05..6e82a6b526 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance6Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance6Test.java @@ -22,8 +22,8 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.annotations.QuerySupertype; -import com.querydsl.core.types.path.DateTimePath; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.DateTimePath; +import com.querydsl.core.types.dsl.NumberPath; /** * Test multiple level superclasses with generics. diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance8Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance8Test.java index c4b884470c..cc45d05223 100644 --- a/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance8Test.java +++ b/querydsl-apt/src/test/java/com/querydsl/apt/inheritance/Inheritance8Test.java @@ -20,7 +20,7 @@ import com.querydsl.core.annotations.QueryEntity; import com.querydsl.core.domain.CommonIdentifiable; import com.querydsl.core.domain.CommonPersistence; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.NumberPath; public class Inheritance8Test { diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/EmbeddableSerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/EmbeddableSerializer.java index 8606255239..3147d79a82 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/EmbeddableSerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/EmbeddableSerializer.java @@ -25,7 +25,8 @@ import com.mysema.codegen.model.TypeCategory; import com.mysema.codegen.model.Types; import com.querydsl.core.types.Path; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; + import static com.mysema.codegen.Symbols.UNCHECKED; /** diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java index 798c7df910..9340c103d3 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java @@ -30,9 +30,7 @@ import com.mysema.codegen.CodeWriter; import com.mysema.codegen.model.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.ComparableExpression; -import com.querydsl.core.types.dsl.SimpleExpression; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; /** * EntitySerializer is a {@link Serializer} implementation for entity types @@ -410,15 +408,7 @@ protected void introImports(CodeWriter writer, SerializerConfig config, introDelegatePackages(writer, model); // other packages - List packages = Lists.newArrayList(); - packages.add(SimplePath.class.getPackage()); - if (!model.getConstructors().isEmpty()) { - packages.add(SimpleExpression.class.getPackage()); - } - if (isImportExprPackage(model)) { - packages.add(ComparableExpression.class.getPackage()); - } - writer.imports(packages.toArray(new Package[packages.size()])); + writer.imports(SimpleExpression.class.getPackage()); // other classes List> classes = Lists.>newArrayList(PathMetadata.class, Generated.class); diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java index a4d09ec0b1..5991a330ef 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/JavaTypeMappings.java @@ -17,8 +17,6 @@ import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; import com.querydsl.core.types.dsl.*; -import com.querydsl.core.types.path.*; -import com.querydsl.core.types.template.*; /** * JavaTypeMappings defines mappings from {@link TypeCategory} instances to {@link Expression} types diff --git a/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java b/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java index 4e52751292..95c7a11f00 100644 --- a/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java +++ b/querydsl-codegen/src/test/java/com/querydsl/codegen/Point.java @@ -15,7 +15,7 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.ArrayPath; +import com.querydsl.core.types.dsl.ArrayPath; public class Point extends ArrayPath{ diff --git a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java index cc5ebd6bde..2bb3c9dcee 100644 --- a/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java +++ b/querydsl-collections/src/main/java/com/querydsl/collections/CollQueryMixin.java @@ -20,7 +20,7 @@ import com.querydsl.core.types.ExpressionUtils; import com.querydsl.core.types.Path; import com.querydsl.core.types.Predicate; -import com.querydsl.core.types.template.BooleanTemplate; +import com.querydsl.core.types.dsl.Expressions; /** * CollQueryMixin extends {@link QueryMixin} to provide normalization logic specific to this module @@ -31,7 +31,7 @@ */ public class CollQueryMixin extends QueryMixin { - private static final Predicate ANY = BooleanTemplate.create("any"); + private static final Predicate ANY = Expressions.booleanTemplate("any"); public CollQueryMixin() {} diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/AliasTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/AliasTest.java index 530a56fa7c..b00918d7cd 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/AliasTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/AliasTest.java @@ -13,14 +13,9 @@ */ package com.querydsl.collections; -import static com.querydsl.core.alias.Alias.$; -import static com.querydsl.core.alias.Alias.alias; -import static com.querydsl.core.alias.Alias.var; import static com.querydsl.collections.CollQueryFactory.from; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static com.querydsl.core.alias.Alias.*; +import static org.junit.Assert.*; import java.util.Date; @@ -28,8 +23,9 @@ import org.junit.Test; import com.querydsl.core.alias.Alias; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringPath; public class AliasTest extends AbstractQueryTest { @@ -147,7 +143,7 @@ public void Alias3() { @Test public void Various1() { - StringPath str = new StringPath("str"); + StringPath str = Expressions.stringPath("str"); for (String s : from(str, "a", "ab", "cd", "de").where(str.startsWith("a")).list(str)) { assertTrue(s.equals("a") || s.equals("ab")); System.out.println(s); @@ -165,7 +161,7 @@ public void Various2() { @Test public void Various3() { - NumberPath num = new NumberPath(Integer.class, "num"); + NumberPath num = Expressions.numberPath(Integer.class, "num"); for (Integer i : from(num, 1, 2, 3, 4).where(num.lt(4)).list(num)) { System.out.println(i); } diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/AnimalTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/AnimalTest.java index b55676705e..78b2d85696 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/AnimalTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/AnimalTest.java @@ -18,7 +18,7 @@ import org.junit.Test; -import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.dsl.SimplePath; public class AnimalTest { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/BigDecimalTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/BigDecimalTest.java index 6c0b743c58..e08448f355 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/BigDecimalTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/BigDecimalTest.java @@ -5,13 +5,14 @@ import org.junit.Test; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberPath; public class BigDecimalTest { @Test public void Arithmetic() { - NumberPath num = new NumberPath(BigDecimal.class, "num"); + NumberPath num = Expressions.numberPath(BigDecimal.class, "num"); CollQuery query = CollQueryFactory.from(num, Arrays.asList(BigDecimal.ONE, BigDecimal.ONE)); query.list(num.add(BigDecimal.ONE)); query.list(num.subtract(BigDecimal.ONE)); diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CatTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CatTest.java index 5c2cf64d0d..86cc5e3672 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CatTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CatTest.java @@ -17,7 +17,7 @@ import org.junit.Test; -import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.dsl.SimplePath; public class CatTest { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java index 8c316e151d..01f612d600 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/CollQueryTest.java @@ -13,22 +13,25 @@ */ package com.querydsl.collections; +import static com.querydsl.collections.CollQueryFactory.from; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import java.math.BigDecimal; import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.List; +import org.junit.Test; + import com.querydsl.core.Tuple; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Ops; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.NumberExpression; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; -import org.junit.Test; -import static com.querydsl.collections.CollQueryFactory.from; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringPath; public class CollQueryTest extends AbstractQueryTest { @@ -123,8 +126,8 @@ public void SimpleCases() { @Test public void Various() { - StringPath a = new StringPath("a"); - StringPath b = new StringPath("b"); + StringPath a = Expressions.stringPath("a"); + StringPath b = Expressions.stringPath("b"); for (Tuple strs : from(a, "aa", "bb", "cc") .from(b, Arrays.asList("a","b")) .where(a.startsWith(b)).list(a, b)) { @@ -145,7 +148,7 @@ public void Various() { @Test public void BigDecimals() { - NumberPath a = new NumberPath(BigDecimal.class, "cost"); + NumberPath a = Expressions.numberPath(BigDecimal.class, "cost"); List nums = from(a, new BigDecimal("2.1"), new BigDecimal("20.21"), new BigDecimal("44.4")).where(a.lt(new BigDecimal("35.1"))).list(a); diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/DistinctTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/DistinctTest.java index 4f4d40bf2b..82d3b9c6f0 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/DistinctTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/DistinctTest.java @@ -20,12 +20,13 @@ import org.junit.Test; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberPath; public class DistinctTest extends AbstractQueryTest { - private NumberPath intVar1 = new NumberPath(Integer.class, "var1"); - private NumberPath intVar2 = new NumberPath(Integer.class, "var2"); + private NumberPath intVar1 = Expressions.numberPath(Integer.class, "var1"); + private NumberPath intVar2 = Expressions.numberPath(Integer.class, "var2"); private List list1 = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 4, 4, 4); private List list2 = Arrays.asList(2, 2, 3, 3, 3, 4, 4, 4, 4, 4); diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/JacocoTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/JacocoTest.java index dcc3bbe41e..8b3e32a7f9 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/JacocoTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/JacocoTest.java @@ -8,7 +8,7 @@ import org.junit.Test; import com.querydsl.core.alias.Alias; -import com.querydsl.core.types.path.EntityPathBase; +import com.querydsl.core.types.dsl.EntityPathBase; public class JacocoTest { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/JodaTimeTemplatesTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/JodaTimeTemplatesTest.java index c3da9899a0..1d06594c8a 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/JodaTimeTemplatesTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/JodaTimeTemplatesTest.java @@ -7,9 +7,10 @@ import org.joda.time.LocalTime; import org.junit.Test; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.DateTimePath; -import com.querydsl.core.types.path.TimePath; +import com.querydsl.core.types.dsl.DatePath; +import com.querydsl.core.types.dsl.DateTimePath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.TimePath; public class JodaTimeTemplatesTest { @@ -17,7 +18,7 @@ public class JodaTimeTemplatesTest { @Test public void DateTime() { - DateTimePath entity = new DateTimePath(DateTime.class, "entity"); + DateTimePath entity = Expressions.dateTimePath(DateTime.class, "entity"); query.from(entity, Arrays.asList(new DateTime(), new DateTime(0l))) .list(entity.year(), entity.yearMonth(), entity.month(), entity.week(), entity.dayOfMonth(), entity.dayOfWeek(), entity.dayOfYear(), @@ -26,7 +27,7 @@ public void DateTime() { @Test public void LocalDate() { - DatePath entity = new DatePath(LocalDate.class, "entity"); + DatePath entity = Expressions.datePath(LocalDate.class, "entity"); query.from(entity, Arrays.asList(new LocalDate(), new LocalDate(0l))) .list(entity.year(), entity.yearMonth(), entity.month(), entity.week(), entity.dayOfMonth(), entity.dayOfWeek(), entity.dayOfYear()); @@ -34,7 +35,7 @@ public void LocalDate() { @Test public void LocalTime() { - TimePath entity = new TimePath(LocalTime.class, "entity"); + TimePath entity = Expressions.timePath(LocalTime.class, "entity"); query.from(entity, Arrays.asList(new LocalTime(), new LocalTime(0l))) .list(entity.hour(), entity.minute(), entity.second(), entity.milliSecond()); } diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java index 08cfa4ca63..47f05576e9 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/MathTest.java @@ -7,12 +7,13 @@ import org.junit.Test; import com.querydsl.core.types.Expression; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.MathExpressions; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.NumberPath; public class MathTest { - private NumberPath num = new NumberPath(Double.class, "num"); + private NumberPath num = Expressions.numberPath(Double.class, "num"); @Test public void Math() { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/MockTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/MockTest.java index 75836ecc19..d22cb7cee0 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/MockTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/MockTest.java @@ -1,6 +1,6 @@ package com.querydsl.collections; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; import java.util.List; @@ -8,14 +8,15 @@ import org.junit.Test; import com.google.common.collect.Lists; -import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.SimplePath; public class MockTest { @Test public void test() { List tests = Lists.newArrayList(new MockTest(), new MockTest(), new MockTest()); - SimplePath path = new SimplePath(MockTest.class, "obj"); + SimplePath path = Expressions.path(MockTest.class, "obj"); MockTest mock = EasyMock.createMock(MockTest.class); assertTrue(CollQueryFactory.from(path, tests).where(path.eq(mock)).list(path).isEmpty()); } diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/NumberTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/NumberTest.java index a096f4d47d..958025ab69 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/NumberTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/NumberTest.java @@ -1,17 +1,20 @@ package com.querydsl.collections; +import static org.junit.Assert.assertEquals; + import java.math.BigDecimal; import java.util.Arrays; -import com.querydsl.core.types.path.NumberPath; import org.junit.Test; -import static org.junit.Assert.*; + +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberPath; public class NumberTest { @Test public void sum() throws Exception { - final NumberPath num = new NumberPath(BigDecimal.class, "num"); + final NumberPath num = Expressions.numberPath(BigDecimal.class, "num"); final CollQuery query = CollQueryFactory.from(num, Arrays.asList(new BigDecimal("1.6"), new BigDecimal("1.3"))); assertEquals(new BigDecimal("2.9"), query.uniqueResult(num.sum())); diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/PagingTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/PagingTest.java index 413e1c0a4f..ebfcb7c0c6 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/PagingTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/PagingTest.java @@ -23,13 +23,14 @@ import com.mysema.commons.lang.IteratorAdapter; import com.querydsl.core.QueryModifiers; import com.querydsl.core.SearchResults; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.NumberPath; public class PagingTest extends AbstractQueryTest { private List ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); - private NumberPath var = new NumberPath(Integer.class, "var"); + private NumberPath var = Expressions.numberPath(Integer.class, "var"); @Test public void test() { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java b/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java index 347c9d10e7..4f10df5f9f 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/QCar.java @@ -1,9 +1,9 @@ package com.querydsl.collections; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringPath; public class QCar extends BeanPath { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java b/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java index b32b38d4e0..767d56ad66 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/QPerson.java @@ -1,8 +1,8 @@ package com.querydsl.collections; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.StringPath; public class QPerson extends BeanPath { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/StringHandlingTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/StringHandlingTest.java index 67801a04fd..afc00a7ea8 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/StringHandlingTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/StringHandlingTest.java @@ -22,7 +22,8 @@ import org.junit.Test; import com.querydsl.core.Tuple; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.Expressions; +import com.querydsl.core.types.dsl.StringPath; public class StringHandlingTest extends AbstractQueryTest { @@ -32,9 +33,9 @@ public class StringHandlingTest extends AbstractQueryTest { private List data = Arrays.asList("abc", "aBC", "def"); - private final StringPath a = new StringPath("a"); + private final StringPath a = Expressions.stringPath("a"); - private final StringPath b = new StringPath("b"); + private final StringPath b = Expressions.stringPath("b"); @Test public void EqualsIgnoreCase() { diff --git a/querydsl-collections/src/test/java/com/querydsl/collections/TypeCastTest.java b/querydsl-collections/src/test/java/com/querydsl/collections/TypeCastTest.java index 95ca8c7242..559a75a982 100644 --- a/querydsl-collections/src/test/java/com/querydsl/collections/TypeCastTest.java +++ b/querydsl-collections/src/test/java/com/querydsl/collections/TypeCastTest.java @@ -18,7 +18,7 @@ import org.junit.Ignore; import org.junit.Test; -import com.querydsl.core.types.path.PathInits; +import com.querydsl.core.types.dsl.PathInits; public class TypeCastTest { diff --git a/querydsl-core/src/main/java/com/querydsl/core/Detachable.java b/querydsl-core/src/main/java/com/querydsl/core/Detachable.java index daad712f36..44ac02c5db 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/Detachable.java +++ b/querydsl-core/src/main/java/com/querydsl/core/Detachable.java @@ -22,15 +22,15 @@ import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.TimeExpression; -import com.querydsl.core.types.query.BooleanSubQuery; -import com.querydsl.core.types.query.ComparableSubQuery; -import com.querydsl.core.types.query.DateSubQuery; -import com.querydsl.core.types.query.DateTimeSubQuery; -import com.querydsl.core.types.query.ListSubQuery; -import com.querydsl.core.types.query.NumberSubQuery; -import com.querydsl.core.types.query.SimpleSubQuery; -import com.querydsl.core.types.query.StringSubQuery; -import com.querydsl.core.types.query.TimeSubQuery; +import com.querydsl.core.types.dsl.BooleanSubQuery; +import com.querydsl.core.types.dsl.ComparableSubQuery; +import com.querydsl.core.types.dsl.DateSubQuery; +import com.querydsl.core.types.dsl.DateTimeSubQuery; +import com.querydsl.core.types.dsl.ListSubQuery; +import com.querydsl.core.types.dsl.NumberSubQuery; +import com.querydsl.core.types.dsl.SimpleSubQuery; +import com.querydsl.core.types.dsl.StringSubQuery; +import com.querydsl.core.types.dsl.TimeSubQuery; /** * Detachable defines methods for the construction of SubQuery instances diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java b/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java index 1333453648..6e0af61b44 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/Alias.java @@ -28,24 +28,7 @@ import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.dsl.SimpleExpression; -import com.querydsl.core.types.path.ArrayPath; -import com.querydsl.core.types.path.BooleanPath; -import com.querydsl.core.types.path.CollectionPath; -import com.querydsl.core.types.path.ComparablePath; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.DateTimePath; -import com.querydsl.core.types.path.EntityPathBase; -import com.querydsl.core.types.path.EnumPath; -import com.querydsl.core.types.path.ListPath; -import com.querydsl.core.types.path.MapPath; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.PathBuilder; -import com.querydsl.core.types.path.SetPath; -import com.querydsl.core.types.path.SimplePath; -import com.querydsl.core.types.path.StringPath; -import com.querydsl.core.types.path.TimePath; +import com.querydsl.core.types.dsl.*; /** * Alias provides alias factory methods @@ -57,7 +40,7 @@ public final class Alias { private static final AliasFactory aliasFactory = new AliasFactory(new DefaultPathFactory(), new DefaultTypeSystem()); - private static final SimplePath it = new SimplePath(Object.class, PathMetadataFactory.forVariable("it")); + private static final SimplePath it = Expressions.path(Object.class, "it"); // exclude $-methods from Checkstyle checks //CHECKSTYLE:OFF @@ -250,12 +233,12 @@ public static SimplePath var() { @SuppressWarnings("unchecked") public static > ComparablePath var(D arg) { - return new ComparablePath((Class)arg.getClass(), "var"+arg); + return Expressions.comparablePath((Class)arg.getClass(), "var"+arg); } @SuppressWarnings("unchecked") public static > NumberPath var(D arg) { - return new NumberPath((Class)arg.getClass(), "var" + arg.getClass().getSimpleName()+arg); + return Expressions.numberPath((Class)arg.getClass(), "var" + arg.getClass().getSimpleName() + arg); } @SuppressWarnings("unchecked") @@ -265,7 +248,7 @@ public static EntityPathBase var(D arg) { } public static StringPath var(String arg) { - return new StringPath(arg.replace(' ', '_')); + return Expressions.stringPath(arg.replace(' ', '_')); } private Alias() {} diff --git a/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java b/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java index dd8ad43205..a622386090 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/alias/DefaultPathFactory.java @@ -20,22 +20,7 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.ArrayPath; -import com.querydsl.core.types.path.BooleanPath; -import com.querydsl.core.types.path.CollectionPath; -import com.querydsl.core.types.path.ComparableEntityPath; -import com.querydsl.core.types.path.ComparablePath; -import com.querydsl.core.types.path.DatePath; -import com.querydsl.core.types.path.DateTimePath; -import com.querydsl.core.types.path.EntityPathBase; -import com.querydsl.core.types.path.EnumPath; -import com.querydsl.core.types.path.ListPath; -import com.querydsl.core.types.path.MapPath; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.SetPath; -import com.querydsl.core.types.path.SimplePath; -import com.querydsl.core.types.path.StringPath; -import com.querydsl.core.types.path.TimePath; +import com.querydsl.core.types.dsl.*; /** * DefaultPathFactory is the default implementation of the {@link PathFactory} interface @@ -47,38 +32,38 @@ public class DefaultPathFactory implements PathFactory { @Override public Path createArrayPath(Class arrayType, PathMetadata metadata) { - return new ArrayPath(arrayType, metadata); + return Expressions.arrayPath(arrayType, metadata); } @Override public Path createBooleanPath(PathMetadata metadata) { - return new BooleanPath(metadata); + return Expressions.booleanPath(metadata); } @Override public Path> createCollectionPath(Class elementType, PathMetadata metadata) { - return new CollectionPath>(elementType, (Class)EntityPathBase.class, metadata); + return Expressions.collectionPath(elementType, EntityPathBase.class, metadata); } @Override public > Path createComparablePath( Class type, PathMetadata metadata) { - return new ComparablePath(type, metadata); + return Expressions.comparablePath(type, metadata); } @Override public > Path createDatePath(Class type, PathMetadata metadata) { - return new DatePath(type, metadata); + return Expressions.datePath(type, metadata); } @Override public > Path createDateTimePath(Class type, PathMetadata metadata) { - return new DateTimePath(type, metadata); + return Expressions.dateTimePath(type, metadata); } @Override public Path createEntityPath(Class type, PathMetadata metadata) { if (Comparable.class.isAssignableFrom(type)) { - return new ComparableEntityPath(type, metadata); + return Expressions.comparableEntityPath((Class)type, metadata); } else { return new EntityPathBase(type, metadata); } @@ -86,41 +71,41 @@ public Path createEntityPath(Class type, PathMetadata metadata) { @Override public > Path createEnumPath( Class type, PathMetadata metadata) { - return new EnumPath(type, metadata); + return Expressions.enumPath(type, metadata); } @Override public Path> createListPath(Class elementType, PathMetadata metadata) { - return new ListPath>(elementType, (Class)EntityPathBase.class, metadata); + return Expressions.listPath(elementType, EntityPathBase.class, metadata); } @Override public Path> createMapPath(Class keyType, Class valueType, PathMetadata metadata) { - return new MapPath>(keyType, valueType, (Class)EntityPathBase.class, metadata); + return Expressions.mapPath(keyType, valueType, EntityPathBase.class, metadata); } @Override public > Path createNumberPath(Class type, PathMetadata metadata) { - return new NumberPath(type, metadata); + return Expressions.numberPath(type, metadata); } @Override public Path> createSetPath(Class elementType, PathMetadata metadata) { - return new SetPath>(elementType, (Class)EntityPathBase.class, metadata); + return Expressions.setPath(elementType, EntityPathBase.class, metadata); } @Override public Path createSimplePath(Class type, PathMetadata metadata) { - return new SimplePath(type, metadata); + return Expressions.path(type, metadata); } @Override public Path createStringPath(PathMetadata metadata) { - return new StringPath(metadata); + return Expressions.stringPath(metadata); } @Override public > Path createTimePath(Class type, PathMetadata metadata) { - return new TimePath(type, metadata); + return Expressions.timePath(type, metadata); } } diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java index 18320e7e36..14a0270c5b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/CollectionAnyVisitor.java @@ -16,10 +16,7 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.EntityPathBase; -import com.querydsl.core.types.path.ListPath; -import com.querydsl.core.types.path.SimplePath; -import com.querydsl.core.types.template.BooleanTemplate; +import com.querydsl.core.types.dsl.*; /** * CollectionAnyVisitor is an expression visitor which transforms any() path expressions which are @@ -39,7 +36,7 @@ private static Path replaceParent(Path path, Path parent) { path.getMetadata().getPathType()); if (path instanceof CollectionExpression) { CollectionExpression col = (CollectionExpression)path; - return new ListPath(col.getParameter(0), SimplePath.class, metadata); + return (Path)Expressions.listPath(col.getParameter(0), SimplePath.class, metadata); } else { return new PathImpl(path.getType(), metadata); } @@ -64,7 +61,7 @@ public Expression visit(TemplateExpression expr, Context context) { } if (context.replace) { if (expr.getType().equals(Boolean.class)) { - Predicate predicate = BooleanTemplate.create(expr.getTemplate(), args); + Predicate predicate = Expressions.booleanTemplate(expr.getTemplate(), args); return !context.paths.isEmpty() ? exists(context, predicate) : predicate; } else { return TemplateExpressionImpl.create(expr.getType(), expr.getTemplate(), args); diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java index 20b0a3b4fc..1a145ff99d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableAdapter.java @@ -26,15 +26,15 @@ import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.TimeExpression; -import com.querydsl.core.types.query.BooleanSubQuery; -import com.querydsl.core.types.query.ComparableSubQuery; -import com.querydsl.core.types.query.DateSubQuery; -import com.querydsl.core.types.query.DateTimeSubQuery; -import com.querydsl.core.types.query.ListSubQuery; -import com.querydsl.core.types.query.NumberSubQuery; -import com.querydsl.core.types.query.SimpleSubQuery; -import com.querydsl.core.types.query.StringSubQuery; -import com.querydsl.core.types.query.TimeSubQuery; +import com.querydsl.core.types.dsl.BooleanSubQuery; +import com.querydsl.core.types.dsl.ComparableSubQuery; +import com.querydsl.core.types.dsl.DateSubQuery; +import com.querydsl.core.types.dsl.DateTimeSubQuery; +import com.querydsl.core.types.dsl.ListSubQuery; +import com.querydsl.core.types.dsl.NumberSubQuery; +import com.querydsl.core.types.dsl.SimpleSubQuery; +import com.querydsl.core.types.dsl.StringSubQuery; +import com.querydsl.core.types.dsl.TimeSubQuery; /** * DetachableAdapter is an adapter implementation for the Detachable interface diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java index 8e952ccec3..ba5ce56522 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableMixin.java @@ -20,7 +20,6 @@ import com.querydsl.core.Tuple; import com.querydsl.core.types.*; import com.querydsl.core.types.dsl.*; -import com.querydsl.core.types.query.*; /** * Mixin style implementation of the Detachable interface diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java index cf1d93c57c..49474c977d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/DetachableQuery.java @@ -24,15 +24,15 @@ import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.TimeExpression; -import com.querydsl.core.types.query.BooleanSubQuery; -import com.querydsl.core.types.query.ComparableSubQuery; -import com.querydsl.core.types.query.DateSubQuery; -import com.querydsl.core.types.query.DateTimeSubQuery; -import com.querydsl.core.types.query.ListSubQuery; -import com.querydsl.core.types.query.NumberSubQuery; -import com.querydsl.core.types.query.SimpleSubQuery; -import com.querydsl.core.types.query.StringSubQuery; -import com.querydsl.core.types.query.TimeSubQuery; +import com.querydsl.core.types.dsl.BooleanSubQuery; +import com.querydsl.core.types.dsl.ComparableSubQuery; +import com.querydsl.core.types.dsl.DateSubQuery; +import com.querydsl.core.types.dsl.DateTimeSubQuery; +import com.querydsl.core.types.dsl.ListSubQuery; +import com.querydsl.core.types.dsl.NumberSubQuery; +import com.querydsl.core.types.dsl.SimpleSubQuery; +import com.querydsl.core.types.dsl.StringSubQuery; +import com.querydsl.core.types.dsl.TimeSubQuery; /** * DetachableQuery is a base class for queries which implement the Query and Detachable interfaces diff --git a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java index e846765ef7..8ed072b73d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java +++ b/querydsl-core/src/main/java/com/querydsl/core/support/ReplaceVisitor.java @@ -20,7 +20,7 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.template.BooleanTemplate; +import com.querydsl.core.types.dsl.Expressions; /** * ReplaceVisitor is a deep visitor that can be customized to replace segments of @@ -148,7 +148,7 @@ public Expression visit(TemplateExpression expr, C context) { return expr; } else { if (expr instanceof Predicate) { - return BooleanTemplate.create(expr.getTemplate(), args); + return Expressions.booleanTemplate(expr.getTemplate(), args); } else { return new TemplateExpressionImpl(expr.getType(), expr.getTemplate(), args); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ArrayPath.java similarity index 86% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ArrayPath.java index a7a4d431ad..ccd679a4a0 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ArrayPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ArrayPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; @@ -20,10 +20,6 @@ import com.google.common.primitives.Primitives; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.ArrayExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.NumberExpression; -import com.querydsl.core.types.dsl.SimpleExpression; /** * ArrayPath represents an array typed path @@ -44,16 +40,16 @@ public class ArrayPath extends SimpleExpression implements Path, Arr @Nullable private volatile NumberExpression size; - public ArrayPath(Class type, String variable) { + protected ArrayPath(Class type, String variable) { this(type, PathMetadataFactory.forVariable(variable)); } - - public ArrayPath(Class type, Path parent, String property) { + + protected ArrayPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } @SuppressWarnings("unchecked") - public ArrayPath(Class type, PathMetadata metadata) { + protected ArrayPath(Class type, PathMetadata metadata) { super(new PathImpl((Class)type, metadata)); this.pathMixin = (PathImpl)mixin; this.componentType = Primitives.wrap((Class)type.getComponentType()); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BeanPath.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/BeanPath.java index 071c5e9401..b9129efd77 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/BeanPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BeanPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.InvocationTargetException; @@ -29,10 +29,6 @@ import com.querydsl.core.types.PathMetadataFactory; import com.querydsl.core.types.PathType; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.BooleanOperation; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.SimpleExpression; /** * BeanPath represents bean paths diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanPath.java similarity index 78% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanPath.java index 40f76b578d..0ee0e3aca7 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/BooleanPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanPath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.*; /** * BooleanPath represents boolean path expressions @@ -35,16 +30,16 @@ public class BooleanPath extends BooleanExpression implements Path { private final PathImpl pathMixin; - public BooleanPath(Path parent, String property) { + protected BooleanPath(Path parent, String property) { this(PathMetadataFactory.forProperty(parent, property)); } - public BooleanPath(PathMetadata metadata) { + protected BooleanPath(PathMetadata metadata) { super(new PathImpl(Boolean.class, metadata)); this.pathMixin = (PathImpl)mixin; } - public BooleanPath(String var) { + protected BooleanPath(String var) { this(PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/BooleanSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanSubQuery.java similarity index 92% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/BooleanSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanSubQuery.java index 11791b0628..936674da0b 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/BooleanSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,8 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; /** * Boolean typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/BooleanTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanTemplate.java similarity index 57% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/BooleanTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanTemplate.java index c123060bc5..8a2a06c474 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/BooleanTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/BooleanTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -19,9 +19,7 @@ import com.querydsl.core.types.PredicateTemplate; import com.querydsl.core.types.Template; import com.querydsl.core.types.TemplateExpression; -import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; /** * BooleanTemplate is a custom boolean expression @@ -33,33 +31,9 @@ public class BooleanTemplate extends BooleanExpression implements TemplateExpres private static final long serialVersionUID = 5749369427497731719L; - public static BooleanExpression create(String template) { - return new BooleanTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static BooleanExpression create(String template, Object one) { - return new BooleanTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static BooleanExpression create(String template, Object one, Object two) { - return new BooleanTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static BooleanExpression create(String template, Object... args) { - return new BooleanTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static BooleanExpression create(Template template, Object... args) { - return new BooleanTemplate(template, ImmutableList.copyOf(args)); - } - - public static final BooleanExpression TRUE = create("true"); - - public static final BooleanExpression FALSE = create("false"); - private final PredicateTemplate templateMixin; - public BooleanTemplate(Template template, ImmutableList args) { + protected BooleanTemplate(Template template, ImmutableList args) { super(new PredicateTemplate(template, args)); this.templateMixin = (PredicateTemplate)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java index e91b4d2553..0e8e389833 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionOperation.java @@ -35,11 +35,11 @@ public class CollectionOperation extends CollectionExpressionBase> opMixin; - public CollectionOperation(Class type, Operator op, Expression... args) { + protected CollectionOperation(Class type, Operator op, Expression... args) { this(type, op, ImmutableList.copyOf(args)); } - public CollectionOperation(Class type, Operator op, ImmutableList> args) { + protected CollectionOperation(Class type, Operator op, ImmutableList> args) { super(new OperationImpl(Collection.class, op, args)); this.opMixin = (OperationImpl)super.mixin; this.elementType = (Class)type; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionPath.java similarity index 84% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionPath.java index 2096e3973b..401c5b59c6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; import java.util.Collection; @@ -19,7 +19,6 @@ import javax.annotation.Nullable; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.SimpleExpression; /** * CollectionPath represents collection paths @@ -41,21 +40,21 @@ public class CollectionPath> extends Co private transient Q any; private final Class queryType; - - public CollectionPath(Class type, Class queryType, String variable) { + + protected CollectionPath(Class type, Class queryType, String variable) { this(type, queryType, PathMetadataFactory.forVariable(variable)); } - - public CollectionPath(Class type, Class queryType, Path parent, String property) { + + protected CollectionPath(Class type, Class queryType, Path parent, String property) { this(type, queryType, PathMetadataFactory.forProperty(parent, property)); } - - public CollectionPath(Class type, Class queryType, PathMetadata metadata) { + + protected CollectionPath(Class type, Class queryType, PathMetadata metadata) { this(type, queryType, metadata, PathInits.DIRECT); } @SuppressWarnings("unchecked") - public CollectionPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { + protected CollectionPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { super(new ParameterizedPathImpl>((Class)Collection.class, metadata, type), inits); this.elementType = (Class)type; this.queryType = queryType; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionPathBase.java similarity index 85% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionPathBase.java index a2171c894d..f3f2c4d7f6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/CollectionPathBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/CollectionPathBase.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -23,8 +23,6 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathImpl; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.dsl.CollectionExpressionBase; -import com.querydsl.core.types.dsl.SimpleExpression; /** * CollectionPath is a base class for collection typed paths @@ -59,19 +57,20 @@ protected Q newInstance(Class queryType, PathMetadata pm) { if (constructor == null) { if (Constants.isTyped(queryType)) { try { - constructor = queryType.getConstructor(Class.class, PathMetadata.class, PathInits.class); + constructor = queryType.getDeclaredConstructor(Class.class, PathMetadata.class, PathInits.class); usePathInits = true; } catch (NoSuchMethodException e) { - constructor = queryType.getConstructor(Class.class, PathMetadata.class); + constructor = queryType.getDeclaredConstructor(Class.class, PathMetadata.class); } } else { try { - constructor = queryType.getConstructor(PathMetadata.class, PathInits.class); + constructor = queryType.getDeclaredConstructor(PathMetadata.class, PathInits.class); usePathInits = true; } catch (NoSuchMethodException e) { - constructor = queryType.getConstructor(PathMetadata.class); + constructor = queryType.getDeclaredConstructor(PathMetadata.class); } } + constructor.setAccessible(true); } if (Constants.isTyped(queryType)) { if (usePathInits) { diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableEntityPath.java similarity index 81% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableEntityPath.java index 1d484916fd..cee4eef58e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparableEntityPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableEntityPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Path; @@ -29,15 +29,15 @@ public class ComparableEntityPath extends ComparablePath type, Path parent, String property) { + protected ComparableEntityPath(Class type, Path parent, String property) { super(type, parent, property); } - public ComparableEntityPath(Class type, PathMetadata metadata) { + protected ComparableEntityPath(Class type, PathMetadata metadata) { super(type, metadata); } - public ComparableEntityPath(Class type, String var) { + protected ComparableEntityPath(Class type, String var) { super(type, var); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparablePath.java similarity index 75% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparablePath.java index de95d9744f..f9705e972c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ComparablePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparablePath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.ComparableExpression; +import com.querydsl.core.types.*; /** * ComparablePath represents Comparable paths @@ -37,16 +32,16 @@ public class ComparablePath extends ComparableExpression pathMixin; - public ComparablePath(Class type, Path parent, String property) { + protected ComparablePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public ComparablePath(Class type, PathMetadata metadata) { + protected ComparablePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public ComparablePath(Class type, String var) { + protected ComparablePath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/ComparableSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/ComparableSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableSubQuery.java index 8e05a46139..d734aeff41 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/ComparableSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.ComparableExpression; -import com.querydsl.core.types.dsl.Expressions; /** * Comparable typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/ComparableTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableTemplate.java similarity index 56% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/ComparableTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableTemplate.java index 9405a02bf5..7e22eb8498 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/ComparableTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ComparableTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -21,7 +21,6 @@ import com.querydsl.core.types.TemplateExpressionImpl; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.ComparableExpression; /** * ComparableTemplate defines custom comparable expressions @@ -34,29 +33,9 @@ public class ComparableTemplate> extends ComparableExpre private static final long serialVersionUID = -6292853402028813007L; - public static > ComparableExpression create(Class type, String template) { - return new ComparableTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static > ComparableExpression create(Class type, String template, Object one) { - return new ComparableTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static > ComparableExpression create(Class type, String template, Object one, Object two) { - return new ComparableTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static > ComparableExpression create(Class type, String template, Object... args) { - return new ComparableTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static > ComparableExpression create(Class type, Template template, Object... args) { - return new ComparableTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public ComparableTemplate(Class type, Template template, ImmutableList args) { + protected ComparableTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/Constants.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Constants.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/Constants.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/Constants.java index eb0aa39089..bec6689c98 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/Constants.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Constants.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.util.Arrays; import java.util.HashSet; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DatePath.java similarity index 76% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DatePath.java index 97f473ceeb..4bd3d92f30 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/DatePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DatePath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.DateExpression; +import com.querydsl.core.types.*; /** * DatePath presents Date paths @@ -36,16 +31,16 @@ public class DatePath extends DateExpression implements private final PathImpl pathMixin; - public DatePath(Class type, Path parent, String property) { + protected DatePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public DatePath(Class type, PathMetadata metadata) { + protected DatePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public DatePath(Class type, String var) { + protected DatePath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/DateSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/DateSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateSubQuery.java index 1acc64e891..43ed67624c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/DateSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.DateExpression; -import com.querydsl.core.types.dsl.Expressions; /** * Date typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/DateTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTemplate.java similarity index 57% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/DateTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTemplate.java index 5d2818cb63..086f0695d3 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/DateTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -21,7 +21,6 @@ import com.querydsl.core.types.TemplateExpressionImpl; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.DateExpression; /** * DateTemplate defines custom date expressions @@ -34,29 +33,9 @@ public class DateTemplate> extends DateExpression imp private static final long serialVersionUID = 4975559746071238026L; - public static > DateExpression create(Class type, String template) { - return new DateTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static > DateExpression create(Class type, String template, Object one) { - return new DateTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static > DateExpression create(Class type, String template, Object one, Object two) { - return new DateTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static > DateExpression create(Class type, String template, Object... args) { - return new DateTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static > DateExpression create(Class type, Template template, Object... args) { - return new DateTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public DateTemplate(Class type, Template template, ImmutableList args) { + protected DateTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimePath.java similarity index 75% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimePath.java index 2afff7eb6f..77b0dde1f2 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/DateTimePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimePath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.DateTimeExpression; +import com.querydsl.core.types.*; /** * DateTimePath presents DateTime typed paths @@ -35,16 +30,16 @@ public class DateTimePath extends DateTimeExpression im private final PathImpl pathMixin; - public DateTimePath(Class type, Path parent, String property) { + protected DateTimePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public DateTimePath(Class type, PathMetadata metadata) { + protected DateTimePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public DateTimePath(Class type, String var) { + protected DateTimePath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/DateTimeSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/DateTimeSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeSubQuery.java index 6a73f1ea77..3fe397c17f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/DateTimeSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.DateTimeExpression; -import com.querydsl.core.types.dsl.Expressions; /** * DateTime typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/DateTimeTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeTemplate.java similarity index 55% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/DateTimeTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeTemplate.java index 737b3069c4..cf0a545999 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/DateTimeTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DateTimeTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -19,9 +19,7 @@ import com.querydsl.core.types.Template; import com.querydsl.core.types.TemplateExpression; import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.DateTimeExpression; /** * DateTimeTemplate defines custom dateTime expressions @@ -34,29 +32,9 @@ public class DateTimeTemplate> extends DateTimeExpressio private static final long serialVersionUID = -2289699666347576749L; - public static > DateTimeExpression create(Class type, String template) { - return new DateTimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static > DateTimeExpression create(Class type, String template, Object one) { - return new DateTimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static > DateTimeExpression create(Class type, String template, Object one, Object two) { - return new DateTimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static > DateTimeExpression create(Class type, String template, Object... args) { - return new DateTimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static > DateTimeExpression create(Class type, Template template, Object... args) { - return new DateTimeTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public DateTimeTemplate(Class type, Template template, ImmutableList args) { + protected DateTimeTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslPath.java similarity index 88% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslPath.java index 6b27f8a7a5..b952ce5f25 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/DslPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; @@ -35,16 +35,16 @@ public class DslPath extends DslExpression implements Path { private final PathImpl pathMixin; - public DslPath(Class type, Path parent, String property) { + protected DslPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public DslPath(Class type, PathMetadata metadata) { + protected DslPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public DslPath(Class type, String var) { + protected DslPath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/DslTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslTemplate.java similarity index 58% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/DslTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslTemplate.java index e8fca0288b..1534b11e1d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/DslTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/DslTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -21,7 +21,6 @@ import com.querydsl.core.types.TemplateExpressionImpl; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.DslExpression; /** * DslTemplate defines custom simple expressions @@ -34,29 +33,9 @@ public class DslTemplate extends DslExpression implements TemplateExpressi private static final long serialVersionUID = -4697578522909045745L; - public static DslExpression create(Class type, String template) { - return new DslTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static DslExpression create(Class type, String template, Object one) { - return new DslTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static DslExpression create(Class type, String template, Object one, Object two) { - return new DslTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static DslExpression create(Class type, String template, Object... args) { - return new DslTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static DslExpression create(Class type, Template template, Object... args) { - return new DslTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public DslTemplate(Class type, Template template, ImmutableList args) { + protected DslTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EntityPathBase.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/EntityPathBase.java index 9d0911bfaa..88d2735d71 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/EntityPathBase.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EntityPathBase.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumPath.java similarity index 75% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumPath.java index 4699147ad5..88ad018b59 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/EnumPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumPath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.EnumExpression; +import com.querydsl.core.types.*; /** * EnumPath represents enum paths @@ -35,16 +30,16 @@ public class EnumPath> extends EnumExpression implements Pa private final PathImpl pathMixin; - public EnumPath(Class type, Path parent, String property) { + protected EnumPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public EnumPath(Class type, PathMetadata metadata) { + protected EnumPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public EnumPath(Class type, String var) { + protected EnumPath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/EnumTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumTemplate.java similarity index 58% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/EnumTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumTemplate.java index 86adb1e225..df11783a50 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/EnumTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/EnumTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -21,7 +21,6 @@ import com.querydsl.core.types.TemplateExpressionImpl; import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.EnumExpression; /** * EnumTemplate defines custom enum expressions @@ -34,29 +33,9 @@ public class EnumTemplate> extends EnumExpression implement private static final long serialVersionUID = 351057421752203377L; - public static > EnumExpression create(Class type, String template) { - return new EnumTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static > EnumExpression create(Class type, String template, Object one) { - return new EnumTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static > EnumExpression create(Class type, String template, Object one, Object two) { - return new EnumTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static > EnumExpression create(Class type, String template, Object... args) { - return new EnumTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static > EnumExpression create(Class type, Template template, Object... args) { - return new EnumTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public EnumTemplate(Class type, Template template, ImmutableList args) { + protected EnumTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java index b4292564c4..62fb900110 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java @@ -19,13 +19,10 @@ import javax.annotation.Nullable; +import com.google.common.collect.ImmutableList; import com.querydsl.core.QueryMetadata; import com.querydsl.core.Tuple; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; -import com.querydsl.core.types.query.ExtendedSubQueryExpression; -import com.querydsl.core.types.query.SimpleSubQuery; -import com.querydsl.core.types.template.*; /** * Expression factory class @@ -35,6 +32,20 @@ */ public final class Expressions { + public static final NumberExpression ONE = numberTemplate(Integer.class, "1"); + + public static final NumberExpression TWO = numberTemplate(Integer.class, "2"); + + public static final NumberExpression THREE = numberTemplate(Integer.class, "3"); + + public static final NumberExpression FOUR = numberTemplate(Integer.class, "4"); + + public static final NumberExpression ZERO = numberTemplate(Integer.class, "0"); + + public static final BooleanExpression TRUE = booleanTemplate("true"); + + public static final BooleanExpression FALSE = booleanTemplate("false"); + @SuppressWarnings("unchecked") public static SimpleExpression as(Expression source, Path alias) { if (source == null) { @@ -139,7 +150,19 @@ public static SimpleExpression constantAs(D source, Path alias) { * @return */ public static SimpleExpression template(Class cl, String template, Object... args) { - return SimpleTemplate.create(cl, template, args); + return new SimpleTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static SimpleExpression template(Class cl, String template, ImmutableList args) { + return new SimpleTemplate(cl, createTemplate(template), args); } /** @@ -151,7 +174,7 @@ public static SimpleExpression template(Class cl, String template, Obj * @return */ public static SimpleExpression template(Class cl, Template template, Object... args) { - return SimpleTemplate.create(cl, template, args); + return new SimpleTemplate(cl, template, ImmutableList.of(args)); } /** @@ -163,7 +186,19 @@ public static SimpleExpression template(Class cl, Template template, O * @return */ public static DslExpression dslTemplate(Class cl, String template, Object... args) { - return DslTemplate.create(cl, template, args); + return new DslTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static DslExpression dslTemplate(Class cl, Template template, Object... args) { + return new DslTemplate(cl, template, ImmutableList.copyOf(args)); } /** @@ -176,7 +211,124 @@ public static DslExpression dslTemplate(Class cl, String template, Obj */ public static > ComparableExpression comparableTemplate(Class cl, String template, Object... args) { - return ComparableTemplate.create(cl, template, args); + return new ComparableTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > ComparableExpression comparableTemplate(Class cl, + Template template, Object... args) { + return new ComparableTemplate(cl, template, ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > DateExpression dateTemplate(Class cl, + String template, Object... args) { + return new DateTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > DateExpression dateTemplate(Class cl, + Template template, Object... args) { + return new DateTemplate(cl, template, ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > DateTimeExpression dateTimeTemplate(Class cl, + String template, Object... args) { + return new DateTimeTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > DateTimeExpression dateTimeTemplate(Class cl, + Template template, Object... args) { + return new DateTimeTemplate(cl, template, ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > TimeExpression timeTemplate(Class cl, + String template, Object... args) { + return new TimeTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > TimeExpression timeTemplate(Class cl, + Template template, Object... args) { + return new TimeTemplate(cl, template, ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > EnumExpression enumTemplate(Class cl, + String template, Object... args) { + return new EnumTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > EnumExpression enumTemplate(Class cl, + Template template, Object... args) { + return new EnumTemplate(cl, template, ImmutableList.copyOf(args)); } /** @@ -189,7 +341,20 @@ public static > ComparableExpression comparableTempla */ public static > NumberExpression numberTemplate(Class cl, String template, Object... args) { - return NumberTemplate.create(cl, template, args); + return new NumberTemplate(cl, createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param cl + * @param template + * @param args + * @return + */ + public static > NumberExpression numberTemplate(Class cl, + Template template, Object... args) { + return new NumberTemplate(cl, template, ImmutableList.copyOf(args)); } /** @@ -200,7 +365,18 @@ public static > NumberExpression numberTempl * @return */ public static StringExpression stringTemplate(String template, Object... args) { - return StringTemplate.create(template, args); + return new StringTemplate(createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param template + * @param args + * @return + */ + public static StringExpression stringTemplate(Template template, Object... args) { + return new StringTemplate(template, ImmutableList.copyOf(args)); } /** @@ -211,7 +387,18 @@ public static StringExpression stringTemplate(String template, Object... args) { * @return */ public static BooleanExpression booleanTemplate(String template, Object... args) { - return BooleanTemplate.create(template, args); + return new BooleanTemplate(createTemplate(template), ImmutableList.copyOf(args)); + } + + /** + * Create a new Template expression + * + * @param template + * @param args + * @return + */ + public static BooleanExpression booleanTemplate(Template template, Object... args) { + return new BooleanTemplate(template, ImmutableList.copyOf(args)); } /** @@ -372,6 +559,18 @@ public static SimplePath path(Class type, Path parent, String prope return new SimplePath(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static SimplePath path(Class type, PathMetadata metadata) { + return new SimplePath(type, metadata); + } + /** * Create a new Path expression * @@ -395,6 +594,18 @@ public static DslPath dslPath(Class type, Path parent, String prope return new DslPath(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static DslPath dslPath(Class type, PathMetadata metadata) { + return new DslPath(type, metadata); + } + /** * Create a new Path expression * @@ -420,6 +631,57 @@ public static > ComparablePath comparablePath(Class(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > ComparablePath comparablePath(Class type, + PathMetadata metadata) { + return new ComparablePath(type, metadata); + } + + /** + * Create a new Path expression + * + * @param type + * @param variable + * @return + */ + public static > ComparableEntityPath comparableEntityPath(Class type, + String variable) { + return new ComparableEntityPath(type, PathMetadataFactory.forVariable(variable)); + } + + /** + * Create a new Path expression + * + * @param type + * @param parent + * @param property + * @return + */ + public static > ComparableEntityPath comparableEntityPath(Class type, + Path parent, String property) { + return new ComparableEntityPath(type, PathMetadataFactory.forProperty(parent, property)); + } + + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > ComparableEntityPath comparableEntityPath(Class type, + PathMetadata metadata) { + return new ComparableEntityPath(type, metadata); + } + /** * Create a new Path expression * @@ -444,6 +706,18 @@ public static > DatePath datePath(Class type, Path return new DatePath(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > DatePath datePath(Class type, PathMetadata metadata) { + return new DatePath(type, metadata); + } + /** * Create a new Path expression * @@ -468,6 +742,18 @@ public static > DateTimePath dateTimePath(Class ty return new DateTimePath(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > DateTimePath dateTimePath(Class type, PathMetadata metadata) { + return new DateTimePath(type, metadata); + } + /** * Create a new Path expression * @@ -492,6 +778,18 @@ public static > TimePath timePath(Class type, Path return new TimePath(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > TimePath timePath(Class type, PathMetadata metadata) { + return new TimePath(type, metadata); + } + /** * Create a new Path expression * @@ -517,6 +815,18 @@ public static > NumberPath numberPath(Class< return new NumberPath(type, PathMetadataFactory.forProperty(parent, property)); } + /** + * Create new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > NumberPath numberPath(Class type, PathMetadata metadata) { + return new NumberPath(type, metadata); + } + /** * Create a new Path expression * @@ -538,6 +848,17 @@ public static StringPath stringPath(Path parent, String property) { return new StringPath(PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param metadata + * @return + */ + public static StringPath stringPath(PathMetadata metadata) { + return new StringPath(metadata); + } + + /** * Create a new Path expression * @@ -559,6 +880,16 @@ public static BooleanPath booleanPath(Path parent, String property) { return new BooleanPath(PathMetadataFactory.forProperty(parent, property)); } + /** + * Create a new Path expression + * + * @param metadata + * @return + */ + public static BooleanPath booleanPath(PathMetadata metadata) { + return new BooleanPath(metadata); + } + /** * Get a builder for a case expression * @@ -639,6 +970,41 @@ public static > EnumExpression enumOperation(Class type, return new EnumOperation(type, operator, args); } + /** + * Create a new Path expression + * + * @param type + * @param variable + * @return + */ + public static > EnumPath enumPath(Class type, String variable) { + return new EnumPath(type, PathMetadataFactory.forVariable(variable)); + } + + /** + * Create a new Path expression + * + * @param type + * @param parent + * @param property + * @return + */ + public static > EnumPath enumPath(Class type, Path parent, String property) { + return new EnumPath(type, PathMetadataFactory.forProperty(parent, property)); + } + + /** + * Create a new Path expression + * + * @param type + * @param metadata + * @param + * @return + */ + public static > EnumPath enumPath(Class type, PathMetadata metadata) { + return new EnumPath(type, metadata); + } + /** * Create a new Collection operation expression * @@ -653,6 +1019,84 @@ public static CollectionExpression, T> collectionOperation(Cla return new CollectionOperation(elementType, operator, args); } + /** + * Create a new Path expression + * + * @param type + * @param queryType + * @param metadata + * @param + * @param + * @return + */ + public static > CollectionPath collectionPath(Class type, Class queryType, PathMetadata metadata) { + return new CollectionPath(type, queryType, metadata); + } + + /** + * Create a new Path expression + * + * @param type + * @param queryType + * @param metadata + * @param + * @param + * @return + */ + public static > ListPath listPath(Class type, Class queryType, PathMetadata metadata) { + return new ListPath(type, queryType, metadata); + } + + /** + * Create a new Path expression + * + * @param type + * @param queryType + * @param metadata + * @param + * @param + * @return + */ + public static > SetPath setPath(Class type, Class queryType, PathMetadata metadata) { + return new SetPath(type, queryType, metadata); + } + + /** + * Create a new Path expression + * + * @param keyType + * @param valueType + * @param queryType + * @param metadata + * @param + * @param + * @param + * @return + */ + public static > MapPath mapPath(Class keyType, + Class valueType, + Class queryType, + PathMetadata metadata) { + return new MapPath(keyType, valueType, queryType, metadata); + } + + /** + * Create a new Path expression + * + * @param arrayType + * @param metadata + * @param + * @param + * @return + */ + public static ArrayPath arrayPath(Class arrayType, PathMetadata metadata) { + return new ArrayPath(arrayType, metadata); + } + + private static Template createTemplate(String template) { + return TemplateFactory.DEFAULT.create(template); + } + private Expressions() {} } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/ExtendedSubQueryExpression.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ExtendedSubQueryExpression.java similarity index 96% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/ExtendedSubQueryExpression.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ExtendedSubQueryExpression.java index 8a14167c80..19c557802a 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/ExtendedSubQueryExpression.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ExtendedSubQueryExpression.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import com.querydsl.core.types.SubQueryExpression; import com.querydsl.core.types.dsl.BooleanExpression; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListPath.java similarity index 85% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListPath.java index 9294ab9896..1794f4d0cf 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/ListPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; import java.util.HashMap; @@ -21,8 +21,6 @@ import javax.annotation.Nullable; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.ListExpression; -import com.querydsl.core.types.dsl.SimpleExpression; /** * ListPath represents list paths @@ -45,22 +43,22 @@ public class ListPath> extends Collecti private final Class queryType; @Nullable - private transient Q any; + private transient Q any; - public ListPath(Class elementType, Class queryType, String variable) { + protected ListPath(Class elementType, Class queryType, String variable) { this(elementType, queryType, PathMetadataFactory.forVariable(variable)); } - - public ListPath(Class elementType, Class queryType, Path parent, String property) { + + protected ListPath(Class elementType, Class queryType, Path parent, String property) { this(elementType, queryType, PathMetadataFactory.forProperty(parent, property)); } - - public ListPath(Class elementType, Class queryType, PathMetadata metadata) { + + protected ListPath(Class elementType, Class queryType, PathMetadata metadata) { this(elementType, queryType, metadata, PathInits.DIRECT); } @SuppressWarnings("unchecked") - public ListPath(Class elementType, Class queryType, PathMetadata metadata, PathInits inits) { + protected ListPath(Class elementType, Class queryType, PathMetadata metadata, PathInits inits) { super(new ParameterizedPathImpl>((Class)List.class, metadata, elementType), inits); this.elementType = (Class)elementType; this.queryType = queryType; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListSubQuery.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListSubQuery.java index 79d364af76..06a864b17c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/ListSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/ListSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import java.util.List; @@ -19,7 +19,6 @@ import com.querydsl.core.QueryMetadata; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.*; /** * List result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/MapPath.java similarity index 87% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/MapPath.java index c21fe8156c..0a6fa08ea5 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/MapPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/MapPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Constructor; @@ -21,8 +21,6 @@ import javax.annotation.Nullable; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.MapExpressionBase; -import com.querydsl.core.types.dsl.SimpleExpression; /** * MapPath represents map paths @@ -47,16 +45,16 @@ public class MapPath> extends MapExp private final Class valueType; - public MapPath(Class keyType, Class valueType, Class queryType, String variable) { + protected MapPath(Class keyType, Class valueType, Class queryType, String variable) { this(keyType, valueType, queryType, PathMetadataFactory.forVariable(variable)); } - - public MapPath(Class keyType, Class valueType, Class queryType, Path parent, String property) { + + protected MapPath(Class keyType, Class valueType, Class queryType, Path parent, String property) { this(keyType, valueType, queryType, PathMetadataFactory.forProperty(parent, property)); } @SuppressWarnings("unchecked") - public MapPath(Class keyType, Class valueType, Class queryType, PathMetadata metadata) { + protected MapPath(Class keyType, Class valueType, Class queryType, PathMetadata metadata) { super(new ParameterizedPathImpl>((Class)Map.class, metadata, keyType, valueType)); this.keyType = (Class) keyType; this.valueType = (Class) valueType; @@ -137,10 +135,11 @@ private E newInstance(PathMetadata pm) throws NoSuchMethodException, InvocationTargetException { if (constructor == null) { if (Constants.isTyped(queryType)) { - constructor = queryType.getConstructor(Class.class, PathMetadata.class); + constructor = queryType.getDeclaredConstructor(Class.class, PathMetadata.class); } else { - constructor = queryType.getConstructor(PathMetadata.class); + constructor = queryType.getDeclaredConstructor(PathMetadata.class); } + constructor.setAccessible(true); } if (Constants.isTyped(queryType)) { return constructor.newInstance(getValueType(), pm); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberPath.java similarity index 75% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberPath.java index 22c6fc25ef..853fc9475c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/NumberPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberPath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.NumberExpression; +import com.querydsl.core.types.*; /** * NumberPath represents numeric paths @@ -35,16 +30,16 @@ public class NumberPath> extends NumberExpressi private final PathImpl pathMixin; - public NumberPath(Class type, Path parent, String property) { + protected NumberPath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public NumberPath(Class type, PathMetadata metadata) { + protected NumberPath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public NumberPath(Class type, String var) { + protected NumberPath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/NumberSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/NumberSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberSubQuery.java index 1a9cc6960b..b277fdf563 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/NumberSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.NumberExpression; /** * Number typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberTemplate.java new file mode 100644 index 0000000000..70b05957f9 --- /dev/null +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/NumberTemplate.java @@ -0,0 +1,62 @@ +/* + * Copyright 2011, Mysema Ltd + * + * 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 com.querydsl.core.types.dsl; + +import java.util.List; + +import com.google.common.collect.ImmutableList; +import com.querydsl.core.types.Template; +import com.querydsl.core.types.TemplateExpression; +import com.querydsl.core.types.TemplateExpressionImpl; +import com.querydsl.core.types.Visitor; + +/** + * NumberTemplate defines custom numeric expressions + * + * @author tiwe + * + * @param expression type + */ +public class NumberTemplate> extends NumberExpression implements TemplateExpression { + + private static final long serialVersionUID = 351057421752203377L; + + private final TemplateExpressionImpl templateMixin; + + protected NumberTemplate(Class type, Template template, ImmutableList args) { + super(new TemplateExpressionImpl(type, template, args)); + templateMixin = (TemplateExpressionImpl)mixin; + } + + @Override + public final R accept(Visitor v, C context) { + return v.visit(templateMixin, context); + } + + @Override + public Object getArg(int index) { + return templateMixin.getArg(index); + } + + @Override + public List getArgs() { + return templateMixin.getArgs(); + } + + @Override + public Template getTemplate() { + return templateMixin.getTemplate(); + } + +} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilder.java similarity index 99% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilder.java index deb904a68a..f74a623d7e 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilder.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilder.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.Array; import java.util.Collection; @@ -24,7 +24,6 @@ import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.dsl.SimpleExpression; /** * PathBuilder is an extension to EntityPathBase for dynamic path construction diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilderFactory.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilderFactory.java similarity index 97% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilderFactory.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilderFactory.java index a1a8d3b606..750679b3cf 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilderFactory.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilderFactory.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.util.HashMap; import java.util.Map; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilderValidator.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilderValidator.java similarity index 98% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilderValidator.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilderValidator.java index 5936d94557..bf486e26b6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathBuilderValidator.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathBuilderValidator.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.Field; import java.lang.reflect.Method; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathInits.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathInits.java similarity index 98% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/PathInits.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathInits.java index 38ebbcb1bc..e619690a37 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/PathInits.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/PathInits.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.io.Serializable; import java.util.ArrayList; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SetPath.java similarity index 84% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/SetPath.java index 3be39928db..b700b2f7b6 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/SetPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SetPath.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; import java.util.Set; @@ -19,7 +19,6 @@ import javax.annotation.Nullable; import com.querydsl.core.types.*; -import com.querydsl.core.types.dsl.SimpleExpression; /** * SetPath represents set paths @@ -42,20 +41,20 @@ public class SetPath> extends Collectio private final Class queryType; - public SetPath(Class type, Class queryType, String variable) { + protected SetPath(Class type, Class queryType, String variable) { this(type, queryType, PathMetadataFactory.forVariable(variable)); } - - public SetPath(Class type, Class queryType, Path parent, String property) { + + protected SetPath(Class type, Class queryType, Path parent, String property) { this(type, queryType, PathMetadataFactory.forProperty(parent, property)); } - - public SetPath(Class type, Class queryType, PathMetadata metadata) { + + protected SetPath(Class type, Class queryType, PathMetadata metadata) { this(type, queryType, metadata, PathInits.DIRECT); } @SuppressWarnings("unchecked") - public SetPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { + protected SetPath(Class type, Class queryType, PathMetadata metadata, PathInits inits) { super(new ParameterizedPathImpl>((Class)Set.class, metadata, type), inits); this.elementType = (Class)type; this.queryType = queryType; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimplePath.java similarity index 75% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimplePath.java index ebf0d3e2a1..3a8d28e676 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/SimplePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimplePath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.SimpleExpression; +import com.querydsl.core.types.*; /** * SimplePath represents simple paths @@ -35,24 +30,24 @@ public class SimplePath extends SimpleExpression implements Path { private final PathImpl pathMixin; - public SimplePath(Class type, Path parent, String property) { + protected SimplePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public SimplePath(Class type, PathMetadata metadata) { + protected SimplePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - + + protected SimplePath(Class type, String var) { + this(type, PathMetadataFactory.forVariable(var)); + } + @Override public final R accept(Visitor v, C context) { return v.visit(pathMixin, context); } - public SimplePath(Class type, String var) { - this(type, PathMetadataFactory.forVariable(var)); - } - @Override public PathMetadata getMetadata() { return pathMixin.getMetadata(); diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/SimpleSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/SimpleSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleSubQuery.java index 48c95d8b36..001937924d 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/SimpleSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.DslExpression; -import com.querydsl.core.types.dsl.Expressions; /** * Object typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/SimpleTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleTemplate.java similarity index 56% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/SimpleTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleTemplate.java index 643f957efe..885ee1d280 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/SimpleTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/SimpleTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -19,9 +19,7 @@ import com.querydsl.core.types.Template; import com.querydsl.core.types.TemplateExpression; import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.SimpleExpression; /** * SimpleTemplate defines custom simple expressions @@ -34,29 +32,9 @@ public class SimpleTemplate extends SimpleExpression implements TemplateEx private static final long serialVersionUID = -4697578522909045745L; - public static SimpleExpression create(Class type, String template) { - return new SimpleTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static SimpleExpression create(Class type, String template, Object one) { - return new SimpleTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static SimpleExpression create(Class type, String template, Object one, Object two) { - return new SimpleTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static SimpleExpression create(Class type, String template, Object... args) { - return new SimpleTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static SimpleExpression create(Class type, Template template, Object... args) { - return new SimpleTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public SimpleTemplate(Class type, Template template, ImmutableList args) { + protected SimpleTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringPath.java similarity index 78% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringPath.java index d5785e6f4e..02d0c2da5c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/StringPath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringPath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.StringExpression; +import com.querydsl.core.types.*; /** * StringPath represents String typed paths @@ -34,16 +29,16 @@ public class StringPath extends StringExpression implements Path { private final PathImpl pathMixin; - public StringPath(Path parent, String property) { + protected StringPath(Path parent, String property) { this(PathMetadataFactory.forProperty(parent, property)); } - public StringPath(PathMetadata metadata) { + protected StringPath(PathMetadata metadata) { super(new PathImpl(String.class, metadata)); this.pathMixin = (PathImpl)mixin; } - public StringPath(String var) { + protected StringPath(String var) { this(PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/StringSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/StringSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringSubQuery.java index f6e6337231..93c116069f 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/StringSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.StringExpression; /** * String typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/StringTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringTemplate.java similarity index 61% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/StringTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringTemplate.java index f203efcef4..aec540165c 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/StringTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/StringTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -19,9 +19,7 @@ import com.querydsl.core.types.Template; import com.querydsl.core.types.TemplateExpression; import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.StringExpression; /** * StringTemplate defines custom String expressions @@ -33,29 +31,9 @@ public class StringTemplate extends StringExpression implements TemplateExpressi private static final long serialVersionUID = 3181686132439356614L; - public static StringExpression create(String template) { - return new StringTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static StringExpression create(String template, Object one) { - return new StringTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static StringExpression create(String template, Object one, Object two) { - return new StringTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static StringExpression create(String template, Object... args) { - return new StringTemplate(TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static StringExpression create(Template template, Object... args) { - return new StringTemplate(template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public StringTemplate(Template template, ImmutableList args) { + protected StringTemplate(Template template, ImmutableList args) { super(new TemplateExpressionImpl(String.class, template, args)); this.templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimePath.java similarity index 75% rename from querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimePath.java index 40e3f9902a..ebd8b96167 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/TimePath.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimePath.java @@ -11,16 +11,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.path; +package com.querydsl.core.types.dsl; import java.lang.reflect.AnnotatedElement; -import com.querydsl.core.types.Path; -import com.querydsl.core.types.PathImpl; -import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.PathMetadataFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.TimeExpression; +import com.querydsl.core.types.*; /** * TimePath represented Time paths @@ -35,16 +30,16 @@ public class TimePath extends TimeExpression implements private final PathImpl pathMixin; - public TimePath(Class type, Path parent, String property) { + protected TimePath(Class type, Path parent, String property) { this(type, PathMetadataFactory.forProperty(parent, property)); } - public TimePath(Class type, PathMetadata metadata) { + protected TimePath(Class type, PathMetadata metadata) { super(new PathImpl(type, metadata)); this.pathMixin = (PathImpl)mixin; } - public TimePath(Class type, String var) { + protected TimePath(Class type, String var) { this(type, PathMetadataFactory.forVariable(var)); } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/TimeSubQuery.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeSubQuery.java similarity index 90% rename from querydsl-core/src/main/java/com/querydsl/core/types/query/TimeSubQuery.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeSubQuery.java index 87dfe99f11..c57fce9200 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/TimeSubQuery.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeSubQuery.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.query; +package com.querydsl.core.types.dsl; import javax.annotation.Nullable; @@ -19,9 +19,6 @@ import com.querydsl.core.types.Ops; import com.querydsl.core.types.SubQueryExpressionImpl; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.dsl.Expressions; -import com.querydsl.core.types.dsl.TimeExpression; /** * Time typed single result subquery diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/TimeTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeTemplate.java similarity index 56% rename from querydsl-core/src/main/java/com/querydsl/core/types/template/TimeTemplate.java rename to querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeTemplate.java index 83a9ece167..a81ef36a50 100644 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/TimeTemplate.java +++ b/querydsl-core/src/main/java/com/querydsl/core/types/dsl/TimeTemplate.java @@ -11,7 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.querydsl.core.types.template; +package com.querydsl.core.types.dsl; import java.util.List; @@ -19,9 +19,7 @@ import com.querydsl.core.types.Template; import com.querydsl.core.types.TemplateExpression; import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.core.types.TemplateFactory; import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.TimeExpression; /** * TimeTemplate defines custom time expressions @@ -34,29 +32,9 @@ public class TimeTemplate> extends TimeExpression imp private static final long serialVersionUID = -7684306954555037051L; - public static > TimeTemplate create(Class type, String template) { - return new TimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static > TimeTemplate create(Class type, String template, Object one) { - return new TimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static > TimeTemplate create(Class type, String template, Object one, Object two) { - return new TimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static > TimeTemplate create(Class type, String template, Object... args) { - return new TimeTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static > TimeTemplate create(Class type, Template template, Object... args) { - return new TimeTemplate(type, template, ImmutableList.copyOf(args)); - } - private final TemplateExpressionImpl templateMixin; - public TimeTemplate(Class type, Template template, ImmutableList args) { + protected TimeTemplate(Class type, Template template, ImmutableList args) { super(new TemplateExpressionImpl(type, template, args)); templateMixin = (TemplateExpressionImpl)mixin; } diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/path/package-info.java b/querydsl-core/src/main/java/com/querydsl/core/types/path/package-info.java deleted file mode 100644 index 668915fcc8..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/types/path/package-info.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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. - */ - -/** - * Paths represent typed property paths, variables and list-map-array access - */ -package com.querydsl.core.types.path; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/query/package-info.java b/querydsl-core/src/main/java/com/querydsl/core/types/query/package-info.java deleted file mode 100644 index 969b06b995..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/types/query/package-info.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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. - */ -/** - * Subquery implementations - * - */ -package com.querydsl.core.types.query; diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java b/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java deleted file mode 100644 index a5c02a312c..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/NumberTemplate.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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 com.querydsl.core.types.template; - -import java.util.List; - -import com.google.common.collect.ImmutableList; -import com.querydsl.core.types.Template; -import com.querydsl.core.types.TemplateExpression; -import com.querydsl.core.types.TemplateExpressionImpl; -import com.querydsl.core.types.TemplateFactory; -import com.querydsl.core.types.Visitor; -import com.querydsl.core.types.dsl.NumberExpression; - -/** - * NumberTemplate defines custom numeric expressions - * - * @author tiwe - * - * @param expression type - */ -public class NumberTemplate> extends NumberExpression implements TemplateExpression { - - private static final long serialVersionUID = 351057421752203377L; - - public static > NumberExpression create(Class type, String template) { - return new NumberTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of()); - } - - public static > NumberExpression create(Class type, String template, Object one) { - return new NumberTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one)); - } - - public static > NumberExpression create(Class type, String template, Object one, Object two) { - return new NumberTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.of(one, two)); - } - - public static > NumberExpression create(Class type, String template, Object... args) { - return new NumberTemplate(type, TemplateFactory.DEFAULT.create(template), ImmutableList.copyOf(args)); - } - - public static > NumberExpression create(Class type, Template template, Object... args) { - return new NumberTemplate(type, template, ImmutableList.copyOf(args)); - } - - public static final NumberExpression ONE = create(Integer.class, "1"); - - public static final NumberExpression TWO = create(Integer.class, "2"); - - public static final NumberExpression THREE = create(Integer.class, "3"); - - public static final NumberExpression FOUR = create(Integer.class, "4"); - - public static final NumberExpression ZERO = create(Integer.class, "0"); - - private final TemplateExpressionImpl templateMixin; - - public NumberTemplate(Class type, Template template, ImmutableList args) { - super(new TemplateExpressionImpl(type, template, args)); - templateMixin = (TemplateExpressionImpl)mixin; - } - - @Override - public final R accept(Visitor v, C context) { - return v.visit(templateMixin, context); - } - - @Override - public Object getArg(int index) { - return templateMixin.getArg(index); - } - - @Override - public List getArgs() { - return templateMixin.getArgs(); - } - - @Override - public Template getTemplate() { - return templateMixin.getTemplate(); - } - -} diff --git a/querydsl-core/src/main/java/com/querydsl/core/types/template/package-info.java b/querydsl-core/src/main/java/com/querydsl/core/types/template/package-info.java deleted file mode 100644 index 3261e815fa..0000000000 --- a/querydsl-core/src/main/java/com/querydsl/core/types/template/package-info.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 2011, Mysema Ltd - * - * 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. - */ - -/** - * Custom types are comparable to operations but contain the serialization - * templates instead of operator patterns. Custom types are always implementation specific. - */ -package com.querydsl.core.types.template; diff --git a/querydsl-core/src/test/java/com/querydsl/core/BooleanBuilderTest.java b/querydsl-core/src/test/java/com/querydsl/core/BooleanBuilderTest.java index e088676205..6b107bf72a 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/BooleanBuilderTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/BooleanBuilderTest.java @@ -13,9 +13,7 @@ */ package com.querydsl.core; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; +import static org.junit.Assert.*; import org.junit.Ignore; import org.junit.Test; @@ -24,7 +22,7 @@ import com.querydsl.core.types.Templates; import com.querydsl.core.types.ToStringVisitor; import com.querydsl.core.types.dsl.BooleanExpression; -import com.querydsl.core.types.path.BooleanPath; +import com.querydsl.core.types.dsl.Expressions; public class BooleanBuilderTest { @@ -159,7 +157,7 @@ public void HashCode() { public void ToString() { BooleanBuilder builder = new BooleanBuilder().and(first); assertEquals("true", builder.toString()); - builder.or(new BooleanPath("condition")); + builder.or(Expressions.booleanPath("condition")); assertEquals("true || condition", builder.toString()); } @@ -179,7 +177,7 @@ public void ToString() { public void Accept() { BooleanBuilder builder = new BooleanBuilder(); builder.and(first); - builder.or(new BooleanPath("condition")); + builder.or(Expressions.booleanPath("condition")); assertEquals("true || condition", builder.accept(ToStringVisitor.DEFAULT, Templates.DEFAULT)); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java b/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java index 6f1cd39e4a..a8abe458e6 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/DefaultQueryMetadataTest.java @@ -22,16 +22,17 @@ import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.Predicate; +import com.querydsl.core.types.dsl.Expressions; import com.querydsl.core.types.dsl.Param; -import com.querydsl.core.types.path.StringPath; +import com.querydsl.core.types.dsl.StringPath; public class DefaultQueryMetadataTest { private final QueryMetadata metadata = new DefaultQueryMetadata(); - private final StringPath str = new StringPath("str"); + private final StringPath str = Expressions.stringPath("str"); - private final StringPath str2 = new StringPath("str2"); + private final StringPath str2 = Expressions.stringPath("str2"); @Test public void AddWhere_With_Null() { diff --git a/querydsl-core/src/test/java/com/querydsl/core/FilterFactory.java b/querydsl-core/src/test/java/com/querydsl/core/FilterFactory.java index 8d0bfa55a3..f0dfe40010 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/FilterFactory.java +++ b/querydsl-core/src/test/java/com/querydsl/core/FilterFactory.java @@ -38,7 +38,7 @@ import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.TemporalExpression; import com.querydsl.core.types.dsl.TimeExpression; -import com.querydsl.core.types.path.ListPath; +import com.querydsl.core.types.dsl.ListPath; /** * @author tiwe diff --git a/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java b/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java index 7d13b066be..47d0e461ea 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java +++ b/querydsl-core/src/test/java/com/querydsl/core/MatchingFiltersFactory.java @@ -19,7 +19,7 @@ import com.google.common.collect.ImmutableList; import com.querydsl.core.types.*; import com.querydsl.core.types.dsl.*; -import com.querydsl.core.types.path.ListPath; +import com.querydsl.core.types.dsl.ListPath; /** * @author tiwe diff --git a/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java b/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java index be0fed4050..9c77b04ea8 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java +++ b/querydsl-core/src/test/java/com/querydsl/core/ProjectionsFactory.java @@ -33,7 +33,7 @@ import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.TimeExpression; -import com.querydsl.core.types.path.ListPath; +import com.querydsl.core.types.dsl.ListPath; /** * @author tiwe diff --git a/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java b/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java index 5829816022..b978478cf6 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QDefaultQueryMetadata.java @@ -21,14 +21,14 @@ import com.querydsl.core.types.PathMetadata; import com.querydsl.core.types.Predicate; import com.querydsl.core.types.ValidatingVisitor; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.BooleanPath; -import com.querydsl.core.types.path.EntityPathBase; -import com.querydsl.core.types.path.ListPath; -import com.querydsl.core.types.path.MapPath; -import com.querydsl.core.types.path.PathInits; -import com.querydsl.core.types.path.SetPath; -import com.querydsl.core.types.path.SimplePath; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.BooleanPath; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.ListPath; +import com.querydsl.core.types.dsl.MapPath; +import com.querydsl.core.types.dsl.PathInits; +import com.querydsl.core.types.dsl.SetPath; +import com.querydsl.core.types.dsl.SimplePath; /** diff --git a/querydsl-core/src/test/java/com/querydsl/core/QueryExecution.java b/querydsl-core/src/test/java/com/querydsl/core/QueryExecution.java index 44a9024e74..77f7151eb1 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QueryExecution.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QueryExecution.java @@ -38,7 +38,7 @@ import com.querydsl.core.types.dsl.SimpleExpression; import com.querydsl.core.types.dsl.StringExpression; import com.querydsl.core.types.dsl.TimeExpression; -import com.querydsl.core.types.path.ListPath; +import com.querydsl.core.types.dsl.ListPath; /** * The Class StandardTest. diff --git a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java index 8294fb1619..af94e03ff8 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java +++ b/querydsl-core/src/test/java/com/querydsl/core/QueryMetadaSerializationTest.java @@ -26,11 +26,7 @@ import com.querydsl.core.QueryFlag.Position; import com.querydsl.core.testutil.Serialization; -import com.querydsl.core.types.dsl.NumberOperation; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.NumberPath; -import com.querydsl.core.types.path.StringPath; -import com.querydsl.core.types.template.NumberTemplate; +import com.querydsl.core.types.dsl.*; import com.querydsl.core.util.ReflectionUtils; public class QueryMetadaSerializationTest { @@ -39,7 +35,7 @@ public class QueryMetadaSerializationTest { @Test public void Serialization() throws IOException, ClassNotFoundException{ - StringPath expr = new StringPath("str"); + StringPath expr = Expressions.stringPath("str"); metadata.addJoin(JoinType.DEFAULT, expr); metadata.addFlag(new QueryFlag(Position.AFTER_FILTERS, "")); metadata.addGroupBy(expr); diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java index 24f657a3c2..c47b840aa8 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QAbstractEntity.java @@ -16,9 +16,9 @@ import static com.querydsl.core.types.PathMetadataFactory.forVariable; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.EntityPathBase; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.NumberPath; /** diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java index 889908eef3..21dd919cb8 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QAnimal.java @@ -15,8 +15,10 @@ import static com.querydsl.core.types.PathMetadataFactory.*; +import java.sql.Date; + import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; /** @@ -34,7 +36,7 @@ public class QAnimal extends EntityPathBase { public final NumberPath bodyWeight = createNumber("bodyWeight", Double.class); - public final DatePath dateField = createDate("dateField", java.sql.Date.class); + public final DatePath dateField = createDate("dateField", java.sql.Date.class); public final NumberPath id = createNumber("id", Integer.class); diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java index bc92576f68..80b51946c6 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCat.java @@ -15,8 +15,10 @@ import static com.querydsl.core.types.PathMetadataFactory.*; +import java.sql.Date; + import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; /** @@ -44,7 +46,7 @@ public class QCat extends EntityPathBase { public final NumberPath breed = createNumber("breed", Integer.class); //inherited - public final DatePath dateField = _super.dateField; + public final DatePath dateField = _super.dateField; //inherited public final NumberPath id = _super.id; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java index 928d607788..fd70809934 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonIdentifiable.java @@ -15,14 +15,19 @@ import static com.querydsl.core.types.PathMetadataFactory.*; +import java.io.Serializable; + import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.SimplePath; /** * QCommonIdentifiable is a Querydsl query type for CommonIdentifiable */ -public class QCommonIdentifiable extends EntityPathBase> { +public class QCommonIdentifiable extends EntityPathBase> { private static final long serialVersionUID = 1818647030; @@ -30,7 +35,7 @@ public class QCommonIdentifiable extends EntityPathBase id = createSimple("id", java.io.Serializable.class); + public final SimplePath id = createSimple("id", java.io.Serializable.class); //inherited public final NumberPath version = _super.version; @@ -40,7 +45,7 @@ public QCommonIdentifiable(String variable) { super((Class)CommonIdentifiable.class, forVariable(variable)); } - public QCommonIdentifiable(BeanPath> entity) { + public QCommonIdentifiable(BeanPath> entity) { super(entity.getType(), entity.getMetadata()); } diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java index 060a2d07ba..a7078057ae 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCommonPersistence.java @@ -16,8 +16,8 @@ import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Path; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.NumberPath; /** * QCommonPersistence is a Querydsl query type for CommonPersistence diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java index 40d43129cc..22d1a29095 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompany.java @@ -3,7 +3,8 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.PathInits; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java index 94365dd764..0ac1283130 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroup.java @@ -3,7 +3,8 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.PathInits; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java index 91c068f769..be2aba9c66 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyGroupPK.java @@ -3,7 +3,9 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.NumberPath; +import com.querydsl.core.types.dsl.StringPath; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java index bbf6734c51..800f567c2c 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QCompanyPK.java @@ -3,7 +3,8 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.StringPath; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java index 578b42a02b..e703303887 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QIdNamePair.java @@ -3,7 +3,9 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.SimplePath; +import com.querydsl.core.types.dsl.StringPath; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java index f47993ee74..bc9a1709c5 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QMyEmbeddable.java @@ -16,7 +16,8 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.NumberPath; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java index 628ed9255d..74ac8369d3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperSupertype.java @@ -16,7 +16,9 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.NumberPath; /** diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java index 6e1da41da9..480f20c4be 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/QSuperclass.java @@ -3,7 +3,9 @@ import static com.querydsl.core.types.PathMetadataFactory.*; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.ListPath; +import com.querydsl.core.types.dsl.PathInits; import javax.annotation.Generated; diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java index 639e6265e4..f86be66293 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAbstractEntity.java @@ -17,9 +17,9 @@ import com.querydsl.core.domain.AbstractEntity; import com.querydsl.core.types.PathMetadata; -import com.querydsl.core.types.path.BeanPath; -import com.querydsl.core.types.path.EntityPathBase; -import com.querydsl.core.types.path.NumberPath; +import com.querydsl.core.types.dsl.BeanPath; +import com.querydsl.core.types.dsl.EntityPathBase; +import com.querydsl.core.types.dsl.NumberPath; /** diff --git a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java index e5d9040a16..07c24507e3 100644 --- a/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java +++ b/querydsl-core/src/test/java/com/querydsl/core/domain/query/QAnimal.java @@ -15,9 +15,12 @@ import static com.querydsl.core.types.PathMetadataFactory.*; +import java.sql.Date; +import java.sql.Time; + import com.querydsl.core.domain.Animal; import com.querydsl.core.types.*; -import com.querydsl.core.types.path.*; +import com.querydsl.core.types.dsl.*; /** @@ -35,13 +38,13 @@ public class QAnimal extends EntityPathBase { public final NumberPath bodyWeight = createNumber("bodyWeight", Double.class); - public final DatePath dateField = createDate("dateField", java.sql.Date.class); + public final DatePath dateField = createDate("dateField", java.sql.Date.class); public final NumberPath id = createNumber("id", Integer.class); public final StringPath name = createString("name"); - public final TimePath timeField = createTime("timeField", java.sql.Time.class); + public final TimePath