/*******************************************************************************
 * Copyright (c) 2005, 2009 SAP. All rights reserved.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0
 * which accompanies this distribution.
 * The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 * http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *     SAP - initial API and implementation
 ******************************************************************************/

package org.eclipse.persistence.testing.tests.wdf.jpa1.query;

import org.eclipse.persistence.testing.framework.wdf.ToBeInvestigated;
import org.junit.Test;

@SuppressWarnings("nls")
public class TestBuiltInFunctionExpressions extends QueryTest {

    @Test
    public void testConcatHandling0() {
        /* 0 */assertValidQuery("SELECT c FROM City c where 'a' = concat('a', 'a')");
    }

    @Test
    public void testConcatHandling1() {
        /* 1 */assertValidQuery("SELECT c FROM City c where 'a' = concat(concat('a', 'a'), concat('a', 'a'))");
    }

    @Test
    public void testConcatHandling2() {
        /* 2 */assertValidQuery("SELECT p FROM Person p where 'a' = concat(p.string, p.string)");
    }

    @Test
    public void testConcatHandling3() {
        /* 3 */assertValidQuery("SELECT p FROM Person p where 'a' = concat(5, 5)");
    }

    @Test
    public void testConcatHandling4() {
        /* 4 */assertValidQuery("SELECT p FROM Person p where 'a' = concat(?1, ?1)");
    }

    @ToBeInvestigated
    @Test
    public void testConcatHandling5() {
        /* 5 */assertValidQuery("SELECT p FROM Person p where 'a' = concat(max(p.string), min(p.string))");
    }

    @Test
    public void testConcatHandling6() {
        /* 6 */assertValidQuery("SELECT p FROM Person p where 'a' = concat((select max(p1.string) from Person p1), (select max(p1.string) from Person p1))");
    }

    @Test
    public void testConcatHandling7() {
        /* 7 */assertInvalidQuery("SELECT p FROM Person p where 'a' = concat(p, 4 * 5)");
    }

    @Test
    public void testSubstringHandling() {
        /* -- */assertValidQuery("UPDATE Person p SET p.string = CONCAT('288', SUBSTRING(p.string, LOCATE(p.string, '-'), 4))");
    }

    @Test
    public void testSubstringHandling8() {
        /* 8 */assertValidQuery("SELECT p FROM Person p where 'a' = substring('a', 4, 5)");
    }

    @Test
    public void testSubstringHandling9() {
        /* 9 */assertValidQuery("SELECT p FROM Person p where 'a' = substring(p.string, p.integer, p.integer)");
    }

    @Test
    public void testSubstringHandling10() {
        /* 10 */assertValidQuery("SELECT p FROM Person p where 'a' = substring(p.string, 2 + 3, 3 * 2)");
    }

    @Test
    public void testSubstringHandling11() {
        /* 11 */assertValidQuery("SELECT p FROM Person p where 'a' = substring(?1, ?2, ?2)");
    }

    @Test
    public void testSubstringHandling12() {
        /* 12 */assertValidQuery("SELECT p FROM Person p where 'a' = substring(substring('a', 2, 3), abs(2), abs(-2))");
    }

    @ToBeInvestigated
    @Test
    public void testSubstringHandling13() {
        /* 13 */assertValidQuery("SELECT p FROM Person p where 'a' = substring(max(p.string), min(p.integer), max(p.integer))");
    }

    @Test
    public void testSubstringHandling14() {
        /* 14 */assertValidQuery("SELECT p FROM Person p where 'a' = substring((select max(p1.string) from Person p1), (select max(p1.integer) from Person p1), (select max(p1.integer) from Person p1))");
    }

    @Test
    public void testTrimHandling15() {
        /* 15 */assertValidQuery("SELECT p FROM Person p where 'a' = trim('a')");
    }

    @Test
    public void testTrimHandling16() {
        /* 16 */assertInvalidQuery("SELECT p FROM Person p where 'a' = trim(p)");
    }

    @Test
    public void testTrimHandling17() {
        /* 17 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(p.string)");
    }

    @Test
    public void testTrimHandling18() {
        /* 18 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(:one)");
    }

    @Test
    public void testTrimHandling19() {
        /* 19 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(trim('a'))");
    }

    @ToBeInvestigated
    @Test
    public void testTrimHandling20() {
        /* 20 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(max(p.string))");
    }

    @Test
    public void testTrimHandling21() {
        /* 21 */assertValidQuery("SELECT p FROM Person p where 'a' = trim((select max(p1.string) from Person p1))");
    }

