#!/usr/bin/env python
# Copyright (c) 2012 Cloudera, Inc. All rights reserved.
# Functional tests running the TPCH workload.
#
import logging
import pytest
from tests.common.test_vector import *
from tests.common.impala_test_suite import *

class TestTpchQuery(ImpalaTestSuite):
  @classmethod
  def get_workload(self):
    return 'tpch'

  @classmethod
  def add_test_dimensions(cls):
    super(TestTpchQuery, cls).add_test_dimensions()
    cls.TestMatrix.add_dimension(create_single_exec_option_dimension())

    # The tpch tests take a long time to execute so restrict the combinations they
    # execute over
    if cls.exploration_strategy() == 'core':
      cls.TestMatrix.add_constraint(lambda v:\
          v.get_value('table_format').file_format == 'parquet')

  def test_tpch_q1(self, vector):
    self.run_test_case('tpch-q1', vector)

  def test_tpch_q2(self, vector):
    self.run_test_case('tpch-q2', vector)

  def test_tpch_q3(self, vector):
    self.run_test_case('tpch-q3', vector)

  def test_tpch_q4(self, vector):
    self.run_test_case('tpch-q4', vector)

  def test_tpch_q5(self, vector):
    self.run_test_case('tpch-q5', vector)

  def test_tpch_q6(self, vector):
    self.run_test_case('tpch-q6', vector)

  def test_tpch_q8(self, vector):
    self.run_test_case('tpch-q8', vector)

  def test_tpch_q9(self, vector):
    self.run_test_case('tpch-q9', vector)

  def test_tpch_q10(self, vector):
    self.run_test_case('tpch-q10', vector)

  def test_tpch_q11(self, vector):
    self.run_test_case('tpch-q11', vector)

  def test_tpch_q12(self, vector):
    self.run_test_case('tpch-q12', vector)

  def test_tpch_q13(self, vector):
    self.run_test_case('tpch-q13', vector)

  def test_tpch_q14(self, vector):
    self.run_test_case('tpch-q14', vector)

  def test_tpch_q15(self, vector):
    self.run_test_case('tpch-q15', vector)

  def test_tpch_q16(self, vector):
    self.run_test_case('tpch-q16', vector)

  def test_tpch_q17(self, vector):
    self.run_test_case('tpch-q17', vector)

  def test_tpch_q18(self, vector):
    self.run_test_case('tpch-q18', vector)

  def test_tpch_q19(self, vector):
    self.run_test_case('tpch-q19', vector)

  def test_tpch_q20(self, vector):
    self.run_test_case('tpch-q20', vector)

  @pytest.mark.xfail(run=False, reason='IMP-658')
  # This query fails due to IMP-658
  def test_tpch_q21(self, vector):
    self.run_test_case('tpch-q21', vector)

  def test_tpch_q22(self, vector):
    self.run_test_case('tpch-q22', vector)

@@ -748,19 +748,20 @@
 _format 
-== 
+in %5B
 'parquet
@@ -761,16 +761,25 @@
 parquet'
+, 'text'%5D
 )%0A%0A  def

Enable tpch queries to run on text to unblock the full data load build.