/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.translator.couchbase; import static org.junit.Assert.*; import org.junit.Test; import org.teiid.language.Command; import org.teiid.translator.TranslatorException; @SuppressWarnings("nls") public class TestN1QLVisitor extends TestVisitor { private void helpTest(String sql, String key) throws TranslatorException { Command command = translationUtility.parseCommand(sql); N1QLVisitor visitor = TRANSLATOR.getN1QLVisitor(); visitor.append(command); String actual = visitor.toString(); if(PRINT_TO_CONSOLE.booleanValue()) { System.out.println(actual); } if(REPLACE_EXPECTED.booleanValue()) { N1QL.put(key.toString(), actual); } assertEquals(key, N1QL.getProperty(key, ""), actual); } @Test public void testSelect() throws TranslatorException { String sql = "SELECT * FROM Customer"; helpTest(sql, "N1QL0101"); sql = "SELECT * FROM Customer_SavedAddresses"; helpTest(sql, "N1QL0102"); sql = "SELECT * FROM Oder"; helpTest(sql, "N1QL0103"); sql = "SELECT * FROM Oder_Items"; helpTest(sql, "N1QL0104"); sql = "SELECT DISTINCT Name FROM Customer"; helpTest(sql, "N1QL0105"); sql = "SELECT ALL Name FROM Customer"; helpTest(sql, "N1QL0106"); sql = "SELECT CreditCard_CardNumber, CreditCard_Type, CreditCard_CVN, CreditCard_Expiry FROM Oder"; helpTest(sql, "N1QL0107"); } @Test public void testSelect_1() throws TranslatorException { String sql = "SELECT 1 AS c_0 FROM Customer WHERE documentID = 'customer-3' LIMIT 1"; helpTest(sql, "N1QL0108"); sql = "SELECT COUNT(*) AS count FROM Customer WHERE ID = 'Customer_12345'"; helpTest(sql, "N1QL0109"); sql = "SELECT couchbase.CLOCK_MILLIS() FROM Oder WHERE CustomerID = 'Customer_12345' AND CreditCard_Type = 'Visa' AND CreditCard_CVN = 123"; helpTest(sql, "N1QL0110"); } @Test public void testNestedJson() throws TranslatorException { String sql = "SELECT * FROM T3"; helpTest(sql, "N1QL0201"); sql = "SELECT nestedJson_nestedJson_nestedJson_Dimension FROM T3"; helpTest(sql, "N1QL0202"); } @Test public void testNestedArray() throws TranslatorException { String sql = "SELECT * FROM T3"; helpTest(sql, "N1QL0301"); sql = "SELECT * FROM T3_nestedArray"; helpTest(sql, "N1QL0302"); sql = "SELECT * FROM T3_nestedArray_dim2"; helpTest(sql, "N1QL0303"); sql = "SELECT * FROM T3_nestedArray_dim2_dim3"; helpTest(sql, "N1QL0304"); sql = "SELECT * FROM T3_nestedArray_dim2_dim3_dim4"; helpTest(sql, "N1QL0305"); sql = "SELECT T3_nestedArray_dim2_dim3_dim4_idx, T3_nestedArray_dim2_dim3_dim4 FROM T3_nestedArray_dim2_dim3_dim4"; helpTest(sql, "N1QL0306"); } @Test public void testPKColumn() throws TranslatorException { String sql = "SELECT documentID FROM T3"; helpTest(sql, "N1QL0401"); sql = "SELECT documentID FROM T3_nestedArray_dim2_dim3_dim4"; helpTest(sql, "N1QL0402"); } @Test public void testLimitOffsetClause() throws TranslatorException { String sql = "SELECT Name FROM Customer LIMIT 2"; helpTest(sql, "N1QL0501"); sql = "SELECT Name FROM Customer LIMIT 2, 2"; helpTest(sql, "N1QL0502"); sql = "SELECT Name FROM Customer OFFSET 2 ROWS"; helpTest(sql, "N1QL0503"); } @Test public void testOrderByClause() throws TranslatorException { String sql = "SELECT Name, type FROM Customer ORDER BY Name"; helpTest(sql, "N1QL0601"); sql = "SELECT type FROM Customer ORDER BY Name"; //Unrelated helpTest(sql, "N1QL0602"); sql = "SELECT Name, type FROM Customer ORDER BY type"; //NullOrdering helpTest(sql, "N1QL0603"); sql = "SELECT Name, type FROM Customer ORDER BY Name ASC"; helpTest(sql, "N1QL0604"); sql = "SELECT Name, type FROM Customer ORDER BY Name DESC"; helpTest(sql, "N1QL0605"); } @Test public void testGroupByClause() throws TranslatorException { String sql = "SELECT Name, COUNT(*) FROM Customer GROUP BY Name"; helpTest(sql, "N1QL0701"); } @Test public void testWhereClause() throws TranslatorException { String sql = "SELECT Name, type FROM Customer WHERE Name = 'John Doe'"; helpTest(sql, "N1QL0801"); sql = "SELECT Name, type FROM Customer WHERE documentID = 'customer'"; helpTest(sql, "N1QL0802"); sql = "SELECT Name, type FROM Customer WHERE type = 'Customer'"; helpTest(sql, "N1QL0803"); sql = "SELECT Name FROM Customer"; helpTest(sql, "N1QL0804"); sql = "SELECT Name FROM Customer WHERE documentID = 'customer'"; helpTest(sql, "N1QL0805"); sql = "SELECT * FROM Oder WHERE CustomerID = 'Customer_12345' AND CreditCard_Type = 'Visa' AND CreditCard_CVN = 123"; helpTest(sql, "N1QL0806"); sql = "SELECT CreditCard_CardNumber, CreditCard_Expiry, Name FROM Oder WHERE CustomerID = 'Customer_12345' AND CreditCard_Type = 'Visa' AND CreditCard_CVN = 123"; helpTest(sql, "N1QL0807"); } @Test // test where clause against array public void testWhereClause_array() throws TranslatorException { String sql = "SELECT * FROM Oder_Items WHERE documentID = 'order-1'"; //only documentID helpTest(sql, "N1QL0811"); sql = "SELECT * FROM Oder_Items WHERE documentID = 'order-1' AND Oder_Items_Quantity = 1"; helpTest(sql, "N1QL0812"); sql = "SELECT * FROM Oder_Items WHERE Oder_Items_Quantity = 1"; helpTest(sql, "N1QL0813"); sql = "SELECT * FROM Oder_Items WHERE Oder_Items_Quantity = 1 AND Oder_Items_ItemID = 89123"; // only nested object columns of array helpTest(sql, "N1QL0814"); sql = "SELECT * FROM Oder_Items WHERE Oder_Items_idx = 1"; // only array index helpTest(sql, "N1QL0815"); sql = "SELECT * FROM Oder_Items WHERE documentID = 'order-1' AND Oder_Items_idx = 1 AND Oder_Items_Quantity = 5 AND Oder_Items_ItemID = 92312"; //all columns helpTest(sql, "N1QL0816"); } @Test public void testStringFunctions() throws TranslatorException { String sql = "SELECT LCASE(attr_string) FROM T2"; helpTest(sql, "N1QL0901"); sql = "SELECT UCASE(attr_string) FROM T2"; helpTest(sql, "N1QL0902"); sql = "SELECT TRANSLATE(attr_string, 'is', 'are') FROM T2"; helpTest(sql, "N1QL0903"); sql = "SELECT couchbase.CONTAINS(attr_string, 'is') FROM T2"; helpTest(sql, "N1QL0904"); sql = "SELECT couchbase.TITLE(attr_string) FROM T2"; helpTest(sql, "N1QL0905"); sql = "SELECT couchbase.LTRIM(attr_string, 'This') FROM T2"; helpTest(sql, "N1QL0906"); sql = "SELECT couchbase.TRIM(attr_string, 'is') FROM T2"; helpTest(sql, "N1QL0907"); sql = "SELECT couchbase.RTRIM(attr_string, 'value') FROM T2"; helpTest(sql, "N1QL0908"); sql = "SELECT couchbase.POSITION(attr_string, 'is') FROM T2"; helpTest(sql, "N1QL0909"); } @Test public void testNumbericFunctions() throws TranslatorException { String sql = "SELECT CEILING(attr_double) FROM T2"; helpTest(sql, "N1QL1001"); sql = "SELECT LOG(attr_double) FROM T2"; helpTest(sql, "N1QL1002"); sql = "SELECT LOG10(attr_double) FROM T2"; helpTest(sql, "N1QL1003"); sql = "SELECT RAND(attr_integer) FROM T2"; helpTest(sql, "N1QL1004"); } @Test public void testConversionFunctions() throws TranslatorException { String sql = "SELECT convert(attr_long, string) FROM T2"; helpTest(sql, "N1QL1101"); } @Test public void testDateFunctions() throws TranslatorException { String sql = "SELECT couchbase.CLOCK_MILLIS() FROM T2"; helpTest(sql, "N1QL1201"); sql = "SELECT couchbase.CLOCK_STR() FROM T2"; helpTest(sql, "N1QL1202"); sql = "SELECT couchbase.CLOCK_STR('2006-01-02') FROM T2"; helpTest(sql, "N1QL1203"); sql = "SELECT couchbase.DATE_ADD_MILLIS(1488873653696, 2, 'century') FROM T2"; helpTest(sql, "N1QL1204"); sql = "SELECT couchbase.DATE_ADD_STR('2017-03-08', 2, 'century') FROM T2"; helpTest(sql, "N1QL1205"); } @Test public void testProcedures() throws TranslatorException { String sql = "call getDocuments('customer', 'test')"; helpTest(sql, "N1QL1301"); sql = "call getDocument('customer', 'test')"; helpTest(sql, "N1QL1302"); } }