| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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.apache.drill.common.logical.data; |
| |
| import static org.junit.Assert.assertThat; |
| |
| import org.apache.drill.common.exceptions.DrillRuntimeException; |
| import org.apache.drill.common.expression.LogicalExpression; |
| import org.apache.drill.common.logical.data.Order.Ordering; |
| import org.apache.calcite.rel.RelFieldCollation; |
| import org.apache.calcite.rel.RelFieldCollation.Direction; |
| import org.apache.calcite.rel.RelFieldCollation.NullDirection; |
| import org.apache.drill.test.BaseTest; |
| import org.junit.Test; |
| |
| import static org.hamcrest.CoreMatchers.equalTo; |
| |
| public class OrderTest extends BaseTest { |
| |
| ////////// |
| // Order.Ordering tests: |
| |
| // "Round trip" tests that strings from output work as input: |
| |
| @Test |
| public void test_Ordering_roundTripAscAndNullsFirst() { |
| Ordering src = new Ordering( Direction.ASCENDING, null, NullDirection.FIRST); |
| Ordering reconstituted = |
| new Ordering( src.getDirection(), (LogicalExpression) null, src.getNullDirection() ); |
| assertThat( reconstituted.getDirection(), equalTo( RelFieldCollation.Direction.ASCENDING ) ); |
| assertThat( reconstituted.getNullDirection(), equalTo( NullDirection.FIRST ) ); |
| } |
| |
| @Test |
| public void test_Ordering_roundTripDescAndNullsLast() { |
| Ordering src = new Ordering( Direction.DESCENDING, null, NullDirection.LAST); |
| Ordering reconstituted = |
| new Ordering( src.getDirection(), (LogicalExpression) null, src.getNullDirection() ); |
| assertThat( reconstituted.getDirection(), equalTo( RelFieldCollation.Direction.DESCENDING ) ); |
| assertThat( reconstituted.getNullDirection(), equalTo( NullDirection.LAST ) ); |
| } |
| |
| @Test |
| public void test_Ordering_roundTripDescAndNullsUnspecified() { |
| Ordering src = new Ordering( Direction.DESCENDING, null, NullDirection.UNSPECIFIED); |
| Ordering reconstituted = |
| new Ordering( src.getDirection(), (LogicalExpression) null, src.getNullDirection() ); |
| assertThat( reconstituted.getDirection(), equalTo( RelFieldCollation.Direction.DESCENDING ) ); |
| assertThat( reconstituted.getNullDirection(), equalTo( NullDirection.UNSPECIFIED ) ); |
| } |
| |
| // Basic input validation: |
| @Test( expected = DrillRuntimeException.class ) // (Currently.) |
| public void test_Ordering_garbageOrderRejected() { |
| new Ordering( "AS CE ND IN G", null, null ); |
| } |
| |
| @Test( expected = DrillRuntimeException.class ) // (Currently.) |
| public void test_Ordering_garbageNullOrderingRejected() { |
| new Ordering( null, null, "HIGH" ); |
| } |
| |
| |
| // Defaults-value/null-strings test: |
| |
| @Test |
| public void testOrdering_nullStrings() { |
| Ordering ordering = new Ordering( (String) null, (LogicalExpression) null, null ); |
| assertThat( ordering.getDirection(), equalTo( RelFieldCollation.Direction.ASCENDING ) ); |
| assertThat( ordering.getNullDirection(), equalTo( RelFieldCollation.NullDirection.UNSPECIFIED ) ); |
| assertThat( ordering.getOrder(), equalTo( "ASC" ) ); |
| } |
| |
| |
| } |