Package org.phoenixdb.jdbc

Source Code of org.phoenixdb.jdbc.JDBCBasicTestCase

/*
**
* BEGIN_COPYRIGHT
*
* This file is part of PhoenixDB.
* Copyright (C) 2013 PhoenixDB Team
* Copyright (C) 2008-2013 SciDB, Inc.
*
* PhoenixDB is free software: you can redistribute it and/or modify
* it under the terms of the AFFERO GNU General Public License as published by
* the Free Software Foundation.
*
* PhoenixDB is distributed "AS-IS" AND WITHOUT ANY WARRANTY OF ANY KIND,
* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
* NON-INFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. See
* the AFFERO GNU General Public License for the complete license terms.
*
* You should have received a copy of the AFFERO GNU General Public License
* along with PhoenixDB.  If not, see <http://www.gnu.org/licenses/agpl-3.0.html>
*
* END_COPYRIGHT
*/
package org.phoenixdb.jdbc;

import junit.framework.TestCase;
import org.phoenixdb.jdbc.IResultSetWrapper;
import org.phoenixdb.jdbc.IStatementWrapper;

import java.sql.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class JDBCBasicTestCase extends TestCase
{
    private Connection conn;

    public JDBCBasicTestCase(String s)
    {
        super(s);
        try
        {
            Class.forName("org.phoenixdb.jdbc.Driver");
        }
        catch (ClassNotFoundException e)
        {
            System.out.println("Driver is not in the CLASSPATH -> " + e);
        }
    }

    public void setUp() throws SQLException {
        conn = DriverManager.getConnection("jdbc:phoenixdb://localhost/");
    }

    public void tearDown() throws SQLException {
        conn.close();
    }

    public void testDDLExecution() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("create array A<i: int64, s: string>[x=0:5,3,0, y=0:9,5,0]");
        assertNull(res);
        conn.commit();


        res = st.executeQuery("drop array A");
        assertNull(res);
        conn.commit();
    }

    public void testSelectiveQuery() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(empty<a:string null, c: char null>[x=0:3,2,0], '[(\"1\",\"1\")(\"\", null)][(\"2\")]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(3, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));
        assertEquals("a", meta.getColumnName(2));
        assertEquals("string", meta.getColumnTypeName(2));
        assertEquals("c", meta.getColumnName(3));
        assertEquals("char", meta.getColumnTypeName(3));
        assertTrue(resWrapper.isColumnAttribute(3));

        StringBuilder sb = new StringBuilder();
        while(!res.isAfterLast())
        {
            sb.append(res.getLong("x") + ":" + res.wasNull() + ":" + res.getString("a") + ":" + res.wasNull() + ":"
                    + res.getString("c") + ":" + res.wasNull() + ":");
            res.next();
        }
        assertEquals("0:false:1:false:1:false:1:false::false:null:true:2:false:2:false:null:true:", sb.toString());
    }

    public void testSignedIntegerDataTypes() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(empty<i8:int8 null, i16: int16 null, i32: int32 null, " +
                "i64: int64 null>[x=0:3,2,0], '[(1, 260, 67000, 10000000), (-1, -260, -67000, -10000000)]" +
                "[(null, null, null, null)]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(5, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("i8", meta.getColumnName(2));
        assertEquals("int8", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));
        assertEquals("i16", meta.getColumnName(3));
        assertEquals("int16", meta.getColumnTypeName(3));
        assertTrue(resWrapper.isColumnAttribute(3));
        assertEquals("i32", meta.getColumnName(4));
        assertEquals("int32", meta.getColumnTypeName(4));
        assertTrue(resWrapper.isColumnAttribute(4));
        assertEquals("i64", meta.getColumnName(5));
        assertEquals("int64", meta.getColumnTypeName(5));
        assertTrue(resWrapper.isColumnAttribute(5));

        StringBuilder sbMain = new StringBuilder();
        StringBuilder sbConvert1 = new StringBuilder();
        StringBuilder sbConvert2 = new StringBuilder();
        StringBuilder sbConvert3 = new StringBuilder();
        StringBuilder sbConvertFloat = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.wasNull() + ":" + res.getByte("i8") + ":" + res.wasNull() + ":" +
                    res.getShort("i16") + ":" + res.wasNull() + ":" + res.getInt("i32") + ":" + res.wasNull()
                    + ":" + res.getLong("i64") + ":" + res.getBigDecimal("i64") + ":" + res.wasNull() + ":");
            sbConvert1.append(res.getShort("i8") + ":" + res.getInt("i16") + ":" + res.getLong("i32") + ":"
                    + res.getBigDecimal("i32") + ":");
            sbConvert2.append(res.getInt("i8") + ":" + res.getLong("i16") + ":" + res.getBigDecimal("i16") + ":");
            sbConvert3.append(res.getLong("i8") + ":" + res.getBigDecimal("i8") + ":" + res.getBigDecimal("i16") + ":"
                    + res.getBigDecimal("i32") + ":");
            sbConvertFloat.append(res.getFloat("i8") + ":" + res.getDouble("i8") + ":" +
                    res.getFloat("i16") + ":" + res.getDouble("i16") + ":" +
                    res.getFloat("i32") + ":" + res.getDouble("i32") + ":" +
                    res.getFloat("i64") + ":" + res.getDouble("i64") + ":");
            res.next();
        }
        assertEquals("0:false:1:false:260:false:67000:false:10000000:10000000:false:1:false:-1:false:-260:false:-67000:false:-10000000:-10000000:false:2:false:0:true:0:true:0:true:0:null:true:", sbMain.toString());
        assertEquals("1:260:67000:67000:-1:-260:-67000:-67000:0:0:0:null:", sbConvert1.toString());
        assertEquals("1:260:260:-1:-260:-260:0:0:null:", sbConvert2.toString());
        assertEquals("1:1:260:67000:-1:-1:-260:-67000:0:null:null:null:", sbConvert3.toString());
        assertEquals("1.0:1.0:260.0:260.0:67000.0:67000.0:1.0E7:1.0E7:-1.0:-1.0:-260.0:-260.0:-67000.0:-67000.0:-1.0E7:-1.0E7:0.0:0.0:0.0:0.0:0.0:0.0:0.0:0.0:", sbConvertFloat.toString());
    }

    public void testUnsignedIntegerDataTypes() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(empty<i8:uint8, i16: uint16, i32: uint32, i64: uint64>" +
                "[x=0:3,2,0], '[(1, 260, 67000, 10000000)][]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(5, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("i8", meta.getColumnName(2));
        assertEquals("uint8", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));
        assertEquals("i16", meta.getColumnName(3));
        assertEquals("uint16", meta.getColumnTypeName(3));
        assertTrue(resWrapper.isColumnAttribute(3));
        assertEquals("i32", meta.getColumnName(4));
        assertEquals("uint32", meta.getColumnTypeName(4));
        assertTrue(resWrapper.isColumnAttribute(4));
        assertEquals("i64", meta.getColumnName(5));
        assertEquals("uint64", meta.getColumnTypeName(5));
        assertTrue(resWrapper.isColumnAttribute(5));

        StringBuilder sbMain = new StringBuilder();
        StringBuilder sbConvert1 = new StringBuilder();
        StringBuilder sbConvert2 = new StringBuilder();
        StringBuilder sbConvert3 = new StringBuilder();
        StringBuilder sbConvertFloat = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.wasNull() + ":" + res.getShort("i8") + ":" + res.wasNull() +
                    ":" + res.getInt("i16") + ":" + res.wasNull() + ":" + res.getLong("i32") + ":" + res.wasNull()
                    + ":" + res.getBigDecimal("i64") + ":" + res.wasNull() + ":");
            sbConvert1.append(res.getInt("i8") + ":" + res.getLong("i16") + ":" + res.getLong("i32") + ":" + res.getBigDecimal("i32") + ":");
            sbConvert2.append(res.getInt("i8") + ":" + res.getLong("i16") + ":" + res.getBigDecimal("i16") + ":");
            sbConvert3.append(res.getLong("i8") + ":" + res.getBigDecimal("i8") + ":");
            sbConvertFloat.append(res.getFloat("i8") + ":" + res.getDouble("i8") + ":" +
                    res.getFloat("i16") + ":" + res.getDouble("i16") + ":" +
                    res.getFloat("i32") + ":" + res.getDouble("i32") + ":" +
                    res.getFloat("i64") + ":" + res.getDouble("i64") + ":");
            res.next();
        }
        assertEquals("0:false:1:false:260:false:67000:false:10000000:false:", sbMain.toString());
        assertEquals("1:260:67000:67000:", sbConvert1.toString());
        assertEquals("1:260:260:", sbConvert2.toString());
        assertEquals("1:1:", sbConvert3.toString());
        assertEquals("1.0:1.0:260.0:260.0:67000.0:67000.0:1.0E7:1.0E7:", sbConvertFloat.toString());
    }

    public void testFloatDataTypes() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(empty<f:float, d: double>[x=0:3,2,0], " +
                "'[(3.141592653589793238, 3.141592653589793238)][]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(3, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("f", meta.getColumnName(2));
        assertEquals("float", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));
        assertEquals("d", meta.getColumnName(3));
        assertEquals("double", meta.getColumnTypeName(3));
        assertTrue(resWrapper.isColumnAttribute(3));

        StringBuilder sbMain = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.getFloat("f") + ":" + res.wasNull() + ":" +
                    res.getDouble("d") + ":" + res.wasNull() + ":" + (float)res.getDouble("f") + ":");
            res.next();
        }
        assertEquals("0:3.1415927:false:3.141592653589793:false:3.1415927:", sbMain.toString());
    }

    public void testNonEmptyCoordinates() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(not empty<a:int32>[x=0:3,2,0], '[10,9][8,7]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(2, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("a", meta.getColumnName(2));
        assertEquals("int32", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));

        StringBuilder sbMain = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.getInt("a") + ",");
            res.next();
        }
        assertEquals("0:10,1:9,2:8,3:7,", sbMain.toString());
    }

    public void testNonEmptyCoordinatesDefaults() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(not empty<a:int32>[x=0:3,2,0], '[(10)()][(8)()]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(2, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("a", meta.getColumnName(2));
        assertEquals("int32", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));

        StringBuilder sbMain = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.getInt("a") + ",");
            res.next();
        }
        assertEquals("0:10,1:0,2:8,3:0,", sbMain.toString());
    }

    public void testBooleanTypes() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        java.sql.ResultSet res = st.executeQuery("select * from array(empty<b:bool null>[x=0:3,2,0], '[(null),(true)][(false),(null)]')");
        java.sql.ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(2, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("b", meta.getColumnName(2));
        assertEquals("bool", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));

        StringBuilder sbMain = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.wasNull() + ":" + res.getBoolean("b") + ":" + res.wasNull() + ":");
            res.next();
        }
        assertEquals("0:false:false:true:1:false:true:false:2:false:false:false:3:false:false:true:", sbMain.toString());
    }

    public void testStatementWrapper() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();

        IStatementWrapper stWrapper = st.unwrap(IStatementWrapper.class);
        assertTrue(stWrapper.isAql());
        stWrapper.setAfl(true);
        assertTrue(stWrapper.isAfl());
        assertFalse(stWrapper.isAql());

        java.sql.ResultSet res = st.executeQuery("build(<a:int32>[x=0:3,4,0], x)");
        ResultSetMetaData meta = res.getMetaData();

        assertEquals("build", meta.getTableName(0));
        assertEquals(2, meta.getColumnCount());

        IResultSetWrapper resWrapper = res.unwrap(IResultSetWrapper.class);
        assertEquals("x", meta.getColumnName(1));
        assertEquals("int64", meta.getColumnTypeName(1));
        assertFalse(resWrapper.isColumnAttribute(1));

        assertEquals("a", meta.getColumnName(2));
        assertEquals("int32", meta.getColumnTypeName(2));
        assertTrue(resWrapper.isColumnAttribute(2));

        StringBuilder sbMain = new StringBuilder();
        while(!res.isAfterLast())
        {
            sbMain.append(res.getLong("x") + ":" + res.wasNull() + ":" + res.getInt("a") + ":" + res.wasNull() + ":");
            res.next();
        }
        assertEquals("0:false:0:false:1:false:1:false:2:false:2:false:3:false:3:false:", sbMain.toString());
    }

    public void testBatchExecutionMultipleResults() throws SQLException
    {
        java.sql.Statement st = conn.createStatement();
        st.addBatch("select * from array(empty<a:int32>[x=0:2,3,0], '[1,2,3]')");
        st.addBatch("select * from array(empty<b:int32>[y=0:2,3,0], '[4,5,6]')");
        st.executeBatch();

        StringBuilder sbMain = new StringBuilder();
        do
        {
            ResultSet res = st.getResultSet();
            sbMain.append("{");
            while(!res.isAfterLast())
            {
                sbMain.append(res.getLong(1) + ":" + res.getInt(2) + ":");
                res.next();
            }
            sbMain.append("}");
        } while (st.getMoreResults(Statement.CLOSE_ALL_RESULTS));
        conn.commit();
        assertEquals("{0:1:1:2:2:3:}{0:4:1:5:2:6:}", sbMain.toString());
    }
}
TOP

Related Classes of org.phoenixdb.jdbc.JDBCBasicTestCase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.