# IGNITE-32: Tests for db metadata parsing and XML generation.

Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/e716d827
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/e716d827
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/e716d827

Branch: refs/heads/ignite-32
Commit: e716d82787d48016c4f620574b6ef6104611d221
Parents: e28ddd2
Author: AKuznetsov <akuznet...@gridgain.com>
Authored: Thu Jan 29 10:51:13 2015 +0700
Committer: AKuznetsov <akuznet...@gridgain.com>
Committed: Thu Jan 29 10:51:13 2015 +0700

----------------------------------------------------------------------
 .../ignite/schema/generator/XmlGenerator.java   |   4 +-
 .../apache/ignite/schema/model/PojoField.java   |   2 +-
 .../schema/load/BaseSchemaLoaderSelfTest.java   | 135 ++++++++
 .../load/generator/PojoGeneratorSelfTest.java   | 137 ++------
 .../load/generator/XmlGeneratorSelfTest.java    |  29 +-
 .../apache/ignite/schema/load/model/Ignite.xml  | 321 +++++++++++++++++++
 .../ignite/schema/load/model/Primitives.txt     |  10 +-
 .../load/parser/DbMetadataParserSelfTest.java   |  95 +++++-
 8 files changed, 606 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/XmlGenerator.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/XmlGenerator.java
 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/XmlGenerator.java
