/*
 * Copyright 2004-2015 the Seasar Foundation and the Others.
 *
 * 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 org.seasar.extension.jdbc;

import java.util.ArrayList;
import java.util.List;

import junit.framework.TestCase;

/**
 * @author higa
 * 
 */
public class FromClauseTest extends TestCase {

    /**
     * 
     */
    public void testAddSql() {
        FromClause fromClause = new FromClause();
        fromClause.addSql("AAA", "_T1");
        assertEquals(" from AAA _T1", fromClause.toSql());
    }

    /**
     * 
     */
    public void testAddSql_leftOuterJoin() {
        FromClause fromClause = new FromClause();
        fromClause.addSql("AAA", "_T1");
        List<JoinColumnMeta> joinColumnMetaList = new ArrayList<JoinColumnMeta>();
        joinColumnMetaList.add(new JoinColumnMeta("BBB_ID", "BBB_ID"));
        fromClause.addSql(JoinType.LEFT_OUTER, "BBB", "_T2", "_T1", "_T2",
                joinColumnMetaList, " with (updlock, rowlock)", null);
        assertEquals(
                " from AAA _T1 left outer join BBB _T2 with (updlock, rowlock) on _T1.BBB_ID = _T2.BBB_ID",
                fromClause.toSql());
    }

    /**
     * 
     */
    public void testAddSql_innerJoin() {
        FromClause fromClause = new FromClause();
        fromClause.addSql("AAA", "_T1");
        List<JoinColumnMeta> joinColumnMetaList = new ArrayList<JoinColumnMeta>();
        joinColumnMetaList.add(new JoinColumnMeta("BBB_ID", "BBB_ID"));
        fromClause.addSql(JoinType.INNER, "BBB", "_T2", "_T1", "_T2",
                joinColumnMetaList, " with (updlock, rowlock)", null);
        assertEquals(
                " from AAA _T1 inner join BBB _T2 with (updlock, rowlock) on _T1.BBB_ID = _T2.BBB_ID",
                fromClause.toSql());
    }

    /**
     * 
     */
    public void testAddSql_joinColumns() {
        FromClause fromClause = new FromClause();
        fromClause.addSql("AAA", "_T1");
        List<JoinColumnMeta> joinColumnMetaList = new ArrayList<JoinColumnMeta>();
        joinColumnMetaList.add(new JoinColumnMeta("BBB_ID", "BBB_ID"));
        joinColumnMetaList.add(new JoinColumnMeta("BBB_ID2", "BBB_ID2"));
        fromClause.addSql(JoinType.INNER, "BBB", "_T2", "_T1", "_T2",
                joinColumnMetaList, " with (updlock, rowlock)",
                "_T1.XXX is null and _T2.YYY is not null");
        assertEquals(
                " from AAA _T1 inner join BBB _T2 with (updlock, rowlock) on _T1.BBB_ID = _T2.BBB_ID and _T1.BBB_ID2 = _T2.BBB_ID2 and _T1.XXX is null and _T2.YYY is not null",
                fromClause.toSql());
    }
}