/*
* Copyright (C) 2014 Indeed Inc.
*
* 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 com.indeed.imhotep.sql.parser;
import com.google.common.collect.Lists;
import com.indeed.imhotep.sql.ast.BinaryExpression;
import com.indeed.imhotep.sql.ast.Expression;
import com.indeed.imhotep.sql.ast.NameExpression;
import com.indeed.imhotep.sql.ast.Op;
import com.indeed.imhotep.sql.ast2.*;
import org.joda.time.DateTime;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* @author vladimir
*/
public class TestStatementParser {
@Test
public void testShow() {
assertTrue(StatementParser.parse("show tables") instanceof ShowStatement);
assertTrue(StatementParser.parse("show datasets") instanceof ShowStatement);
assertTrue(StatementParser.parse(" SHOW TABLES ") instanceof ShowStatement);
}
@Test
public void testDescribe() {
String dataset = "testndx";
IQLStatement query = StatementParser.parse("describe " + dataset);
assertTrue(query instanceof DescribeStatement);
assertEquals(dataset, ((DescribeStatement) query).dataset);
assertEquals(null, ((DescribeStatement) query).field);
query = StatementParser.parse("DESC " + dataset);
assertTrue(query instanceof DescribeStatement);
assertEquals(dataset, ((DescribeStatement) query).dataset);
query = StatementParser.parse("explain " + dataset);
assertTrue(query instanceof DescribeStatement);
assertEquals(dataset, ((DescribeStatement) query).dataset);
String field = "myfield";
query = StatementParser.parse("describe " + dataset + "." + field);
assertTrue(query instanceof DescribeStatement);
assertEquals(dataset, ((DescribeStatement) query).dataset);
assertEquals(field, ((DescribeStatement) query).field);
}
@Test
public void testBasicSelectQuery() {
String testQuery = "from jobsearch '2012-01-01' '2012-01-02' where rcv=jsv group by grp select sjc";
SelectStatement expected = new SelectStatement(
Lists.newArrayList((Expression) new NameExpression("sjc")),
new FromClause("jobsearch", new DateTime(2012,1,1,0,0), new DateTime(2012,1,2,0,0)),
new BinaryExpression(new NameExpression("rcv"), Op.EQ, new NameExpression("jsv")),
Lists.newArrayList((Expression)new NameExpression("grp")));
assertEquals(expected, StatementParser.parse(testQuery));
}
}