    @Test
    public void testTrimHandling22() {
        /* 22 */assertInvalidQuery("SELECT p FROM Person p where 'a' = trim(1+1)");
    }

    @Test
    public void testTrimHandling28() {
        /* 28 */assertValidQuery("SELECT p FROM Person p where trim(trailing from 'a') = 'a'");
    }

    @Test
    public void testTrimHandling29() {
        /* 29 */assertValidQuery("SELECT p FROM Person p where trim(leading from 'a') = 'a'");
    }

    @Test
    public void testTrimHandling30() {
        /* 30 */assertInvalidQuery("SELECT p FROM Person p where 'a' = trim(1 from 'a')");
    }

    @ToBeInvestigated
    @Test
    public void testTrimHandling31() {
        /* 31 */assertInvalidQuery("SELECT p FROM Person p where 'a' = trim('12' from 'a')");
    }

    @Test
    public void testTrimWithTrimCharacter23() {
        /* 23 */assertValidQuery("SELECT p FROM Person p where 'a' = trim('a' from 'a')");
    }

    @Test
    public void testTrimWithTrimCharacter24() {
        /* 24 */assertValidQuery("SELECT p FROM Person p where trim(both 'a' from 'a') = 'a'");
    }

    @Test
    public void testTrimWithTrimCharacter25() {
        /* 25 */assertValidQuery("SELECT p FROM Person p where trim(trailing 'a' from 'a') = 'a'");
    }

    @Test
    public void testTrimWithTrimCharacter26() {
        /* 26 */assertValidQuery("SELECT p FROM Person p where trim(leading 'a' from 'a') = 'a'");
    }

    @Test
    public void testTrimWithTrimCharacter27() {
        /* 27 */assertValidQuery("SELECT p FROM Person p where trim(both from 'a') = 'a'");
    }

    @Test
    public void testTrimWithTrimCharacter33() {
        /* 33 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(:one from 'a')");
        /* 34 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(:one from 'a')");
    }

    @Test
    public void testTrimWithTrimCharacter34() {
        /* 34 */assertValidQuery("SELECT p FROM Person p where 'a' = trim(:one from 'a')");
    }

    @Test
    public void testUpperHandling35() {
        /* 35 */assertValidQuery("SELECT p FROM Person p where upper('a') = lower('a')");
    }

    @Test
    public void testUpperHandling36() {
        /* 36 */assertInvalidQuery("SELECT p FROM Person p where upper(p) = lower(p)");
    }

    @Test
    public void testUpperHandling37() {
        /* 37 */assertValidQuery("SELECT p FROM Person p where upper(p.string) = lower(p.string)");
    }

    @Test
    public void testUpperHandling38() {
        /* 38 */assertValidQuery("SELECT p FROM Person p where upper(:one) = lower(:one)");
    }

    @Test
    public void testUpperHandling39() {
        /* 39 */assertValidQuery("SELECT p FROM Person p where upper(trim('a')) = lower(trim('a'))");
    }

    @ToBeInvestigated
    @Test
    public void testUpperHandling40() {
        /* 40 */assertValidQuery("SELECT p FROM Person p where upper(min(p.string)) = lower(max(p.string))");
    }

    @Test
    public void testUpperHandling41() {
        /* 41 */assertValidQuery("SELECT p FROM Person p where upper((select max(p1.string) from Person p1)) = lower((select max(p1.string) from Person p1))");
    }

    @Test
    public void testUpperHandling42() {
        /* 42 */assertValidQuery("SELECT p FROM Person p where upper(2*2) = lower(1+1)");
    }

    @Test
    public void testLengthHandling43() {
        /* 43 */assertValidQuery("SELECT p FROM Person p where length('a') = 666");
    }

    @Test
    public void testLengthHandling44() {
        /* 44 */assertInvalidQuery("SELECT p FROM Person p where length(p) = 666");
    }

    @Test
    public void testLengthHandling45() {
        /* 45 */assertValidQuery("SELECT p FROM Person p where length(p.string) = 666");
    }

