Package org.nutz.dao.impl.sql

Source Code of org.nutz.dao.impl.sql.SqlLiteralTest

package org.nutz.dao.impl.sql;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.junit.Test;
import org.nutz.dao.test.meta.Pet;

public class SqlLiteralTest {

    private static NutSql L(String s) {
        return new NutSql(s);
    }

    @Test
    public void test_chinese_var_name() {
        NutSql sql = L("INSERT INTO t_chin(名称,描述) VALUES($名,$述)");
        assertEquals(2, sql.literal.getVarIndexes().size());
        Iterator<String> nms = sql.literal.getVarIndexes().names().iterator();
        assertEquals("名", nms.next());
        assertEquals("述", nms.next());

        String expect = "INSERT INTO t_chin(名称,描述) VALUES(,)";
        assertEquals(expect, sql.toPreparedStatement());
        sql.vars().set("名", "老张");
        sql.vars().set("述", "很棒");
        expect = "INSERT INTO t_chin(名称,描述) VALUES(老张,很棒)";
        assertEquals(expect, sql.toString());
    }

    @Test
    public void test_chinese_param_name() {
        NutSql sql = L("INSERT INTO t_chin(名称,描述) VALUES(@名,@述)");
        assertEquals(2, sql.literal.getParamIndexes().size());
        Iterator<String> nms = sql.literal.getParamIndexes().names().iterator();
        assertEquals("名", nms.next());
        assertEquals("述", nms.next());

        String expect = "INSERT INTO t_chin(名称,描述) VALUES(?,?)";
        assertEquals(expect, sql.toPreparedStatement());
        sql.params().set("名", "老张");
        sql.params().set("述", "很棒");
        expect = "INSERT INTO t_chin(名称,描述) VALUES('老张','很棒')";
        assertEquals(expect, sql.toString());
    }

    @Test
    public void test_name_with_underline() {
        NutSql sql = L("@a_1:$a_1");
        sql.params().set("a_1", "A");
        sql.vars().set("a_1", "B");
        assertEquals("'A':B", sql.toString());
        assertEquals("?:B", sql.toPreparedStatement());
    }

    @Test
    public void test_simple() {
        NutSql sql = L("A$a B@a C@b D$condition");
        sql.vars().set("a", "T");
        sql.params().set("a", 23);
        sql.params().set("b", false);
        assertEquals("AT B? C? D", sql.toPreparedStatement());
        assertEquals("AT B23 Cfalse D", sql.toString());
    }

    @Test
    public void test_holder_var_escaping() {
        NutSql sql = L("@@@@$$T$%$a@a;");
        sql.vars().set("a", "V");
        sql.params().set("a", "H");
        assertEquals("@@$T$%V?;", sql.toPreparedStatement());
        assertEquals("@@$T$%V'H';", sql.toString());
    }

    @Test
    public void test_sql_types() {
        assertTrue(L("InSeRT INTO $T ($id,$name) VALUES(@id,@name)").literal.isINSERT());
        assertTrue(L("UPDaTE $T SET $id=@id").literal.isUPDATE());
        assertTrue(L("sELECT * FROM $T").literal.isSELECT());
        assertTrue(L("DeLETE FROM $T").literal.isDELETE());
        assertTrue(L("Drop table $T").literal.isDROP());
        assertTrue(L("crEATE table abc(id INT)").literal.isCREATE());
    }

    @Test
    public void test_var_set_index() {
        NutSql sql = L("$A,$B,@C,@D,@C");
        int[] is = sql.literal.getParamIndexes().getOrderIndex("C");
        assertEquals(0, is[0]);
        assertEquals(2, is[1]);
        is = sql.literal.getParamIndexes().getOrderIndex("D");
        assertEquals(1, is[0]);
    }

    @Test
    public void test_toPreparedStatement() {
        NutSql sql = L("=@a=@b");
        String exp = "=?=?";
        String actural = sql.toPreparedStatement();
        assertEquals(exp, actural);

    }

    @Test
    public void test_toPreparedStatement_regularly() {
        NutSql sql = L("UPDATE dao_platoon SET name=@name,base=@baseName,leader=@leaderName WHERE id=@id");
        String exp = "UPDATE dao_platoon SET name=?,base=?,leader=? WHERE id=?";
        String actural = sql.toPreparedStatement();
        assertEquals(exp, actural);
    }

    @Test
    public void test_dot_with_var() {
        NutSql sql = L("$x.y");
        sql.vars().set("x", "T");
        assertEquals("T.y", sql.toString());
    }

    @Test
    public void test_dot_with_param() {
        NutSql sql = L("@x.y");
        sql.params().set("x", "T");
        assertEquals("'T'.y", sql.toString());
    }

    @Test
    public void test_param_names() {
        NutSql sql = L("UPDATE dao_platoon SET name=@name1,base=@baseName2,leader=@leaderName3 WHERE id=@id4");
        String[] paramNames = sql.literal.getParamIndexes()
                                            .names()
                                            .toArray(new String[sql.literal.getParamIndexes()
                                                                            .names()
                                                                            .size()]);
        String result[] = {"leaderName3", "id4", "baseName2", "name1"};
        Arrays.sort(paramNames);
        Arrays.sort(result);
        assertArrayEquals(paramNames, result);
    }

    @Test
    public void test_var_names() {
        NutSql sql = L("InSeRT INTO $T ($id,$name) VALUES(@id1,@name2)");
        String[] varNames = sql.literal.getVarIndexes()
                                        .names()
                                        .toArray(new String[sql.literal.getVarIndexes().size()]);
        String result[] = {"T", "name", "id"};
        // System.out.println(Json.toJson(varNames));

        Arrays.sort(varNames);
        Arrays.sort(result);
        assertArrayEquals(varNames, result);
    }
   
    @Test
    public void test_param_names_putall_map() {
        NutSql sql = L("INSERT INTO t_pet($id,$name,$alias,$age) VALUES(@id,@name,@nickName,@age)");
       
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", "userId");
        map.put("name", "userName");
        map.put("alias", "alias");
        map.put("age", "age");
       
        Pet pet = new Pet();
        pet.setId(18);
        pet.setName("pet");
        pet.setNickName("haha");
        pet.setAge(5);
       
        sql.vars().putAll(map);
        sql.params().putAll(pet);

        String expect = "INSERT INTO t_pet(userId,userName,alias,age) VALUES(18,'pet','haha',5)";
        assertEquals(expect, sql.toString());
    }
}
TOP

Related Classes of org.nutz.dao.impl.sql.SqlLiteralTest

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.