index 340bee1..c372ad2 100644
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/XmlGenerator.java
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/generator/XmlGenerator.java
@@ -49,9 +49,9 @@ public class XmlGenerator {
             "    contributor license agreements.  See the NOTICE file 
distributed with\n" +
             "    this work for additional information regarding copyright 
ownership.\n" +
             "    The ASF licenses this file to You under the Apache License, 
Version 2.0\n" +
-            "    (the \"License\" + you may not use this file except in 
compliance with\n" +
+            "    (the \"License\"); you may not use this file except in 
compliance with\n" +
             "    the License.  You may obtain a copy of the License at\n\n" +
-            "         http://www.apache.org/licenses/LICENSE-2.0\n\n"; +
+            "        http://www.apache.org/licenses/LICENSE-2.0\n\n"; +
             "    Unless required by applicable law or agreed to in writing, 
software\n" +
             "    distributed under the License is distributed on an \"AS IS\" 
BASIS,\n" +
             "    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
or implied.\n" +

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/main/java/org/apache/ignite/schema/model/PojoField.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/model/PojoField.java
 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/model/PojoField.java
index 4768dfb..89c0647 100644
--- 
a/modules/schema-load/src/main/java/org/apache/ignite/schema/model/PojoField.java
+++ 
b/modules/schema-load/src/main/java/org/apache/ignite/schema/model/PojoField.java
@@ -375,7 +375,7 @@ public class PojoField {
     }
 
     /**
-     * @return {@code true}
+     * @return {@code true} if type of field is primitive type.
      */
     public boolean primitive() {
         return PRIMITIVES.contains(javaTypeName());

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/test/java/org/apache/ignite/schema/load/BaseSchemaLoaderSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/BaseSchemaLoaderSelfTest.java
 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/BaseSchemaLoaderSelfTest.java
new file mode 100644
index 0000000..b074093
--- /dev/null
+++ 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/BaseSchemaLoaderSelfTest.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.ignite.schema.load;
+
+import junit.framework.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.schema.model.PojoDescriptor;
+import org.apache.ignite.schema.parser.DatabaseMetadataParser;
+import org.apache.ignite.schema.ui.*;
+
+import java.io.*;
+import java.sql.*;
+import java.util.List;
+
+import static org.apache.ignite.schema.ui.MessageBox.Result.*;
+
+/**
+ * Base functional for ignite-schema-loader tests.
+ */
+public class BaseSchemaLoaderSelfTest extends TestCase {
+    /** Default connection URL (value is 
<tt>jdbc:h2:mem:jdbcCacheStore;DB_CLOSE_DELAY=-1</tt>). */
+    private static final String DFLT_CONN_URL = 
"jdbc:h2:mem:autoCacheStore;DB_CLOSE_DELAY=-1";
+
+    /** Path to temp folder where generated POJOs will be saved. */
+    protected static final String OUT_DIR_PATH =
+        String.format("%s/ignite-schema-loader/out", 
System.getProperty("java.io.tmpdir"));
+
+    /** Auto confirmation of file conflicts. */
+    protected ConfirmCallable askOverwrite = new ConfirmCallable(null, "") {
+        @Override public MessageBox.Result confirm(String msg) {
+            return YES_TO_ALL;
+        }
+    };
+
+    /** List of generated for test database POJO objects. */
+    protected List<PojoDescriptor> pojoLst;
+
+    /** {@inheritDoc} */
+    @Override public void setUp() throws Exception {
+        Class.forName("org.h2.Driver");
+
+        Connection conn = DriverManager.getConnection(DFLT_CONN_URL, "sa", "");
+
+        Statement stmt = conn.createStatement();
+
+        stmt.executeUpdate("CREATE TABLE PRIMITIVES (pk INTEGER PRIMARY KEY, " 
+
+            " boolCol BOOLEAN NOT NULL," +
+            " byteCol TINYINT NOT NULL," +
+            " shortCol SMALLINT NOT NULL," +
+            " intCol INTEGER NOT NULL, " +
+            " longCol BIGINT NOT NULL," +
+            " floatCol REAL NOT NULL," +
+            " doubleCol DOUBLE NOT NULL," +
+            " doubleCol2 DOUBLE NOT NULL, " +
+            " bigDecimalCol DECIMAL(10, 0)," +
+            " strCol VARCHAR(10)," +
+            " dateCol DATE," +
+            " timeCol TIME," +
+            " tsCol TIMESTAMP, " +
+            " arrCol BINARY(10))");
+
+        stmt.executeUpdate("CREATE TABLE OBJECTS (pk INTEGER PRIMARY KEY, " +
+            " boolCol BOOLEAN," +
+            " byteCol TINYINT," +
+            " shortCol SMALLINT," +
+            " intCol INTEGER," +
+            " longCol BIGINT," +
+            " floatCol REAL," +
+            " doubleCol DOUBLE," +
+            " doubleCol2 DOUBLE," +
+            " bigDecimalCol DECIMAL(10, 0)," +
+            " strCol VARCHAR(10), " +
+            " dateCol DATE," +
+            " timeCol TIME," +
+            " tsCol TIMESTAMP," +
+            " arrCol BINARY(10))");
+
+        conn.commit();
+
+        U.closeQuiet(stmt);
+
+        pojoLst = DatabaseMetadataParser.parse(conn, false);
+
+        U.closeQuiet(conn);
+    }
+
+    /**
+     * Compare files by lines.
+     *
+     * @param exp Stream to read of expected file from test resources.
+     * @param generated Generated file instance.
+     * @param excludePtrn Marker string to exclude lines from comparing.
+     * @return true if generated file correspond to expected.
+     */
+    protected boolean compareFilesInt(InputStream exp, File generated, String 
excludePtrn) {
+        try (BufferedReader baseReader = new BufferedReader(new 
InputStreamReader(exp))) {
+            try (BufferedReader generatedReader = new BufferedReader(new 
FileReader(generated))) {
+                String baseLine;
+
+                while ((baseLine = baseReader.readLine()) != null) {
+                    String generatedLine = generatedReader.readLine();
+
+                    if (!baseLine.equals(generatedLine) && 
!baseLine.contains(excludePtrn)
+                            && !generatedLine.contains(excludePtrn)) {
+                        System.out.println("Expected: " + baseLine);
+                        System.out.println("Generated: " + generatedLine);
+
+                        return false;
+                    }
+                }
+
+                return true;
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+
+            return false;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/PojoGeneratorSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/PojoGeneratorSelfTest.java
 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/PojoGeneratorSelfTest.java
index 5984641..310f885 100644
--- 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/PojoGeneratorSelfTest.java
+++ 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/PojoGeneratorSelfTest.java
@@ -17,118 +17,43 @@
 
 package org.apache.ignite.schema.load.generator;
 
-import junit.framework.TestCase;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.schema.generator.PojoGenerator;
+import org.apache.ignite.schema.load.BaseSchemaLoaderSelfTest;
 import org.apache.ignite.schema.model.PojoDescriptor;
-import org.apache.ignite.schema.parser.DatabaseMetadataParser;
-import org.apache.ignite.schema.ui.ConfirmCallable;
-import org.apache.ignite.schema.ui.MessageBox;
 
-import java.io.*;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.Statement;
-import java.util.List;
-
-import static org.apache.ignite.schema.ui.MessageBox.Result.YES_TO_ALL;
+import java.io.File;
 
 /**
  * Tests for POJO generator.
  */
-public class PojoGeneratorSelfTest extends TestCase {
-    /** Default connection URL (value is 
<tt>jdbc:h2:mem:jdbcCacheStore;DB_CLOSE_DELAY=-1</tt>). */
-    protected static final String DFLT_CONN_URL = 
"jdbc:h2:mem:autoCacheStore;DB_CLOSE_DELAY=-1";
-
-    /** File separator. */
-    private static final String PS = File.separator;
-
-    /** Path to temp folder where generated POJOs will be saved. */
-    private static final String OUT_DIR_PATH = 
System.getProperty("java.io.tmpdir") + PS +
-        "ignite-schema-loader" + PS + "out";
-
+public class PojoGeneratorSelfTest extends BaseSchemaLoaderSelfTest {
     /** Marker string to skip date generation while comparing.*/
     private static final String GEN_PTRN = "Code generated by Apache Ignite 
Schema Load utility";
 
-    /** Connection to in-memory H2 database. */
-    private Connection conn;
-
-    /** {@inheritDoc} */
-    @Override public void setUp() throws Exception {
-        Class.forName("org.h2.Driver");
-
-        conn = DriverManager.getConnection(DFLT_CONN_URL, "sa", "");
-
-        Statement stmt = conn.createStatement();
-
-        stmt.executeUpdate("CREATE TABLE PRIMITIVES (pk INTEGER PRIMARY KEY, " 
+
-            " boolCol BOOLEAN NOT NULL," +
-            " byteCol TINYINT NOT NULL," +
-            " shortCol SMALLINT NOT NULL," +
-            " intCol INTEGER NOT NULL, " +
-            " longCol BIGINT NOT NULL," +
-            " floatCol REAL NOT NULL," +
-            " doubleCol DOUBLE NOT NULL," +
-            " doubleCol2 DOUBLE NOT NULL, " +
-            " bigDecimalCol DECIMAL(10, 0)," +
-            " strCol VARCHAR(10)," +
-            " dateCol DATE," +
-            " timeCol TIME," +
-            " tsCol TIMESTAMP, " +
-            " arrCol BINARY(10))");
-
-        stmt.executeUpdate("CREATE TABLE OBJECTS (pk INTEGER PRIMARY KEY, " +
-            " boolCol BOOLEAN," +
-            " byteCol TINYINT," +
-            " shortCol SMALLINT," +
-            " intCol INTEGER," +
-            " longCol BIGINT," +
-            " floatCol REAL," +
-            " doubleCol DOUBLE," +
-            " doubleCol2 DOUBLE," +
-            " bigDecimalCol DECIMAL(10, 0)," +
-            " strCol VARCHAR(10), " +
-            " dateCol DATE," +
-            " timeCol TIME," +
-            " tsCol TIMESTAMP," +
-            " arrCol BINARY(10))");
-
-        conn.commit();
-
-        U.closeQuiet(stmt);
-    }
-
-    /** {@inheritDoc} */
-    @Override public void tearDown() throws Exception {
-        U.closeQuiet(conn);
-    }
-
     /**
      * Test that POJOs generated correctly.
      */
     public void testPojoGeneration() throws Exception {
-        List<PojoDescriptor> pojos = DatabaseMetadataParser.parse(conn, true);
-
-        ConfirmCallable askOverwrite = new ConfirmCallable(null, "") {
-            @Override public MessageBox.Result confirm(String msg) {
-                return YES_TO_ALL;
-            }
-        };
-
         String pkg = "org.apache.ignite.schema.load.model";
-        String intPath = "org" + PS + "apache" + PS + "ignite" + PS + "schema" 
+ PS + "load" + PS + "model";
+        String intPath = "org/apache/ignite/schema/load/model";
 
-        for (PojoDescriptor pojo : pojos) {
-            if (!pojo.valueClassName().isEmpty()) {
+        Boolean containsSchema = false;
+
+        for (PojoDescriptor pojo : pojoLst) {
+            if (pojo.valueClassName().isEmpty())
+                containsSchema = true;
+            else {
                 PojoGenerator.generate(pojo, OUT_DIR_PATH, pkg, true, true, 
askOverwrite);
 
-                assertTrue("Generated POJO files does not accordance to 
predefined for type " + pojo.keyClassName(),
-                        compareFiles(pojo.keyClassName(), intPath));
+                assertTrue("Generated key class POJO content is differ from 
expected for type " + pojo.keyClassName(),
+                        compareFiles(pojo.keyClassName(), intPath, GEN_PTRN));
 
-                assertTrue("Generated POJO files does not accordance to 
predefined for type " + pojo.valueClassName(),
-                        compareFiles(pojo.valueClassName(), intPath));
+                assertTrue("Generated value class POJO content is differ from 
expected for type " + pojo.valueClassName(),
+                        compareFiles(pojo.valueClassName(), intPath, 
GEN_PTRN));
             }
         }
+
+        assertTrue("Generated POJOs does not contains schema.", 
containsSchema);
     }
 
     /**
@@ -136,32 +61,10 @@ public class PojoGeneratorSelfTest extends TestCase {
      * @param intPath Int path.
      * @return {@code true} if generated POJO as expected.
      */
-    private boolean compareFiles(String typeName, String intPath) {
-        String relPath = intPath + PS + typeName;
-
-        try (BufferedReader baseReader = new BufferedReader(new 
InputStreamReader(
-                getClass().getResourceAsStream("/" + relPath + ".txt")))) {
-            try (BufferedReader generatedReader = new BufferedReader(new 
FileReader(OUT_DIR_PATH + PS + relPath + ".java"))) {
-                String baseLine;
-
-                while ((baseLine = baseReader.readLine()) != null) {
-                    String generatedLine = generatedReader.readLine();
-
-                    if (!baseLine.equals(generatedLine) && 
!baseLine.contains(GEN_PTRN)
-                        && !generatedLine.contains(GEN_PTRN)) {
-                        System.out.println("Expected: " + baseLine);
-                        System.out.println("Generated: " + generatedLine);
-
-                        return false;
-                    }
-                }
-
-                return true;
-            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
+    private boolean compareFiles(String typeName, String intPath, String 
excludePtrn) {
+        String relPath = intPath + "/" + typeName;
 
-        return false;
+        return compareFilesInt(getClass().getResourceAsStream("/" + relPath + 
".txt"),
+                new File(OUT_DIR_PATH + "/" + relPath + ".java"), excludePtrn);
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/XmlGeneratorSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/XmlGeneratorSelfTest.java
 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/XmlGeneratorSelfTest.java
index d0b1af5..6722a34 100644
--- 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/XmlGeneratorSelfTest.java
+++ 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/generator/XmlGeneratorSelfTest.java
@@ -17,9 +17,36 @@
 
 package org.apache.ignite.schema.load.generator;
 
+import org.apache.ignite.cache.query.*;
+import org.apache.ignite.schema.generator.*;
+import org.apache.ignite.schema.load.*;
+import org.apache.ignite.schema.model.*;
+
+import java.io.*;
+import java.util.*;
+
 /**
  * Tests for XML generator.
  */
-public class XmlGeneratorSelfTest {
+public class XmlGeneratorSelfTest extends BaseSchemaLoaderSelfTest {
+    /**
+     * Test that XML generated correctly.
+     */
+    public void testXmlGeneration() throws Exception {
+        Collection<CacheQueryTypeMetadata> all = new ArrayList<>();
+
+        // Generate XML.
+        for (PojoDescriptor pojo : pojoLst)
+            if (!pojo.valueClassName().isEmpty())
+                all.add(pojo.metadata(true));
+
+        String fileName = "Ignite.xml";
+
+        XmlGenerator.generate("org.apache.ignite.schema.load.model", all, new 
File(OUT_DIR_PATH, fileName),
+            askOverwrite);
 
+        assertTrue("Generated XML file content is differ from expected one",
+            
compareFilesInt(getClass().getResourceAsStream("/org/apache/ignite/schema/load/model/"
 + fileName),
+                new File(OUT_DIR_PATH + "/" + fileName), "XML generated by 
Apache Ignite Schema Load utility"));
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Ignite.xml
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Ignite.xml
 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Ignite.xml
new file mode 100644
index 0000000..27d30ce
--- /dev/null
+++ 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Ignite.xml
@@ -0,0 +1,321 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You 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.
+-->
+<!--
+    XML generated by Apache Ignite Schema Load utility: 01/28/2015
+-->
+<beans xmlns="http://www.springframework.org/schema/beans";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://www.springframework.org/schema/beans 
+                           
http://www.springframework.org/schema/beans/spring-beans.xsd";>
+    <bean class="org.apache.ignite.cache.query.CacheQueryTypeMetadata">
+        <property name="type" 
value="org.apache.ignite.schema.load.model.Objects"/>
+        <property name="keyType" 
value="org.apache.ignite.schema.load.model.ObjectsKey"/>
+        <property name="schema" value="PUBLIC"/>
+        <property name="tableName" value="OBJECTS"/>
+        <property name="keyDescriptors">
+            <list>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="pk"/>
+                    <property name="javaType" value="int"/>
+                    <property name="dbName" value="PK"/>
+                    <property name="dbType" value="4"/>
+                </bean>
+            </list>
+        </property>
+        <property name="valueDescriptors">
+            <list>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="pk"/>
+                    <property name="javaType" value="int"/>
+                    <property name="dbName" value="PK"/>
+                    <property name="dbType" value="4"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="boolcol"/>
+                    <property name="javaType" value="java.lang.Boolean"/>
+                    <property name="dbName" value="BOOLCOL"/>
+                    <property name="dbType" value="16"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="bytecol"/>
+                    <property name="javaType" value="java.lang.Byte"/>
+                    <property name="dbName" value="BYTECOL"/>
+                    <property name="dbType" value="-6"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="shortcol"/>
+                    <property name="javaType" value="java.lang.Short"/>
+                    <property name="dbName" value="SHORTCOL"/>
+                    <property name="dbType" value="5"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="intcol"/>
+                    <property name="javaType" value="java.lang.Integer"/>
+                    <property name="dbName" value="INTCOL"/>
+                    <property name="dbType" value="4"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="longcol"/>
+                    <property name="javaType" value="java.lang.Long"/>
+                    <property name="dbName" value="LONGCOL"/>
+                    <property name="dbType" value="-5"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="floatcol"/>
+                    <property name="javaType" value="java.lang.Float"/>
+                    <property name="dbName" value="FLOATCOL"/>
+                    <property name="dbType" value="7"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="doublecol"/>
+                    <property name="javaType" value="java.lang.Double"/>
+                    <property name="dbName" value="DOUBLECOL"/>
+                    <property name="dbType" value="8"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="doublecol2"/>
+                    <property name="javaType" value="java.lang.Double"/>
+                    <property name="dbName" value="DOUBLECOL2"/>
+                    <property name="dbType" value="8"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="bigdecimalcol"/>
+                    <property name="javaType" value="java.math.BigDecimal"/>
+                    <property name="dbName" value="BIGDECIMALCOL"/>
+                    <property name="dbType" value="3"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="strcol"/>
+                    <property name="javaType" value="java.lang.String"/>
+                    <property name="dbName" value="STRCOL"/>
+                    <property name="dbType" value="12"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="datecol"/>
+                    <property name="javaType" value="java.sql.Date"/>
+                    <property name="dbName" value="DATECOL"/>
+                    <property name="dbType" value="91"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="timecol"/>
+                    <property name="javaType" value="java.sql.Time"/>
+                    <property name="dbName" value="TIMECOL"/>
+                    <property name="dbType" value="92"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="tscol"/>
+                    <property name="javaType" value="java.sql.Timestamp"/>
+                    <property name="dbName" value="TSCOL"/>
+                    <property name="dbType" value="93"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="arrcol"/>
+                    <property name="javaType" value="java.lang.Object"/>
+                    <property name="dbName" value="ARRCOL"/>
+                    <property name="dbType" value="-3"/>
+                </bean>
+            </list>
+        </property>
+        <property name="queryFields">
+            <map>
+                <entry key="pk" value="int"/>
+                <entry key="boolcol" value="java.lang.Boolean"/>
+                <entry key="bytecol" value="java.lang.Byte"/>
+                <entry key="shortcol" value="java.lang.Short"/>
+                <entry key="intcol" value="java.lang.Integer"/>
+                <entry key="longcol" value="java.lang.Long"/>
+                <entry key="floatcol" value="java.lang.Float"/>
+                <entry key="doublecol" value="java.lang.Double"/>
+                <entry key="doublecol2" value="java.lang.Double"/>
+                <entry key="bigdecimalcol" value="java.math.BigDecimal"/>
+                <entry key="strcol" value="java.lang.String"/>
+                <entry key="datecol" value="java.sql.Date"/>
+                <entry key="timecol" value="java.sql.Time"/>
+                <entry key="tscol" value="java.sql.Timestamp"/>
+                <entry key="arrcol" value="java.lang.Object"/>
+            </map>
+        </property>
+        <property name="ascendingFields">
+            <map>
+                <entry key="pk" value="int"/>
+            </map>
+        </property>
+        <property name="groups">
+            <map>
+                <entry key="primaryKeyC">
+                    <map>
+                        <entry key="pk">
+                            <bean class="org.apache.ignite.lang.IgniteBiTuple">
+                                <constructor-arg value="int"/>
+                                <constructor-arg value="false"/>
+                            </bean>
+                        </entry>
+                    </map>
+                </entry>
+            </map>
+        </property>
+    </bean>
+    <bean class="org.apache.ignite.cache.query.CacheQueryTypeMetadata">
+        <property name="type" 
value="org.apache.ignite.schema.load.model.Primitives"/>
+        <property name="keyType" 
value="org.apache.ignite.schema.load.model.PrimitivesKey"/>
+        <property name="schema" value="PUBLIC"/>
+        <property name="tableName" value="PRIMITIVES"/>
+        <property name="keyDescriptors">
+            <list>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="pk"/>
+                    <property name="javaType" value="int"/>
+                    <property name="dbName" value="PK"/>
+                    <property name="dbType" value="4"/>
+                </bean>
+            </list>
+        </property>
+        <property name="valueDescriptors">
+            <list>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="pk"/>
+                    <property name="javaType" value="int"/>
+                    <property name="dbName" value="PK"/>
+                    <property name="dbType" value="4"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="boolcol"/>
+                    <property name="javaType" value="boolean"/>
+                    <property name="dbName" value="BOOLCOL"/>
+                    <property name="dbType" value="16"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="bytecol"/>
+                    <property name="javaType" value="byte"/>
+                    <property name="dbName" value="BYTECOL"/>
+                    <property name="dbType" value="-6"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="shortcol"/>
+                    <property name="javaType" value="short"/>
+                    <property name="dbName" value="SHORTCOL"/>
+                    <property name="dbType" value="5"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="intcol"/>
+                    <property name="javaType" value="int"/>
+                    <property name="dbName" value="INTCOL"/>
+                    <property name="dbType" value="4"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="longcol"/>
+                    <property name="javaType" value="long"/>
+                    <property name="dbName" value="LONGCOL"/>
+                    <property name="dbType" value="-5"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="floatcol"/>
+                    <property name="javaType" value="float"/>
+                    <property name="dbName" value="FLOATCOL"/>
+                    <property name="dbType" value="7"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="doublecol"/>
+                    <property name="javaType" value="double"/>
+                    <property name="dbName" value="DOUBLECOL"/>
+                    <property name="dbType" value="8"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="doublecol2"/>
+                    <property name="javaType" value="double"/>
+                    <property name="dbName" value="DOUBLECOL2"/>
+                    <property name="dbType" value="8"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="bigdecimalcol"/>
+                    <property name="javaType" value="java.math.BigDecimal"/>
+                    <property name="dbName" value="BIGDECIMALCOL"/>
+                    <property name="dbType" value="3"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="strcol"/>
+                    <property name="javaType" value="java.lang.String"/>
+                    <property name="dbName" value="STRCOL"/>
+                    <property name="dbType" value="12"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="datecol"/>
+                    <property name="javaType" value="java.sql.Date"/>
+                    <property name="dbName" value="DATECOL"/>
+                    <property name="dbType" value="91"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="timecol"/>
+                    <property name="javaType" value="java.sql.Time"/>
+                    <property name="dbName" value="TIMECOL"/>
+                    <property name="dbType" value="92"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="tscol"/>
+                    <property name="javaType" value="java.sql.Timestamp"/>
+                    <property name="dbName" value="TSCOL"/>
+                    <property name="dbType" value="93"/>
+                </bean>
+                <bean 
class="org.apache.ignite.cache.query.CacheQueryTypeDescriptor">
+                    <property name="javaName" value="arrcol"/>
+                    <property name="javaType" value="java.lang.Object"/>
+                    <property name="dbName" value="ARRCOL"/>
+                    <property name="dbType" value="-3"/>
+                </bean>
+            </list>
+        </property>
+        <property name="queryFields">
+            <map>
+                <entry key="pk" value="int"/>
+                <entry key="boolcol" value="boolean"/>
+                <entry key="bytecol" value="byte"/>
+                <entry key="shortcol" value="short"/>
+                <entry key="intcol" value="int"/>
+                <entry key="longcol" value="long"/>
+                <entry key="floatcol" value="float"/>
+                <entry key="doublecol" value="double"/>
+                <entry key="doublecol2" value="double"/>
+                <entry key="bigdecimalcol" value="java.math.BigDecimal"/>
+                <entry key="strcol" value="java.lang.String"/>
+                <entry key="datecol" value="java.sql.Date"/>
+                <entry key="timecol" value="java.sql.Time"/>
+                <entry key="tscol" value="java.sql.Timestamp"/>
+                <entry key="arrcol" value="java.lang.Object"/>
+            </map>
+        </property>
+        <property name="ascendingFields">
+            <map>
+                <entry key="pk" value="int"/>
+            </map>
+        </property>
+        <property name="groups">
+            <map>
+                <entry key="primaryKeyD">
+                    <map>
+                        <entry key="pk">
+                            <bean class="org.apache.ignite.lang.IgniteBiTuple">
+                                <constructor-arg value="int"/>
+                                <constructor-arg value="false"/>
+                            </bean>
+                        </entry>
+                    </map>
+                </entry>
+            </map>
+        </property>
+    </bean>
+</beans>

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Primitives.txt
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Primitives.txt
 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Primitives.txt
index 3a2a5d2..e4f0a79 100644
--- 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Primitives.txt
+++ 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/model/Primitives.txt
@@ -44,7 +44,7 @@ public class Primitives implements Serializable {
     private int intcol;
 
     /** Value for longcol. */
-    private int longcol;
+    private long longcol;
 
     /** Value for floatcol. */
     private float floatcol;
@@ -89,7 +89,7 @@ public class Primitives implements Serializable {
         byte bytecol,
         short shortcol,
         int intcol,
-        int longcol,
+        long longcol,
         float floatcol,
         double doublecol,
         double doublecol2,
@@ -212,7 +212,7 @@ public class Primitives implements Serializable {
      *
      * @return Value for longcol.
      */
-    public int getLongcol() {
+    public long getLongcol() {
         return longcol;
     }
 
@@ -221,7 +221,7 @@ public class Primitives implements Serializable {
      *
      * @param longcol New value for longcol.
      */
-    public void setLongcol(int longcol) {
+    public void setLongcol(long longcol) {
         this.longcol = longcol;
     }
 
@@ -457,7 +457,7 @@ public class Primitives implements Serializable {
 
         res = 31 * res + intcol;
 
-        res = 31 * res + longcol;
+        res = 31 * res + (int)(longcol ^ (longcol >>> 32));
 
         res = 31 * res + (floatcol != +0.0f ? Float.floatToIntBits(floatcol) : 
0);
 

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e716d827/modules/schema-load/src/test/java/org/apache/ignite/schema/load/parser/DbMetadataParserSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/parser/DbMetadataParserSelfTest.java
 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/parser/DbMetadataParserSelfTest.java
index 5c4dc23..eafb55f 100644
--- 
a/modules/schema-load/src/test/java/org/apache/ignite/schema/load/parser/DbMetadataParserSelfTest.java
+++ 
b/modules/schema-load/src/test/java/org/apache/ignite/schema/load/parser/DbMetadataParserSelfTest.java
@@ -17,9 +17,102 @@
 
 package org.apache.ignite.schema.load.parser;
 
+import org.apache.ignite.schema.load.*;
+import org.apache.ignite.schema.model.*;
+
+import java.math.*;
+import java.sql.Date;
+import java.sql.*;
+import java.util.*;
+
 /**
  * Tests for metadata parsing.
  */
-public class DbMetadataParserSelfTest {
+public class DbMetadataParserSelfTest extends BaseSchemaLoaderSelfTest {
+    /**
+     * Check that field is correspond to expected.
+     *
+     * @param field Field descriptor.
+     * @param name Expected field name.
+     * @param primitive Expected field primitive type.
+     * @param cls Expected field type.
+     */
+    private void checkField(PojoField field, String name, boolean primitive, 
Class<?> cls) {
+        assertEquals("Name of field should be " + name, name, 
field.javaName());
+
+        assertEquals("Type of field should be " + cls.getName(), 
cls.getName(), field.javaTypeName());
+
+        assertEquals("Field primitive should be " + primitive, primitive, 
field.primitive());
+    }
+
+    /**
+     * Check that type is correspond to expected.
+     *
+     * @param type Type descriptor.
+     */
+    private void checkType(PojoDescriptor type) {
+        assertFalse("Type key class name should be defined", 
type.keyClassName().isEmpty());
+
+        assertFalse("Type value class name should be defined", 
type.valueClassName().isEmpty());
+
+        Collection<PojoField> keyFields = type.keyFields();
+
+        assertEquals("Key type should have 1 field", 1, keyFields.size());
+
+        checkField(keyFields.iterator().next(), "pk", true, int.class);
+
+        List<PojoField> fields = type.fields();
+
+        assertEquals("Value type should have 15 fields", 15, fields.size());
+
+        Iterator<PojoField> fieldsIt = fields.iterator();
+
+        checkField(fieldsIt.next(), "pk", true, int.class);
+
+        if ("Objects".equals(type.valueClassName())) {
+            checkField(fieldsIt.next(), "boolcol", false, Boolean.class);
+            checkField(fieldsIt.next(), "bytecol", false, Byte.class);
+            checkField(fieldsIt.next(), "shortcol", false, Short.class);
+            checkField(fieldsIt.next(), "intcol", false, Integer.class);
+            checkField(fieldsIt.next(), "longcol", false, Long.class);
+            checkField(fieldsIt.next(), "floatcol", false, Float.class);
+            checkField(fieldsIt.next(), "doublecol", false, Double.class);
+            checkField(fieldsIt.next(), "doublecol2", false, Double.class);
+        }
+        else {
+            checkField(fieldsIt.next(), "boolcol", true, boolean.class);
+            checkField(fieldsIt.next(), "bytecol", true, byte.class);
+            checkField(fieldsIt.next(), "shortcol", true, short.class);
+            checkField(fieldsIt.next(), "intcol", true, int.class);
+            checkField(fieldsIt.next(), "longcol", true, long.class);
+            checkField(fieldsIt.next(), "floatcol", true, float.class);
+            checkField(fieldsIt.next(), "doublecol", true, double.class);
+            checkField(fieldsIt.next(), "doublecol2", true, double.class);
+        }
+
+        checkField(fieldsIt.next(), "bigdecimalcol", false, BigDecimal.class);
+        checkField(fieldsIt.next(), "strcol", false, String.class);
+        checkField(fieldsIt.next(), "datecol", false, Date.class);
+        checkField(fieldsIt.next(), "timecol", false, Time.class);
+        checkField(fieldsIt.next(), "tscol", false, Timestamp.class);
+        checkField(fieldsIt.next(), "arrcol", false, Object.class);
+    }
+
+    /**
+     * Test that metadata generated correctly.
+     */
+    public void testCheckMetadata() {
+        assertEquals("Metadata should contain 3 element", 3, pojoLst.size());
+
+        Iterator<PojoDescriptor> it = pojoLst.iterator();
+
+        PojoDescriptor schema = it.next();
+
+        assertTrue("First element is schema description. Its class name should 
be empty",
+                schema.valueClassName().isEmpty());
+
+        checkType(it.next());
 
+        checkType(it.next());
+    }
 }

Reply via email to