    @Test
    public void testLengthHandling46() {
        /* 46 */assertValidQuery("SELECT p FROM Person p where length(:one) = 666");
    }

    @Test
    public void testLengthHandling47() {
        /* 47 */assertValidQuery("SELECT p FROM Person p where length(trim('a')) = 666");
    }

    @ToBeInvestigated
    @Test
    public void testLengthHandling48() {
        /* 48 */assertValidQuery("SELECT p FROM Person p where length(min(p.string)) = 666");
    }

    @Test
    public void testLengthHandling49() {
        /* 49 */assertValidQuery("SELECT p FROM Person p where length((select max(p1.string) from Person p1)) = 666");
    }

    @Test
    public void testLengthHandling50() {
        /* 50 */assertValidQuery("SELECT p FROM Person p where length(2*2) = 666");
    }

    @Test
    public void testLocateHandling51() {
        /* 51 */assertValidQuery("SELECT p FROM Person p where 666 = locate('a', 'b', 5)");
    }

    @Test
    public void testLocateHandling52() {
        /* 52 */assertValidQuery("SELECT p FROM Person p where 666 = locate(p.string, p.string, p.integer)");
    }

    @Test
    public void testLocateHandling53() {
        /* 53 */assertValidQuery("SELECT p FROM Person p where 666 = locate(p.string, p.string, 3 * 2)");
    }

    @Test
    public void testLocateHandling54() {
        /* 54 */assertValidQuery("SELECT p FROM Person p where 666 = locate(?1, ?1, ?2)");
    }

    @Test
    public void testLocateHandling55() {
        /* 55 */assertValidQuery("SELECT p FROM Person p where 666 = locate(substring('a', 2, 3), upper('abs(2)'), abs(-2))");
    }

    @ToBeInvestigated
    @Test
    public void testLocateHandling56() {
        /* 56 */assertValidQuery("SELECT p FROM Person p where 666 = locate(max(p.string), min(p.string), max(p.integer))");
    }

    @Test
    public void testLocateHandling57() {
        /* 57 */assertValidQuery("SELECT p FROM Person p where 666 = locate((select max(p1.string) from Person p1), (select max(p1.string) from Person p1), (select max(p1.integer) from Person p1))");
    }

    @Test
    public void testLocateHandling58() {
        /* 58 */assertValidQuery("SELECT p FROM Person p where 666 = locate('a', 'b')");
    }

    @Test
    public void testAbsHandling59() {
        /* 59 */assertValidQuery("SELECT p FROM Person p where 666 = abs(5+10.3)");
    }

    @Test
    public void testAbsHandling60() {
        /* 60 */assertValidQuery("SELECT p FROM Person p where 666 = abs(666)");
    }

    @Test
    public void testAbsHandling61() {
        /* 61 */assertValidQuery("SELECT p FROM Person p where 666 = abs(p._float)");
    }

    @Test
    public void testAbsHandling62() {
        /* 62 */assertValidQuery("SELECT p FROM Person p where 666 = abs(p.integer)");
    }

    @ToBeInvestigated
    @Test
    public void testAbsHandling63() {
        /* 63 */assertInvalidQuery("SELECT p FROM Person p where 666 = abs(p.string)");
    }

    @Test
    public void testAbsHandling64() {
        /* 64 */assertValidQuery("SELECT p FROM Person p where abs((select max(p1.bigInteger) from Person p1)) = 666");
    }

    @ToBeInvestigated
    @Test
    public void testAbsHandling65() {
        /* 65 */assertValidQuery("SELECT p FROM Person p where abs(max(p._float)) = 666");
    }

    @Test
    public void testAbsHandling66() {
        /* 66 */assertValidQuery("SELECT p FROM Person p where abs(abs(p._float)) = 666");
    }

    @Test
    public void testAbsHandling67() {
        /* 67 */assertValidQuery("SELECT p FROM Person p where 666 = abs(?1)");
    }

    @ToBeInvestigated
    @Test
    public void testAbsHandling68() {
        /* 68 */assertInvalidQuery("SELECT p FROM Person p where 666 = abs(p)");
    }

    @Test
    public void testSqrtHandling69() {
        /* 69 */assertValidQuery("SELECT p FROM Person p where 666 = sqrt(5+10.3)");
    }

    @Test
    public void testSqrtHandling70() {
        /* 70 */assertValidQuery("SELECT p FROM Person p where 666 = sqrt(666)");
    }

    @Test
    public void testSqrtHandling71() {
        /* 71 */assertValidQuery("SELECT p FROM Person p where 666 = sqrt(p._float)");
    }

    @Test
    public void testSqrtHandling72() {
        /* 72 */assertValidQuery("SELECT p FROM Person p where 666 = sqrt(p.integer)");
    }

    @ToBeInvestigated
    @Test
    public void testSqrtHandling73() {
        /* 73 */assertInvalidQuery("SELECT p FROM Person p where 666 = sqrt(p.string)");
    }

    @Test
    public void testSqrtHandling74() {
        /* 74 */assertValidQuery("SELECT p FROM Person p where sqrt((select max(p1.bigInteger) from Person p1)) = 666");
    }

    @ToBeInvestigated
    @Test
    public void testSqrtHandling75() {
        /* 75 */assertValidQuery("SELECT p FROM Person p where sqrt(max(p._float)) = 666");
    }

    @Test
    public void testSqrtHandling76() {
        /* 76 */assertValidQuery("SELECT p FROM Person p where sqrt(sqrt(p._float)) = 666");
    }

    @Test
    public void testSqrtHandling77() {
        /* 77 */assertValidQuery("SELECT p FROM Person p where 666 = sqrt(?1)");
    }

    @Test
    public void testSqrtHandling78() {
        /* 78 */assertValidQuery("SELECT p FROM Person p where 666 = sqrt(?1)");
    }

    @Test
    public void testModHandling79() {
        /* 79 */assertValidQuery("SELECT p FROM Person p where 666 = mod(5+10,5+10)");
    }

    @Test
    public void testModHandling80() {
        /* 80 */assertValidQuery("SELECT p FROM Person p where 666 = mod(666, 666)");
    }

    @Test
    public void testModHandling81() {
        /* 81 */assertValidQuery("SELECT p FROM Person p where 666 = mod(p._float, p._float)");
    }

    @Test
    public void testModHandling82() {
        /* 82 */assertValidQuery("SELECT p FROM Person p where 666 = mod(p.integer, p.integer)");
    }

    @Test
    public void testModHandling83() {
        /* 83 */assertValidQuery("SELECT p FROM Person p where 666 = mod(p.string, p.string)");
    }

    @Test
    public void testModHandling84() {
        /* 84 */assertValidQuery("SELECT p FROM Person p where mod((select max(p1.bigInteger) from Person p1), (select max(p1.bigInteger) from Person p1)) = 666");
    }

    @ToBeInvestigated
    @Test
    public void testModHandling85() {
        /* 85 */assertValidQuery("SELECT p FROM Person p where mod(max(p.integer), max(p.integer)) = 666");
    }

    @Test
    public void testModHandling86() {
        /* 86 */assertValidQuery("SELECT p FROM Person p where mod(abs(p.integer), abs(p.integer)) = 666");
    }

    @Test
    public void testModHandling87() {
        /* 87 */assertValidQuery("SELECT p FROM Person p where 666 = mod(?1, ?1)");
    }

    @Test
    public void testModHandling88() {
        /* 88 */assertInvalidQuery("SELECT p FROM Person p where 666 = mod(p, p)");
    }

    @Test
    public void testSizeHandling89() {
        /* 89 */assertInvalidQuery("SELECT c FROM Cop c where 666 = size(c.partner)");
    }

    @Test
    public void testSizeHandling90() {
        /* 90 */assertValidQuery("SELECT c FROM Cop c where 666 = size(c.attachedCriminals)");
    }

    @Test
    public void testSizeHandling91() {
        /* 91 */assertValidQuery("SELECT c FROM Cop c where 666 = size(c.informers)");
    }

    @Test
    public void testSizeHandling92() {
        /* 92 */assertInvalidQuery("SELECT c FROM Cop c where 666 = size(c.id)");
    }

    @Test
    public void testSizeHandling93() {
        /* 93 */assertInvalidQuery("SELECT c FROM Cop c where 666 = size(c.tesla)");
    }

    @Test
    public void testSizeHandling94() {
        /* 94 */assertInvalidQuery("SELECT c FROM Cop c where 666 = size(c.tesla.integer)");
    }

}
